Linuxインフラやっている人はconfファイルよくいじりますよね。 が、confファイルってどうしてもわかりづらくなる。 いつどこを書き換えたかが分からなくなってしまうのですね。 構成管理ツール使うのもいいけど、緊急時とかテストサーバーだと直接書き換えてしまうこともあるでしょう。

そこで、etcディレクトリを丸々gitで管理しちゃえばいいという発想が出てきますね。 それがetckeeperというツールです。

etckeeperはそのまんま、/etc/配下のファイルをvcsで管理してくれるツールでして。 svnは対応してませんがgit、mercurialなどのvcsが使えます。

インストール

yumでインストールしてsudo etckeeper initと叩くだけ。
sudo yum install etckeeper
sudo etckeeper init

使い方

特に何かする必要は無いです。 毎日自動的に/etc/配下をgit commitしてくれます。 /etc/cron.daily/etckeeperを参考に/etc/cron.hourlyに置けば毎時になるかと。 毎時でetcを書き換えるか、と言われると微妙ですが。 もちろん変更が無ければcommitされません。するものがありません。

yumを叩いた時は自動commitしてくれます。
etckeeper: pre transaction commit
  更新します              : httpd-tools-2.4.6-45.el7.centos.4.x86_64                            1/6
  更新します              : httpd-2.4.6-45.el7.centos.4.x86_64                                  2/6
  更新します              : 1:mod_ssl-2.4.6-45.el7.centos.4.x86_64                              3/6
  整理中                  : 1:mod_ssl-2.4.6-45.el7.centos.x86_64                                4/6
  整理中                  : httpd-2.4.6-45.el7.centos.x86_64                                    5/6
  整理中                  : httpd-tools-2.4.6-45.el7.centos.x86_64                              6/6
etckeeper: post transaction commit

gitコマンドを使う

etckeeper vcs xxxという形で対象vcsのコマンドが使えます。 gitの場合sudo etckeeper vcs logとすればログが見れるし、 sudo etckeeper vcs statusとすれば変更ファイルが見れると。 仕組み的には/etc配下にgit立てているわけですから、cd /etcしてsudo git logとかsudo git statusでも同じ結果になります。

[tea@zero-natasha etc]$ sudo git status
# On branch master
# Changes not staged for commit:
#   (use "git add ..." to update what will be committed)
#   (use "git checkout -- ..." to discard changes in working directory)
#
#       modified:   hosts
#       modified:   httpd/conf/httpd.conf
#
no changes added to commit (use "git add" and/or "git commit -a")

まとめ

普段使う事ってそうそう無いかと思いますが、いざって時のために入れておくと良いかと。 個人ならともかく、企業でやらかすとどえらいことになりますから。 ちなみに自分の個人開発環境はターミナルログイン時、bashrcにcrontab -lを/etc/配下にリダイレクトさせてます。 crontabは/var/spoolとかに格納されるけど、コマンド間違えると容赦なく消えますからね。