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はこれらを解決してくれそうです。早速試してみましょう。
使用したマシンの構成
以下の構成の二台(自作機)に導入しました。
- Core 2 Duo E6400 + 2GB メモリ + 250G SATA HDD
- Pentium4 2.53GHz + 512MB メモリ + 80G PATA HDD
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を構築することを考えます。
- Host名: basil
- debian etch
- IP: 192.168.1.221/24
この場合、たとえば以下のようにします:
# 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として、優れた特徴が多くあります。
- VServer自体の設定がかなり簡単
- VMに割り当てるリソースの厳密な見積もりが不要
- オーバヘッドが小さい(カーネルはHost一つだけ)
- 仮想環境の構築がとても簡単
- 仮想環境へのコマンド投入が簡単
VM上でmysql5とRadiant CMS(http://radiantcms.org/)を動作させてみましたが、今のところ特に問題なく動作しているようです。
発展
vserver-copyというrsyncを利用したVMコピーツールが付属しており、複数Hostで運用でする場合に便利そうです。capistranoで自動でVMを構築し、その下にRailsアプリケーションをdeployできると便利そうです。
参考
以下のサイトが参考になりました。