Single System, Multiple Machines2006年03月21日 08時05分26秒

何台かコンピュータを持っているが、i386 が多い。amd64 も一台あるが、結局 i386 バイナリを使っている。ppc は Mac のままだったり。

Dual Boot では一台の機械に、複数の全く同一のシステムを入れるのは紹介した。私の管理しているシステムは、それだけに留まらず複数の機械にも同一のシステムを入れている。唯一の例外はファイル/バックアップサーバのみ。これだけは構成が他とは全く異なっていたのと、長い間アップグレードしていないので、今のところは別のものを使っている。

昔は、新規インストールの方が好きだったし、一台ずつ各種最適化などの設定を変えるのが好きだった。むしろ、それをやること自体が目的だったので最初はそれでもよかったが。ところが、次第に各機械でバージョンの違いが出てくるようになり、それを調整するのが億劫になったためだ。

nop 程、高速な作業は無いのである。

もちろん基本は秘技 dump/restore である。ここでは、何があっても特定の CPU に対して最適化したバイナリを作ってはいけない。

各機械毎に変えなければいけないものは、loader.conf、rc.conf、fstab、xorg.conf ぐらいである。もしかしたら、人によってはこれよりも少し増えるかも知れない。四つのファイルとは言え、これを書き換えるのも面倒になった。そこで、これらのファイルを /etc/hostname 以下に配置。

$ ls /etc/hostname
...
host1.example.com-rc.conf
host1.example.com-xorig.conf
...
host2.example.com-rc.conf
...
といった感じである。loader.conf、fstab、xorg.conf は本来の位置から、/etc/hostname 以下へ相対パスのリンクにするのである。これで、機械から別の機械に移るときにシンボリックリンクを変更するだけで済む。/usr の展開が時間がかかるから、その間に変更している。これらの三つのファイルはとてもそれぞれ専用なのでこれで困っていない。

rc.conf はそうはいかないのである。FreeBSD だと設定の要なので、共通部分はなるべく一ヶ所に保持したいのである。そこで、/etc/rc.conf には共通した設定を置いている。/etc/rc.conf で以下のようにして、各機械固有の設定を読み込むのである。/tmp を mfs で使っている。各機械のメモリのサイズが mfs のサイズに大きな影響を与えるので、最後に読み込むことで機械毎の最終的な値を決めるのである。残念ながら、この方法だと、/etc/rc.conf に hostname を各々設定しなければならない。まあ、今のところはこれでもいいとする。


. /etc/hostname/${hostname}-rc.conf

これによって、複数の機械の面倒をみる手間が著しく減少した。FreeBSD 自体のインストールは簡単でも、ports /packages から簡単にインストール出来ても、各機械の調整が手間なのである。これも立派な高速化なのである。

もちろん個々の機械も FreeBSD Dual Boot になっているのを忘れないで欲しい。つまり、システムのアップグレード等などでも、普通の installkernel/installworkd ど違い、途中に再起動を挟まないのである。普段のメールのチェックなどをしてても全く支障が無いのである。また、途中でシングルモードで立ち上げる必要が無いのである。更に、システムのアップグレードも他で実験済なので、問題なく起動するのは、ほぼ確実でもある。失敗しても、再起動し直して、他のスライスから立ち上げれば復旧は完成である。

リンクの配置を変えれば、もう少しシステム間での変更点を減らせる。後で試したら紹介したいと思う。

次回