Raspberry Piでコンテナ仮想化(Raspbian on Raspbian編)
前回はRaspberry PiにLXCをインストールして、コンテナにDebianを導入しましたが、よりRaspberry PiのCPUを活用できるRaspbianをコンテナにしてみます。
ここでは、前回の手順との差分のみを書いていきます。
Raspbian WheezyにLXCを導入してみた。 - moguno's diary
LXCコンテナの作成
# lxc-create -n ranka -t debian
選択肢は以下で乗り切りましょう。
ミラーサーバをRaspbian公式に切り替えるのがミソです。
- Preseed file anyone? →デフォルト
- Distribution →Debian GNU/Linux 7.0 "wheezy"
- Archives →オプションを全てOFF
- Mirror →http://mirrordirector.raspbian.org/raspbian/
- Archive Areas →デフォルト
- Packages →デフォルト
- Root password →お好きに
後は前回同様、configとinittabを編集すればOKです。
![Interface (インターフェース) 2012年 12月号 [雑誌] Interface (インターフェース) 2012年 12月号 [雑誌]](http://ecx.images-amazon.com/images/I/51k6vEt3DJL._SL160_.jpg)
Interface (インターフェース) 2012年 12月号 [雑誌]
- 出版社/メーカー: CQ出版
- 発売日: 2012/10/25
- メディア: 雑誌
- 購入: 1人 クリック: 1回
- この商品を含むブログ (2件) を見る
Raspbian WheezyにLXCを導入してみた。
Raspberry Piにアタシが愛して止まないお手軽仮想化技術であるところのLXCを導入します。
ワンボード系(非Intel)なLinux箱に於けるLXCのメリットは以下。
- (然るべきコンフィグの)Linuxが動けばどんなCPUでも動いちゃう。
- CPUエミュレーション不要なので、ppcの266MHzとかでもそれなりの速度で動いちゃう。
- 仮想マシンメインで運用すればホストの環境が汚れないので、面倒な再インストールの機会が劇的に減っちゃう。
このLXC、普通のDebianならサクッと動くんですがRaspbianって結構色々特殊なので、そこそこ作業が必要です。
例えば、LXCの動作には以下のカーネルオプションが必要ですが、Raspbianのカーネルは下2つが無効です。
- CONFIG_NAMESPACES
- CONFIG_CGROUPS
- CONFIG_DEVPTS_MULTIPLE_INSTANCES
- CONFIG_VETH
カーネルの再構築法がいまいちよく分かんなかったので、サードパーティのてんこ盛りカーネルを導入します。
ベースとして、Raspbian Wheezy(12/10/28版 armhf)をインストールしといて下さい。
ファームウェアのアップデート
何がアップデートされるのかよく分からんですが、カーネル導入のために必要とのこと。
# wget https://raw.github.com/Hexxeh/rpi-update/master/rpi-update -O /usr/local/bin/rpi-update # chmod 755 /usr/local/bin/rpi-update # apt-get install git-core # /usr/local/bin/rpi-update
カーネルパッケージの展開
armhfなRaspbianですが、armel版カーネルを無理くりインストールします。
# wget http://apt.bootc.net/debian/pool/main/l/linux-source-3.2.23-rpi1+/linux-image-3.2.23-rpi1+_1_armel.deb # dpkg -i --force-architecture linux-image-3.2.23-rpi1+_1_armel.deb # cd /boot/ # cp -p kernel.img kernel.img.orig # cp -p vmlinuz-3.2.23-rpi1+ kernel.img
リブートして起動すればOK
cgroupのマウント
どこでもいいんでcgroupをマウントします。
# mkdir /cgroup # mount -t cgroup cgroup /cgroup
リブートしても動くように、fstabにも登録して置いて下さい。
cgroup /cgroup cgroup defaults 0 0
必要なパッケージのインストール
質問には全てデフォルトで。
# apt-get install lxc bridge-utils
LXCコンテナの作成
どうもRaspbianが好きになれないので、ここではDebian Squeezeのarmel版を導入します。
(Raspbianの導入は気が向いたら書きます。)
# _ARCHITECTURE=armel lxc-create -n nana-chan -t debian
選択肢は以下でクリアしましょう。
- Preseed file anyone? →デフォルト
- Distribution →Debian GNU/Linux 6.0 "squeeze"
- Archives →デフォルト
- Mirror →デフォルト
- Archive Areas →デフォルト
- Packages →デフォルト
- Root password →お好きに
結構な時間がかかります。
最後のほうでchpasswdとかdebconfのエラーが出ますが、問題無さそうです。
ブリッジの設定
コンテナの仮想NICを受け止めるブリッジを作っときます。
# brctl addbr br0
これもリブートで消えるので、rc.localとかinterfacesとかに組み込むのがいいと思います。
参考:/etc/interfacesでブリッジをセットアップする - もぐてっく
inittabの修正
consoleでgettyを動かしてlxc-startした時にログインプロンプトが出るようにする。
tty1〜6は存在しないのでgettyの起動をやめる。
# vi /var/lib/lxc/nana-chan/config
# so if you want to add more getty's go ahead but skip tty7 if you run X. # #1:2345:respawn:/sbin/getty 38400 tty1 ←コメントアウト #2:23:respawn:/sbin/getty 38400 tty2 ←コメントアウト #3:23:respawn:/sbin/getty 38400 tty3 ←コメントアウト #4:23:respawn:/sbin/getty 38400 tty4 ←コメントアウト #5:23:respawn:/sbin/getty 38400 tty5 ←コメントアウト #6:23:respawn:/sbin/getty 38400 tty6 ←コメントアウト 1:2345:respawn:/sbin/getty 38400 console # ←追加 # Example how to put a getty on a serial line (for a terminal)
LXCコンテナの設定変更
LXCコンテナの設定を変更して、仮想NICを追加します。
(これは通常のDebianも同じ)
# vi /var/lib/lxc/nana-chan/config
# /var/lib/lxc/nana-chan/config lxc.network.type=veth # ←追加 lxc.network.link=br0 # ←追加 lxc.network.flags=up # ←追加 ## Container
LXCコンテナの起動
いよいよ起動してみます。
# lxc-start -n nana-chan
起動中にちょろちょろエラーが出ますが、コンテナにアクセスを許可していないデバイスに触りに行っているだけなので無視して構いません。
気になるなら起動スクリプトをhogeればいいと思うよ。
Raspbian Wheezyにzramを導入してみた。
これまでのあらすじ
約束の6week待ったけどRaspberry Pi全然こねぇぞゴルァ!
↓
ようやく発送通知メールがキターーーーーーー!!!
↓
「Raspberry Piにメモリ倍増512MBモデル登場。お値段据え置き。」ですとっ!!!
↓
ようこそ、Raspberry Pi 256MBモデルorz....
まぁ、鯖用途に使うなら必要十分なんですが、HDMIを活用してマルチメディアな用途に使うには少々不安。
幸い、CPUは700MHzと余裕があるので、zramを導入することにしました。
zramって言うのはメインメモリの一部をブロックデバイスにできるカーネルモジュールです。
書き込んだ内容をリアルタイムに圧縮・伸長させることで、実容量よりもちょっと多くのデータを保存できるってのが、通常のRAMディスクとの違いです。
この性質を利用してzramをスワップに設定してやれば、メインメモリの見かけ上の容量を増やすことが出来るという寸法です。
てか、一昔前はramzswapという名前で上記の用途に特化したモジュールでした。
(そして登場当時はcompacacheって名前でした。stagingに居るせいか、結構自由に名前とか仕様が変わってますな。)
設定はとっても簡単です。お試しあれ。
/etc/rc.local
# Print the IP address _IP=$(hostname -I) || true if [ "$_IP" ]; then printf "My IP address is %s\n" "$_IP" fi # enable zram modprobe zram echo $((128 * 1024 * 1024)) > /sys/block/zram0/disksize mkswap /dev/zram0 swapon -p 1 /dev/zram0 exit 0