TenForward

技術ブログ。はてなダイアリーから移転しました

libvirt の lxc ドライバを Plamo Linux 5.1 で試す

前回の続きです.毎度ですが,あまり大した内容ではありません.

Ubuntu Saucy だと Ubuntuサーバーガイドの仮想化のLXCページにあるように

  1. Configuration is stored in xml format
  2. There no tools to facilitate container creation
  3. By default there is no console on /dev/console
  4. There is no support (yet) for container reboot or full shutdown
https://help.ubuntu.com/13.10/serverguide/lxc.html#lxc-libvirt

こんな状況のようで,確かに 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
って出来ますね!