rinseで手軽にRPM系ディストリのchroot環境作成

こんにちは、前回のブログのはてブ数がすごいことになって、恐れおののいている高橋です。
どー考えてもそれを超えるようなネタなんか思いつかないので、いつも通りサラッと流されるようなネタを気楽に書いてみたいと思います。

さて、いろいろと開発を行っていると、

 ・PHP5.1 + PostgreSQL8.1
 ・PHP5.2 + PostgreSQL8.3

などのように、プロジェクトによってソフトのバージョンが違うことがあります。
それぞれの開発マシンが個別に用意されているときは問題ありませんが、一台しか開発マシンがない場合はどうされていますか?

XenやVMwareなどの仮想化マシンで構築するのが楽かと思いますが、メモリやCPUパワーが潤沢でないと厳しいですよね。また、大抵の場合、そこまで完全に独立した環境が必要なわけでもありません。
/usr/local/以下に複数のバージョンをインストールし、ポートを変更して起動するのが動作としては一番軽いですが、個人的にはchrootも軽くてオススメです。

Debian系の場合、debootstrapという便利なコマンドがあるため、chrootのベースとなる環境をとても簡単に構築できます。

RedHat系の場合にも、rpmstrapというコマンドがあり、同様に構築できます。ただ、サイトトップに「This project is dead.」と書いてあるように、残念ながらもう更新されていません。
また、自分で設定ファイルを作成するにしても、インストールするパッケージのバージョンまで指定する必要があり、ちょっとでもバージョンが違うと失敗するため、結構面倒です。

そんなわけで、他に何かいーものはないものかと探してみたところ、rpmstrapとdebootstrapにインスパイアされたrinseというソフトがありました。

それでは、早速インストールしてみます。

Debian系の場合、etch用のパッケージがあるので、それを使ってみます。
まずは http://apt.steve.org.uk/security/ に書いてあるようにGPG鍵を追加します。


# wget http://apt.steve.org.uk/apt-key.gpg
# apt-key add apt-key.gpg

次に http://apt.steve.org.uk/ に書いてあるように「/etc/apt/sources.list」へリポジトリを追加します。


deb http://apt.steve.org.uk/etch etch main non-free contrib

あとは、普通にインストールします。


# apt-get update
# apt-get install rinse rpm

これでインストール完了です。

RedHat系の場合、rpmパッケージはなさそうでしたので、tarボールを使います。
まずは必要なパッケージをインストールします。


# yum install perl-libwww-perl

次にtarボールをダウンロードしてインストールします。


# wget http://xen-tools.org/software/rinse/rinse-1.1.tar.gz
# tar xzf rinse-1.1.tar.gz
# cd rinse-1.1/
# make install

これでインストール完了です。また、きちんとアンインストーラも用意されていて、


# make uninstall

とすることでアンインストールできます。

さて、インストールが完了したら、rinseの設定ファイル開いて、近くのミラーサイトに書き換えます。


# vi /etc/rinse/rinse.conf

これで準備が整いましたので、早速使ってみます。ここでは試しにCentOS5の環境を作ってみます。


# mkdir -p /var/chroot/centos5
# rinse --directory=/var/chroot/centos5 --distribution=centos-5

これで自動的にダウンロードとインストールが行われます。もしx86_64版を作成する場合は、「–arch=amd64」を指定します。

ちなみに、ダウンロードされたパッケージは/var/cache/rinse/以下に保存されるので、不要になったら次のコマンドで削除します。


# rinse --clean-cache

それでは、早速できたてのCentOS5に入ってみます。今回はとりあえずprocのみマウントしています。


# mount -t proc proc /var/chroot/centos5/proc
# chroot /var/chroot/centos5 /bin/bash

試しにインストールされているパッケージの一覧を見てみます。正しく動作していれば、chroot下にインストールされているパッケージのみがリストされるはずです。


# yum list installed

おお、バッチリ動いています。あとは普通にchrootの環境を整備していくだけですね。

皆さんもRPM系ディストリビューションのchrootやXen用ゲスト環境を作成する機会がありましたら、rinseを使ってみては如何でしょうか。