戻る

ひとつのパーティション上ですべての作業を行う方法

「ひとつのHDD上ですべての作業を行う方法」 では,ひとつのHDD上に複数の FreeBSD をインストールして,ひとつの HDD 上に 作業用 FreeBSD とイメージ用 FreeBSD を共存させて作業する方法を説明しました. (結局のところ,1台のHDDに複数の FreeBSD がインストールできてブートできれば よいわけです)

しかし,すでにパーティションを分けてしまっていていじりたくないといった 場合もあるでしょう.例えば FreeBSD の他に,すでに NetBSD や Linux が 入っていて,イメージ用 FreeBSD のパーティションを確保できないなどといった 場合です. とくに Linux は,通常では SWAP 用のパーティションを利用しますので, HDD を Windows, FreeBSD, Linux, Linux(SWAP) というパーティション構成で すでに複数OSをインストールしてしまっていて,これ以上パーティションを 確保できないといった状況は実際に多いと思われます.

そんなときのアイディアとして,すでに動作している FreeBSD があって,容量に 余裕があるのならば,/usr/cdfbsd を作成して,その下にインストールしてしまう という方法が考えられます.ただし,僕自身はこの方法を試したことはありません. ただ,できるだろうと思うので,もしもパーティションが確保できない場合には, 試してみるのもいいかもしれません.(だれかもしも成功したら,ぜひ情報をください)

FreeBSD のインストーラでは,オプション指定で,インストールする先の ディレクトリを指定することができます.(Options メニューの Install Root という やつです)

通常はこれは / になっているため,各種ファイルは / に展開されます.

ここで,mkdir /usr/cdfbsd してから,インストール先を /usr/cdfbsd に変更して インストールを開始することにより,/usr/cdfbsd 以下にシステムをインストールする ことができるはずです.(HDDのパーティション情報はいじらずに,システムを 解凍・展開するだけでよい.カスタムインストールでやることになるのだろうか)

ただし,気をつけないと既存の FreeBSD のシステムに上書きしてしまう危険性が あるので,十分に注意して行う必要があります.

デバイスファイルは /usr/cdfbsd/dev 以下でいつもどおり ./MAKEDEV すれば うまく作れるとおもわれます.

パッケージのインストール時には,pkg_add の -p オプションでインストール先の PREFIX を指定することができますが,これでは /var/db/pkg が更新されて しまい,/usr/cdfbsd/var/db/pkg を更新してくれません. これは,/var/db/pkg を一時的に pkg.bak にリネームして, /var/db/pkg -> /usr/cdfbsd/var/db/pkg のようなリンクを張ることで対処できます.

ところで,/usr/cdfbsd 以下にインストールしたアプリケーションの動作を 確認したくなったりするかもしれません. (例えば /usr/cdfbsd/usr/local/etc 以下の設定ファイルを書き換えて, アプリケーションの動作を確認したい場合など.通常では /usr/cdfbsd/usr/local/etc ではなく /usr/local/etc が参照されてしまう) また,ホームディレクトリに設定ファイルを作成するようなアプリケーションの 場合には,/usr/cdfbsd/root 以下でなく /root に設定ファイルを作成して しまいます.これは,困りものです.

これの解決策ですが,chroot を使う,という案があります.chroot で /usr/cdfbsd 以下を / に見立てて各種アプリケーションを実行することにより, /usr/cdfbsd 以下にインストールされたシステムの動作確認をすることができます.

chroot は任意のディレクトリをルートディレクトリに見立てて実行させるための システムコールです.多くの場合,セキュリティを確保するために使用されます. たとえば apache を起動する際に,/usr/local/apache というディレクトリを 作成しておいて,apache が参照するディレクトリは /usr/local/apache 以下に コピーしておきます.例えば /usr/local/etc/httpd.conf というファイルが ある場合には,/usr/local/apache/usr/local/etc/httpd.conf にコピーして おくのです.

で,

# chroot /usr/local/apache apache
のようにして apache を起動すると, apache は /usr/local/apache を / として動作します.このため,apache には /usr/local/apache/usr/local/etc/httpd.conf が /usr/local/etc/httpd.conf として見えることになります.このようにして起動した apache は, /usr/local/apache 以外のディレクトリにアクセスすることができません. つまり /usr/local/apache 以下しか見えないため,万が一 apache がクラック されたとしても,被害を /usr/local/apache 以下のみに制限することができるのです.

で,話は戻りますが,FreeBSD のシステムを /usr/cdfbsd 以下に展開した場合,

# chroot /usr/cdfbsd [command]
のようにしてアプリケーションを起動することにより, /usr/cdfbsd 以下にインストールしたシステムをひとつのシステムに見立てて アプリケーションを実行することが可能です.このようにすれば,/usr/cdfbsd 以下の 設定ファイルを修正して動作確認するようなこともできるようになります. 極端な話,
# chroot /usr/cdfbsd sh
のようにしてシェルを動作させれば,そのシェルは /usr/cdfbsd 以下を / として 動作するわけですから,/usr/cdfbsd 以下をひとつの独立したシステムとして 動作します.つまり,/usr/cdfbsd 以下のシステムの動作確認をすることが できるわけです.で,cdroot したシェルから各種アプリケーションを起動すれば /usr/cdfbsd 以下のシステムの動作確認ができるだろうし, /stand/sysinstall を起動してパッケージのインストールを行えば,ばっちり /usr/cdfbsd/var/db/pkg が更新されることになるでしょう.

もしくは,そもそもインストール前に,

# cdroot /usr/cdfbsd sysinstall
のようにして sysinstall を chroot して,あとはふつうにインストールすれば, /usr/cdfbsd 以下にインストールすることができるはずです.インストール時には 通常通りインストールしてしまえば,/usr/cdfbsd 以下にインストール されることになる.(ただし,HDD のパーティション情報はいじらないこと. また,ファイルシステムを newfs してしまわないこと.これをやると 既存のシステムを破壊することになる)

もしもこれができれば,イメージ用にパーティションを作成する必要もなくなり, HDDに余裕があれば,複数種類の CD-FreeBSD のイメージを同時に作成することが できるので,非常に有効な方法だと思われます(複数 CD-FreeBSD 間でハードリンクを 利用してファイルを共有すれば,ディスクの節約にもなる). とくに,パッケージアプリケーションをいろいろ変えて複数種類の CD-FreeBSD を 作りたいときなどは,非常に有効な方法でしょう.

もしも試したかたがいましたら,ぜひ情報をください.

戻る