今日時点で、もぎゃろぐのなかで一番たくさんブックマークのついている記事がこれ。
[linux]なんでもsvnで管理する – もぎゃろぐ
なんでもといいながら実際には実行ファイルを管理するだけで、それなのにたくさんの方に見ていただいて申し訳ないです。
というわけで、設定ファイルも管理できる目処が立ったので、「[linux]なんでもsvnで管理する2」をお送りします。
設定ファイルの場合、/etc/httpd/conf/httpd.conf も管理したいし、/etc/aliasesも管理したい。だからといって/etc以下を全部svnにつっこむのは、さすがにちょっと怖いでしょ?というのが難点でした。
悩んでも分からなかったので、masuidriveの人に聞いてみました。
自分: 以前ブログで、設定ファイルとかもsvnで管理してるよ~的なことをいっていたじゃないですか。 Yuichiro: はいはい、やってます 自分: どういう単位になっているのでしょう? たとえば、/etcしたが丸ごとリポジトリに入っている? Yuichiro: いえ、別においてsym linkしてます 必要なファイルだけ。 apacheとかpostfixとか。 ホスト固有の設定とかありますしね 自分: ふむふむ。じゃあ設定ファイルは全部/var/setting/とかどこかにまとめてあるわけですね。 Yuichiro: そです。
なるほど。
適当なディレクトリを用意して、書き換えたくなりそうなファイルを一式コピーしてきます。
[daisuke@snares ~/tmp/setting] $ ls -la httpd/ total 20 drwxr-xr-x 5 root root 4096 May 10 11:19 . drwxr-xr-x 3 root root 4096 May 10 17:01 .. drwxr-xr-x 3 root root 4096 May 10 16:30 conf drwxr-xr-x 3 root root 4096 May 10 11:19 conf.d [daisuke@snares ~/tmp/setting] $ ls -la httpd/conf total 44 drwxr-xr-x 3 root root 4096 May 10 16:30 . drwxr-xr-x 5 root root 4096 May 10 11:19 .. -rw-r--r-- 1 root root 5975 May 10 16:30 httpd.conf -rw-r--r-- 1 root root 12959 May 10 11:19 magic [daisuke@snares ~/tmp/setting] $ ls -la httpd/conf.d/ total 52 drwxr-xr-x 3 root root 4096 May 10 11:19 . drwxr-xr-x 5 root root 4096 May 10 11:19 .. -rw-r--r-- 1 root root 778 May 10 11:19 manual.conf -rw-r--r-- 1 root root 1827 May 10 11:19 perl.conf -rw-r--r-- 1 root root 560 May 10 11:19 php.conf -rw-r--r-- 1 root root 1438 May 10 11:19 python.conf -rw-r--r-- 1 root root 10919 May 10 11:19 ssl.conf -rw-r--r-- 1 root root 352 May 10 11:19 webalizer.conf -rw-r--r-- 1 root root 299 May 10 11:19 welcome.conf
インポートします。
[daisuke@snares ~/tmp/setting] $ svn import file:///var/svn/repos/httpd_conf/ -m "initial import"
#インポートしてしまえば、もはやこれらのファイルは用済みです。
/var/setting/を用意して、ここにファイルをチェックアウトしてきます。
[daisuke@snares /var/setting] $ sudo svn co file:///var/svn/repos/httpd_conf/ ./ [daisuke@snares /var/setting] $ ls /var/setting/ httpd
元のファイルから、このファイルにsymlinkします。
[daisuke@snares /etc/httpd] $ ls conf logs run conf.d modules [daisuke@snares /etc/httpd] $ sudo cp -r conf conf.20080510.1104 [daisuke@snares /etc/httpd] $ sudo cp -r conf.d conf.d.20080510.1104 [daisuke@snares /etc/httpd] $ ls conf conf.20080510.1104 conf.d.20080505 logs run conf.20080505 conf.d conf.d.20080510.1107 modules [daisuke@snares /etc/httpd] $ cd conf [daisuke@snares /etc/httpd] $ ls [daisuke@snares /etc/httpd/conf] $ ls -la total 28 drwxr-xr-x 7 root root 4096 May 10 11:07 . drwxr-xr-x 8 root root 4096 May 10 11:07 .. -rw-r--r-- 1 root root 5975 May 10 16:30 httpd.conf -rw-r--r-- 1 root root 5809 May 10 16:26 httpd.conf~ -rw-r--r-- 1 root root 12959 May 10 11:19 magic drwxr-xr-x 3 root root 4096 May 5 23:41 ssl.crl drwxr-xr-x 3 root root 4096 May 5 23:41 ssl.crt drwxr-xr-x 3 root root 4096 May 5 23:41 ssl.csr drwxr-xr-x 3 root root 4096 May 5 23:41 ssl.key drwxr-xr-x 3 root root 4096 May 5 23:41 ssl.prm [daisuke@snares /etc/httpd/conf] $ sudo rm httpd.conf [daisuke@snares /etc/httpd/conf] $ sudo ln -s /var/setting/httpd/conf/httpd.conf ./ [daisuke@snares /etc/httpd/conf] $ sudo ln -s /var/setting/httpd/conf/magic ./
同様にしてhttpd/conf.dの下もsymlinkに置き換えました。
[daisuke@snares /etc/httpd/conf] $ ls -la total 28 drwxr-xr-x 7 root root 4096 May 10 11:07 . drwxr-xr-x 8 root root 4096 May 10 11:07 .. lrwxrwxrwx 1 root root 34 May 10 11:07 httpd.conf -> /var/setting/httpd/conf/http d.conf lrwxrwxrwx 1 root root 29 May 10 11:07 magic -> /var/setting/httpd/conf/magic drwxr-xr-x 3 root root 4096 May 5 23:41 ssl.crl drwxr-xr-x 3 root root 4096 May 5 23:41 ssl.crt drwxr-xr-x 3 root root 4096 May 5 23:41 ssl.csr drwxr-xr-x 3 root root 4096 May 5 23:41 ssl.key drwxr-xr-x 3 root root 4096 May 5 23:41 ssl.prm
[daisuke@snares /etc/httpd/conf] $ ls -la /etc/httpd/conf.d total 8 drwxr-xr-x 2 root root 4096 May 10 11:08 . drwxr-xr-x 8 root root 4096 May 10 11:07 .. lrwxrwxrwx 1 root root 37 May 10 11:08 manual.conf -> /var/setting/httpd/conf.d/manual.conf lrwxrwxrwx 1 root root 35 May 10 11:08 perl.conf -> /var/setting/httpd/conf.d/perl.conf lrwxrwxrwx 1 root root 34 May 10 11:08 php.conf -> /var/setting/httpd/conf.d/php.conf lrwxrwxrwx 1 root root 37 May 10 11:08 python.conf -> /var/setting/httpd/conf.d/python.conf lrwxrwxrwx 1 root root 34 May 10 11:08 ssl.conf -> /var/setting/httpd/conf.d/ssl.conf lrwxrwxrwx 1 root root 40 May 10 11:08 webalizer.conf -> /var/setting/httpd/conf.d/webalizer.conf lrwxrwxrwx 1 root root 38 May 10 11:08 welcome.conf -> /var/setting/httpd/conf.d/welcome.conf
このあたりで、システムがちゃんと動いているか確認。
[daisuke@snares /etc/httpd/conf] $ sudo /etc/rc.d/init.d/httpd restart Password: Stopping httpd: [ OK ] Starting httpd: [ OK ]
ブラウザで各ページを見て回って…大丈夫そうです。
以後は、/etc下は書き換えずに、/var/setting/下のファイルを書き換えるようにします。
で、なにか致命的なミスをしたことに気づいたら、
[daisuke@snares /var/setting/httpd/conf] $ sudo rm httpd.conf [daisuke@snares /var/setting/httpd/conf] $ sudo svn update Restored 'httpd.conf' At revision 4.
とすることで、ちゃんと動いていた頃のシステムに戻ることができます。
おまけ:この前後に起こった悲劇。
自分: えらいことになった^^; Yuichiro: ?? 自分: /etcを丸ごとリポジトリに入れる実験をしていたのですが。 元に戻そうと思って、うっかり sudo rm -f /etc とやってしまって、 /etc/passwdがないから、sudo mv etc.20080505.1653 etc と戻すことができない。 Yuichiro: .......
さくらインターネットさんのサポートで、HDDを別サーバにつないでいただいて/etcを書き戻して復旧しました(有償)。
これ、マジでシャレにならないので、皆様ご注意くださいませ^^;