Plan9 on QEMU

新年なので初心に戻って(?),インストールネタから.
以前,Xenを試してみたけど,やっぱり簡単なのがよいということで,QEMU上でPlan9を動かすことにする.Xenと言えば,Xenoppixが知られているけど,Ron Minnich氏が昨年末から別アプローチによるプロジェクトを始めた.これはXenを起動するために必要最小限のルートディスクを作って,そこからゲストOSとしてPlan9を起動するというもの.ビデオ回りは動いていないので,Linuxからdrawterm経由でアクセスする.スナップショットが公開されているので,気になる人はどうぞ.参照:minimal linux distro with plan 9 on xen
閑話休題.ググればQEMUのイメージが見つかるかもしれないけど,難しくはないので,オフィシャルサイトからISOイメージを持ってきてインストールすることにする.
用意するのは,次の二つ.

まず,ハードディスクのイメージファイルを使う.フォーマットとしてQEMU COW形式を使った.1Gのイメージだけど,必要に応じて実ファイルサイズが拡張されるので,作成時は約4KBで,インストール終了時点で約370MBだった.

$ qemu-img create -f qcow plan9.img 1G
Formating 'plan9.img', fmt=qcow, size=1048576 kB

ここまでが準備で,いよいよQEMUを使ってインストールを始める.hdaにさっき作ったイメージファイル,cdromにISOイメージを指定して,起動する.最初にマウスとビデオの設定を聞かれるが,ps2,1024x768x24,vesaと答えた.そして,rio(ウィンドウシステム)が起動し,インストーラから何項目か尋ねられるが,デフォルトのままで進めた.ファイルシステムはfossil only.

$ qemu -boot d -hda plan9.img -cdrom plan9.iso

インストールが終わったら,リブートしてちゃんと起動するか確認する.デフォルトのユーザはglenda.

$ qemu -boot c -hda plan9.img

ここまで問題なかったら,ネットワークの設定に進む.仮想インタフェースは,Tuntapデバイスを使う方法にする.あまり情報量がないけど,ネットワーク構成は下図の通り.以下の例ではホストマシン側が無線LANインタフェースなのでath0になっているけど,適時eth0などに読みかえてちょうだい.

          HOST (Linux)      GUEST (Plan9)
        +--------------+   +--------------+
        |(192.168.10.2)|   |              |
 LAN ---+---- ath0     |   |              |
        |              |   |              |
        |     tap0 ----+---+---- ether0   |
        | (172.20.0.1) |   | (172.20.0.2) |
        +--------------+   +--------------+

Plan9側のネットワーク設定は,/rc/bin/termrcと/lib/ndb/localの2ファイル.termrcの方はファイル中にipconfigがコメントアウトされている部分があるので,自分の環境に合わせて修正する.ndb/localの方はファイルの最後に設定を追加する.

/rc/bin/termrc:
if(! test -e /net/ipifc/0/ctl)
        ip/ipconfig -g 172.20.0.1 ether /net/ether0 172.20.0.2 255.255.255.0 >/dev/null >[2=1]

/lib/ndb/local:
sys=qemu0 ip=172.20.0.2 ipmask=255.255.255.0
    dns=192.168.10.1

続いて,Linux側の設定.QEMUの起動時にスクリプトを実行できる.そこで,tap0デバイスIPアドレスを設定して,さらにホストマシンの外部にアクセスするためにIP forwardingとIP Masqueradeの設定もしておく.

/etc/qemu-ifup:
#!/bin/sh
sudo -p "Password for $0:" /sbin/ifconfig $1 172.20.0.1
sudo /sbin/sysctl -w net.ipv4.ip_forward=1
sudo /sbin/iptables -t nat -A POSTROUTING -o ath0 -s 172.20.0.0/24 -j MASQUERADE

これで,うまくネットワークも使えるはず.

$ qemu -boot c -hda plan9.img -net nic,vlan=0 -net tap,vlan=0,script=/etc/qemu-ifup

タイムゾーンを設定する場合は,ユーザadmでログインして,

% cp /adm/timezone/Japan /adm/timezone/local

そして,qemuの起動オプションに-localtimeを加えればよい.