自己流です。
本来のやりかたというのがどっかにあるならそちらを参照願います。
LXCの導入
LXC(LinuX Containers)というのは、chrootの高級品です。(あれ?)
---つまり、仮想マシンを使わない、Linux on Linuxのことです。
ホスト側はubuntu13.04を使用します。(きっぱり)
ゲスト側もubuntuを仮定します。
apt-get install lxc lxctl
lxc-create -t ubuntu -n raring
lxc-start -d -n raring
ゲスト側として、ubuntu13.04よりも古いubuntuを生成したいなら、下の2行を
lxc-create -t ubuntu -n oneiric -- -r oneiric
lxc-start -d -n oneiric
のようにします。
移行させたい元のLinuxと同じかそれに近いバージョンのテンプレートを使用してコンテナを作成するのが吉です。
たったのこれだけで、ゲストOSが走るのですが、これに既存のLinuxを上書きして環境移行
しようというものです。
既存Linuxのバックアップを取る。
/ (root)パーティション以下の /etcや/usrなどを個別にtarで固めます。
/devやら/procやら/mntは要りません。
ゲストOSに上書きする。
ゲストOSを一回止めます。
lxc-stop -n oneiric
既存Linuxからバックアップして持ってきたtarを開きます。
cd /var/lib/lxc/oneiric/rootfs/
tar xpfz /path/to/src/etc.tgz
tar xpfz /path/to/src/usr.tgz
・・・
fstabを空にしておきます。
vi /var/lib/lxc/oneiric/rootfs/etc/fstab
ゲストOSとして動かす場合に明らかに不要なハードウェアサービスがあれば、起動しないようにしておきます。
vi /var/lib/lxc/oneiric/rootfs/etc/init.d/ ...
or.
vi /var/lib/lxc/oneiric/rootfs/etc/init/ ...
IPアドレスを変更する場合
vi /var/lib/lxc/oneiric/rootfs/etc/network/interfaces
そしてゲストOSを起動。
lxc-start -d -n oneiric
コンソールで繋いで見る。
lxc-console -n oneiric
コンソール脱出はCtrl-A , Q です。
動かないとき
とりあえず、テンプレートで作ったほうの(動く)コンテナを保存しておいて、etcを差し替えたり
etc以下の違いをしらべて、やばそうなデーモンは動かさないようにします。
コンテナ側のvar/log/が丸見えで見えるので、そこを調べます。
lxc-startするときに -d オプションを付けずに起動させて、dmesgを見ればどこで止まるか分かります。(止まる直前までしかprintされませんけれど)
それから、コンテナを起動するときの環境変数LANGがja_JP.UTF-8でないとうまくいかないことがあります。
動かない原因の大半は、Plymouth にあるようです。
/etc/init/plymouth.conf あたりの start on と書かれた行をコメントアウトして、プリマスが起動しないようにしておきます。
プリマス以外にも、コンテナにはおおよそ不要なハードウェアドライバーの起動が実行されていたら、全部offにして構いません。
コンテナの弱点
ホストOSがubuntu12.04の場合、ゲストをshutdownさせると何をとち狂ったかホスト側の電源まで落ちます。
(2016-08追記:ホストU16.04 ゲストU14.04以上ならそんなことは起きなくなりましたが、古いゲストU10.10で試したら、落とせる場合があることがわかりました。原因は調べてませんが、もうU10.10を触ることはないです。)
あくまでもカーネルは1個しかないので、 iptablesを複数持つとか無理です。NICが複数枚あってゲストOSごとに
ルーティング変えたいとかも無理です。
それと、ゲスト側でdhcpdがうまく動きませんでした。
(2016-08追記:ホストU16.04で、ホスト側ではほぼ何も設定せず、LAN側NIC以外にはIPアドレスも与えない(iptablesを不要にするため)ようにして、ゲスト側にそれぞれiptablesやdhcpdを動かして運用できるようになりました。)
iptablesはホスト側とゲスト側の論理積で動くっぽいので、極力ホスト側では何もしないようにするのが吉です。
仮想ドライブイメージ作らないでいい点と、起動、終了が一瞬なのと、インスタンスをたくさん動かしても軽いという点でXenよりGoodです。
クローン作ったりも楽なので、Linuxお試し環境としていろいろ役立ちます。
(XenやKVM上で動いているレンタルLinux上に入れることだって出来ます。)