LinuxでEtckeeperを使用してバージョン管理で/ etcを管理する方法


Unix/Linuxディレクトリ構造では、/etc ディレクトリは、ホスト固有のシステム全体の構成ファイルとディレクトリが配置される場所です。これは、システム全体のすべての構成ファイルの中心的な場所です。構成ファイルは、プログラムの動作を制御するために使用されるローカルファイルです。静的である必要があり、実行可能なバイナリにすることはできません。

システム構成ファイルへの変更を追跡するために、システム管理者は通常、構成ファイルを変更する前に、構成ファイルのコピー(またはバックアップ)を作成します。そうすれば、元のファイルを直接変更して間違えた場合でも、保存したコピーに戻すことができます。

Etckeeperは、バージョン管理を使用して/etc を管理できるようにする、シンプルで使いやすいモジュール式の構成可能なツールのコレクションです。これにより、/etc ディレクトリの変更をgit(推奨されるVCS)、mercurial、bazaar、darcsリポジトリなどのバージョン管理システム(VCS)に保存できます。したがって、間違いがあった場合に、gitを使用して/etc に加えられた変更を確認または元に戻すことができます。

その他の機能は次のとおりです。

  1. it supports integration with front-end package managers including APT, YUM, DNF, Zypper and pacman-g2 to auto commit changes made to /etc during package upgrades.
  2. it tracks file metadata (such as the file permissions) that git does not usually support, but that is important for /etc, and
  3. it includes both a cron job and a systemd timer, which each can commit exiting changes to /etc automatically once per day.

LinuxにEtckeeperをインストールする方法

Etckeeperは、Debian、Ubuntu、Fedora、およびその他のLinuxディストリビューションで利用できます。これをインストールするには、図のようにデフォルトのパッケージマネージャーを使用します。このコマンドは、依存関係としてgitと他のいくつかのパッケージもインストールすることに注意してください。

$ sudo apt-get install etckeeper	#Ubuntu and Debian
# apt-get install etckeeper		#Debian as root user
# dnf install etckeeper			#Fedora 22+
$ sudo zypper install etckeeper	        #OpenSUSE 15

RedHat Enterprise Linux(RHEL)、CentOSなどのEnterprise Linuxディストリビューションでは、図のようにインストールする前にEPELリポジトリを追加する必要があります。

# yum install epel-release
# yum install etckeeper

LinuxでのEtckeeperの構成

上記のようにetckeeperをインストールしたら、その動作方法を構成する必要があり、そのメイン構成ファイルは/etc/etckeeper/etckeeper.confです。編集のために開くには、図のように、お気に入りのテキストベースのエディターを使用します。

# vim /etc/etckeeper/etckeeper.conf
OR
$ sudo nano /etc/etckeeper/etckeeper.conf

このファイルには、使用するバージョン管理システム(VCS)を設定し、オプションをVSCに渡すことができる、いくつかの構成オプション(それぞれに小さく明確な使用法の説明が含まれています)が含まれています。タイマーを有効または無効にするには、特別なファイルの警告を有効または無効にし、インストール前にetckeeperが/etc に既存の変更をコミットすることを有効または無効にします。

また、フロントエンドまたは上位レベルのパッケージマネージャー(apt、yum、dnfなど)と基盤または低レベルのパッケージマネージャー(dpkg、rpmなど)をetckeeperと連携するように設定できます。

ファイルに変更を加えた場合は、ファイルを保存してファイルを閉じます。

Gitリポジトリを初期化し、初期コミットを実行します

etckeeperを構成したので、次のようにGitリポジトリを初期化して/etc ディレクトリの変更の追跡を開始する必要があります。 etckeeperはroot権限でのみ実行できます。それ以外の場合はsudoを使用します。

$ cd 
$ sudo etckeeper init

次に、etckeeperが自動的に機能できるようにするための手順として、最初のコミットを実行して、次のように/etc の変更の追跡を開始する必要があります。

$ sudo etckeeper commit "first commit"

最初のコミットを実行した後、gitを介したetckeeperは、/etc ディレクトリ内の変更を追跡します。次に、構成ファイルのいずれかに変更を加えてみます。

次に、次のコマンドを実行して、最後のコミット以降に変更されたファイルを表示します。このコマンドは基本的に、コミット用にステージングされていない/etc の変更を表示します。ここで、VCSはgitを意味し、「status」はgitサブコマンドです。

$ sudo etckeeper vcs status

次に、最近の変更を次のようにコミットします。

$ sudo etckeeper commit "changed hosts and phpmyadmin config files"

すべてのコミット(各コミットのIDとコメント)のログを表示するには、次のコマンドを実行できます。

$ sudo etckeeper vcs log

コミットの詳細を表示することもできます。図のようにコミットIDを指定するだけです(最初の数文字が機能します)。

$ sudo etckeeper vcs show a153b68479d0c440cc42c228cbbb6984095f322d
OR
$ sudo etckeeper vcs show a153b6847

さらに、示されているように2つのコミットの違いを確認できます。これは、次のセクションに示すように変更を取り消す場合に特に役立ちます。矢印キーを使用して上下または左右にスクロールし、 q を押して終了できます。

$ sudo etckeeper vcs show 704cc56 a153b6847

etckeeperの本質は、/etc ディレクトリへの変更を追跡し、必要に応じて変更を元に戻すのに役立つことです。 /etc/nginx/nginx.confを最後に編集したときに間違いを犯し、構成構造のエラーのためにNginxサービスを再起動できないことに気付いた場合は、特定の場所に保存されたコピーに戻すことができます。次のように構成が正しいと思われる場合は、commit(704cc56など)を実行します。

$ sudo etckeeper vcs checkout 704cc56 /etc/nginx/nginx.conf

または、すべての変更をキャンセルして、特定のコミットに保存されている/etc (およびそのサブディレクトリ)内のすべてのファイルのバージョンに戻すこともできます。

$ sudo etckeeper vcs checkout 704cc56 

変更を自動的にコミットできるようにする方法

Etckeeperには、Systemd用のサービスユニットとタイマーユニットも同梱されています。 /etc ディレクトリの変更の「自動コミット」を起動するには、今のところ etckeeper.timer ユニットを起動し、次のように稼働しているかどうかを確認します。

$ sudo systemctl start etckeeper.timer
$ sudo systemctl status etckeeper.timer

そして、示されているように、システムの起動時に自動起動できるようにします。

$ sudo systemctl enable etckeeper.timer

詳細については、Etckeeperプロジェクトページ(https://etckeeper.branchable.com/)を参照してください。

このガイドでは、etckeeperをインストールして使用し、gitなどのバージョン管理システム(VCS)の/etc ディレクトリに変更を保存し、/etc 、必要に応じて。以下のフィードバックフォームを介して、etckeeperについての考えを共有したり、質問したりしてください。