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 件のコメント:
コメントを投稿