設定ファイルを自動でバックアップする - さくらのVPSを使ってみた

設定ファイル

一般的に設定は/etc配下のファイルで行います。設定を変更する場合/etc配下のファイルの修正になるわけですが、間違って修正しておかしくしてしまう場合に備えて修正前のファイルを残しておくのが無難です。

わかりやすいのは同じディレクトリ内にファイルをコピーしてから元のファイルを修正する方法です。例えば次のような感じです。

foo.conf    foo.conf.20130201    foo.conf.20130302

この方法だとdiffコマンドで変更箇所の確認が簡単にできますし、変更前のファイルが残るので設定を戻すのもファイルをコピーするだけで簡単です。

設定変更が少ないうちは良いのですが変更が多くなると余計なファイルがたくさんできてしまい、例えば、grepコマンドで検索するときに実際には使っていない部分まで引っかかってしまうなどの弊害が出てきます。

バージョン管理システム

バージョン管理システムというファイルの履歴を管理するためのシステムがあります。これを使うとファイルの履歴を保存し、古いバージョンの取り出しや、古いバージョンとの差分の参照ができます。しかもカレントのディレクトリに余計なファイルを作らなくてもよく、ファイルをコピーするやり方のメリットを残しながらデメリットを解消することができます。

バージョン管理ステムには過去によく使われていたCVS、Subversionや最近よく使われているGit、Mercurialなどがあります。

設定ファイルの管理にバージョン管理ステムを使う

バージョン管理ステムはソースコードの管理で利用することが多いですが、設定ファイルの管理に利用することもできます。

普通にバージョン管理ステムで設定ファイルを管理する方法もありますが、設定ファイル管理用のツールを使うことでより便利に管理することができます。管理用のツールでetckeeperというツールがあります。

etckeeperとは

etckeeperとはバージョン管理ステムを使って、/etc配下のファイルを自動で管理するツールです。

バージョン管理ステムを手動で使う場合は、設定ファイルを変更するたびに自分でコミットするという作業をしなくてはいけませんが、etckeeperを使うとパッケージマネージャー(yumなど)の利用時や日次で自動的にファイルをコミットしてくれます。

etckeeperをインストールする

etckeeperをインストールします。etckeeperを使うためにはバージョン管理ステムが必要になるので事前にインストールしておきます。私はGitを使っています。Gitはインストール済みでした。

etckeeperはyumコマンドでインストールできます。

$ sudo yum -y install etckeeper

etckeeperの設定ファイルが/etc/etckeeper/etckeeper.confにあるので環境に合わせて設定を修正します。私の場合は修正なしでそのまま利用できましたが、例えばバージョン管理ステムにGitではなくMercurialを使う場合には次のように修正します。

VCS="git"
  ↓
VCS="hg"

参考として、私が使っている設定を紹介します。

# The VCS to use.
#VCS="hg"
VCS="git"
#VCS="bzr"
#VCS="darcs"

# Options passed to git commit when run by etckeeper.
GIT_COMMIT_OPTIONS=""

# Options passed to hg commit when run by etckeeper.
HG_COMMIT_OPTIONS=""

# Options passed to bzr commit when run by etckeeper.
BZR_COMMIT_OPTIONS=""

# Options passed to darcs record when run by etckeeper.
DARCS_COMMIT_OPTIONS="-a"

# Uncomment to avoid etckeeper committing existing changes
# to /etc automatically once per day.
#AVOID_DAILY_AUTOCOMMITS=1

# Uncomment the following to avoid special file warning
# (the option is enabled automatically by cronjob regardless).
#AVOID_SPECIAL_FILE_WARNING=1

# Uncomment to avoid etckeeper committing existing changes to 
# /etc before installation. It will cancel the installation,
# so you can commit the changes by hand.
#AVOID_COMMIT_BEFORE_INSTALL=1

# The high-level package manager that's being used.
# (apt, pacman-g2, yum etc)
HIGHLEVEL_PACKAGE_MANAGER=yum

# The low-level package manager that's being used.
# (dpkg, rpm, pacman-g2, etc)
LOWLEVEL_PACKAGE_MANAGER=rpm

設定ファイルを管理するためのリポジトリを作成します。

$ sudo etckeeper init

設定ファイルをリポジトリに登録します。

$ sudo etckeeper commit "initial commit"

あとはetckeeperが勝手にファイルを管理してくれます。ファイルの履歴や差分を見たいときはGitの機能を使用します。例えば変更のログを確認する場合は次のようにします。

$ cd /etc
$ sudo git log

設定ファイルを修正したときにそのまま放置しておけば日次で自動的にコミットされますが、コミットログを残したい場合などは自分でコミットしてください。

$ sudo etckeeper commit "メッセージ"