前回,libvirt では chroot 環境の /sbin/init プログラムからシステム起動が出来ないっぽい事が分かったので,とりあえず単独のコマンドを実行してみようと.
- xml の定義ファイルを書く.とりあえず libvirt: LXC container driver の最初の例そのまま.
vm1
500000
exe
/bin/sh
1
destroy
restart
destroy
/usr/libexec/libvirt_lxc
- define する.
# virsh --connect lxc:/// define vm1.xml
- start する.
# virsh --connect lxc:/// start vm1
- 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 コマンド群を使って作成したコンテナと比べてみましょう.