User Mode Linux

どうやら時代遅れ扱いっぽいですが、あえて User Mode Linux (UML)。
かなり昔の構築例やdebianでの構築例はあったのですが、CentOS 5.3 での構築例を見つけることができませんでした。
debianだとapt-getで済むそうです。が、自分はdebian使ってないので判りません(・∀・)

ので、以下メモ。
ホストOSのパッチ(SKASパッチ)は今回はあててません。

UMLカーネルのビルド

UML Resources にビルド済みのバイナリとその時に使用されたconfigがあります。
UML Resources にある CentOS は 5.2 だったので、今回では kernel.org のソース + UML Resources の config でビルドしました。

  • UML Resources からダウンロードした config をちょっと編集

カーネルデバッグログ(特にタイムスタンプ)がウザいので以下をコメントアウトします。

CONFIG_PRINTK_TIME=y
$ cp kernel32-2.6.30.3.config linux-2.6.30.3/.config

編集してあるとカーネルデバッグログを云々聞いてくるのでOFFにしました。

[linux-2.6.30.3] $ export ARCH=um
[linux-2.6.30.3] $ make oldconfig
  (中略)
[linux-2.6.30.3] $ make

root_fsの準備

今回は UML Resources にあるものをそのまま使いました。
ゼロからCentOSのroot_fsを構築するのはまた今度にします。

ホストOS = UML間ネットワークの準備

  • UML Utility を UML本拠からダウンロードしてきてビルドします。
$ make
$ sudo make install
$ sudo tuctl
Set 'tap0' persistent and owned by uid 0
$ sudo /sbin/ifconfig tap0 192.168.1.1 up
  • UML switchを起動してunixソケットの権限を変更します。

UML_switch に tapデバイスも接続することで、UMLとホストを通信可能にします。

$ sudo uml_switch -hub -tap tap0
uml_switch will be a hub instead of a switch
uml_switch attached to unix socket '/tmp/uml.ctl' tap device 'tap0'
$ sudo chmod 777 /tmp/uml.ctl

UMLを起動します。

$ ./linux ubd0=./difffs,rootfs.uml eth0=daemon
  (中略)
CentOS release 5.3 (Final)
Kernel 2.6.30.3 on an i686

localhost login: root
Last login: Fri Jul 31 11:06:48 on tty0
[root@localhost ~]# ifconfig eth0 192.168.1.2 up
[root@localhost ~]# ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=14.6 ms

ホストOSからのpingも通ります。

$ ping 192.168.1.2
PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=1.37 ms