Debian WheezyにLXCコンテナを設定する。
しばらく前にLXCのパッケージだけはインストールしていたものの、実際のコンテナ作成まで到達してなかった。
ぼちぼちお試ししてみようかなと、LXCコンテナの設定をしてみました。
apt-get install lxc
ちなみに環境はこんな感じです。
root@localhost:~# cat /proc/version Linux version 3.2.0-4-amd64 (debian-kernel@lists.debian.org) (gcc version 4.6.3 (Debian 4.6.3-14) ) #1 SMP Debian 3.2.54-2 root@localhost:/proc# apt-cache show lxc Package: lxc Version: 0.8.0~rc1-8+deb7u2 Architecture: amd64 Depends: debconf (>= 0.5) | debconf-2.0, libc6 (>= 2.8), libcap2 (>= 2.10)
以降の手順はほぼこちらからの丸パクリです。
最後に違いが合った点をまとめてます。
概要
Debian Wheezy で LXC 環境を作る - ようへいの日々精進XP
cookbook のテストとかでお手軽に試せる環境が欲しい
現在の環境では Virtual Box はちょっと重いので LXC でやってみる
余裕があれば Docker までやってみたい
ただし、結果として VirtualBox よりも手間は掛かってしまった..orz
root@localhost:~# vi /etc/fstab 以下の行を追加する。 cgroup /sys/fs/cgroup cgroup defaults 0 0 mount /sys/fs/cgroup
/etc/network/interface を以下の通り変更
auto lxcbr0 iface lxcbr0 inet static address 192.168.1.1 netmask 255.255.255.0 post-up /usr/sbin/lxcbr0-up
/usr/bin/lxcbr0-up を以下の通り作成
#!/bin/sh braddr=192.168.1.1 brrange=192.168.1.2,192.168.1.254 # iptables -A FORWARD -i lxcbr0 -s ${braddr}/24 -m conntrack --ctstate NEW -j ACCEPT iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -A POSTROUTING -t nat -j MASQUERADE # dnsmasq --bind-interfaces --conf-file= --listen-address $braddr --except-interface lo --dhcp-range $brrange --dhcp-lease-max=253 --dhcp-no-override
作成したスクリプトの権限変更
sudo chmod 755 /usr/bin/lxcbr0-up
ここではたと気づく。このdnsmasqってコマンド、入ってるのか??
whichしてみると入ってないので、改めてapt-get installする。
root@localhost:~# apt-cache show dnsmasq Package: dnsmasq Version: 2.62-3+deb7u1 Depends: netbase, adduser, dnsmasq-base (>= 2.62-3+deb7u1) Suggests: resolvconf Conflicts: resolvconf (<< 1.15) root@localhost:~# apt-get install dnsmasq パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 以下の特別パッケージがインストールされます: dnsmasq-base libnetfilter-conntrack3 提案パッケージ: resolvconf 以下のパッケージが新たにインストールされます: dnsmasq dnsmasq-base libnetfilter-conntrack3 アップグレード: 0 個、新規インストール: 3 個、削除: 0 個、保留: 6 個。 425 kB のアーカイブを取得する必要があります。 この操作後に追加で 1,054 kB のディスク容量が消費されます。 続行しますか [Y/n]? y (中略) [ ok ] Starting DNS forwarder and DHCP server: dnsmasq.
IPフォワーディングが出来るように設定する
sudo su - echo 1 > /proc/sys/net/ipv4/ip_forward echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
lxc-create するときのネットワークテンプレート、/etc/lxc/interface.conf を作成する。
lxc.network.flags = up lxc.network.type = veth lxc.network.link = lxcbr0
ようやく、コンテの作成コマンドを発行。
root@localhost:~# lxc-create -t debian -n DevHub -f /etc/lxc/interface.conf debootstrap は /usr/sbin/debootstrap です Checking cache download in /var/cache/lxc/debian/rootfs-wheezy-amd64 ... Copying rootfs to /var/lib/lxc/DevHub/rootfs...Generating locales (this might take a while)... ja_JP.UTF-8... done Generation complete. update-rc.d: using dependency based boot sequencing update-rc.d: using dependency based boot sequencing update-rc.d: using dependency based boot sequencing update-rc.d: using dependency based boot sequencing Current default time zone: 'Asia/Tokyo' Local time is now: Fri Feb 21 14:01:51 JST 2014. Universal Time is now: Fri Feb 21 05:01:51 UTC 2014. Root password is 'root', please change ! 'debian' template installed 'DevHub' created
以下のコマンドでLXCコンテナスタート。
root@localhost:~# lxc-start -n DevHub -d
無事起動したご様子。
起動しているかどうかはlxc-infoコマンドで確認できます。
root@localhost:~# lxc-info -n DevHub state: RUNNING pid: 24719
とりあえず、ログインできるかどうかチェック。
lxc-console -n DevHub Debian GNU/Linux 7 DevHub tty1 DevHub login: root パスワード: Linux DevHub 3.2.0-4-amd64 #1 SMP Debian 3.2.54-2 x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. root@DevHub:~#
とりあえず使えるみたいですね。
ただ、いったんlxcbr0(仮想NWへのブリッジ)のIFを落として再起動しても、起動すると何やら怪しげなメッセージが。
root@localhost:~# ifconfig lxcbr0 down root@localhost:~# ifconfig lxcbr0 up root@localhost:~# sudo service networking restart [warn] Running /etc/init.d/networking restart is deprecated because it may not re-enable some interfaces ... (warning). [....] Reconfiguring network interfaces...RTNETLINK answers: File exists Failed to bring up lxcbr0. done.
エラーは来るものの、ホストOS側からコンテナ側にPingを打ってもちゃんと以下の通りかえってきます。
root@localhost:~# ping 192.168.1.2 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data. 64 bytes from 192.168.1.2: icmp_req=1 ttl=64 time=0.101 ms 64 bytes from 192.168.1.2: icmp_req=2 ttl=64 time=0.034 ms 64 bytes from 192.168.1.2: icmp_req=3 ttl=64 time=0.033 ms 64 bytes from 192.168.1.2: icmp_req=4 ttl=64 time=0.035 ms
他にいくつか引用元のサイトと違いがあったのは、
- lxc-createコマンド発行時に、ウィザード形式での画面が出ない
- 普通にコンテナを作成しただけでは正常に起動しないとあったが、ふつうに起動した。そのため、/var/lib/lxc/コンテナ名/configへのlxc.devttydirの追加や、/var/lib/lxc/コンテナ名/rootfs/etc/securetty の修正は行っていない。
- /var/lib/lxc/コンテナ名/rootfs/etc/network/interfaceは最初から設定されていたため、この手順も不要だった
まあ、引用元が書かれてから半年くらい経ってますからね。
LXC側やDebian側に何らかの変更が加わったのかもしれず。