libvirt の lxc ドライバを Plamo Linux 5.1 で試す
前回の続きです.毎度ですが,あまり大した内容ではありません.
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って出来ますね!