Logo address

EeePC 901

2008/10/05
2008/10/06 追加
2010/04/07 追加
2016/02/01 追加

Windows XP

僕のカミさんはパソコンに関しては全然ダメ。僕への依存性が強くて上達しないのだ。パソコンを使うのは Windows の Office とメールぐらいである。これまで何度も自宅で準備した教材を大学や講演先の PC で使おうとして失敗してきた。僕なら決して動作確認がとれていない PC を使ってプレゼンしないが、本人はまだ甘い期待を抱いては失敗をする。「ノートパソコン持って行きなよ」と言っても「重いから」と言って嫌がる。車使っていないからね・・・

「小さいノートパソコンがあるから買ったら?」と今回選んでやったのが EeePC 901 だ。これはプレゼン専用マシンとしての位置づけである。届いた 901 を見ると、かわいいこと! カミさんのお気に入りになってしまったらしい。このところ大きなノートパソコンを使わずに、901 で遊んでいる。

この小さなボディにも関わらずキーボードのキータッチは意外と良い。WiFi と Bluetooth が標準装備である。マウスもなかなか使いやすい。USB のポートは3個も付いている。もちろんオーディオ関係の装備もしっかりしている。外で遊ぶには楽しそうなマシンなのである。

しかし 901 は本当は初心者向けのノートパソコンではないのだ。あの初心者が欲しくなるようなかわいいデザインにも関わらず!

WinXP 用に 4GB(Cドライブ)+8GB(Dドライブ) が確保されている。Office は Dドライブにインストールせざるを得ない。これで何とか動いている。こまめにCドライブを掃除しないとすぐに作業領域不足になって動きが悪くなる。初心者でも使えるようになるためには、Cドライブ8GBは欲しい。902(?) で実現すると思うけど...

Ubuntu on EeePC 901

僕も欲しくなったので買った。901 の仕様を見ていると、これは玄人好みのノートパソコンなのだと気づく。SD カードのスロットを持っているが、ここからブート可能なのだ。ならばとここに Linux をインストールすることにした。最初手持ちの Ubuntu 7.10 をインストールしたが、不満! ネットワークがまともに使えない! 最新バージョンを探しているうちに EeePC にカスタマイズされた最新の Ubuntu を見つけた:

http://www.ubuntu-eee.com/
ここに ubuntu-eee-8.0.4.iso が置かれている*。これをンストールすると WiFi もちゃんと使える! ASUS の協力があったと思う。なにしろ ASUS にとっては Linux ユーザは大切なお客様だからね...

注意: このサイトは今は存在しない。「ライブCDの部屋」
http://simosnet.com/livecdroom/
に最新のものが置かれている。
(2009/10/17)

EeePC 版のスクリーンデザインは小さなウィンドウの中でも使い易いように工夫されている。

左上のアイコンが画面を切り替えるタブになっているのだ。

WinXP と違って Linux は軽い。高速タイプの SD カードで気持ちよく動いてくれる。さらに 8GB の SD カードは十分な余裕を持っている。実はこの記事は EeePC 901 の Ubuntu 8.0.4 で書いているのだ。仮名漢字変換の能力がイマイチだけど...

僕は SD カードを差し込めば、そこにインストールされた OS が立ち上がるような設定が望ましいと思う1。しかし Ubuntu は Grub をインストールしてしまう。WinXP と Ubuntu が絡み合ってしまい、システムを不必要に複雑にする。僕はそのような複雑さは嫌なのだ。Grub を外したいのだが、今のところ Ubuntu しかインストールしていないので本気に外す気にはなっていない。

注1: ubuntu 9.10 では USB の SD カードに USB ブート可能な状態でインスールできる。SD カード優先になるように BIOS の設定をすればよい。僕が確認したのは xubuntu 9.10 であるが、ubuntu 9.10 でも同様だと思う。僕は xubuntu の方が気に入っている。(2010/04/07)

Device files

2008/10/06

僕は BIOS のブートディスクの設定を 4GB SSD や SD カードに変更してみて、両側から GRUB が立ち上がることを確認している。しかしメディアを直接調べて確認したい。

ls -l /dev
を実行してみて驚いた。hdXX が無いのだ。どうなっているの? 実際にマウントされているデバイスは df で見ることができる。出力を見る限りマウントされたデバイスは /dev/sdc1だけである。きっと WinXP のファイルを見れる状態にしなくてはならないのだ。

ubuntu-eee の入り口のメニューの「home」を開くと WinXP 側のファイルを見ることができる。この状態で再度 df を実行すると

arisawa@ken:~$ df
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/sdc1              7387200   2564260   4450636  37% /
varrun                  513472        96    513376   1% /var/run
varlock                 513472         0    513472   0% /var/lock
udev                    513472        72    513400   1% /dev
devshm                  513472        12    513460   1% /dev/shm
/dev/sdb1              7871816    797012   7074804  11% /media/disk
/dev/sda1              3903760   2487440   1416320  64% /media/disk-1
となる。ふーん、すべて /dev/sdXX なのだ。SCSI のドライバを通じてアクセスしていることになる注1。上手いことをやっているものだ...

注1: どうもそうでもないらしい。次の文書に詳しい http://www.linuxformat.co.uk/pdfs/LXF66.tut_udev.pdf

ここに現れる udev は Linux 2.6 から導入されたものらしく、user space のデバイスと言う意味らしい。Linux の中に Plan 9 的な名前空間を取り入れようとする動きがあることは以前から知っていたが、僕は永く Linux 使っていないので、 udev は知らなかった。移行期だから暫くはかえって混乱するだろうけどシステムプログラマーはめげずに頑張ってください。

英辞朗

2008/10/07

EeePC 901 にどうしても入れたいアプリの一つに英辞郎がある。調べてみると Linux には Ruby を使った英辞郎のビューアがあるらしい。Ruby は ubuntu-eee の標準インストールソフトではないのと、僕は Python 派で Ruby を使わないのと、ビューアのインストールが結構面倒そうなので敬遠した。その代わり grep を使ってビューア代わりにすることにした。

英辞朗の辞書データは SJIS で書かれているので、これを UTF8 に変換する。昔懐かしい nkf をインストールした。昔に比べると随分機能強化されたね... 変換は簡単に終わった。そこで使いやすいように grep を使ったシェルスクリプトを作る。本質的には英辞朗の辞書データを含むディレクトリで

grep -h tiger *
のように実行するのだ。これで "tiger" を含む全ての行が表示される。ところが不思議な事に気付いた。検索には大文字と小文字を区別しない方が良いので
grep -ih tiger *
を実行するとやたらと時間がかかる。時間の違いを比較してみよう。

arisawa@ken:~/lib/EIJIRO$ ls -l
合計 251748
-rw------- 1 arisawa arisawa 110913913 2008-10-06 16:48 eijiro98.txt
-rwx------ 1 arisawa arisawa  18833986 2008-10-06 16:48 reijiro98.txt
-rwx------ 1 arisawa arisawa   3439275 2008-10-06 16:48 ryaku98.txt
-rwx------ 1 arisawa arisawa 124322744 2008-10-06 16:48 waeiji98.txt
arisawa@ken:~/lib/EIJIRO$ time grep -h tiger *|wc
    256    2198   30500

real	0m0.640s
user	0m0.404s
sys	0m0.212s
arisawa@ken:~/lib/EIJIRO$
つまり、i オプションがなければ英辞朗の全てのデータから tiger を含む行を抜き出すのに 0.6 秒でる。他方 i オプションを付けると驚くなかれ
arisawa@ken:~/lib/EIJIRO$ time grep -ih tiger *|wc
    594    7460  108561

real	1m45.378s
user	1m44.999s
sys	0m0.372s
1分45秒もかかる! これでは実用にならない。

そこで Linux の grep に問題があるのではと疑った。それを確認するために 9vx を実行し、 Linux 上の擬似 Plan 9 の中で Plan 9 の grep で時間を測定してみた。

term% pwd
/n/h/home/arisawa/lib/EIJIRO
term% ls -l
--rw------- Z 2 arisawa arisawa 110913913 Oct  6 03:48 eijiro98.txt
--rwx------ Z 2 arisawa arisawa  18833986 Oct  6 03:48 reijiro98.txt
--rwx------ Z 2 arisawa arisawa   3439275 Oct  6 03:48 ryaku98.txt
--rwx------ Z 2 arisawa arisawa 124322744 Oct  6 03:48 waeiji98.txt
term% time grep -ih tiger *|wc
0.00u 0.00s 15.27r 	 grep -ih tiger eijiro98.txt reijiro98.txt ...
    594    7460  108561
ネイティブな実行環境でないにも関わらず 15 秒である。ではネィティブな環境での Plan 9 の grep はどうか? Plan 9 の grep が plan9port に含まれている。これをコンパイルして時間を計測すると
arisawa@ken:~/lib/EIJIRO$ time 9 grep -ih tiger *|wc
    594    7460  108561

real	0m2.182s
user	0m2.028s
sys	0m0.156s
つまり 2 秒で終わる。

Linux の grep は何故こんなに遅いのか? 今のところ僕には(ソースコードを見ていないので)分からない。改善すべきだ。

なお ubuntu-eee には開発環境が標準インストールされていない。plan9port がコンパイルできるよう開発環境を整えるのに結構苦労した。開発環境が整った Linux が身近にあれば、そこで plan9port をコンパイルした方が良い。困難の原因はどのヘッダファイルがどのパッケージに含まれているかよく分からない事にある。作業が終わってから気付いた事であるが... 次の URL を作業前に見ていれば捗ったかも知れない。

Bug of ubuntu-eee-8.0.4 ?

USB のアンマウント

2008/10/06

USB を使い終わったらアンマウントを実行する必要がある。「home」のメニューからドライブが見え、選択すると unmount メニューが見えるのだが、選択してもドライブのアイコンが消えない!

しかし df コマンドを実行してやると、アンマウントされているのが分かる。これは不便だよ...

補足: どうやら僕は勘違いをしていたようだ。これは仕様なのだ。OSX と違って、アンマウントが完了すると三角印のボタンが消える。そのもとで USB メモリを抜くとドライブのアイコンが消える。(2008/10/07)

suspend/resume

2008/10/07

どうやら suspend/resume に問題ありそうだ。閉じただけでは suspend しない(ことがある)。終了メニューから(あるいはバッテリーアイコンの) suspend を選べば suspend するが、resume しない。実はしているのだが画面が真っ暗なままで、ブライトキーを押しても回復しないので電源を切るしか無い。resume している事は LED の点灯や CPU ファンが回っている事から推測される。

注意: この問題は Xubuntu で解決されている。Ubuntu でも現在では解決されている可能性がある。(2010/04/07)

参考 URL

Plan 9 on EeePC 901 (1)

さて僕は EeePC 901 に Plan 9 をインストールしたいのだが、ドライバの関係で無理でしょう。さっさと諦めモードである。しかし僕が Ubuntu をインストールした本当の狙いは 9vx を使いたかったからだ。

9vx は Linux, FreeBSD, OSX で動く擬似 Plan 9 環境である。Win32 でも 9vx を動かそうとする試みは次の URL に示されている:

http://www.midnight-labs.org/vxwin32/

9vx の最新バージョンは 0.12 である。次の URL で手に入る。

http://swtch.com/9vx/
9vx の価値は Plan 9 サーバとのインターフェースを提供してくれることと、洗練された Plan 9 のツール群が Unix 環境で使えるようになることである。現在の Unix に飽きた人は試してみるがよいと思う。

僕の場合オーナーをユーザ arisawa にして

/usr/local
に 9vx-0.12 をインストールしている。

さて今回 ubuntu-eee-8.0.4 に 9vx をインストールすると二つの問題に引っかかった。
その1

chmod 755 9vx.Linux
が必要。
その2
chmod 777 /var/tmp
が必要。

Plan 9 on EeePC 901 (2)

2016/02/01

今頃なぜ?

EeePC 901 に Plan9 をインストールすることとした。
EeePC が話題になったのは今や昔の話で、こんなことを話題にしてもみんなもう興味がないであろう。
しかし僕にとってはどうしても必要であった。理由は僕が家の中でサーバーを運用しているためである。しかも非常に特殊なサーバーである。Plan9 によるグリットサーバーである。このサーバーが家の外からどのように見えているのかを知る必要がある。クライアントは Plan9 である必要がある。(他の OS でも OK かもしれないが、それはこれからの課題である)

僕の場合には外部からのアクセスとしてまず考えられるのは大学の研究室である。しかし愛知大学は IPv6 をサポートしていない。すると残る可能性は1つしかない。IPv6 をサポートするモバイルネットワーク回線から我が家のサーバーにアクセスを試みる。幸いなことに IIJ の SIM が IPv6 をサポートしている。

WiFi 経由でアクセスするので、ノートパソコンがよい。それでノートパソコンとして何を選ぶか?
僕が普段に使っているのは Mac である。Mac の Parallels は Plan9 が嫌いになったようだ。以前は動いたが最近のは動かない。VirtualBox は Plan9 が動くが、IPv6 環境に問題があり、(サポートされていると言うのだが)役に立たない。

そこで古い手持ちの EeePC 901 にインストールすることとした。筆者のは SSD 置換が行われていて、調べてみると(4+32)GBである。Plan9 をインストールするのに手頃なサイズである。

インストール前に

一般的に言えることであるが、直ちにインストールを試みないほうがよい。インストールによってハードディスクが初期化され、そしてインストールに失敗するかもしれない。その場合、結果は涙。
仮にインストールに成功したとしても、何か不満があって、結局使い物にならないかもしれない。例えば WiFi が使えないとか...

従って、インストール前に他の方法でインストールの可能性を探り、またインストール後の使い心地を試す必要がある。他の方法? 何があるか?

Plan9 の場合には最初に考えられるのは PXE ブートである。EeePC 901 は PXE ブートをサポートしている。従ってカーネルは問題なくロードされ動き出す。しかし、現在の Plan9 は EeePC 901 で使われている有線 LAN のコントローラをサポートしていない。つまり、ネットワークを通じてのインストールはできない。

次に考えられるのは USB を通じてのインストールである。EeePC 901 は USB ディスクからのブートをサポートしている。あらかじめ USB ディスクを作っておく。僕の場合には Plan9 をインストールした USB からブートできる SSD を持っていた。これは上手く働いており、インストールする前に Plan9 の使い心地を確認できる。問題なしと判断し、インストールすることとした。

インストール成功

Plan9(9front) におけるデバイスの割り当てを知っておいたほうが良い。
EeePC 901 のデバイスは次のようになっている。

term% ls -l /dev/sd*
--rw-r----- S 0 arisawa arisawa           0 Nov 15 17:24 /dev/sdC1/ctl
--rw-r----- S 0 arisawa arisawa 32296140800 Nov 15 17:24 /dev/sdC1/data
--rw-r----- S 0 arisawa arisawa 32292417024 Nov 15 17:24 /dev/sdC1/fsworm
--rw-r----- S 0 arisawa arisawa 32292417024 Nov 15 17:24 /dev/sdC1/plan9
-lrw------- S 0 arisawa arisawa           0 Nov 15 17:24 /dev/sdC1/raw
--rw-r----- S 0 arisawa arisawa   104857600 Nov 15 17:24 /dev/sdD0/9fat
--rw-r----- S 0 arisawa arisawa           0 Nov 15 17:24 /dev/sdD0/ctl
--rw-r----- S 0 arisawa arisawa  4034838528 Nov 15 17:24 /dev/sdD0/data
--rw-r----- S 0 arisawa arisawa  3388625920 Nov 15 17:24 /dev/sdD0/fscache
--rw-r----- S 0 arisawa arisawa         512 Nov 15 17:24 /dev/sdD0/nvram
--rw-r----- S 0 arisawa arisawa  4030354944 Nov 15 17:24 /dev/sdD0/plan9
-lrw------- S 0 arisawa arisawa           0 Nov 15 17:24 /dev/sdD0/raw
--rw-r----- S 0 arisawa arisawa   536870912 Nov 15 17:24 /dev/sdD0/swap
--rw-r----- S 0 arisawa arisawa           0 Nov 15 17:24 /dev/sdctl
term%

性能が高いほうの SSD は sdD0 に、低いほうの安価な SSD は sdC1 になっている。従って、sdD0 に fscache を割り当て、sdC1 には書き込み頻度の低い fsworm を割り当てる。ブートデバイスはもちろん sdD0 に設定する(sdC0 ではない!)。

WiFi (Wave LAN)

WiFi が使えないと話にならない。幸い EeePC 901 で使われている WiFI コントローラは rt2860 で Plan9 でサポートされている。ただしファームウェアは

http://firmware.openbsd.org/firmware
から取り寄せる必要がある。

取り寄せたファームウェアは

/lib/firmware/ral-rt2860
に置く。

電波が届いているアクセスポイントの情報は次のようにわかる。
ただし、この図では隣近所から来る node は省略されている。
また、この図は、接続する前の状態ではなく、node air1 に接続後の状態である。

term% cat /net/ether0/ifstats
essid: air1
bssid: 20c9d023cd29
status: associated
channel: 11
rxkey0: clear:[0]
rxkey1: tkip:[32]
rxkey2: clear:[0]
rxkey3: clear:[0]
rxkey4: tkip:[32]
txkey0: tkip:[32]
brsne: DD160050F20101000050F20201000050F20201000050F202
node: 20c9d023cd29 1011 10          11 air1
node: a61242a78d22 0431 1995660     05 aterm-6690e0-g
node: 1066820ced1a 0431 1996960     01 ctc-g-d786fe
term%

/net/ether0 が使われたのは EeePC 901 の有線 LAN が認識されなかったからであり、そうでなければ /net/ether1 になったであろう。

接続するにはアクセスポイントの essid を指定する。
上の図では air1, aterm-6690e0-g, ctc-g-d786fe が essid である。

term% aux/wpa -ps air1 /net/ether0

!adding key: essid=air1 proto=wpapsk
password: XXXXXXX
term%

factotum に essid のパスワードが登録されていれば、ここは簡単に済む。次のように登録する。

key proto=wpapsk essid=aterm-6690e0-g !password=XXX
key proto=wpapsk essid=air1 !password=XXX
key proto=wpapsk essid=ctc-g-d786fe !password=XXX

IPv6

IPv4 で満足するならアクセスポイントへの接続後

term% ip/ipconfig 		# if fail then retry
を実行しておけば済む。

IPv6 通信をする場合には、この後

term% ipv6on
を実行する。しかし、多分成功しないだろう。シェルスクリプトで書かれた ipv6on コマンドは、まだヤッツケ仕事的な未熟なところがあり、完璧に仕事をこなしてくれない。特に問題なのは利用中のホストが /lib/ndb/local に登録されていることが仮定されていることである。この仮定はモバイルPC上の Plan9 端末に対してはあてはまらない。

パッチをあてた次の筆者の ipv6on はよりよい仕事をする。
http:ipv6on

改善

次の wifi コマンドは、もう少し快適な環境を提供してくれる。

#!/bin/rc
rfork e
edev=`{grep -l '^essid:' /net/ether*/ifstats|sed 's!/ifstats!!g'}
if(~ $#edev 0){
	echo no wifi device
	exit
}
# then $edev is '/net/ether0' in regular case

#
#	we assume essid does not contain "," and "|"
#	it seems factotum locate essid field at $3,
#	however I don't know this is always true
#
factotum=/mnt/factotum/ctl
if(test -e $factotum){
	essid=`{awk '/essid=/{print $3}' $factotum | sed 's/essid=//g'}
	essid=`{echo $"essid | tr ' ' ','}
}

if(~ $#essid 0)
	essid=''

if(~ $#* 0){
	for(dev in $edev){
		awk -v 'dev='$dev -v 'essid='$essid '
		BEGIN{
			gsub(",","|",essid)
		}
		$6 ~ /.+/{
		if(match($6,essid))
			printf("wifi -s %s %s\n",$6,dev)
		else
			printf("wifi -ps %s %s\n",$6,dev)
		}' $dev/ifstats | sort
	}
	exit
}

essid=`{awk '/^essid:/{print $2}' $edev/ifstats}
if(~ $essid ?* && ! ~ $essid $2){
	echo essid $2 > $edev/clone # $edev/ifstats not work
	aux/wpa $*
	sleep 1
	ip/ipconfig unbind && ip/ipconfig && ipv6on
	exit
}
aux/wpa $*
sleep 1
ip/ipconfig && ipv6on

使い方は単に wifi コマンドを打ち込み

term% wifi
wifi -ps pr500k-e3cb2b-1 /net/ether0
wifi -ps pr500k-e3cb2b-2 /net/ether0
wifi -s air1 /net/ether0
wifi -s aterm-6690e0-g /net/ether0
wifi -s ctc-g-d786fe /net/ether0
term%
この後、使いたいノードを選択する。factotum にパスワードが登録されていれば -s オプションが、そうでなれれば -ps が表示されている。-ps の場合にはパスワードを手で入れることとなる。

wifi はルーティングテーブルの設定も含めて行ってくれる。

Plan9 の WiFi サポートについて

筆者は NEC Aterm MR03LN を使っているが、この場合、暗号化モードは

がサポートされている。"/" はネゴシエーションで決定されるという意味だろう。最後の WPA2-PSK(AES) が最も安全性が高い。Plan9(9front) は現在のところ "WPA2-PSK(AES)" だけをサポートしている。

VGA

VGA は VESA がサポートされている。VESA で速度に不満はないが、サポートされているスクリーンサイズが小さい。最大にして 800x600 である。物理的なサイズである 1024x600 にしたいが、EeePC 901 に対応したドライバが必要になるが見つからない。

文献[1]は将来役に立つかもしれない。

[1] ASUS Eee PC 901
https://wiki.archlinux.org/index.php/ASUS_Eee_PC_901

総評

WAN 側から家庭内サーバーの状態を調べるモニターとして必要十分な能力を備えており、不満は無い。