Humanity

Edit the world by your favorite way

lxc-toolsでOSブート時にLXCを起動

理由: /etc/init.d/lxc-autostart 作るのがめんどくさい

libvirtd?なにそれおいしいの?
rc.localでいろいろやりすぎるとアレだけど、これくらいならいいじゃない!
rc.local、cronと同じく環境変数は用意されてなかったりするので注意。
といいつつ特にハマってないので実例はないけど。

libvirtd使ってLinuxコンテナ自動起動しようと思ったけどめんどくさかったので/etc/rc.localから無理矢理起動するようにした話 - Humanity

とかいう記事を書きましたが、実は書いた直後にlxc-toolsというLXCの便利ツール集なリポジトリを見つけ、
そこに「init」なるファイルがありREADMEに「initは/etc/init.d/lxcにコピーして使えるinit.dスクリプトだよ」とか書いてあるじゃないですか!
さらに中身を見てみるとふと「autostart」なる文字列が目に飛び込み、「これはぜひ試さない訳にはいかない、明日絶対やる」と言って寝たのが5日前、という訳です。
なので約束通りブログ書きます。あ?ごめんなさい。


スクリプトが/var/lib/lxc/以下にコンテナが置いてある前提なので
もしかしたらDebian-specificかもしれない、ということでこの記事にはDebianタグをつけてあります。
いや他のディストリビューションでどこに置いてあったか忘れましたがたしか違ったような気もしたので。忘れましたが。

ダウンロード

まずダウンロードします。
gitないよって人は普通にwgettarballとかzip持ってきても構いません。*1


gitがあるなら

$ git clone https://github.com/phbaer/lxc-tools.git

gitがないなら

$ wget https://github.com/phbaer/lxc-tools/tarball/master
$ tar xzf master

とか、もっとクールにやるならcurlとかzcatとかをパイプでつなげて1行で解凍するんでしょう。
ここで私は時間を10分無駄にしました。素直にブラウザに表示されるダウンロードボタンを押しましょう。

インストール

$ cd lxc-tools
$ sudo cp init /etc/init.d/lxc
$ sudo sysv-rc-conf lxc on

僕はここで/etc/rc.localに先日(5日前)書いた設定をアンコメントしておきました。

/var/lib/lxc//autostartに「1」を書き込む

内容が「1」であるautostartというファイルをコンテナのディレクトリに作ります。
/etc/init.d/lxcはこれを見てブート時にコンテナを起動するか決めます。

$ echo 1 | sudo tee /var/lib/lxc/hoge/autostart
$ echo 1 | sudo tee /var/lib/lxc/fuga/autostart

あるあるな事象として「sudo echo 1 >/var/lib/lxc/hoge/autostart」とかやるとリダイレクトの権限はsudoで変えられないのでpermission deniedとなります。気を付けましょう。

sudo reboot

再起動したらsudo lxc-lsして設定したコンテナがちゃんと起動されてるか確認します。
確認したらコメントアウトした/etc/rc.localのコードは消してしまいましょう。>僕

*1:なんかGitHubにあるからgitじゃないとダウンロードできないって考えてる人多い気がする、SourceForgeだと普通にダウンロードするのに