Debian GNU/Linux(sarge)でUMLを試してみる
UML(User Mode Linux)は,Linux上で動作するLinuxということで,Debian GNU/Linux(srge)上でDebian GNU/Linux(sarge)を起動してみた.
今回は以下の構成で環境を作成する.
- ホストOS
- Debian GNU/Linux sarge,kernel 2.6.15
- ゲストOS
- Debian GNU/Linux sarge,kernel 2.6.16.11
- ゲストOS
- UML用カーネルの構築.
- ゲストOS用ルートFSの作成
- ゲストOS起動
- ゲストOS用にいろいろと設定
DebianのetchなどではUML用カーネルをapt-getできるようだが,私の環境はsargeなので,UML用カーネルを構築する必要がある.
まずソースの展開と設定.
kernel-uml-2.6.16.11_uml.20060428_i386.deb
のできあがり.
あとはインストール.
カーネルイメージは
$ tar zxvf linux-2.6.16.11.tar.gz $ cd linux-2.6.16.11 $ cp arch/um/config.release .config $ make oldconfig ARCH=umいろいろ質問された. プロセッサファミリをAthlon64に変更した以外は全部デフォルトで回答. そしてビルド.
$ fakeroot make-kpkg clean $ fakeroot make-kpkg --revision uml.20060428 --arch um kernel_imageこれで
/usr/bin/linux-2.6.16.11ライブラリは
/usr/lib/uml/modules/に作成されるので,ホストOSにてdpkgすればよい.
# dpkg -i \ kernel-uml-2.6.16.11_uml.20060428_i386.deb
ゲストOSのためのルートFSを作成する.
今回はホストOSにてルートFS用ファイルを作成する.
debootstrapをインストール.
# apt-get install debootstrap次にルートFSとするファイルを作成.
~$ mkdir uml ~$ cd uml/ ~/uml$ dd if=/dev/zero of=root_fs bs=8192 count=65536 読み込んだブロック数は 65536+0 書き込んだブロック数は 65536+0 536870912 bytes transferred in 5.738106 seconds (93562392 bytes/sec)UMLカーネルは,デフォルトでは
./root_fsをルートFSとして使用するので,今回のファイル名もroot_fsとした. 作成したファイルをext2として初期化.
$ /sbin/mke2fs -F ./root_fs
mke2fs 1.37 (21-Mar-2005)
./root_fs is mounted; mke2fs forced anyway. Hope /etc/mtab is incorrect.
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
131072 inodes, 524288 blocks
26214 blocks (5.00%) reserved for the super user
First data block=1
64 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 36 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
マウントしてルートFS作成.
~# mount -t ext2 root_fs /mnt/ -o loop /mnt# debootstrap sarge /mnt http://ftp.jp.debian.org/debianそしてdevファイルを作成.
#cd /mnt/dev #MAKEDEV ubdetc/fstabを作成. こんなん.
proc /proc proc defaults 0 0 /dev/ubda1 / ext2 defaults,errors=remount-ro 0 0とりあえず必要最小限のもので.
では,いよいよ起動.
~/uml$ ls root_fs ~/uml$ linux-2.6.16.11 ubda1=./root_fs上はfstabの/をマウントポイントとするデバイスubda1をroot_fsファイルとして指定して起動している. 起動したターミナルとは別にxtermウィンドウが表示され,ログインプロンプトとなる. 先に作成したroot_fsでは,ユーザ名rootとするとパスワードなしでログインできるので,そのあとパスワード設定したり,ユーザを作成したりする.
最終的には,UMLがホストOSと同じネットワーク上(同一ネットワークアドレス)にて1ホストとして他のマシンと疎通できるような状態にしたい.
まず,ホストOSをデフォルトゲートウェイとして,ホストOSまで到達できるように,ネットワーク設定してみる.
では,自分の環境にあわせて以下を設定してみる.
- /etc/hostname
- UMLで起動した仮想マシンのホスト名.
- /etc/hosts
- 名前解決用ホスト名. とりあえず,ホストOSとlocalhostの設定をしてみる.
- /etc/network/interfaces
- ネットワークインタフェース設定.
ホストOSのネットワーク環境に合わせて設定する.
auto lo eth0 iface lo inet loopback iface eth0 inet static address 仮想マシン用の新しい値 netmask 255.255.255.0 network ホストOSのそれと同じ値 gateway ホストOSのIP
~/uml# tunctl -u umluser Set 'tap0' persistent and owned by uid 9999-uの後には,UMLを起動するユーザのuidかユーザ名を指定する. tap0というのが用意される. 次に,このtap0をホストOSにおいてネットワーク設定する.
~/uml# ifconfig tap0 ホストOSにおけるUML用IPアドレス upホストOSにおけるUML用IPアドレスは,先にUMLで設定したアドレスと重複してはならず,当然ホストOSのネットワークにおいて通信可能なものでなければならない. そして,UMLがtunデバイスにアクセスできるように,パーミッションを修正する.
~/#chmod 666 /dev/net/tunさらに,ホストOSにてルーティング設定.
route add -host 仮想マシン用の新しい値(アドレス) dev tap0あとはeth0に準備したtap0を指定しつつUMLを起動.
~/uml$ linux-2.6.16.11 ubda1=./root_fs eth0=tuntap,tap0,,ホストOSでのUML用IPアドレスこれで,UMLからホストOSへの疎通ができるようになる.

