彷徨えるフジワラ

年がら年中さまよってます

Solaris サーバ設定を構成管理

パーツの組み上げ/OpenSolaris インストールも無事完了。OpenSolaris Live CD の ISO イメージの容量が、手元にあった 640M CD-R メディアには収まらなくて、Blu-Ray への移行が進んでいるというご時勢に新品の 720MB CD-R メディアを買い足したことを、「無事」の範疇に含めるならなのだけど。

サーバ稼動させる上での諸々の設定経緯を記録すべく、まずは /etc 配下の Mercurial リポジトリ化を。beadm とか zfs snapshot とかでも設定前状態の保存は可能だけど、試行錯誤の差分を見るにはやっぱり構成管理ツールの出番でしょ。
とりあえず:

  • symbolic link ファイルは除外
  • hard link カウントが 2 以上のものは手動で hg add

という方針を立てる。Mercurial は symbolic link の管理にも対応しているけど、まぁ、気分の問題ということで。

/etc 直下で hg init したならば、最初に以下の手順で通常ファイルの hg add を実施。

$ cat /tmp/ignore
^./\.hg/
^./dev/
^./devices/
^./saf/zsmon/
^./svc/
^./zfs/zpool.cache
$ find . -type f -printf '%n %h/%f\n' |\
grep '^1 ' |\
sed 's/^1 //g' |\
grep -v -f /tmp/ignore |\
xargs hg add

上記の /tmp/ignore ファイルの内容の多くに関しては、実は当初から判明していたものではなく、事後のサービス有効化/無効化における更新差分を見て反映させたもの。ま、時系列に沿って書いてもしょうがないしね。

どうやらデカいファイルがあるらしく以下の警告が出るので、notices/LICENSE は hg revert で追加対象から除外しておく。

notices/LICENSE: files over 10MB may cause memory and performance problems
(use 'hg revert notices/LICENSE' to unadd the file)

次に、シンボリックリンクに hg status が反応しないように、以下の要領で .hgignore ファイルを作成。

$ find . -type l | sed 's@^\./@@g' > .hgignore

.hgignore の冒頭に "syntax:glob" の追加を忘れずに。

sed による変換の一手間をかけているのは、単に手馴れた Emacs がまだ入っていないので、ファイル名冒頭の "./" 除外を vi とかでゴリゴリ修正するのが面倒だったからで、特に深い意味は無い。

$ hg add .hgignore
$ hg status

わらわらと未知(u:unknown)ファイルが列挙されるので、後は個別に対応を。ハードリンクファイルの対応もこの段階で。

そういえば、/etc/rcN.d/ 配下のファイルって、Linux だとシンボリックリンク(最近のは違うのか?)だったけど、Solaris はハードリンクなのね。どちらにしても、/etc/init.d 側だけは hg add しておこう。

結局、冒頭の /tmp/ignore の内容も含めて、以下のエントリを .hgignore へ手動追加。

syntax: re

^rc[0-9S]\.d/
^dev/
^devices/
^saf/zsmon/
^svc/
^zfs/zpool.cache

hg status の u(unknown) 出力が妥当なところに落ち着いたなら、hg commit でまずは初期リビジョンを確定。ちなみに現在の hg status 出力は:

$ hg status
? certs/SUNWObjectCA
? crypto/certs/SUNWObjectCA
? inet/secret/wifiwepkey
? inet/wifi
? mnttab
? notices/LICENSE

mnttab は別ファイルシステムになっているので、これは意図的に無視。マウント情報がこのような扱いを受けているのは、ZONE や ZFS でのカーネル連携の際に、通常ファイルを改変するよりも、カーネルモジュール内で諸々の調停を完了した結果(多分 on memory な内容)をファイルとして見せる=特別なファイルシステムを経由する方が、整合性維持等の面で妥当だと判断したのだと思う。