FreeBSDのシステム構成を複製する

FreeBSDのシステム構成を複製する。

複製と言っても色々な状況が考えられるが、おおむね以下の目的のために複製してみよう。

  • それなりの台数(3台を超えたらもう面倒)を扱う。
  • →それなりの台数だからOSのインストール、パッケージのインストールが面倒
  • 同じ設定(厳密には同じ*ような*設定。hostname, ipaddressなどは違う。)を使う。
  • →仮想マシンならイメージのコピー、実マシンならddとかで複製されたHDDイメージを流用する。pxeブート環境もしくはUSBでディスクレスってのもいいよね
  • →→となるとできる限り容量を抑えたい。usbに収まるなら2GB以下、pxeでもそれぐらいが望ましいな~。
  • パッケージ管理を簡略化したい。追加、削除、バージョンアップを一台のマシンで済ますことができないか。
  • →CPUタイプ、FreeBSDのバージョンが一緒ならバイナリの複製でだいたい動く。親元マシンにパッケージを追加したら他のやつでも使えるといいな。
  • →→ってことは/usrあたりをnfsで共有するとだいたいオッケー。rc.confに起動オプションを与える必要はあるけどまぁそれはやろう。
  • →→昔は/etcに設定ファイルを置いたりしてたけど、最近は全部/usr/local/etcに統一されてるから楽ちん。
  • →→まずいことがありそうだけどよくわからない。
  • パッケージ情報は見たい。pkg_infoしたら見れるようにしておきたい。

ここで、親マシン、子供マシンとマシン群を分ける。親マシンはnfsで共有される側のnfsサーバとなるマシン。パッケージの新規セットアップとかはこのマシンで行う。

子供マシンは親マシンを参照してnfsでマウントする側のマシン。

親マシンのセットアップ、子供マシンのマスターセットアップ、子供マシンのコピー、という順序で行おう。

ということで、親元マシンをまずはセットアップ、nfsの設定を行って、その後子供マシンを作成する。

今回はVMWare ESXiを利用したよ。

まずは親元のマシンでnfsの設定を行ってやる。

/usrごと引き渡そうと思ったけど、/usr/homeと/usr/portsは別のホストでnfsを利用しているので別個に/usr/以下のディレクトリをnfsで共有してやることにした。

親元マシンが/usr/portsとかも管理するなら/usrまるごとでもいいかも。

nfsの設定

nfsの設定で色々とはまってしまった。(/usr/homeをマウントしたまま/usrをexportしようとしたり、killall -hup mountdをしてなかったり・・・)

次に子供マシンのセットアップ。

次いで子供マシンをセットアップ。

このとき最初に、/usrとかなしで、/を親元からコピーすれば良いんじゃないか、という思い立つ。

/usrのほとんどを親元マシンからnfsでマウントするわけだから、起動に必要な基本的なファイル群だって別に必要ないんじゃないか。カーネルとか/bootとかその辺だけあれば起動できるんじゃないか、と。

結論からすると、できるにはできるが趣旨に反してくる上に面倒、ということでした。

まず起動まではこぎ着けることができる。FreeBSDのsysinstallからfdisk, label editorをつかって/, swap, /tmpのみ作成。Fixitを利用して親元マシンから/をdump and restoreしてコピー。

これでひとまずシステム自体は起動した。/varを作って/var/dbディレクトリがないとちょっと起動がしんどかったり、/ファイルシステムに/usr/以下のディレクトリ群を手動で作ったり、この時点で面倒になってしまった。

そんでいざ起動させようと思ったのだけど、dhcpでipaddressをもらう際に/usr/sbin/dhclientが必要だった。しょうがないのでこのバイナリだけコピーして動かしてみたら今度はchrootが必要だって怒られた。この時点で諦めた。

だったらまぁ、普通にインストールして、その上から上書きする形でnfsでmountする、ってのがお手軽だった。うん。

ということで普通にセットアップを行う。HDD容量は3GB。仮想マシンで作成。

変わった点といえばラベルの付け方。/usrと/varにほとんど割り振らないようにしてみた。

/に500MB, swapに1GB, /tmpに1GB, /varに30MB, /usrに残り、って感じ。

インストールが完了したらipアドレスを取得してnfsでマウントさせる。

fstabの内容が多い。

これで完了。pkg_infoしてみたら確かにいろいろ入ってるように見える。

注意すべきは/varについて。syslogが握っているファイルが実際の/varだったり(このときは/varを実HDDでマウントした状態であとからnfsでマウントしたので握りっぱなしだった)、nfs上の/var/logを子供のマシン側で書き換えたりしそうな点。この点は/etc/syslog.confでログをsyslogサーバに送ることにする。

またログローテートも止めておかないとまずそう。うん。共有するのは/var/pkgだけでもよさそう。/var/db/mount*とかも書き換えられちゃうしね。その辺は今後の様子を見ながら、ってことで。

やっぱり/varは共有しない方がいいっぽい。/var/runのpidsとか共有したってしょうがない。/var/db/pkgだけ共有するように変更した。

また、子供マシンの複製を行う際には、/etc/のrc.conf, syslog.conf, sysctl.conf, crontabあたりを先に書き換えておこう。タイムゾーンの設定も忘れずに。

以上。

コメントを残す