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
起動してみる。
2010/10/06: 手順の漏れを修正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 ~ #
0 件のコメント:
コメントを投稿