Linux-VServerのインストール方法
Linux-VServerを使うと、1台のコンピューター上に複数の仮想Linuxサーバー(VServer)を立ち上げることができる。VServerは通常のLinuxサーバーと同じように動作するが、オーバーヘッドは少なく、相互に独立しながら同時に動くため、仮想プライベート・サーバーやセキュリティ強化領域として使える。オペレーティング・システム・レベルでの仮想化であるため、リソースをグループ化し分離できるからである。SSH、電子メール、Web、データベースなどのサービスは、VServer上で、そのまま修正なしに通常通り起動することができる。したがって、メール・サーバーとWebサーバーを同じマシン上で動作させても、Webサーバーを活かしたまま、メール・サーバーをリブートすることができる。固有のIPアドレス、ハードドライブ・スペース、ユーザ・アカウント・データベース、rootパスワードを持ち、VServer同士が干渉することはない。
仮想サーバーは、ホスト・システムとゲスト・システムという2種類のシステムから構成される。ホスト・システムは仮想サーバーが載っている物理的なサーバーであり、ゲスト・システムは、ホストOSの上に載って動作する仮想サーバー・オペレーティング・システムである。
基本システムの準備
ここでは、CentOSバージョン4.2を使って手順を説明することにする。Linux 2.6が動作するLinuxディストリビューションであれば、どれでも大差ないはずだ。FedoraとUbuntuの場合は、Web上に若干の解説がある。
まず、CentOS 4.2を新規にインストールする。ホスト・システムは小さければ小さいほどよく、通常は、SSHとiptablesがあれば十分だ。
CentOS 4.2 の1枚目のCDを使ってシステムをブートする。Linuxをインストールした経験があるなら、このインストールは比較的簡単だろう。大きな/vserversパーティションを作り、パッケージはDevelopment Packagesを選択すること。ほとんどのサービスはゲスト・システムで動かすことになるため、このシステムに多くはいらない。インストールが完了したら、インターネットの接続といったサービスが正常に動作していることを確認する。
次に、rootでログインし、upgradeして、セキュリティ更新を含むすべてのパッケージを最新バージョンに更新する。
yum -y upgrade
更新が終わったらSELinuxを無効にする。つまり、/etc/selinux/configファイル中のSELINUXエントリーを次のように変更する。
SELINUX=disabled
次に、ホスト・システムで運用するサービスを最小限にする。理由は2つ。一つは、使いもしないサービスを動かしてCPUサイクルを浪費しないため。もう一つは、動作中のサービスが少ないほど、セキュリティが脆弱な個所も少なくなるからだ。
現在動作中のサービスを調べるには、まずrunレベルを知る必要がある。
# runlevel
rootでログインしているので、ほとんどの場合、3という数字が戻るはずだ。ブート時に実行されたサービスは、次のコマンドで分かる。
# chkconfig –list | grep “3: on”どのパッケージかを知るには、パッケージごとに次のコマンドを実行する。
# rpm -qi package_name
不要なサービスがあった場合は、ntsysvツールを使ってブート時に起動されないようにする。リブートして、この設定を適用する。
たとえば、このサーバーでは次のパッケージは不要だろう。
- autofs – ファイル・システムを自動的にマウントするデーモン
- apmd – Advanced Power Managementデーモンを制御するプログラム。現在発売されているほとんどのノートブック・コンピューターに搭載されているユーティリティ
- pcmcia – どれかのパッケージに含まれているモジュール
- cups – Common Unix Printing System
- xinetd – inetdのセキュリティ強化版
- gpm – テキスト・ベースのLinuxアプリケーションのためのマウス・サポート
- kudzu – ブート時に起動されるハードウェア・アナライザで、ハードウェアの追加と削除を監視する
- iptables – ファイアウォール。セットアップ時にインストールを省略できるが、実際にはインストールされ、単にconfigファイルが空になるだけ
- anacron – 指定日数間隔でコマンドを実行する定期コマンド・スケジューラー。cronとは異なり、途中でシステムの運転が止まってもよい
- isdn – ISDN接続をしなければ不要
- nfs – TCP/IP ネットワーク上でファイルを共有するサーバー機能
- netfs – すべてのネットワーク・ファイル・システムとSambaマウント・ポイントをマウントしたりアンマウントしたりする。リモート・ファイル・システムを自動マウントする必要がなければ不要
- nfslock – TCP/IPネットワーク上でファイルを共有するサーバー機能
- atd – atコマンドの制御。コマンドのスケジュールで使用
- rpcgssd / rpcsvcgssd / rpcidmapd – ネットワーク・ファイル・システムのデーモン。NFSを使わないのであれば不要
- cpuspeed – 必要とされる処理能力に応じてCPUの速度を動的に変更する。ノートブックでなければ不要
- mdmonitor – ソフトウェアRAIDの管理。ここでは、ハードウェアRAIDを使用
- HALdaemon / DBUS – デスクトップのためのサービス
カーネル
さて、ここからが佳境だ。すでに述べたように、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 menuconfigLinux 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のバイナリ
以上で、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)
<compat,v11,v13,fscompat,net,oldproc,olduts>
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 <VSERVER_NAME> build -m <BUILD_METHOD> –hostname <VSERVER_HOSTNAME> –interface <VSERVER_NAME>=<NET_DEVICE>:<IP>/<CIDR>
以下に、実例を示す。
# /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 <VSERVER_NAME> [ start | stop | restart | enter ]
何か実行してみたいなら、ntsysvまたはchkconfigのいずれかを実行してみよう。それから、起動する必要のないサービスをすべて停止させること。すべてのネットワーク関連サービスとカーネル関連サービス、特に、iptablesやkudzuなどは間違いなく停止させておく。
VServerの動作状況は次のコマンドで得られる。
# /sbin/vserver-stat
問題や疑問があれば、VServerパッケージのmanページを見てみよう。それでも分からなければ、VServerメーリングリストが助けてくれるだろう。
NewsForge.com 原文