前回の続きです.毎度ですが,あまり大した内容ではありません.
Ubuntu Saucy だと Ubuntuサーバーガイドの仮想化のLXCページにあるように
https://help.ubuntu.com/13.10/serverguide/lxc.html#lxc-libvirt
- Configuration is stored in xml format
- There no tools to facilitate container creation
- By default there is no console on /dev/console
- There is no support (yet) for container reboot or full shutdown
こんな状況のようで,確かに virsh から shutdown コマンドを投入してもコンテナに命令は行っているようですが,コンテナは動き続けたままでした.(もちろんコンテナ内から shutdown は実行できます)
Plamo 5.1 (最新) だと libvirt は 1.1.4 と最新が入ったりしていますが,Ubuntu でも 1.1.1 とそれなりに新しいですし,何が違うのかわかりませんが,この辺りもちゃんと動きます.(コンテナ内の環境の影響かも?)
root@enterprise:~# virsh -c lxc:///
virsh にようこそ、仮想化対話式ターミナルです。
入力: 'help' コマンドのヘルプ
'quit' 終了
virsh # list --all
Id 名前 状態
----------------------------------------------------
- plamo02 シャットオフ
virsh # start plamo02
ドメイン plamo02 が起動されました
virsh # list
Id 名前 状態
----------------------------------------------------
9059 plamo02 実行中
virsh # shutdown plamo02
ドメイン plamo02 はシャットダウン中です
virsh # list --all
Id 名前 状態
----------------------------------------------------
- plamo02 シャットオフ
virsh # start plamo02
ドメイン plamo02 が起動されました
virsh # list --all
Id 名前 状態
----------------------------------------------------
9477 plamo02 実行中
virsh # reboot plamo02
ドメイン plamo02 を再起動しています
virsh # list --all
Id 名前 状態
----------------------------------------------------
9893 plamo02 実行中reboot はこれだけではわかりませんが,別に console で繋いでいると,ちゃんと reboot するところが観測できます.注意は virt-manager でコンソール画面に接続していると,virsh と接続する所が違うからか (virsh はシリアルポートに,virt-manager は tty に),reboot すると再度コンソールに接続できなくなります.
これだけだと大したことはないのですが,イマドキの libvirt は lxc-attach 的な事もできるようになっています.素直に実行すると
virsh # lxc-enter-namespace plamo02 -- /bin/uname -a libvirt: エラー : サポートされない引数: セキュリティモデル none に入れません
と怒られるので動かないのか? と思いきや,
virsh # lxc-enter-namespace --noseclabel plamo02 -- /bin/uname -a Linux plamo02 3.12.0-plamo64-karma #5 SMP PREEMPT Fri Nov 8 20:17:04 JST 2013 x86_64 GNU/Linux
"--noseclabel" オプションというものを付けると無事実行出来ました.このオプションの意味は... わかりません! これを付けないといけないのは virsh のバグとのことですが...
virsh # help lxc-enter-namespace
名前
lxc-enter-namespace - LXC ゲストの参加名前空間
形式
lxc-enter-namespace <domain> [--noseclabel] {[--cmd] <string>}...
詳細
任意の LXC ゲストの名前空間に参加します、自己リスクで使用します
オプション
[--domain] <string> ドメインの名前、ID または UUID
--noseclabel プロセスセキュリティラベルの変更不可
[--cmd] <string> 名前空間lxc-enter-namespace は Ubuntu でも動くような気がします (未確認.また試します.うっかり環境消してしもた ^^; セキュリティモデルに入れませんなエラーは確認したけど).
(2013-11-22 追記) Ubuntu 13.10 で lxc-enter-namespace 動きました.Plamo と同様に --noseclabel を付けます.これで virsh の shutdown コマンドで shutdown してくれなくても
lxc-enter-namespace --noseclabel ct01 -- /sbin/shutdown -h nowって出来ますね!