1. 準備
1.1. カーネル設定
何となく、lxc-checkconfigですべての機能が有効になるように以下の機能を有効にする
-> Device Drivers
-> Network device support
[*] MAC-VLAN support (EXPERIMENTAL)
[*] Virtual ethernet pair device
-> Networking support
-> Networking options
[*] 802.1Q VLAN Support
1.2. 必要なソフトウェアの導入
このメモを書いている時点ではlxcにはマスクがかかっているので外してあげる。アーキテクチャは各々の環境に合わせてね。
# echo "app-emulation/lxc" >> /etc/portage/package.unmask
# echo "app-emulation/lxc ~amd64" >> /etc/portage/package.keywords
# emerge -av lxc bridge-utils iproute2
1.3. ブリッジを作成
まず、ブリッジのスクリプトを作成
ln -s /etc/init.d/net.lo /etc/init.d/net.br0
ネットワークの設定(/etc/conf.d/net)を以下のように書き換える
brctl_br0=( "setfd 0" )
bridge_br0="eth0"
config_eth0=( "null" )
config_br0=( "dhcp" )
depend_br0() {
need net.eth0
}
今までeth0に行っていた設定をbr0に行う感じ。
1.4. cgroupファイルシステム(?)をマウント
# mkdir /cgroup
# mount none -t cgroup /cgroup
# echo "none /cgroup cgroup defaults 0 0" >> /etc/fstab
2. 仮想環境の構築
2.1. stage3を展開してchrootする
うろ覚えだけど、たぶん下のような感じ。stage3のファイルはミラーからダウンロードしてね
# export VMROOT=/mnt/vmroot
# cd ${VMROOT}
# tar xvjpf stage3-*
# mount -t proc none ${VMROOT}/proc
# mount -o bind /dev ${VMROOT}/dev
# cp -L /etc/resolv.conf ${VMROOT}/etc
# mkdir ${VMROOT}/usr/portage
# mount -o bind /usr/portage ${VMROOT}/usr/portage
# chroot ${VMROOT} /bin/bash
# env-update
# source /etc/profile
2.2. OpenRC / baselayout-2をインストール
baselayout-2じゃないといけないみたいなので、マスクを外してインストール
# echo "sys-apps/openrc ~amd64" >> /etc/portage/package.keywords
# echo "sys-apps/baselayout ~amd64" >> /etc/portage/package.keywords
# emerge openrc baselayout
# dispatch-conf
2.3. 起動時のスクリプトを調整
# rc-update add net.eth0 default
# rc-update add net.br0 default
# rc-update add sshd default
# rc-update del udev sysinit
# rc-update del udev-postmount default
# rc-update del fsck boot
# rc-update del consolefont boot
2.4. gettyの設定
/etc/inittab から agetty と書かれている行を全部#でコメントアウト。そして下の行を追加
c0:1235:respawn:/sbin/agetty 38400 console linux
2.5. パスワードの設定
# passwd
これで終わり。chrootから抜ける
3. 仮想環境の起動
3.1. LXCの設定
仮想マシンを作成
# lxc-create -n test-vm
以下のファイルを適当に設定
# cat /etc/lxc/test-vm/config
lxc.utsname = test-vm
lxc.rootfs = /mnt/vmroot
lxc.mount = /etc/lxc/test-vm/fstab
lxc.network.type = veth
lxc.network.link = br0
lxc.network.flags = up
lxc.network.name = eth0
lxc.pts = 1024
lxc.cgroup.devices.deny = a # Deny all access to devices
lxc.cgroup.devices.allow = c 1:3 rwm # dev/null
lxc.cgroup.devices.allow = c 1:5 rwm # dev/zero
lxc.cgroup.devices.allow = c 5:1 rwm # dev/console
lxc.cgroup.devices.allow = c 5:0 rwm # dev/tty
lxc.cgroup.devices.allow = c 1:9 rwm # dev/urandom
lxc.cgroup.devices.allow = c 1:8 rwm # dev/random
lxc.cgroup.devices.allow = c 136:* rwm # dev/pts/*
lxc.cgroup.devices.allow = c 5:2 rwm # dev/pts/ptmx
lxc.cgroup.devices.allow = c 254:0 rwm
# cat /etc/lxc/test-vm/fstab
/usr/portage /mnt/vmroot/usr/portage none bind 0 0
3.2. 起動!
4. おわりに
LXCは簡単だしカーネルにパッチ要らないし、コンテナ型だから性能も良いし良い感じ。次期oikw.orgサーバではこれを採用したいな~ (ハードウェアを新調したら...)