2011年1月13日木曜日

ちょっと試してみたいportsを半独立の環境に入れる方法 with chroot



FreeBSDのportsは必要なものをガンガン追加して、全部をスケジュール立ててバージョンアップするにはいいんだけど、一つのパッケージだけをバージョン上げてってのには向かないのよね。


そんな人はPC-BSDを使えば良いのだけれども、かといって目の前にあるのはFreeBSDマシンって時の対処方


単純にchroot環境をさくっと作って、そこにサラの状態から試したいパッケージだけを入れる方法です。


まずchroot環境のディレクトリを作ります。例えば/usr/chroot/testとか。



mkdir -p /usr/chroot/test



そこに、FreeBSDを新たにインストールする訳だけれども、sysinstallを使うと簡単にできます。



sysinstall起動


Configure→Optionで、install directoryを/usr/chroot/testに変更


Configure→DistributionでMinimum等お好きな構成を選んでインストール



これで下準備は完了。chroot環境に入る



mount -t devfs dev /usr/chroot/test #devfsをマウントしないとps等が使えない


chroot /usr/chroot/test /bin/csh



あとはpkg_add等で試したいものを入れるだけ。



setenv PACKAGESITE ftp://ftp[適当なミラー].jp.freebsd.org/pub/FreeBSD/ports/[i386|amd64]/packages-8-stable/Latest/


pkg_add -r 試したいパッケージ



chroot環境での注意事項


chrootはjailと違って、親の環境をもろに使えるので、portsを試すには便利な環境ですが、ちょっとだけけ注意が必要です。


ユーザ情報がない

そのままではユーザ情報がないので、chroot環境内で追加するか、親の環境の/etc以下からコピーしてくる必要があります。chroot環境でユーザを追加した場合、親から/usr/chroot/test/以下を観たときファイルシステムにでたらめなユーザ名権限が設定されているように見えるので注意が必要です。


chroot環境でアカウント名Aとして作ったファイルが、親環境では全然関係ないユーザのファイルとして見える場合があります。


ドメインソケットが使えない

デフォルトではchroot環境からX環境を使う事ができません。ほかにも親環境のpostgresqlサーバにchroot環境のpsqlクライアントから繋ぐことができません。可能ならドメインソケットの替わりにINETソケットを使って下さい。


例えばchroot環境でXアプリケーションを実行する場合



親環境で:


xhost localhost


chroot環境で:


setevn DISPLAY 127.0.0.1:0.0


#何か起動



その他の応用:独立バージョン管理


chroot環境でユーザを追加しなければ(もしくは、親環境と整合を取れば)、もっと便利に使う事もできます。


デスクトップ兼サーバとして運用しているとデスクトップアプリはガンガンバージョンアップしたいけれども、サーバアプリはバージョンアップしたくないという事があるかと思います。


そんなときにはchroot環境にサーバアプリを入れるようにすれば、親環境のアプリのバージョンアップの余波(ライブラリ不整合等)で動かなくなるという事はないです。


ただ、上に書いたようにそういう場合はPC-BSDのPBIのほうが便利かもしれません。


他にもchroot環境を複数作っておいて、バージョンアップ時のちゃんと動くかの事前調査に使うのも手ですね。





0 件のコメント:

コメントを投稿