読者です 読者をやめる 読者になる 読者になる

TenForward

技術ブログ。はてなダイアリーから移転しました

Plamo Linux 4.73 で lxc 0.7.2 (前編)

以前,lxc-0.6.2 で行なったときは何事もなくうまくいったのですが,今回 lxc がバージョンアップして,イマイチうまくいかない部分があったので,とりあえず方法をメモ.

カーネル再構築

Plamo 標準カーネルは cgroup など,lxc の動作に必要なオプションが有効になっていません.以前の設定 (lxc (2))そのままでいけると思います.

ブリッジ設定

こんな感じ]でブリッジを設定します.普通に作っているだけで lxc 特有のものはありません.

lxc の make

lxc-0.7.2.tar.gz を取得して展開します.たぶん,そのまま (docbook2man が存在する状態) では man の make に失敗するので,無効化しておきます.

$ ./configure --disable-doc
$ make
# make install

Plamo 用はパッケージは

以下に置いてありますので,取得後 installpkg コマンドでインストールしても構いません.

コンテナの準備

以前の lxc(3)で書いたように OpenVZ 用の debian の precreated テンプレートキャッシュを取得してみます.ここはお好きなように,ですね.

lxc-debian などのコンテナ作成スクリプトは,以前は /usr/bin なんかに置かれていましたが,今回から /usr/lib/lxc/template 以下に置かれています.

デフォルトでは lxc のコマンド群は /var/lib/lxc 以下にコンテナがあるとして見にいきますので,

# mkdir -p /var/lib/lxc

で作成しておきます.

ここで,例えば "debian" というコンテナを作成する場合は,

# mkdir -p /var/lib/lxc/debian/rootfs

という風にディレクトリを作成しておきます.debian 環境なんかで lxc-debian コマンドを使う場合は /var/lib/lxc/debian まで指定すれば,rootfs は自動的に作ってくれますが,今回は Plamo で使うので,事前に作っておきます.

/var/lib/lxc/debian/rootfs 以下に,事前に取得した OpenVZ 用のテンプレートキャッシュを展開します.

# tar zxvf debian-5.0-x86.tar.gz -C /var/lib/lxc/debian/rootfs

展開した状態で lxc-debian スクリプトを使って設定を手抜きしますので,このスクリプトを適当なディレクトリにコピーします.で,debootstrap など Plamo で動かない部分をコメントアウトします.

# cp /usr/lib/lxc/template/lxc-debian .
# vi lxc-debian
# diff -u /usr/lib/lxc/templates/lxc-debian lxc-debian 
--- /usr/lib/lxc/templates/lxc-debian	2010-09-14 09:00:00.000000000 +0900
+++ lxc-debian	2010-09-17 15:31:12.000000000 +0900
@@ -273,11 +273,11 @@
     exit 0
 fi
 
-type debootstrap
-if [ $? -ne 0 ]; then
-    echo "'debootstrap' command is missing"
-    exit 1
-fi
+#type debootstrap
+#if [ $? -ne 0 ]; then
+#    echo "'debootstrap' command is missing"
+#    exit 1
+#fi
 
 if [ -z "$path" ]; then
     echo "'path' parameter is required"
@@ -291,11 +291,11 @@
 
 rootfs=$path/rootfs
 
-install_debian $rootfs
-if [ $? -ne 0 ]; then
-    echo "failed to install debian"
-    exit 1
-fi
+#install_debian $rootfs
+#if [ $? -ne 0 ]; then
+#    echo "failed to install debian"
+#    exit 1
+#fi
 
 configure_debian $rootfs $name
 if [ $? -ne 0 ]; then

この後 lxc-debian を実行します.以下のように実行すると,/var/lib/lxc/debian/config という設定ファイルが生成されます.ネットワーク関係の設定がなされていませんので,以下の例の最後の部分のように設定を追加します.

# ./lxc-debian -p /var/lib/lxc/debian
# cat /var/lib/lxc/debian/config
lxc.tty = 4
lxc.pts = 1024
lxc.rootfs = /var/lib/lxc/debian/rootfs
lxc.cgroup.devices.deny = a
# /dev/null and zero
lxc.cgroup.devices.allow = c 1:3 rwm
lxc.cgroup.devices.allow = c 1:5 rwm
# consoles
lxc.cgroup.devices.allow = c 5:1 rwm
lxc.cgroup.devices.allow = c 5:0 rwm
lxc.cgroup.devices.allow = c 4:0 rwm
lxc.cgroup.devices.allow = c 4:1 rwm
# /dev/{,u}random
lxc.cgroup.devices.allow = c 1:9 rwm
lxc.cgroup.devices.allow = c 1:8 rwm
lxc.cgroup.devices.allow = c 136:* rwm
lxc.cgroup.devices.allow = c 5:2 rwm
# rtc
lxc.cgroup.devices.allow = c 254:0 rwm

# mounts point
lxc.mount.entry=proc /var/lib/lxc/debian/rootfs/proc proc nodev,noexec,nosuid 0 0
lxc.mount.entry=devpts /var/lib/lxc/debian/rootfs/dev/pts devpts defaults 0 0
lxc.mount.entry=sysfs /var/lib/lxc/debian/rootfs/sys sysfs defaults  0 0

# これ以下は追加するモノ.
lxc.utsname = debian
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0

cgroup のマウント

fstab に cgroup のマウントをするように行を追加します.例えば,

none /cgroup cgroup default 0 0

この例だと /cgroup ディレクトリの作成をお忘れなきよう.

# mkdir /cgroup
# mount /cgroup

これで

# lxc-start -n debian

とやれば debian が起動します."-d" オプションを追加すれば,バックグラウンドで起動しますので,sshd が設定されていれば ssh で,そうでなければ,

# lxc-console -n debian

Type <Ctrl+a q> to exit the console

Debian GNU/Linux 5.0 debian tty1

debian login: 

みたいにログインプロンプトが出てきます.

サーバとして X なしで母艦を動かしていて,コンテナを起動させるのなら,これで OK です.評価のために Desktop 環境で lxc を動かすのなら,Plamo の場合,これだと Desktop 環境で新たにターミナル (xterm とか gnome-terminal とか...) が開かなくなります. Debian Squeeze や Ubuntu 10.04 でやったら何の問題もなく動きますが... (なぜこの違いが出てくるかは分かりません,教えてプリーズ)

(続く)