v7x86 on QEMU

先日もLions' commentary on UNIX読み会に参加したりと、UNIX v6づいている。この前はxv6VirtualBoxにインストールして遊んでみたが、次はUNIX v7をx86に移植したv7x86QEMU on Ubuntu 10.10上で動かしてみた*1。こちらは(UNIX v7が多少なりとも移植性を考慮して実装されているということもあり)xv6と違い、素直な移植になっているようだ。

本家のダウンロードページには、ISOイメージがあるので、QEMUでこれをブートする。インストール先のディスクイメージは256MBもあれば十分だろう。ただし、ドキュメントにもあるがあらかじめv7x86用のパーティションをfdiskで用意しておくことをお勧めする。

$ dd if=/dev/zero of=v7x86.img bs=$((1024*1024)) count=256
$ sudo losetup /dev/loop0 v7x86.img
$ sudo cfdisk /dev/loop0
   (プライマリパーティションを一つ作り、typeを0x72に設定する)
$ sudo losetup -d /dev/loop0
$ qemu -boot d -hda v7x86.img -cdrom v7x86-0.8a.iso

インストールは簡単で、メニュにしたがってcd0からhd0にインストールすればOK。インストールがすんでQEMUを再起動すると、MBRが空のようでブートしない。このインストーラブートローダのことを何もケアしてくれないようだ。

ということでGrubのレスキューディスクを作ってチェインロードすることにした*2。もっとスマートなインストール方法があったら教えてください。

$ grub-mkrescure -o grub.iso
$ qemu -boot d -hda v7x86.img -cdrom grub.iso

Grubが起動するので、

grub> root (hd0,msdos1)
grub> chainloader +1
grub> boot

とすると、まずはシングルユーザモードでブートした。

BOOT [hd(0,0)unix]:
text=43120  data=4560  bss=175892 ......
:
mem = 14016512
#

シングルユーザモードではrootfsしかマウントされていないので、/dev/hd0eを/usrにマウントする。

# /etc/mount /dev/hd0e /usr

そして、Ctrl-dで、マルチユーザモードに遷移する。guestユーザはパスワードなしでログインできる。カーネルのソースは/usr/sys/sys以下で、viも使えるぞ。

*1:実はこの日記でも以前紹介したことがある。

*2:grub-mkrescueの実行にはxorrisoパッケージが必要。