UMLのルートファイルシステム
Linuxシステムをインストールする場合は、必ず、標準ディレクトリツリーを含む整合性のあるファイルシステム(ルートファイルシステムと呼びます)の作成が必要です。私は標準のインストール手順に従わなかったので、このファイルシステムを別個に作成する必要がありました。この処理に使用できるプログラムはたくさんあります。Debian向けのプログラムdebootstrapは、インターネット接続を介して使えば万全です。UbuntuはDebianから派生したものなので、同じパッケージマネージャを使用でき、同じソフトウェアパッケージが用意されています。
私は、ファイルシステム全体を4GBのファイル(uml1-rootまたはuml2-root)に入れ、ルートユーザーとしてホストマシン上で適正なファイルシステムを作成しました。
dd if=/dev/zero of=uml1-root bs=4096 seek=1M count=1
これをext3ファイルシステムとしてフォーマットしました。
mkfs.ext3 uml1-root
次に、ループバックデバイスを介して使用できるように、ループバックファイルシステムとして/mnt下にマウントしました。
mount -o loop uml1-root /mnt
次に、debootstrapアプリケーションをインストールし、これを使って/mnt下にUbuntu 7.10(Gutsy Gibbon)用の完全なルートファイルシステムをインストールしました。
apt-get install debootstrap debootstrap --arch i386 gutsy /mnt http://us.archive.ubuntu.com/ubuntu
これで、基本的ながら完全なLinuxファイルシステムができあがりました。ただし、uml1をブートする前に、カスタマイズして起動を改善する必要がありました。
UMLは、Linuxホストシステムの標準のユーザープロセスとして稼働するので、通常のLinuxシステムと同様にハードウェアと直接通信せず、代わりに、Linuxホストシステムによって表されるハードウェアと通信します。これの1つの長所は、実際の構成に関係なく、どのような仮想ハードウェア構成上でもUMLを稼働できることです。
仮想デバイスの割り当ては、変数スイッチを関連付けることでコマンドラインで行いました。たとえば、UMLブロックデバイスは、ubd変数で定義します(つまり、1つ目のブロックデバイスにはubd0、2つ目のブロックデバイスにはubd1などを使います)。コマンドラインでの割り当てubd0=uml1-rootにより、ルートファイルシステムを含むループバックファイルシステムと、1つ目のUMLブロックデバイスを関連付けました。次に、/mnt/etc/fstabを次のように編集する必要がありました。
/dev/ubd0 / ext3 defaults 0 1 proc / proc proc defaults 0 0
また、適切な権限を持つデバイスを作成しました。
cd /mnt/dev mknod --mode=660 ubd0 b 98 0 chown root:disk ubd0
ファイル/mnt/etc/hostnameにマシンの名前を挿入し、次の行だけでプレーンのvanillaファイル/mnt/etc/hostsを作成しました。
127.0.0.1 localhost
Ubuntuは、Debianと同様、ifupdownパッケージを使って、ネットワークインターフェイスの構成と構成解除を行います。そこで、UML eth0デバイスがブート時に自動的に起動するように/mnt/etc/networking/interfacesを編集しました。uml1の場合は、次のようになります。
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.0.201
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.1
tty0をルートとしてログインできるUML端末になるように設定し、それ以外を消去する必要がありました。
echo "tty0" >> /mnt/etc/securetty echo "ttys/0" >> /mnt/etc/securetty rm /mnt/etc/event.d/tty2 rm /mnt/etc/event.d/tty3 rm /mnt/etc/event.d/tty4 rm /mnt/etc/event.d/tty5 rm /mnt/etc/event.d/tty6
ところで、ここでは標準のDebianとUbuntuとで若干の違いがあります。Ubuntuは有名なinitデーモンを新しいupstartフレームワークに置き換えたので、ファイル/etc/inittabではなく、/etc/event.dディレクトリ下のファイルを編集しなければなりません。
システムがブートするたびに新しいethXデバイスを再作成するudevフレームワークの標準ルールを消去しました。
rm /mnt/etc/udev/rules.d/75-persistent-net-generator.rules
umount /mntファイルシステムがhost-userに権限を割り当てると、UMLインスタンスがブートします。
