Debian で Linux Vserver を使ってるので、せっかくなので自分の知ってることを書いておこうと思います。
といっても、仮想サーバ技術から説明するのはどうかと思うので、かなり端折って書いてきます。
Linux Vserver とは
Linux Vserver とは、OS レベルの仮想化機能を実装した、仮想サーバソフトウェアです (Wikipedia:ja)。
FreeBSD Jail と非常に良く似ており、構造がシンプルでパフォーマンスが素の OS とほぼ変わらないので個人的にもっとも好きな仮想サーバ技術です。
欠点をあえて上げるとすれば、kernel が一つなのと、ネットワークは基本的に 0.0.0.0 で待ちうけができない点くらいでしょう。
Debian に Vserver をインストールする
Debian は公式リポジトリに Vserver が入ってるので、apt から一発で入ります。
非常に楽であり、保守も容易になるので、Vserver 使うなら Debian が一番良いと思います。
ただし、自分は kernel は最新のを使いたいので、Linux Vserver から最新のものを取得しコンパイル・インストールして使用しています。
この方法は後述します。
まずは、Debian lenny amd64 がパソコンにインストールされていることを前提に進めます。自分は amd64 以外もう使ってないので、amd64 を前提に話を進めますが、i386 やそれ以外も一緒だと思います。
# aptitude install linux-image-2.6-vserver-amd64 # aptitude install util-vserver
上の行が、linux-vserver 用の Debian 標準カーネルです。
下の行が、Vserver を使うのに必要なツール類です。
ブートローダで、上で入れたカーネルで起動するよう設定されているかを確認しておき、マシンを再起動します。
再起動して、そのカーネルで起動できているかは、uname -a 等で確認できます。
仮想 OS 用のパーティションを作る
自分は主にこちらのサイトから入ったので、そちらを推奨します。
自分の場合は仮想 OS あたり一つの LVM パーティションを与えて使用しています。
また、マウントポジションは / 直下に vserver というディレクトリを作成し、そこに仮想 OS 名のディレクトリ(usugumo とか murakumo とか) を作成して、LVM のパーティションをマウントします。
たとえば、以下のような感じです。
# lvcreate vg1 -n murakumo -L20GB # mkfs.ext4 /dev/vg1/murakumo # ls /vserver usugumo kashiro # mkdir /vserver/murakumo # ls /vserver usugumo kashiro murakumo # mount -o noatime /dev/vg1/murakumo /vserver/murakumo # emacs /etc/fstab /dev/vg1/murakumo /vserver/murakumo ext4 noatime 0 2 # df -h /dev/vg1-murakumo 100 1 99 1% /vserver/murakumo
流れは、LVM vg1 から 20GB 切り出して、murakumo というものをつくり、その murakumo を ext4 でフォーマットして、/vserver/murakumo にマウントする。
/etc/fstab に追加しないと PC 再起動時にマウントしてくれないので、忘れずに追加しておく、というだけです。
また、mkfs.ext4 を使うなら、カーネル 2.6.29 以降にしたほうが良いと思います。
Debian (lenny) 標準リポジトリの 2.6.26 は ext4dev 扱いであり、extents が有効だったり有効でなかったりしてややこしいし、
なにより 2.6.28 より前の ext4 は結構イマイチだった気がするので ext4 使わないほうがいいと思います。
2.6.29 以降なら、自分もメインマシンに ext4 使って特に大きな不具合ないので、十分実用に耐えると思います。
(btrfs がカーネルにマージされてる一番新しいファイルシステムですが、不安定なので今は使わないほうがいいでしょう。自分の環境では、1-2 日起動させっぱなしにしただけで、なぜか落ちます)
つまり、Linux Vserver 最新を追いかける必要があります。それをしたくないなら、ext3 を推奨します。
大きな容量のパーティション使うなら、XFS にすればマウントが非常に早いので便利だと思います。
仮想 OS を作る
上の作業で、仮想 OS をいれておくパーティションができて、マウントもされてる状態にあります。
ようやく OS のインストールになります。これは debootstrap を用いれば簡単にできます。
自分がよく使うテンプレートが以下なので、参考にしてみてください。
# makigumo (115) # vserver makigumo build \ -m debootstrap --context 115 \ --hostname makigumo.quilva.jp \ --interface eth0:192.168.5.115/24 \ --rootdir /vservers \ -- -d lenny -m http://izaemon.pw2.org/debian/
これは、makigumo という名前の仮想 OS を作ろうとしてます。
コンテキスト(仮想 OS 同士で重複しないユニークな数字を与える)は自分の場合 ip の最後の 8bit を割り与えるようにしてます。
–interface は仮想 OS 用の ip です。
http://izaemon.pw2.org/debian/ はローカルの Debian archive mirror サーバで、しかも今停止中なので、
国内なら普通は http://cdn.debian.or.jp/debian/ のほうが良いでしょう。
これをうちこんだ後は debootstrap が作業してくれるので、終わるまで少し待ちます。
仮想 OS を設定する
ここが書きたかったところでして、当たり前すぎるのか、あまりネット上では見かけませんでした。
上でインストールした直後でももちろん仮想サーバ動くのですが、ほとんど設定されてない状態なので使い物になりません。
なにより、SSH すら入ってないので、まずは SSH で入れて、文字コードを UTF-8 にしたりしましょう。
また、仮想 OS のネットがつながらない場合はホスト OS の /etc/vservers 以下の設定を見直してください。
当たり前ですが、ホスト OS でネットができない場合は仮想 OS もネット使えません。
まずは仮想 OS を起動させます。
# vserver makigumo start
これで起動しない場合はどうしようもないので、いろいろがんばってください。
そして、仮想サーバに入ります。
# vserver makigumo enter
まずは Apt のツリーを更新して、パッケージも更新しましょう。
# aptitude update # aptitude dist-upgrade
そして、UTF-8 を使うためにロケールの設定をします。
# aptitude install locales # dpkg-reconfigure locales (ja_JP.UTF-8 だけを選択した状態にして、これをデフォルトとして使用する)
次に、タイムゾーンが変なので、日本の時間にします。
# dpkg-reconfigure tzdata Asia Tokyo という感じだったと思う。
そして、念願の SSH を入れます。
# aptitude install ssh
ただし、先ほど書いたようなきがしますが、0.0.0.0 で待ち受けできませんので、これを変更します。
ホスト OS (仮想サーバを入れた OS) の SSH も 0.0.0.0 ではなく、192.168.5.123 等に変更してください。
そうでないと、どのアドレスにしても 0.0.0.0 のサーバが応答したりして混乱することになります。
# emacs /etc/ssh/sshd_config
#ListenAddress 0.0.0.0
を
ListenAddress 192.168.5.123
等の ip にしてください。
SSH を起動する前に、root でないユーザも作っておきましょう。
sudo もいれたほうが便利だと思います。
# adduser rootdenaiuser
これができたら、SSH の設定を PermitRootLogin yes を no に変更して、/etc/init.d/ssh start として、ssh が起動させます。
そして、他のマシンから仮想サーバに ssh でログインできるか確認します。
ここまでくれば、後はなんでもできるはず。
Linux Vserver の kernel を自分で作る
Linux Vserver の最新の kernel を使う方法です。ただし、たまに自分の環境だとうまく動かないことがあるので、注意したほうが良いです。
まずは、カーネルをコンパイルできる環境にする必要があります。
うろ覚えなので、「Debian kernel コンパイル」とかで検索してインストールしておいてください。
# aptitude install kernel-packages make gcc patch bzip2 fakeroot libncurses-dev
次に kernel ソースと、Vserver パッチをダウンロードします。
Linux Vserver の下のほうより最新のものがダウンロードできます。
追記 2009 7/23 18:52
最新がほしい場合はこの記事の最後の追記をみてください。
「この表は最新であるとは限らない」との赤字コメントが Vserver のサイトに追加されて初めて気づきました。

Linux Vserver ダウンロード
青いほうが、kernel.org よりダウンロードするカーネル本体で、オレンジのほうが、Vserver パッチです。
% mkdir kernel % cd kernel % wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.29.5.tar.bz2 % wget http://vserver.13thfloor.at/Experimental/patch-2.6.29.5-vs2.3.0.36.14.diff
とでもして、ダウンロードしてください。
展開して、Vserver のパッチを当てます。
% tar xjf linux-2.6.29.5.tar.bz2 % cd linux-2.6.29.5 % patch -p1 < ../patch-2.6.29.5-vs2.3.0.36.14.diff
make menuconfig で好みの設定にしてください。
% make menuconfig
そして、コンパイルします。
自分は Phenom を使ってるので、並列コンパイルを実施します。
% export CONCURRENCY_LEVEL=7 % fakeroot make-kpkg --initrd kernel_image
マシン速度に大きく左右されるので、コンパイル終わるまで待ちます。
コンパイルが正常に完了すれば、ひとつ上の階層に *.deb ができあがってるはずです。
fakeroot が以前壊れてたことがあるので、その場合は root になって実行してください。
そして、念願のインストールを実行します。
# dpkg -i 上でできあがった.deb
なんでか initrd が出来上がってないことがあるので、確認します。
% cd /boot % ls -l initrd.img-*****************-amd64
ない場合は、作ります。
# update-initramfs -c -k 2.6.30.1-vs2.3.0.36.14-pre3 とか。
なかった場合は /boot/grub/menu.lst の initrd もない気がするので、追加します。
title Debian GNU/Linux, kernel 2.6.26-2-amd64 root (hd0,4) kernel /boot/vmlinuz-2.6.26-2-amd64 root=/dev/sda5 ro
となってるところを、
title Debian GNU/Linux, kernel 2.6.26-2-amd64 root (hd0,4) kernel /boot/vmlinuz-2.6.26-2-amd64 root=/dev/sda5 ro initrd /boot/initrd.img-2.6.26-2-amd64
というかんじ。
できあがり。
とりあえず、自分は 2.6.29-2 を現在使用してますが、特に問題ありません。
最後のほうに書いておくと、Left 4 Dead というゲームのサーバを Vserver 上で立ててもパフォーマンス(ラグとか)問題ありません。
Xen だとオーバヘッドからか、フレームレートが若干落ちる(素OS と Vserver が 29.90 くらいのところが、27 くらいに落ちる)ので、イマイチです。
Vserver Tips
仮想 OS のパーティションの容量を増やす
自分のように LVM を用いた場合は仮想サーバ停止させずに増やせます。
# lvextend -L+1000000000000000GB /dev/vg1/murakumo # resize2fs /vserver/murakumo
これだけ。
仮想 OS のパーティションの容量を減らす
ファイルシステムに reiser(3) を使った場合のみ縮小できます。
ext4 や XFS などは増やすことしかできません。
また、オンラインではできませんので、仮想サーバを停止させ、パーティションも umount する必要があります。
# vserver murakumo stop # umount /dev/vg1/murakumo # resize_reiserfs -s -1000G /dev/vg1/murakumo # lvreduce -L-1000G /dev/vg1/murakumop # mount /dev/vg1/murakumo # vserver murakumo start
lvreduce -L-1000G だと、1000GB だけ減らす、という意味で、lvreduce -L1000G だと 1000GB にするという違いがあります。
Vserver 関係リンク
- Debian/VServer いっつのメモ帳
- 自分の BLOG より先に見るべきです。「特定の仮想マシンにだけ別のデフォルトゲートウェイを割り当てる」とか、喉から手がでるほどほしい情報でした
追記 2009 7/23 18:54 最新の Vserver patched kernel を作る
最近 Vserver のサイトに赤字コメントが追加されました。

赤字コメント
「always look here and do not assume that the Table below is up to date — Vserver 管理者様より」
とあるので、「表は常に最新であるとは限らないことに気をつけろ」ということです。
なるほど、たしかに Experimental Releases がリンクになってるよ…………

最新 Vserver patch をダウンロード
ということで、この場合はかこんだやつが最新の Vserver ということになります。
Kernel 2.6.27.27 を使ってる場合はそれのほうがより新しいですが、Kernel 2.6.30.1 の場合は囲んだやつがそうなります。









































Kooss
Ktkr.net
ReJEC.NET