Plan9 on KVM

そういえば、KVMで動かしてなかった。ちょっと調べてみても、あまり事例がないみたい。みんな9vxとかp9pで十分満足なのかな。Plan9 on lguestになると、今度はいろいろヒットしてくるんだけど。まぁ、とにかく完全仮想化だし問題はあまり起きないだろうと予想したけど、案の定、すんなりいった。一つ注意点を挙げるとしたら、virtioドライバを使わないこと。この辺は夏休みの課題かな〜。

まずは、qcow2フォーマットのディスクイメージを作成する。あと、ISOイメージもダウンロードしておくこと。

$ sudo qemu-img create -f qcow2 /opt/kvm/disk0.qcow2 1G

libvirt経由でKVMを起動する。設定ファイルはこんな感じ。インストール時はboot devはcdromにしておき、インストール後はhdに切り替える。

$ cat /etc/libvirt/qemu/plan9.xml

<domain type='kvm'>
  <name>plan9</name>
  <uuid>6c7aa691-1d51-67f1-ff86-a03412e431de</uuid>
  <memory>524288</memory>
  <currentMemory>524288</currentMemory>
  <vcpu>1</vcpu>
  <os>
    <type>hvm</type>
    <boot dev='cdrom'/>
<!--
    <boot dev='hd'/>
-->
  </os>
  <features>
    <acpi/>
  </features>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <devices>
    <emulator>/usr/bin/kvm</emulator>
    <disk type='file' device='cdrom'>
      <source file='/opt/kvm/plan9-kvm/plan9.iso'/>
      <target dev='hdc' bus='ide'/>
      <readonly/>
    </disk>
    <disk type='file' device='disk'>
      <source file='/opt/kvm/plan9-kvm/disk0.qcow2'/>
      <target dev='hda' bus='ide'/>
    </disk>
    <interface type='network'>
      <mac address='54:52:00:33:26:5d'/>
      <source network='default'/>
    </interface>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1'/>
  </devices>
</domain>

で、virt-managerから起動。起動はするのだけど、MacOS XからSSHポートフォワード経由で実行すると、キー入力が変でまともに使えない。キーマップが日本語か英語かという問題じゃなくて、'1'って入力したら'e'って表示される(62ずれてる?)。何が問題なんだろう。ちょっとググったけどわからなかった。しかたないので、Ubuntu on VMWare Fusionから実行した。

$ sudo virt-manager -c qemu:///system

(追記)キーマップをus-enとか指定すればよいはず。

    <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1' keymap='us-en'/>

インストールが終われば、いつも通りPlan9の設定をすればよい。libvirtDHCPサーバの機能も提供するので、ip/ipconfigでIPアドレスが取得できる。/rc/bin/termrcでip/ipconfig実行するように修正する。

あとは、virt-managerを使うのが苦痛なので、drawtermからアクセスできるように設定すればよい。
まじめに設定するには、「Configuring a Standalone CPU Server」にある設定が必要だけど、drawtermを使うだけなら、「Drawterm to your terminal」の通りで十分。

% ip/ipconfig
% auth/factotum
% echo 'key proto=p9sk1 dom=livecd user=glenda !password=password' >/mnt/factotum/ctl
% aux/listen1 -t tcp!*!17010 /bin/cpu -R &

では、

$ drawterm -a 192.168.122.225 -c 192.168.122.225 -u glenda

と。ちゃんとdrawtermでつながった。