TenForward

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

libvirt 経由で lxc を触ろうと思いハマる (3)

前回libvirt では chroot 環境の /sbin/init プログラムからシステム起動が出来ないっぽい事が分かったので,とりあえず単独のコマンドを実行してみようと.

  1. xml の定義ファイルを書く.とりあえず libvirt: LXC container driver の最初の例そのまま.

    vm1
    500000

    exe
    /bin/sh

    1

    destroy
    restart
    destroy

    /usr/libexec/libvirt_lxc





  2. define する.
    # virsh --connect lxc:/// define vm1.xml
  3. start する.
    # virsh --connect lxc:/// start vm1
  4. console で接続してみる.
    # virsh --connect lxc:/// console vm1
    Connected to domain vm1
    Escape character is ^]

    root@plamo001:/proc#

無事接続出来ました (Ubuntu 10.10 でも試しましたが同じ動きでした).(って libvirt: LXC container driver にあるのそのままやん...)

接続した所で

# ifconfig
eth0      Link encap:Ethernet  HWaddr 52:54:00:45:e0:10  
          inet6 addr: fe80::5054:ff:fe45:e010/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1022 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:68084 (68.0 KB)  TX bytes:552 (552.0 B)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0   1900   508 pts/2    Ss   14:31   0:00 /bin/sh
root        10  0.0  0.0   2512   968 pts/2    R+   15:04   0:00 ps aux

eth0 の MAC Address も親環境と違いますし,プロセスも二つだけ.ちゃんと隔離された環境で動いているようです.ディレクトリツリーは共有しているという事ですね.

とりあえず,適当なスクリプトを実行するようにすれば,親環境と独立したディレクトリツリーを見るように起動させることは出来そうです.コンテナ専用の chroot 環境になりそうで,ディストリビューションそのままというわけには行かなさそうですけど.

少し見てみましたが,完全なコンテナかと言うと微妙.

  • /proc も一応隔離されてるっぽい.プロセスはちゃんと存在するものだけが /proc 以下にも存在する.
  • cpuinfo, meminfo を見ると親環境のものがそのまま表示されている.親が CPUx2 で,libvirt の定義ファイルで vcpu を 1 としても 2 つ表示されているし,メモリも定義ファイルと違って親のメモリがそのまま表示されている.実際の動きは分からないけど...

次回は lxc コマンド群を使って作成したコンテナと比べてみましょう.