僕のカミさんはパソコンに関しては全然ダメ。僕への依存性が強くて上達しないのだ。パソコンを使うのは Windows の Office とメールぐらいである。これまで何度も自宅で準備した教材を大学や講演先の PC で使おうとして失敗してきた。僕なら決して動作確認がとれていない PC を使ってプレゼンしないが、本人はまだ甘い期待を抱いては失敗をする。「ノートパソコン持って行きなよ」と言っても「重いから」と言って嫌がる。車使っていないからね・・・
「小さいノートパソコンがあるから買ったら?」と今回選んでやったのが EeePC 901 だ。これはプレゼン専用マシンとしての位置づけである。届いた 901 を見ると、かわいいこと! カミさんのお気に入りになってしまったらしい。このところ大きなノートパソコンを使わずに、901 で遊んでいる。
この小さなボディにも関わらずキーボードのキータッチは意外と良い。WiFi と Bluetooth が標準装備である。マウスもなかなか使いやすい。USB のポートは3個も付いている。もちろんオーディオ関係の装備もしっかりしている。外で遊ぶには楽しそうなマシンなのである。
しかし 901 は本当は初心者向けのノートパソコンではないのだ。あの初心者が欲しくなるようなかわいいデザインにも関わらず!
WinXP 用に 4GB(Cドライブ)+8GB(Dドライブ) が確保されている。Office は Dドライブにインストールせざるを得ない。これで何とか動いている。こまめにCドライブを掃除しないとすぐに作業領域不足になって動きが悪くなる。初心者でも使えるようになるためには、Cドライブ8GBは欲しい。902(?) で実現すると思うけど...
僕も欲しくなったので買った。901 の仕様を見ていると、これは玄人好みのノートパソコンなのだと気づく。SD カードのスロットを持っているが、ここからブート可能なのだ。ならばとここに Linux をインストールすることにした。最初手持ちの Ubuntu 7.10 をインストールしたが、不満! ネットワークがまともに使えない! 最新バージョンを探しているうちに EeePC にカスタマイズされた最新の Ubuntu を見つけた:
http://www.ubuntu-eee.com/
EeePC 版のスクリーンデザインは小さなウィンドウの中でも使い易いように工夫されている。
左上のアイコンが画面を切り替えるタブになっているのだ。
WinXP と違って Linux は軽い。高速タイプの SD カードで気持ちよく動いてくれる。さらに 8GB の SD カードは十分な余裕を持っている。実はこの記事は EeePC 901 の Ubuntu 8.0.4 で書いているのだ。仮名漢字変換の能力がイマイチだけど...
僕は SD カードを差し込めば、そこにインストールされた OS が立ち上がるような設定が望ましいと思う1。しかし Ubuntu は Grub をインストールしてしまう。WinXP と Ubuntu が絡み合ってしまい、システムを不必要に複雑にする。僕はそのような複雑さは嫌なのだ。Grub を外したいのだが、今のところ Ubuntu しかインストールしていないので本気に外す気にはなっていない。
僕は BIOS のブートディスクの設定を 4GB SSD や SD カードに変更してみて、両側から GRUB が立ち上がることを確認している。しかしメディアを直接調べて確認したい。
ls -l /dev
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。上手いことをやっているものだ...
http://www.linuxformat.co.uk/pdfs/LXF66.tut_udev.pdf
ここに現れる udev
は Linux 2.6 から導入されたものらしく、user space のデバイスと言う意味らしい。Linux の中に Plan 9 的な名前空間を取り入れようとする動きがあることは以前から知っていたが、僕は永く Linux 使っていないので、 udev
は知らなかった。移行期だから暫くはかえって混乱するだろうけどシステムプログラマーはめげずに頑張ってください。
EeePC 901 にどうしても入れたいアプリの一つに英辞郎がある。調べてみると Linux には Ruby を使った英辞郎のビューアがあるらしい。Ruby は ubuntu-eee の標準インストールソフトではないのと、僕は Python 派で Ruby を使わないのと、ビューアのインストールが結構面倒そうなので敬遠した。その代わり grep を使ってビューア代わりにすることにした。
英辞朗の辞書データは SJIS で書かれているので、これを UTF8 に変換する。昔懐かしい nkf をインストールした。昔に比べると随分機能強化されたね... 変換は簡単に終わった。そこで使いやすいように grep を使ったシェルスクリプトを作る。本質的には英辞朗の辞書データを含むディレクトリで
grep -h 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.372s1分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 を作業前に見ていれば捗ったかも知れない。
https://help.ubuntu.com/community/SynapticHowto
http://www.debian.org/doc/manuals/apt-howto/ch-search.ja.html
USB を使い終わったらアンマウントを実行する必要がある。「home」のメニューからドライブが見え、選択すると unmount メニューが見えるのだが、選択してもドライブのアイコンが消えない!
しかし df コマンドを実行してやると、アンマウントされているのが分かる。これは不便だよ...
補足: どうやら僕は勘違いをしていたようだ。これは仕様なのだ。OSX と違って、アンマウントが完了すると三角印のボタンが消える。そのもとで USB メモリを抜くとドライブのアイコンが消える。(2008/10/07)
どうやら suspend/resume に問題ありそうだ。閉じただけでは suspend しない(ことがある)。終了メニューから(あるいはバッテリーアイコンの) suspend を選べば suspend するが、resume しない。実はしているのだが画面が真っ暗なままで、ブライトキーを押しても回復しないので電源を切るしか無い。resume している事は LED の点灯や CPU ファンが回っている事から推測される。
https://answers.launchpad.net/ubuntu-eee
http://forum.eeeuser.com/
http://ubuntukids.org/blog/?p=103
9vx は Linux, FreeBSD, OSX で動く擬似 Plan 9 環境である。Win32 でも 9vx を動かそうとする試みは次の URL に示されている:
http://www.midnight-labs.org/vxwin32/
9vx の最新バージョンは 0.12 である。次の URL で手に入る。
http://swtch.com/9vx/
僕の場合オーナーをユーザ arisawa にして
/usr/local
さて今回 ubuntu-eee-8.0.4 に 9vx をインストールすると二つの問題に引っかかった。
その1
chmod 755 9vx.Linux
chmod 777 /var/tmp
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 が使えないと話にならない。幸い 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
IPv4 で満足するならアクセスポイントへの接続後
term% ip/ipconfig # if fail then retry
IPv6 通信をする場合には、この後
term% 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
はルーティングテーブルの設定も含めて行ってくれる。
筆者は NEC Aterm MR03LN
を使っているが、この場合、暗号化モードは
WPA/WPA2-PSK(TKIP/AES)
WPA/WPA2-PSK(AES)
WPA2-PSK(AES)
/
" はネゴシエーションで決定されるという意味だろう。最後の WPA2-PSK(AES)
が最も安全性が高い。Plan9(9front) は現在のところ "WPA2-PSK(AES)
" だけをサポートしている。
VGA は VESA がサポートされている。VESA で速度に不満はないが、サポートされているスクリーンサイズが小さい。最大にして 800x600
である。物理的なサイズである 1024x600 にしたいが、EeePC 901 に対応したドライバが必要になるが見つからない。
文献[1]は将来役に立つかもしれない。
[1] ASUS Eee PC 901
https://wiki.archlinux.org/index.php/ASUS_Eee_PC_901
WAN 側から家庭内サーバーの状態を調べるモニターとして必要十分な能力を備えており、不満は無い。
Plan9 が動く、邪魔にならない、小型のノートブックを探していたら、EeePC 901-x を持っているのを思い出した。長らく使っていないので、バッテリは完全にダメになっているはずである。
箱から出して、電源を入れると、BIOS は何とか生きているようだ。ここに最新の Plan9(9front)をインストールすることにした。
既に経験があるので、やるべきことは分かっている。
EeePC 901 で使われている WiFI コントローラ rt2860 は Plan9 でサポートされており、ファームウェアは
http://firmware.openbsd.org/firmware
に置かれているはずなのであるが、現在は見つからない。しかし OpenBSD の配布パッケージの中に含まれている。
https://www.openbsd.org/faq/faq4.html#Download
に
install73.iso
が見つかる。これをダウンロードして開くと ral-rt2860 が見つかる:
install73/7.3/i386/base73/etc/firmware/ral-rt2860
インストールして動作確認したあとで気付いたことだが、/lib/vgadb
の中に次のエントリー
eeepc=1024x600 clock=54.2 shb=1048 ehb=1184 ht=1344 vrs=603 vre=609 vt=670 hsync=- vsync=- lcd=1 が存在するではないか!どうやら EeePC が 1024x600 で動くのではないか? そこで 9front のメーリングリストを調べると次の投稿がある:
Hello!これと、Andrew Eggenberger による EeePC1005HA のサポート(改善)が今回の配布(2022)に含まれている。
I am playing with my old EeePC 1000px and 9front.
Here is the patch to make default mode 1024x600x32 work. Without that,
only 800x600 is supported.
aux/vga -m eeepc -l 1024x600x32
...
なお5年間も箱の中に入っていたバッテリのヘタリ状態はどの程度だろうか? 現在分かっているのは、電源プラグを外して5分間はOKらしいこと。そのうちちゃんとした測定をしましょうね1。
追記:
Plan9(9front) は APM を一応サポートしている。plan9.ini(8) には次のように書かれている:
apm0=しかし、最後の注意書きは EeePC に当てはまる。--> kernel panic
This enables the ``advanced power management'' interface as
described in apm(3) and apm(8). The main feature of the
interface is the ability to watch battery life (see stats(8)).
It is not on by default because it causes problems on some laptops.