読者です 読者をやめる 読者になる 読者になる

TenForward

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

libvirt の lxc ドライバを久々に試す

Linux Virtualization lxc

本当に試しただけ.ほぼ自分用のメモです.

まあ,結論としては,まlibvirt でコンテナを起動する意味はあまりないなあ,というところです.

Ubuntu 13.04 on Ubuntu 13.04

Ubuntu の文書 だといくつか注意点が挙がってますね.主に Linux Containers との比較という意識で.

  • 設定ファイルが libvirt のものになる.当たり前.lxc のやつは使えません
  • コンテナを作成するツールはないから自分で作ってね
  • デフォルトではコンテナに /dev/console がない
  • コンテナのリブートと完全なシャットダウンはまだサポートされていない (完全なシャットダウンってなんだ?)

それでもさすがに Ubuntu.やはりいちばんお気軽に試せます.

  1. 作成は lxc-create を使えば OK です.
    # lxc-start -n ct01 -t ubuntu
  2. 私は軟弱者なので virt-manager を入れて,コンテナの root として /var/lib/lxc/ct01/rootfs を指定して設定ファイルを作成しています.

これで普通に起動します.

# virsh -c lxc:///
virsh にようこそ、仮想化対話式ターミナルです。

入力: 'help' コマンドのヘルプ
      'quit' 終了

virsh # start test01
ドメイン test01 が起動されました

virsh # console test01

とすると

Ubuntu 13.04 test01 tty1

test01 login: ubuntu
Password: 
Last login: Thu Jun 27 10:30:28 UTC 2013 on pts/0
Welcome to Ubuntu 13.04 (GNU/Linux 3.8.0-21-generic x86_64)

 * Documentation:  https://help.ubuntu.com/
ubuntu@test01:~$ uname -a
Linux test01 3.8.0-21-generic #32-Ubuntu SMP Tue May 14 22:16:46 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
ubuntu@test01:~$ $ sudo shutdown -h now
sudo: 端末 (tty) が存在せず、パスワードを尋ねる (askpass) プログラムが指定されていません

こんな感じで ^^;

問題点
  • 上記の通り sudo できません.
  • /etc/init には tty1 〜 4 まで定義がありますが 2 〜 4 は存在しないので syslog にエラーが出続けます.

解決方法はあるのかもしれませんが...

Plamo 5.1 on Plamo 5.1

この環境でコンテナ使ってる人はきっと片手で数えられるだろう Plamo on Plamo です.こちらも私が作成している lxc パッケージと libvirt パッケージを使います.

  1. 作成は lxc-create で
    # lxc-create -n ct01 -t plamo
    作成後に config ファイルででネットワークを有効にしたり微調整をします.
  2. Ubuntu と同様に virt-manager を起動してコンテナを新規作成します.

以上でなんの問題もなくコンテナは起動します.syslog などを見て,dnsmasq で与えられたアドレスに対して ssh で接続したら接続可能です (コンテナの Plamo ツリー内の hosts.allow/deny の調整は必要).

問題点

しかし,virt-manager で開いたコンソール (っぽいもの) や,virsh console で繋いだところからログインができません.これは少しコンテナ内で調整が必要です.

  • libvirt は /dev/console がありませんので,lxc-plamo が作成する inittab の console の行を削除する必要があります.同じく tty2, tty3, tty4 もないので,この行も削除です.
  • lxc-plamo テンプレートは root ユーザのパスワードを設定するだけなので root でログインが必要です.しかし,この時の libvirt のコンソールのデバイスは /dev/pts/0 などになりますので /etc/securetty に追記する必要があります.(もしくは予め chroot useradd しておくか)
  • etc/pam.d/login で "session required pam_loginuid.so" の行をコメントアウトする必要があります.そもそも Plamo ってこの行要らないんじゃ? と思わなくもないですが,コンテナの時はこれが有効になっているとログインできません.

この 2 つで問題なく virt-manager や virsh console で開いたコンソールからログイン可能です.

# virsh -c lxc:///
virsh にようこそ、仮想化対話式ターミナルです。

入力: 'help' コマンドのヘルプ
      'quit' 終了

virsh # start test02
ドメイン test02 が起動されました

virsh # console test02

と実行すると

Welcome to Linux 3.9.3-plamo64-karma.

test02 login: root
Password: 
Last login: Thu Jun 27 19:20:26 JST 2013 on pts/0
root@test02:~# uname -a
Linux test02 3.9.3-plamo64-karma #2 SMP PREEMPT Thu May 30 21:27:25 JST 2013 x86_64 GNU/Linux
# shutdown -h now

Broadcast message from root@test02 (pts/0) (Thu Jun 27 19:23:38 2013):

The system is going down for system halt NOW!
INIT: Switching to runlevel: 0
INIT: Sending processes the TERM signal
  : (略)

とこんな感じになります.