TenForward

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

Ubuntu 8.04 LTS で OpenVZ

こちら (OpenVZ - Community Help Wiki) の情報の通りでインストール出来ます.

インストール

まず,OpenVZ カーネルと vzctl (操作コマンド群) をインストールし,標準カーネルを削除します.

$ sudo apt-get install linux-openvz vzctl
$ sudo apt-get remove --purge --auto-remove linux-image-.*server

次に sysctl.conf の編集.vm.mmap_min_addr は,参考ページには書かれてなかったけど,sysctl -p やったら,そんなキーはないと言われてコメントアウトしたもの.

$ diff /etc/sysctl.conf.dist /etc/sysctl.conf
21c21
< vm.mmap_min_addr = 65536
    • -
> #vm.mmap_min_addr = 65536 74a75,85 > > # append for openvz > net.ipv4.conf.default.forwarding=1 > net.ipv4.conf.default.proxy_arp=1 > net.ipv4.conf.eth0.proxy_arp=1 > net.ipv4.ip_forward=1 > > kernel.sysrq=1 > > net.ipv4.conf.default.send_redirects=1 > net.ipv4.conf.all.send_redirects=0
$ sudo sysctl -p /etc/sysctl.conf

OpenVZ 関係のファイルが /var/lib/vz 以下に入りますが,vzctl パッケージで入るツールの中には /vz 以下を参照しているやつもある(?)ので,リンクしておきます.

$ sudo ln -s /var/lib/vz /vz

テンプレート作成

http://openvz.org/download/template/cache/ からダウンロードすれば,テンプレートキャッシュは一発ですが,自作してみます.

chroot 環境作成用のテンポラリディレクトリを作成して debbootstrap コマンドを実行します.

$ mkdir hardy-chroot
$ sudo debootstrap --arch i386 hardy hardy-chroot http://ftp.riken.jp/pub/Linux/ubuntu/

これで作られた chroot 環境にテンプレートに必要な処理をやっていきます.コンテナ(CT)作成に必要なテンプレートキャッシュを作ります.

まずは,この環境を id: 777 の CT とするために,/vz/private/777 以下に mv して,CT の設定を適用します.vps.basic は /etc/vz/conf/ve-vps.basic.conf-sample が適用されます.ここに ve-vps.hoge.conf-sample という名前でリソース情報などを書いたファイルを作れば vps.hoge という名前で指定可能です.

$ sudo mv hardy-chroot /var/private/777
$ sudo vzctl set 777 --applyconfig vps.basic --save

これで 777 番の CT 用の設定ファイルが /etc/vz/conf/777.conf に出来ているはず.

$ echo "OSTEMPLATE=ubuntu-8.04" | sudo tee -a /etc/vz/conf/777.conf >/dev/null

起動するために IP アドレスとかリゾルバの設定を仕込みます (アドレスは例ね).udev が起動するようになっていると,CT が起動してこないみたいなので,ここだけは CT 稼働前に削除.

$ sudo vzctl set 777 --ipadd 192.168.0.10 --save
$ sudo vzctl set 777 --nameserver 192.168.0.2 --save
$ sudo rm /vz/private/777/etc/rcS.d/S10udev /vz/private/777/etc/rc2.d/S11klogd

これで start 出来ます.

$ sudo vzctl start 777
$ sudo vzlist -a
      VEID      NPROC STATUS  IP_ADDR         HOSTNAME                        
       777          8 running 192.168.0.10    -                               

後は実際に動いている CT 上で作業します.不要なパッケージの削除.

$ sudo vzctl enter 777
# apt-get remove --purge busybox-initramfs console-setup dmidecode eject \
ethtool initramfs-tools klibc-utils laptop-detect libiw29 libklibc \
libvolume-id0 mii-diag module-init-tools ntpdate pciutils pcmciautils ubuntu-minimal \
udev usbutils wireless-tools wpasupplicant xkb-data tasksel tasksel-data
# apt-get remove --purge --auto-remove dhcp3-client dhcp3-common
# rm -rf /lib/udev
# initctl stop tty1
# initctl stop tty2
# initctl stop tty3
# initctl stop tty4
# initctl stop tty5
# initctl stop tty6
# rm /etc/event.d/tty*

これは参考ページに書いてあるけど必須じゃないと思う.まあ Ubuntu だから root ログインは無効ってのはソレらしいけど.modprobe 作ってるのは IPv6 使うとき必要みたい.

(CT上で)
# usermod -p '!' root
# ln -s /bin/true /sbin/modprobe

CT上の /etc/apt/sources.list を作成します.こんな内容.

# Binary
deb http://jp.archive.ubuntu.com/ubuntu/ hardy main restricted universe multiverse
deb http://jp.archive.ubuntu.com/ubuntu/ hardy-updates main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu hardy-security main restricted universe multiverse

# Binary Canonical
# deb http://archive.canonical.com/ubuntu hardy partner

# Binary backport
# deb http://jp.archive.ubuntu.com/ubuntu/ hardy-backports main restricted universe multiverse

# Source
# deb-src http://jp.archive.ubuntu.com/ubuntu/ hardy main restricted universe multiverse
# deb-src http://jp.archive.ubuntu.com/ubuntu/ hardy-updates main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu hardy-security main restricted universe multiverse

# Source backport
# deb-src http://jp.archive.ubuntu.com/ubuntu/ hardy-backports main restricted universe multiverse

# Source Canonical
# deb-src http://archive.canonical.com/ubuntu hardy partner

で,CT 内を最新に.

(CT上で)
# apt-get update
# apt-get upgrade

あとは,インストールされてないけど,必要なパッケージを入れます.例えば

# apt-get install ssh

df の出力なんかをちゃんとするために

(CT上で)
# rm /etc/mtab
# ln -s /proc/mounts /etc/mtab
# update-rc.d -f mtab.sh remove

そして諸々のデフォルトを...

(CT上で)
# echo "localhost" > /etc/hostname
# echo "127.0.0.1 localhost.localdomain localhost" > /etc/hosts
# cd /dev ; /sbin/MAKEDEV ptyp

あとはテンプレートとしては設定されている必要のない情報を消します.例えばリゾルバなんかは,CT 毎に設定ちがいますから.あと,不要なキャッシュ,ログの削除.

(CT上で)
# > /etc/resolv.conf
# apt-get clean
# > /var/log/messages; > /var/log/auth.log; > /var/log/kern.log; > /var/log/bootstrap.log; > /var/log/dpkg.log; > /var/log/syslog; > /var/log/daemon.log; > /var/log/apt/term.log; rm -f /var/log/*.0 /var/log/*.1 /var/log/*.gz
# exit

これで CT 上の作業終わり.IPアドレス削除して,停止.

$ sudo vzctl set 777 --ipdel all --save
$ sudo vzctl stop 777

最後に母艦側でテンプレートキャッシュを作ります.

$ cd /vz/private/777
$ sudo tar zcvf tar zcvf /vz/template/cache/ubuntu-8.04-i386-minimal.tar.gz .

後始末 (母艦)

$ sudo vzctl destroy 777
$ sudo rm -f /etc/vz/conf/777.conf.destroyed

あとはこんな感じで CT 作れるはず.

$ sudo vzctl create 123456 --ostemplate ubuntu-8.04-i386-minimal