2009-06-01

OpenBSD 4.5の/var/backupに感動した話

最近、色々考えることがあって、OpenBSD 4.5をまじめに使ってみている。 で、感動したのがOpenBSD(他の*BSDでも同じだと思うけど)は/var/backupに/etcの下にあるコンフィグファイルとかのバックアップを2世代分保持していて、変更があったらdaily cronで差分をroot宛てに"hostname.domain daily output"ていうsubjectで送信してくれる。つまり、このメールを後生大事にとっておくとマシンに万が一のことがあったら何とか復旧できるかもしれない。まぁ、こういう重要なファイルは自分でバックアップをとっておくとか、設定内容はちゃんとメモしておくとかすればいいんだけど、往々にしてそんなめんどくさいことは後回しになってしまう。なので、このシステムはずぼらな鯖管には嬉しすぎるシステムなわけ。 ただ、OpenBSDはあとからportsとかでがんがんパッケージを追加して環境を整えるべきなんだけど、当然後から入れた分については/var/backupの対象外になってしまう。で、/var/backupにファイルを配置する仕組みや差分をとる仕組みについてちょっと調べたのでメモしておく。 まず、daily cronでは/etc/securityというshell scriptを起動して、daily insecure outputを出力している。ただ、/etc/securityは/var/backup以下にあるfoo.currentと対象ファイルの差分を計算して、差分があればdiffの内容を出力し、出力結果をまとめて標準出力に出しているだけぽい。つまり、/var/backupでバックアップをとっておくファイルの指定はできない。man 8 securityを読むと
Check for changes in files listed in /etc/changelist
と書いてあったので、どうやら/etc/changelistをごにょごにょすると幸せになれるらしい。/etc/changelistはプレインテキストファイルなので中身をcatで見てみると、確かに/var/backupでバックアップをとっているファイルが列挙されている。ただ、いくつかのファイルは行頭に"+"が書かれていて、これはファイルの内容ではなく、MD5のチェックサムでバックアップをとっているとのこと。 なので、/etc/changelistの中にバックアップをとりたいファイルをフルパスで書いてあげれば、/etc/securityが起動したときに最初のバックアップを取ってくれる。でも、大体はdaily cronで/etc/securityが起動する前に設定ファイルを編集したいと思うので、そんなときは/etc/securityを実行してしまうか、バックアップファイルを作ってしまうのがよいかも。例えば、バックアップしたいファイルのフルパスが/path/to/fileだったらpath_to_fileてなる。なので、ファイル名はpath_to_file.currentになるはず。ここは/var/backupの中を直接のぞいてもいいし、/etc/securityの_fnchgという関数の定義を見てもいい。 というわけで今日のまとめ
  • daily insecurity outputは/etc/securityの出力結果
  • /var/backupでバックアップを取るためには/etc/changelistに対象ファイルのフルパスを書いておく
    • 行頭に+をつけるとファイルのMD5ハッシュ値を記録する
  • /etc/changelistに追加した直後にファイルを編集する必要がある場合は/etc/securityを実行するか、自分で/var/backupの下にバックアップファイルを作る
ちなみにMac OS Xにも/var/backupはあるけど、中身は空っぽ。多分、FreeBSDにも同じような仕組みがあって何らかの設定が必要なんじゃないかな。ちなみにこのエントリはOpenBSDの4.5で試した結果を書いているけど、他のバージョンでもほぼ同じだと思う。詳しくはmanを見てねて感じで。

0 件のコメント: