GentooLinux上でLXCを使うときのメモ。
Kernel Config
* General
* Control Group support
-> namespace cgroup subsystem
-> cpuset support
-> Group CPU scheduler
-> control group freeze subsystem
-> Basis for grouping tasks (Control Groups)
-> Simple CPU accounting
-> Resource counters
-> Memory resource controllers for Control Groups
-> Namespace support
-> UTS namespace
-> IPC namespace
-> User namespace
-> Pid namespace
-> Network namespace
cgroupのマウント
$ sudo mkdir /cgroup
$ sudo mount -t cgroup cgroup /cgroup
$ sudo vim /etc/fstab
cgroup /cgroup cgroup default 0 0
app-emulation/lxc
2010/08/11現在 mask されている。
- app-emulation/lxc-0.7.1 (masked by: package.mask)
/usr/portage/profiles/package.mask:
# Diego E. Pettenò (23 Oct 2009)
#
# Starting work toward supporting Linux Containers in Gentoo.
# Currently, it's a tentative ebuild based upon Tiziano Müller
# (dev-zero)'s overlay, with some differences from the upstream paths
# and handling.
#
# Will be unmasked when felt “ready” (and openrc'll support it as
# guest).
ので、unmask 。
$ echo app-emulation/lxc | sudo tee -a /etc/portage/package.unmask
$ sudo emerge -av lxc
ゲストの作成
ゲストは GentooLinux とする。
Debian を使いたい場合は、debootstrap とか。
HOST# export TARGET_DIR=/var/lxc/rootfs.gentoo
HOST# cd ${TARGET_DIR}
HOST# tar -xjpf stage3-*.tar.bz2
HOST# mkdir usr/portage
HOST# mount -o bind /usr/portage ${TARGET_DIR}/usr/portage
HOST# chroot ${TARGET_DIR} /bin/bash
# env-update
# source /etc/profile
GUEST# PS1="GUEST# "
LXCゲストは baselayout-2 で対応しているらしい。
GUEST# mkdir /etc/portage
GUEST# echo sys-apps/baselayout >> /etc/portage/package.keywords
GUEST# echo sys-apps/openrc >> /etc/portage/package.keywords
GUEST# emerge -u baselayout
GUEST# dispatch-conf
コンテナ用のデバイスファイルを作成します。tarball から展開した /dev は一度削除。
GUEST# rm -rf /dev
GUEST# mknod /dev/urandom c 1 9
GUEST# mknod /dev/tty1 c 136 1
GUEST# mknod /dev/tty2 c 136 4
GUEST# mknod /dev/tty3 c 136 5
GUEST# mknod /dev/tty4 c 136 6
GUEST# mknod /dev/tty5 c 4 5
GUEST# mknod /dev/tty6 c 4 6
GUEST# mknod /dev/tty7 c 4 7
GUEST# mknod /dev/tty8 c 4 8
GUEST# mknod /dev/tty9 c 4 9
GUEST# mknod /dev/tty10 c 4 10
GUEST# mknod /dev/tty11 c 4 11
GUEST# mknod /dev/tty12 c 4 12
GUEST# mknod /dev/mem c 1 1
GUEST# mknod /dev/kmem c 1 2
GUEST# mknod /dev/port c 1 4
GUEST# mknod /dev/tty c 5 0
GUEST# mknod /dev/psaux c 10 1
GUEST# mknod /dev/null c 1 3
GUEST# mknod /dev/zero c 1 5
GUEST# mknod /dev/full c 1 7
GUEST# mknod /dev/random c 1 8
GUEST# mkdir /dev/pts
GUEST# mknod /dev/pts/ptmx c 5 2
GUEST# ln -s /dev/pts/ptmx /dev/ptmx
GUEST# mkdir /dev/shm
GUEST# touch /dev/.keep
IPアドレスは、ゲスト内で設定しなくてもLXCが設定してくれるが、 ゲスト内で設定しても良いかもしれない(未確認)。
ルートの設定はしてくれないので、ゲスト内の設定を書く。
GUEST# nano -w /etc/conf.d/net
config_eth0=( "noop" )
routes_eth0=( "default via 192.168.0.1"
"default via fe80::1" )
GUEST# rc-update add net.eth0 default
その他、resolv.conf や localtime 等はご自由に。
次に、inittab をいじる。TERMINAL以下をコメントアウトして、1行挿入する。
GUEST# nano -w /etc/inittab
# TERMINALS
c0:12345:respawn:/sbin/agetty 38400 console
c1:12345:respawn:/sbin/agetty 38400 tty1 linux
#c2:2345:respawn:/sbin/agetty 38400 tty2 linux
#c3:2345:respawn:/sbin/agetty 38400 tty3 linux
#c4:2345:respawn:/sbin/agetty 38400 tty4 linux
#c5:2345:respawn:/sbin/agetty 38400 tty5 linux
#c6:2345:respawn:/sbin/agetty 38400 tty6 linux
ここで一端ホスト側に戻り、LXCのゲスト設定を作る。
ゲストの名前は "gentoo" とする。
HOST# lxc-create -n gentoo
HOST# vim /etc/lxc/gentoo/config
lxc.utsname = gentoo
lxc.tty = 4
lxc.pts = 1024
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = lan0
lxc.network.hwaddr = 02:00:00:01:01:01
lxc.network.ipv4 = 192.168.0.101/24
lxc.network.ipv6 = 2001:db8:1::101/64
lxc.network.name = eth0
lxc.mount = /etc/lxc/gentoo/fstab
lxc.rootfs = /var/lxc/rootfs.gentoo
ゲスト起動前にホスト側でマウントするところは lxc.mount で指定したファイルに記述する。
HOST# vim /etc/lxc/gentoo/fstab
none /var/lxc/rootfs.gentoo/proc proc defaults 0 0
/usr/portage /var/lxc/rootfs.gentoo/usr/portage none bind,ro 0 0
none /var/lxc/rootfs.gentoo/usr/portage/distfiles tmpfs defaults 0 0
起動してみる。
HOST# lxc-start -n gentoo
INIT: version 2.87 booting
Loading /lib64/rc/console/keymap
OpenRC 0.6.1 is starting up Gentoo Linux (x86_64) [LXC]
Press I to enter interactive boot mode
* /proc is already mounted, skipping
* Caching service dependencies ...
[ ok ]
* Mounting /dev/pts ...
[ ok ]
* Mounting /dev/shm ...
[ ok ]
* Setting hostname to lxc-gentoo ...
[ ok ]
* Configuring kernel parameters ...
[ ok ]
* Creating user login records ...
[ ok ]
* Cleaning /var/run ...
[ ok ]
* Wiping /tmp directory ...
[ ok ]
* Setting terminal encoding [UTF-8] ...
[ ok ]
* Setting keyboard mode [UTF-8] ...
[ ok ]
* Loading key mappings [us] ...
[ ok ]
* Updating /etc/mtab ...
[ ok ]
* Bringing up interface lo
* Caching network module dependencies
* 127.0.0.1/8 ...
[ ok ]
* Adding routes
* 127.0.0.0/8 via 127.0.0.1 ...
[ ok ]
* Initializing random number generator ...
[ ok ]
INIT: Entering runlevel: 3
* Mounting network filesystems ...
[ ok ]
* Starting local ...
[ ok ]
This is gentoo.unknown_domain (Linux x86_64 2.6.34-gentoo) 13:37:01
gentoo login: root
Password:
Last login: Wed Aug 11 13:37:59 JST 2010 on console
gentoo ~ # ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 3888 620 ? Ss 13:39 0:00 init [3]
root 387 0.2 0.0 56040 1468 console Ss 13:39 0:00 /bin/login --
root 388 0.5 0.0 17728 1840 console S 13:40 0:00 -bash
root 392 0.0 0.0 14804 980 console R+ 13:40 0:00 ps aux
gentoo ~ #