[linux]なんでもsvnで管理する2

今日時点で、もぎゃろぐのなかで一番たくさんブックマークのついている記事がこれ。

[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を書き戻して復旧しました(有償)。

これ、マジでシャレにならないので、皆様ご注意くださいませ^^;

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です