Debian etch + Linux-VServer で Rails向きのVM環境を構築する


はじめに

今回、何か実験しようと思い立ったらすぐにVMを作って試してみる、そういう向きに便利そうなプロダクトがありましたので紹介します。Linux-VServer(http://linux-vserver.org/)、FreeBSDでいうところのjail的なLinux用のVM環境です。完全な仮想化では無いため、そのままでは動作しないソフトウェアがいくつかありますが、小回りがよく、(ファイルの配置などに)制約があるおかげでかえって使いやすいなという印象をうけました。

個人で多数のRails環境を動かすとなると、やはり仮想マシン(VM)が何かと便利です。最近は仮想化技術の発達でVMwareやUML、Xen、 KVMなど、選択肢が広がってきました。しかし、これらの仮想化機構はオーバヘッドが大きく、潤沢な計算機資源がある場合ならばともかく、個人で利用するにはリソース勿体無い感があります。また、VMの構築時にメモリやディスクイメージの見積もりが必要で、失敗すると無駄が出たり、あるVMだけ資源が足りなくなってきたりと、何かと面倒事が多いものです。Linux-VServerはこれらを解決してくれそうです。早速試してみましょう。

使用したマシンの構成

以下の構成の二台(自作機)に導入しました。

Host環境の準備

Debianのインストール

まずDebian etchをインストールします。インストールメディアにはCore2Duo機はamd64を、P4機はi386を使用しました。

vserver用カーネルの導入

次にvserver用のカーネルを入れます。

Core2Duo機では

# aptitude install linux-image-2.6-vserver-em64t-p4-smp

P4機では

# aptitude install linux-image-2.6-vserver-686

とします。依存関係で自動的に必要なパッケージが導入されました。

vserverカーネルで再起動

次に

# reboot

してvserverカーネルで起動します。

uname -a すると、Core2Duo機では

Linux core 2.6.18-4-vserver-amd64 #1 SMP Wed Feb 21 15:03:27 UTC 2007 x86_64 GNU/Linux

P4機では

Linux slim 2.6.18-4-vserver-686 #1 SMP Wed Feb 21 18:50:08 UTC 2007 i686 GNU/Linux

と出ました。以下はP4機を使って作業しました(特に違いはありません)。

Host環境のsshdの設定

次に /etc/sshd_configを編集して

#ListenAddress 0.0.0.0

ListenAddress 192.168.1.220

に変更しておきます(192.168.1.220はHost環境のIP)。これを忘れるとGuest環境にsshしたはずがHost環境に繋がってしまい、しばし首をひねることになります(FAQに書いてあります)。

# /etc/init.d/sshd restart

としてsshdをリスタートします。

(3/29追記)HostのIPを変更した時は再度編集しないとHostにsshできなくなりますので注意が必要です。

Guest環境の構築

以下のようなGuestを構築することを考えます。

この場合、たとえば以下のようにします:

# vserver basil build -n basil --hostname basil --interface eth0:192.168.1.221/24 \
 -m debootstrap -- -d etch

と入力してしばらく待ちます。/var/lib/vservers/basil以下に新しい環境が構築されていきます。

I: Retrieving Release
I: Retrieving Packages
(略)
I: Base system installed successfully.

と表示されたら完了です。とても簡単。basilという名前の環境であれば、/var/lib/vservers/basilがルートディレクトリになるようにディレクトリツリーが構築されています。また、/etc/vservers/basilに設定ファイル等が生成されています。

起動
# vserver basil start

で起動します。

Starting system log daemon: syslogd.
Starting kernel log daemon: klogd.
Not starting internet superserver: no services enabled.
Starting periodic command scheduler: crond.

と表示され、あっという間に起動が完了します。

Guestを使ってみる

VMの中に入ります。rootのパスワードが空なので注意が必要です。

# vserver basil enter
vm# passwd

それから(必要に応じて)sshを入れます。

vm# aptitude update
vm# aptitude install ssh

これで外から直接仮想環境にログインできるようになります。

vm# exit

で仮想環境から抜けます。rootのパスワードを指定しておけば、

# ssh 192.168.1.221

でrootでログインできるはずです(セキュリティポリシにあわせて適宜設定すべきでしょう)

Guest環境へのコマンド投入

また、Guest環境にログイン(vserver basil enter または ssh)せずに

# vserver basil exec df

として、外から直接コマンドを投入することもできます。

# vserver basil exec aptitude install -y rubygems
# vserver basil exec gem install -y rails

などということもできます。

Host起動時にGuestを自動的に起動する

basilという名前のGuestの場合、Host上で

# echo default > /etc/vservers/basil/apps/init/mark

とします。

Guestの削除

Guestの削除もコマンド一つです。

# vserver basil delete
Are you sure you want to delete the vserver basil (y/N) 

試行錯誤のための仮想環境には削除が簡単であることも大きな利点です。

まとめ

VServerには個人でRailsの開発/実験用に使うVMとして、優れた特徴が多くあります。

VM上でmysql5とRadiant CMS(http://radiantcms.org/)を動作させてみましたが、今のところ特に問題なく動作しているようです。

発展

vserver-copyというrsyncを利用したVMコピーツールが付属しており、複数Hostで運用でする場合に便利そうです。capistranoで自動でVMを構築し、その下にRailsアプリケーションをdeployできると便利そうです。

参考

以下のサイトが参考になりました。