User-mode Linux
User-mode-Linux (UML) は Linux の中で通常プロセスとして Linux を動かす仕組みです。UML の詳しい解説は [1] を見てください。
目次
なぜ UML を使うのか
UML を使うことで複数の (Arch-) Linux インスタンスを同時に安全に実行できます。テスト用インスタンスと本番用インスタンスを同じマシンで動かす場合など、安全にプロセスを他のプロセスと分離できます。テスト用インスタンスで何か問題が起こっても、ホストの Linux や本番用インスタンスに影響を与えません。
使用方法
3つの方法が存在します:
- hostfs と vde2 ネットワークを使う (全ての UML は同じファイルシステムを使います)
- rootfs と tap ネットワークを使う (イメージビルドが必要)
- Marionnet を使う
Linux 3.4.4-3 ではどの方法でも動きます (2012年7月3日現在)。
hostfs + vde2 による構成
Hostfs はホストのファイルシステムを読み取り専用モードで使います。
必要パッケージ
- linux-usermodeAUR
- ユーティリティパッケージ: vde2 screen start-stop-daemonAUR rsyslogAUR
起動スクリプト
- http://pastebin.com/qDE0D7Lk スクリプトを 2vm.bash としてダウンロード
- 通常ユーザーを使って 2vm.bash を起動 ('C1' & 'C2' という名前の2つの VM が存在)
- 2vm.bash を必要に応じて修正
rootfs + tap による構成
必要パッケージ
- linux-usermodeAUR
- ユーティリティパッケージ: vde2 uml_utilities_tunpatchAUR[リンク切れ: アーカイブ: aur-mirror]
rootfs イメージのビルド
1.) まず Arch Linux をインストールする大きなファイルを作成します。以下のコマンドで 1GiB のファイルが生成され、ゼロで埋められます:
dd if=/dev/zero of=rootfs bs=1M count=1024
または:
fallocate -l 1GiB ./rootfs
2.) ビルドプロセスの後、ルートファイルシステムのイメージをフォーマットしてください:
mke2fs -F rootfs
3.) ファイルのフォーマット後、マウントしてください。以下のコマンドを root で実行 (modprobe
で loop
モジュールをロードしてください):
mount -o loop rootfs /mnt
4.) 基本システムのインストールを実行:
mkdir -p /mnt/var/lib/pacman pacman -Sy base -r /mnt cd /mnt/dev mknod --mode=660 ubd0 b 98 0 chown root:disk ubd0
5.) システムを user-mode-Linux で起動する前に、Arch 環境のファイルをカスタマイズしてください。/mnt/etc/fstab
に以下の行を追加:
/dev/ubd0 / ext2 defaults 0 0
6.) ファイルシステムをアンマウントしてください:
umount /mnt
7.) 次にネットワークの設定です。それから、tun デバイスを作成します (tun/tap について詳しくは UML how-to を参照)。そして IP アドレスを付与してください。以下のコマンドでで必要な tun
モジュールをロードして、users
グループから読み込める tun/tap デバイスを作成して、指定した IP アドレスで設定します。セキュリティのために、特定の UML グループを作成してください。
modprobe tun ip tuntap add tap0 mode tap group users chown root.users /dev/net/tun ip addr add 192.168.0.100/24 dev tap0
8.) これでイメージを起動できます。ネットワークを使うときは、UML カーネルに適切なデバイスを教える必要があります (UML コマンドを実行するユーザーは tun デバイスにアクセスする権限が必要です):
vmlinux ubd0=rootfs eth0=tuntap,,,192.168.0.100
,,,
は以下のようになります:
eth0=transport,tuntap device,MAC address,ip
例:
eth0=tuntap,tap0,3f:2a:bb:00:00:00,192.168.0.100
ヘッドレスの例:
vmlinux ubd0=rootfs eth0=tuntap,,,192.168.0.100 mem=128M con=pty
Marionnet
Marionnet を使うときは uml_utilitiesAUR をインストールして https://bugs.launchpad.net/marionnet/+bug/1580349 を見てください。