さて、ここからが佳境だ。すでに述べたように、Linux上のVServerはOSレベルで仮想化される。つまり、カーネルがVServerをサポートする。しかし、CentOSの標準カーネルはVServerをサポートしていないため、カーネルのソースを入手し、VServerパッチを当ててコンパイルする必要がある。
そこで、カーネルソースを取ってこよう。現在のlinux-vserver最新安定版は2.6.14.3カーネルだ。入手の手順は以下の通り。
# cd /usr/src
# wget ftp://ftp.probe-networks.lkams.kernel.org/pub/linux/kernel/v2.6/linux-2.6.14.3.tar.bz2
次に、linux-vserver.orgまたは13thfloor.at/vserverから最新カーネルパッチを入手する。
# wget http://www.13thfloor.at/vserver/s_rel26/v2.01/patch-2.6.14.3-vs2.01.diff.bz2
# tar xjf linux-2.6.14.3.tar.bz2
そして、カーネルソースにパッチを当てる。
# cd /usr/src/linux-2.6.14.3
# bzip2 -dc ../patch-2.6.14.3-vs2.01.diff.bz2 | patch -p1
次にconfigを作成するのだが、運用している2.6.xカーネル――2.4.xのconfigファイルは駄目――があれば、そのconfigをコピーする。
# cp /boot/config-`uname -r` .config
VServer対応カーネルのためのコンパイル時に含めておきたいものあれば、ここで済ませておく。カーネルのコンパイルで問題が発生したら、このページが参考になるはずだ。それでは、makeに進もう。まず、次のコマンドを実行する。
# make menuconfig
Linux VServer関連の構成は最後の方だ。選択を求められた場合はデフォルトを選べばよい。ただし、次の項目が有効になっていることは確認すること。
Enable Legacy kernel API
Enable Proc Security
Enable Hard CPU Limits
これで、configの設定は完了。いよいよ、カーネルをmakeする。次のコマンドで、カーネルをコンパイルしインストールすることができる。しばらく時間がかかるので、コーヒーを入れ、ピザを頬張りながら待とう。
# make bzImage && make modules && make modules_install && make install
次に、GRUB構成ファイル/boot/grub/menu.lstを編集する。default=とある行を探し、次のように0に設定されていることを確認する。
default=0
title CentOS (2.6.14.3-vs2.0.1)
root (hd0,0)
kernel /vmlinuz-2.6.14.3-vs2.0.1 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
次に、マシンをリブートし、VServer対応カーネルを動かす。起動したら、uname -rコマンドでカーネルのバージョンを調べ、今作ったカーネルが確かに動作していることを確認する。2.6.14.3-vs2.0.1のように表示されるはずだ。そうでなければ、ここまでの手順を確認し、間違えた個所を特定して再挑戦する。
以上で、VServer対応CentOS 4.2のシステムができ上がり、VServerのバイナリをインストールする準備ができた。VServerの作成と管理のためのuserlandのユーティリティがあるのでダウンロードし、これを使ってバイナリを抽出することにしよう。
# cd /usr/src/
# wget http://www.13thfloor.at/vserver/s_rel26/v2.01/util-vserver-0.30.209.tar.gz
# tar -zxvf util-vserver-0.30.209.tar.gz
# cd util-vserver-0.30.209
ここで、次のコマンドを使って、dietlibcとbeecrypt-develがインストールされていることを確認する。
# yum install -y dietlibc beecrypt-devel
それでは、util-vserverツールをビルドしインストールしよう。以下に示すのは、その一例である (インストール先は/lib、/sbin、/etc/init.d)。
# cd /usr/src/util-vserver-0.30.209
# ./configure --prefix= --sysconfdir=/etc
# make && make install && make install-distribution
インストールの成否を確認しておこう。
# wget http://vserver.13thfloor.at/Stuff/SCRIPT/testme.sh
# chmod 700 testme.sh;./testme.sh
問題がなければ、次のように表示されるはずだ。
Linux-VServer Test [V0.15] Copyright (C) 2003-2006 H.Poetzl
chcontext is working.
chbind is working.
Linux 2.6.14.3-vs2.0.1 #1 SMP Thu Mar 2 12:45:32 IST 2006 i686
Ea 0.30.209 273/glibc (DSa)
VCI: 0002:0001 273 03110036 (TbLgnPD)
---
[000]# succeeded.
[001]# succeeded.
[011]# succeeded.
[031]# succeeded.
[101]# succeeded.
[102]# succeeded.
[201]# succeeded.
[202]# succeeded.
仮想サーバを作成するのは極めて簡単、しかも1回だけだ。ただし、時間がかかる。まず、ホストシステムからテンプレートを作る必要がある。つまり、/procと/devなどのディレクトリを除いた全ファイルシステムのダンプを取る。
# mkdir /vservers/template/
# dump 0f - /usr | (cd /vservers/template/ && restore rf -)
同様に、次のディレクトリのダンプを取る。
/bin、/etc、/home、/include、/initrd、/lib、/opt、/root、/sbin、/tmp、/usr、/var
このテンプレートを掃除しておくとVServerが小さくなり、また速度の点でも有利だ。ファイルをコピーしながらVServerに不要なものを削除する。根気のいる作業だ。今は止めておく。
さて、VServerを作ろう。次のコマンドを実行する。
# /sbin/vserver
以下に、実例を示す。
# /sbin/vserver calvin build -m skeleton --hostname calvin --interface calvin=eth0:192.168.0.10/24
この場合、1つめの仮想サーバは次のような構成になる。
VSERVER_NAME | calvin |
---|---|
FQDN | calvin |
NET_DEVICE | eth0 |
IP | 192.168.0.10 |
CIDR | 24 (255.255.255.0) |
BUILD_METHOD | skeleton |
次に、VServerにテンプレートのデータを流し込む。
# cp -a /vservers/template/. /vservers/calvin/
そして、運用するネットワークに合わせてVServerの/etc/hostsを編集する。
# vi /vservers/calvin/etc/hosts
最後に、リソースをグループに分離するVServer関連スクリプトを起動する。このスクリプトは、ブートのたびに実行する必要がある。
# /etc/init.d/vprocunhide start
以上で、VServerの設定は終わりだ。それでは神に祈りつつ、ピカピカのVServerを起動してみよう。
# /sbin/vserver calvin start
サービスが起動しないなどといったエラーならたいした問題ではないが、VServerが立ち上がらない場合は VServerメーリングリストのアーカイブを検索してみる必要がある。うまく立ち上がったら、VServerに入ってみよう。
# /sbin/vserver calvin enter
以下、VServerで必要となる基本コマンドを幾つか挙げておく。まずは、次のコマンド。
# /sbin/vserver
何か実行してみたいなら、ntsysvまたはchkconfigのいずれかを実行してみよう。それから、起動する必要のないサービスをすべて停止させること。すべてのネットワーク関連サービスとカーネル関連サービス、特に、iptablesやkudzuなどは間違いなく停止させておく。
VServerの動作状況は次のコマンドで得られる。
# /sbin/vserver-stat
問題や疑問があれば、VServerパッケージのmanページを見てみよう。それでも分からなければ、VServerメーリングリストが助けてくれるだろう。
Copyright © 2010 OSDN Corporation, All Rights Reserved.