以下省略!

タイダルウ(ry ほぼ毎日1記事執筆運動実施中。 ※記事に広告(アフィリエイト)リンクを掲載している場合があります。

etckeeperを使ってみる

f:id:abyssluke:20181028173510p:plain:w200:left/etc内のファイルをgit等でバージョン管理できるツール、etckeeperを入れてみた。万一何かあったときに元に戻せたり、外部にバックアップできたり。続きを読むから。

目次

インストール

Ubuntu 18.04の場合。

$ sudo apt install etckeeper

Ubuntu 18.04環境ではデフォルトで使用するバージョン管理システムがgitに設定されており、インストール後自動的にinitされるようになっている。もしBazaarなどの他のバージョン管理システムを使いたい場合は一旦uninitしてから設定を変更しinitしなおす必要がある。以下では使用するバージョン管理システムがデフォルトのgitであることを想定している。

適当にいじってコミットしてみる

$ sudo vi /etc/test.tmp
$ sudo etckeeper commit "Test commit"

commitの次にコミットメッセージを記載する。

何かあったときの戻し方

もしも弄った部分(コミット)を戻したい場合はetckeeper vcs logやetckeeper vcs diffなどで戻したいコミットを確認し、etckeeper vcs revert (コミットID)で戻せばいい。
以下はコミットID 048cfb456ef701160c35a9cef50304798082442eに戻したい場合の例。

$ sudo etckeeper vcs log
$ sudo etckeeper vcs diff 048cfb456ef701160c35a9cef50304798082442e
$ sudo etckeeper vcs revert 048cfb456ef701160c35a9cef50304798082442e

etckeeper vcs 〜コマンドは/etcがカレントディレクトリな状態でgit 〜コマンドを叩くのと同じ。

パッケージマネージャーで/etcに変更が加わるとコミットされる

aptなどのパッケージマネージャーで/etc内のファイル等が操作された場合、自動的にコミット処理が行われる。この場合コミットログには"committing changes in /etc after apt run"と共にインストール・アンインストールされたパッケージ名が記録される(されない場合もあるが)。

リモートリポジトリ(非公開であること!)を設定する

もし外部(リモートリポジトリ)にバックアップ(プッシュ)する場合はetckeeperの設定を変更しプッシュ先を追加する必要がある。設定を行うとコミットと同時にプッシュされるようになる。
ここで指定するリポジトリ必ず非公開リポジトリにすべし(ハッシュ化されたパスワード(shadow)などが含まれるため)。
root権限で実行される故、SSHでプッシュする場合は/root/.ssh/configなりであらかじめ鍵ファイル(パスワードなし)などを設定しておいたほうがいいかもしれない。

$ sudo vi /etc/etckeeper/etckeeper.conf
$ tail -n4 /etc/etckeeper/etckeeper.conf
# To push each commit to a remote, put the name of the remote here.
# (eg, "origin" for git). Space-separated lists of multiple remotes
# also work (eg, "origin gitlab github" for git).
PUSH_REMOTE="origin"
$ sudo etckeeper vcs remote add origin git@example.com:hogehoge/etcfiles.git
$ sudo etckeeper commit "Enabled push to remote"

設定後は正常に動作するかどうか確かめるため一度テストコミットしたほうがいいかも。

systemdのタイマー機能で自動的にバックアップする

初期設定ではcron.dailyで自動的にコミット(&プッシュ)されるようになっているが、これをsystemdのタイマー機能で自動的にコミット(&プッシュ)されるようにする。動作タイミングは起動から15分後、その後起動したままの場合は1日(24時間)おきに動作する。systemdで行うようにするため、重複するcronでの処理はetckeeper.confで機能停止しておく。

$ sudo systemctl enable etckeeper.timer
$ sudo vi /etc/etckeeper/etckeeper.conf
$ cat /etc/etckeeper/etckeeper.conf
〜
AVOID_DAILY_AUTOCOMMITS=1
〜