LXCはi386/amd64環境以外でも利用できる。ここでは、ARMv7なマイクロサーバ OpenBlocks AX3にインストールされているDebianにLXCを導入し、その中にArch Linuxをインストールする。ホストとコンテナの論理的な構成(ネットワーク等)は 前回の構成と同じになるよう構築する。 前回とはディストリビューションは異なるものの、設定ファイルの扱い等が少々異なる以外基本はほぼ同じであ る。
ネットワーク設定
ホスト側ブリッジインターフェースとIP Masqueradeは、先に設定したものと 全く同じになるよう設定を行う。当然ながらこの設定は再起動等で消えてしま うため、恒久化する必要があるのであれば/etc/network/interfaces等に記述 しておく。
miku@obs% sudo ip link add br0 type bridge miku@obs% sudo ip link set br0 up miku@obs% sudo ip address add 10.3.93.1/24 dev br0 miku@obs% sudo sysctl net.ipv4.ip_forward=1 miku@obs% sudo iptables -t nat -A POSTROUTING \ > -s 10.3.93.0/24 -o eth0 -j MASQUERADE
bootstrap
Arch Linuxのarm版は各armアーキテクチャ毎にrootfsのtarballが用意されて いるが、残念ながらOpenBlocks AX6用のものは用意されていない。そこで、最 も近いと思われるものを http://archlinuxarm.org/platforms/armv7 から選 び試す。ここでは、 http://archlinuxarm.org/os/ArchLinuxARM-cubox-latest.tar.gz を利用する。
まずはlxcパッケージを導入しcgroupをmountする。また、入手したtarballを 展開し、その中にchrootして作業できるようsysfsやproc等をmountする。
miku@obs% sudo aptitude install lxc miku@obs% sudo mount -t cgroup cgroup /cgroup miku@obs% sudo mkdir -p /var/lib/lxc/arch/rootfs miku@obs% sudo tar xpf ArchLinuxARM-cubox-latest.tar.gz \ > -C /var/lib/lxc/arch/rootfs/ miku@obs% sudo mount -t proc proc /var/lib/lxc/arch/rootfs/proc miku@obs% sudo mount -t sysfs sysfs /var/lib/lxc/arch/rootfs/sys miku@obs% sudo mount -t devtmpfs devtmpfs /var/lib/lxc/arch/rootfs/dev miku@obs% sudo mkdir /dev/pts miku@obs% sudo mount -t devpts devpts /var/lib/lxc/arch/rootfs/dev/pts
コンテナ内の設定
展開したシステムディレクトリにchrootし環境設定を行う。 ここでは、パッケージの更新とssh鍵の作成、LXC環境に必要ないデーモンの無 効化を行なう。
miku@obs% sudo chroot /var/lib/lxc/arch/rootfs /bin/bash root@obs(chroot)# echo nameserver 10.39.39.1 > /etc/resolv.conf root@obs(chroot)# pacman -Syu root@obs(chroot)# find /etc -name "*.pacnew" -exec sh \ > -c 'mv "{}" "`basename {} .pacnew`"' \; root@obs(chroot)# rm /etc/ssh/ssh_host_* root@obs(chroot)# ssh-keygen -A root@obs(chroot)# cd /etc/systemd/system/multi-user.target.wants root@obs(chroot)# rm {openntpd,netcfg\@ethernet-eth0}.service root@obs(chroot)# mkdir /dev/pts
最後にユーザアカウントを設定しておく。
root@obs(chroot)# passwd root@obs(chroot)# groupadd -g 3939 miku root@obs(chroot)# useradd -g miku -u 3939 -s /bin/bash -m miku root@obs(chroot)# passwd miku root@obs(chroot)# exit
コンテナ設定ファイルの作成
今回利用するコンテナ設定ファイルは、 前回Arch Linux上のLXCコンテナ内にArch Linux環境を構築した際に作成したもの と全く同じものを利用する。
コンテナの起動
早速起動してみたところ、カーネルバージョンが3.0.6、lxc-0.7.2-1のホスト 環境ではcgroupディレクトリのrenameに失敗し、コンテナが起動できない問題 が発生した。
miku@obs% uname -a Linux obsax3 3.0.6 #1 SMP Thu Mar 7 19:14:19 JST 2013 armv7l GNU/Linux miku@obs% sudo lxc-start -n arch -- /usr/lib/systemd/systemd lxc-start: No such file or directory - failed to rename cgroup /cgroup/7787->/cgroup/arch lxc-start: failed to spawn 'arch' lxc-start: No such file or directory - failed to remove cgroup '/cgroup/arch'
LXCは既に新しいバージョンが出ているため、最新版を野良ビルドし試す。 今回は、 LXC-0.9.0-RC1(http://lxc.sourceforge.net/download/lxc/lxc-0.9.0.rc1.tar.gz) で試した。このソースのビルドには、gccとmake等の他、libcap-devが必要な ようだ。 設定ファイルが置かれるディレクトリは、システムにインストールされている lxcパッケージと同じところを参照するよう、–with-config-pathオプション を設定しておく。
miku@obs% wget http://lxc.sourceforge.net/download/lxc/lxc-0.9.0.rc1.tar.gz miku@obs% tar xf lxc-0.9.0.rc1.tar.gz -C /home/miku/src miku@obs% cd /home/miku/src/lxc-0.9.0.rc1 miku@obs% ./configure --prefix=/usr/miku --with-config-path=/var/lib/lxc miku@obs% make && sudo make install
今回ビルドしたlxcコマンド群を利用し再度コンテナを起動。
miku@obs% sudo /usr/miku/bin/lxc-start -n arch -- /usr/lib/systemd/systemd <30>systemd[1]: Smack is not enabled in the kernel, not loading access rules.
カーネルオプションの不足による警告メッセージが現れているが、とりあえず ssh経由でコンテナ内にアクセスすることができた。
miku@obs$ ssh 10.3.93.11 miku@10.3.93.11's password: Last login: Tue Mar 19 15:41:07 2013 from 10.3.93.1 [miku@alarmcubox ~]$ telnet mikutter.hachune.net 80 Trying 115.177.182.220... Connected to mikutter.hachune.net. Escape character is '^]'.
次回は、この環境にてmikutterを動かしてみようと思う。
0 件のコメント:
コメントを投稿