2008/02/23: OpenVZ構築メモ
一つのカーネルで複数のLinuxを動かすOpenVZを試してみる。
Xenより構造的に軽量で、VPSサーバとしてよく使われているらしい。
VMware Fusionに入れたCentOS4にOpenVZを構築してみた
デフォルトではopenvz-kernel-rhel5がenabled=1になっているが、
今回はcentos4を使いたいので、こちらをenabled=0にして
openvz-kernel-rhel4をenabled=1にする。
network-scriptではどうもうまくいかないので、/etc/init.d/にあるファイルを参考にしてinitスクリプトを書くことにした。
運がよければbr0がdhcpで取得できる。
通信できたらこれでおk
Xenより構造的に軽量で、VPSサーバとしてよく使われているらしい。
VMware Fusionに入れたCentOS4にOpenVZを構築してみた
参考になるURL
OpenVZ
第3回 処理性能の高さが際立つOpenVZ
OpenVZの実行ガイド
OpenVZの小技
OpenVZのネットワーク(3) veth + vlan + bridge – z手帖
インストール
リポジトリの追加
su -
cd /etc/yum.repos.d
wget http://download.openvz.org/openvz.repo
vi openvz.repo
cd /etc/yum.repos.d
wget http://download.openvz.org/openvz.repo
vi openvz.repo
デフォルトではopenvz-kernel-rhel5がenabled=1になっているが、
今回はcentos4を使いたいので、こちらをenabled=0にして
openvz-kernel-rhel4をenabled=1にする。
カーネルのインストール
yum install ovzkernel
IPフォワードなどの設定
cp /etc/sysctl.conf /etc/sysctl.conf.orig
※ 次のようなものはcatから最後のEOSまでコピペすると楽
cat > /etc/sysctl.conf << 'EOS'
kernel.sysrq = 1
kernel.core_uses_pid = 1
net.ipv4.ip_forward = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.eth0.forwarding = 1
net.ipv4.conf.eth0.proxy_arp = 1
EOS
kernel.sysrq = 1
kernel.core_uses_pid = 1
net.ipv4.ip_forward = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.eth0.forwarding = 1
net.ipv4.conf.eth0.proxy_arp = 1
EOS
リブート
vi /etc/grub.conf
default=1をdefault=0に書き換えして再起動
※2.6.9-023stab044.11を起動
補助ソフトのインストールとOpenVZの起動
yum install vzctl vzquota
/etc/init.d/vz start
/etc/init.d/vz start
ゲストのインストールの準備
yum search vztmpl
yum install vztmpl-centos-4.i386
yum install vztmpl-centos-4.i386
必要に応じてcentosのリポジトリを変更する
vi /vz/template/centos/4/i386/config/yum.conf
ゲスト構築用のダウンロード(キャッシュ)
vzpkgcache
パッケージリスト
vzpkgls
vzlist -a 101
VE not foundならVE 101のインストールが可能になる。
ネットワークの準備
bridge-utilsのインストール
yum install -y bridge-utils
DHCPなeth0をbr0にする
この方法はすでにeth0をDHCPで利用していて、br0もDHCPで設定したい場合に有効だが、固定IPのほうがラクなのでそちらをおすすめする。こけると非常にまずいので遠方リモートではオススメしない。
cat < /etc/sysconfig/network-scripts/ifcfg-eth0 >> EOS
DEVICE=eth0
BOOTPROTO=static
IPADDR=0.0.0.0
ONBOOT=no
TYPE=Ethernet
EOS
cat < /etc/sysconfig/network-scripts/ifcfg-br0 >> EOS
DEVICE=br0
BOOTPROTO=dhcp
ONBOOT=no
TYPE=Bridge
EOS
DEVICE=eth0
BOOTPROTO=static
IPADDR=0.0.0.0
ONBOOT=no
TYPE=Ethernet
EOS
cat < /etc/sysconfig/network-scripts/ifcfg-br0 >> EOS
DEVICE=br0
BOOTPROTO=dhcp
ONBOOT=no
TYPE=Bridge
EOS
network-scriptではどうもうまくいかないので、/etc/init.d/にあるファイルを参考にしてinitスクリプトを書くことにした。
080223_bridge.txtをダウンロードして、
/etc/init.dにbridgeという名前にリネームしておく。
内容を自分の環境に合わせて書き換えて、
chmod 755 /etc/init.d/bridge
/etc/init.d/bridge start
運がよければbr0がdhcpで取得できる。
VEの作成
vzctl create 101 --ostemplate centos-4-i386-minimal
vzctl set 101 --hostname testserver.localdom --save
vzctl set 101 --userpasswd root:password
vzctl set 101 --diskspace 4G:8G --save
vzctl set 101 --onboot yes --save
vzctl set 101 --netif_add eth0,00:00:00:FE:00:01,veth1010,00:00:00:FF:00:01 --save
vzctl start 101
brctl addif br0 veth1010
vzctl set 101 --hostname testserver.localdom --save
vzctl set 101 --userpasswd root:password
vzctl set 101 --diskspace 4G:8G --save
vzctl set 101 --onboot yes --save
vzctl set 101 --netif_add eth0,00:00:00:FE:00:01,veth1010,00:00:00:FF:00:01 --save
vzctl start 101
brctl addif br0 veth1010
cat > /vz/private/101/etc/sysconfig/network-scripts/ifcfg-eth0 << 'EOS'
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
TYPE=Ethernet
EOS
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
TYPE=Ethernet
EOS
kernel.sysrq = 0, kernel.core_uses_pid = 1 がエラーになるのでコメントアウト
mv /vz/private/101/etc/sysctl.conf /vz/private/101/etc/sysctl.conf.bak
sed -e 's/^kernel\./#kernel\./g' /vz/private/101/etc/sysctl.conf.bak > /vz/private/101/etc/sysctl.conf
sed -e 's/^kernel\./#kernel\./g' /vz/private/101/etc/sysctl.conf.bak > /vz/private/101/etc/sysctl.conf
dhclientのインストールとネットワークの起動
vzyum 101 install -y dhclient
vzctl exec 101 service network start
vzctl exec 101 service network start
VEに入る
vzctl enter 101
ping www.yahoo.co.jp
ping www.yahoo.co.jp
通信できたらこれでおk
exit
VEにDevelopment Toolsのインストール
vzyum groupinstall 'Development Tools'がうまくいかないので、
ちょっとしたプログラムを作ってインストールする
cat > vzyum_devtools << 'EOS'
#!/usr/bin/perl
use strict; use IO::File;
my @groups=('Development Libraries','Development Tools');
my @ar; foreach my $group(@groups) {
my $fh=IO::File->new(qq{yum groupinfo "$group" | });
my $flag=0; foreach(<$fh>) {chomp;if(/^\sDefault Packages:$/) {$flag=1
} elsif(/^\sMandatory Packages:$/) {$flag=1} elsif (/^\s{3}(.+?)$/) {
push @ar,$1 if ($flag)} else {$flag=0}}}
my $cmd="vzyum ".join(" ",@ARGV)." ".join(" ",@ar);
print "$cmd\n"; system $cmd;
EOS
#!/usr/bin/perl
use strict; use IO::File;
my @groups=('Development Libraries','Development Tools');
my @ar; foreach my $group(@groups) {
my $fh=IO::File->new(qq{yum groupinfo "$group" | });
my $flag=0; foreach(<$fh>) {chomp;if(/^\sDefault Packages:$/) {$flag=1
} elsif(/^\sMandatory Packages:$/) {$flag=1} elsif (/^\s{3}(.+?)$/) {
push @ar,$1 if ($flag)} else {$flag=0}}}
my $cmd="vzyum ".join(" ",@ARGV)." ".join(" ",@ar);
print "$cmd\n"; system $cmd;
EOS
chmod 700 vzyum_devtools
./vzyum_devtools 101 -y install
./vzyum_devtools 101 -y install

