User-mode Linux

From ArchWiki
Jump to navigation Jump to search

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 はホストのファイルシステムを読み取り専用モードで使います。

必要パッケージ

起動スクリプト

  • http://pastebin.com/qDE0D7Lk スクリプトを 2vm.bash としてダウンロード
  • 通常ユーザーを使って 2vm.bash を起動 ('C1' & 'C2' という名前の2つの VM が存在)
  • 2vm.bash を必要に応じて修正

rootfs + tap による構成

必要パッケージ

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 で実行 (modprobeloop モジュールをロードしてください):

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.) ファイルシステムをアンマウントしてください:

警告: If you change anything inside your mounted file system (e.g. /mnt) while it is running, it may lead to significant file system corruption inside your virtual machine and kill it!
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 を見てください。