投稿

5月, 2014の投稿を表示しています

lxcコンテナの外部からコマンドを実行する

イメージ
現在、Wineのビルドスクリプトを書いています。
Wine WOW64版のビルドには、(他の方法もありますが)lxcコンテナを使用する必要があります 。これをbashスクリプトに落としこむには、lxcコンテナをbashスクリプトで外部からコマンド操作しなければなりません。

つまり、bashスクリプトからlxcを呼び出し、lxcコンテナ内部でコマンド実行する必要があるのですが、この方法を見つけるのに少し手間取ってしまいました。
(検索キーワードに『lxc 自動実行 コマンド スクリプト』などを使うと、autostartの方法がヒットして目的の情報に辿りつけなかったため。)



lxcは、主にデプロイや実行をテストする用途に使われていると思っていたため、
『クリーンな環境を立ち上げて、外からコンテナ内でテストスクリプトを走らせる』
という使い方はすぐに見つかると思っていたのですが。
lxcを紹介しているサイトは多くの場合、初心者向けにlxcコンテナをターミナル上で立ち上げて終わりか、上級者が最初から設定ファイルを書くことを前提にしているかのどちらかでした。


設定ファイルが無くても、手動ならばlxcコンテナのターミナルからコマンド実行ができるのですから、これをコマンドで実現する方法は存在するはずです。
そしてlxcのコマンドを探しまわり実験を行った結果、以下のことがわかりました。

lxc-start では lxc-execute のコマンド指定に相当するオプションが使用できません。
lxc-execute はlxc-startよりも制限が多く、設定ファイルを用意しないと実用できません。

lxc-attach コマンドが、外部からコンテナ内でコマンド実行する方法として適している。


lxc-attachの詳細な解説はこちらで見ることができます。
http://manpages.ubuntu.com/manpages/trusty/ja/man1/lxc-attach.1.html



lxc-attach コマンドの使い方
lxcをインストールします。
sudo apt-get install lxc -y
lxcコンテナを作成します。
(今回は例としてWineビルドに使用する32bitコンテナを作成しています)
sudo lxc-create -t ubuntu -n my32bit…