前書き

Linuxエコシステムでは、ソフトウェアを定期的にインストール、保守、およびアップグレードする必要があります。 ただし、ローカル構成ファイルに加えられた変更の追跡は依然として必要です。 変更を行う前に構成ファイルのコピーを作成する古いスタンバイとは異なり、etckeeperでは、ソフトウェア開発プロジェクトの場合と同様に、Git、Mercurial、Bazaar、またはDarcsリポジトリを使用して変更を追跡できます。

さらに、etckeeperはyumとシームレスに統合され、パッケージのアップグレード時に `+ / etc +`ディレクトリの内容に加えられた変更を自動的にコミットします。 これにより、必要に応じて、または必要に応じて、構成ファイルの以前のバージョンに戻すことができます。

前提条件

このチュートリアルを実行するには、次のものが必要です。

etckeeperは、ファイルの許可、メタデータ、および変更のみを追跡します。 ファイルの復元を実行するためのすぐに使用できるツールは提供されていないため、リビジョン管理システムの基本を理解する必要があります。

この記事では、etckeeperが使用するデフォルトのVCSであるGitを使用します。 Gitとバージョン管理に関するメモリを更新する場合は、https://www.digitalocean.com/community/tutorial_series/introduction-to-git-installation-usage-and-branches [このチュートリアルシリーズ]を確認できます。 このガイドではGitを直接使用しませんが、Git固有のコマンドをetckeeperから実行できます。

ステップ1-etckeeperのインストール

このステップでは、etckeeperをインストールします。

まず、CentOS 7サーバーでEPEL(Enterprise Linuxの追加パッケージ)を有効にする必要があります。これは、etckeeperを含むリポジトリーであるためです。

sudo yum update && sudo yum install epel-release

次に、etckeeperをインストールします。

sudo yum update && sudo yum install etckeeper

GitにはデフォルトでCentOS 7が付属しているため、インストールする必要はありません。

ステップ2-etckeeperの構成のカスタマイズ

etckeeperをインストールしたら、次のステップは `+ / etc / etckeeper / etckeeper.conf +`設定ファイルを更新することです。

まず、Nanoまたはお好みのテキストエディターで構成ファイルを開きます。

sudo nano /etc/etckeeper/etckeeper.conf

以下は、etckeeperが適切に機能するために設定する必要がある重要な変数です。 残りの設定はコメントのままにしてください。

最初に、コメント「#The VCS to use。」の下で、 `+ VCS =” git “`のコメントが解除されていることを確認します(つまり、 行の先頭に「#+」はありません)。 gitはCentOS 7上のetckeeperインストールで使用されるデフォルトのVCSであるため、デフォルトではこのオプションはすでにコメント解除されています。

etckeeperが1日に1回自動的に変更をコミットしないようにするには、 `+ AVOID_DAILY_AUTOCOMMITS = 1 +`のコメントを外してください。 これを設定するかどうかを決定するには、システム構成ファイルが頻繁に変更されるかどうかを考慮する必要があります(例: テスト環境は頻繁に毎日変わります)。 その場合、その行をコメントアウトする必要があります。それ以外の場合は、コメントのままにしておくことができます。

`+ / etc `にコミットされていない変更があるときにyumのインストールを中止したい場合は、 ` AVOID_COMMIT_BEFORE_INSTALL = 1 +`のコメントを外してください。 これには、yumを使用してパッケージをインストールする前に手動でコミットする必要があります。 それ以外の場合は、コメントアウトしたままにして、インストールを実行する前にyumが更新されたファイルを自動的にコミットします。 この選択は完全にあなた次第です。それはあなたの環境と変化の量に大きく依存します。 これは前の例とよく似ていますが、今回はパッケージをインストールする頻度に依存する点が異なります。

オプションの更新が完了したら、ファイルを保存して閉じます。

ステップ3-Gitリポジトリーの初期化

このステップでは、 `+ / etc +`でGitリポジトリを初期化します。

まず、 `+ / etc +`ディレクトリに移動します。

cd /etc

次に、次のコマンドを実行してリポジトリを初期化します。

sudo etckeeper init

次のメッセージが表示されます。

Initialized empty Git repository in /etc/.git/

これで、 + .git`ディレクトリと + / etc`内の `+ .gitignore`ファイルが表示されます。 たとえば、次のコマンドを実行した場合:

ls -la /etc | grep git

出力に含まれるこれらの行を見るはずです:

drwx------.  7 root     root       4096 Apr  2 21:42 .git
-rw-r--r--.  1 root     root        874 Apr  2 21:42 .gitignore

注意: `+ .git +`はローカルシステムで保護する必要があります(したがって、スーパーユーザーのみの読み取り、書き込み、実行のアクセス許可)。バージョン管理システムはそれ自体でファイルのアクセス許可を追跡しないため、etckeeperは代わりにこの機能を提供します。

`+ .git +`ディレクトリには、Git自体の使用を目的としたいくつかの設定ファイルと説明ファイル、およびその他のサブディレクトリが含まれています。 `git 1つの例外を除き、手動で編集することはお勧めできません。

バージョン管理を使用して追跡したくない特定のファイルがある場合は、それらを手動で.gitignoreファイルに追加できます。 ファイルの追跡を停止するには、まず編集のために「+ .gitignore +」を開きます。

sudo nano .gitignore

ファイルの最後の行は、 `+#end section managed by etckeeper +`になります。 無視するファイルのファイル名を、このファイルの上に1行に1つずつ追加します。

# end section managed by etckeeper

次に、ファイルを保存して閉じます。

さらに、以前にローカルリポジトリを初期化したため、現在gitで管理されているキャッシュからこれらのファイルを削除する必要があります。

etckeeper vcs rm --cached

以前に `+ .gitignore +`に追加したファイルの数だけ上記のコマンドを繰り返します。

ステップ4-Gitリポジトリーに「+ / etc +」をコミットする

このステップでは、最初の `+ / etc +`をコミットします。

最初のコミットの追加は簡単です。次のコマンドを入力するだけです。 厳密には必要ではありませんが、後で簡単に識別できるように、各コミットに説明を追加する必要があります。

sudo etckeeper commit ""

次に、出力されたファイルのリストがリポジトリにコミットされていることを確認します(以下を参照)。

create mode 100644 selinux/targeted/modules/active/modules/dnsmasq.pp
create mode 100644 selinux/targeted/modules/active/modules/dnssec.pp
create mode 100644 selinux/targeted/modules/active/modules/docker.pp
create mode 100644 selinux/targeted/modules/active/modules/dovecot.pp

ステップ5-変更を行う

このステップでは、 `+ / etc +`のファイルにいくつかの変更を加えてコミットします。 次のステップでは、これらの変更を元に戻します。

まず、選択したファイルの内容を変更します。 たとえば、 `+ / etc / hosts +`の末尾にIPアドレスとそれに関連するホスト名で構成される行を追加することにより、ローカルホスト名解決に新しいホストを追加できます。

まず、ファイルを開きます。

sudo nano /etc/hosts

次に、ファイルの最後に次の行を追加します。

192.168.0.2    node01

ファイルを保存して閉じます。 それでは、この変更をコミットしましょう。

sudo etckeeper commit ""

最後に、ファイルの権限を変更します。

sudo chmod 640 /etc/hosts

そして、所有権を変更します(* sammy *を自分のユーザー名に置き換えてください)。

sudo chown : /etc/hosts

`+ / etc / hosts +`の現在のパーミッションと所有権を確認できます。

ls -l /etc/hosts

出力は次のようになります。

-rw-r----- 1 sammy sammy 675 Apr 17 15:01 /etc/hosts

ステップ6-変更を元に戻す

次に、ファイルとそのコンテンツだけでなく、その許可と所有権も含めて、etckeeperの復元機能をテストしましょう。

まず、これまでに行ったコミットをリストします。

sudo git log --pretty=oneline

出力の最初の列は、コミットを一意に識別するSHA-1ハッシュです。 2番目は、以前に変更を送信したときに使用した説明です。

出力はこれと似ているはずで、ハッシュも異なります。

d0958fbe4d947a6a3ad98141f9fe89d1fd1a95c4 Added a line to the hosts file
76c193da740a3e137fa000773a79de8bb5c898b7 First commit of my /etc directory

各コミットのハッシュに注意してください。 それらを使用して、以前の状態にロールバックします。

このチュートリアルを開始する前の外観に「+ / etc / hosts +」をロールバックしましょう。 赤の文字を、最初のコミットに対応するSHA-1ハッシュに置き換えます。 SHA-1ハッシュ文字列全体を指定する必要はありません。それを一意に識別する少数の文字が行います。

sudo etckeeper vcs checkout  /etc/hosts

これで、 `+ / etc / hosts +`の内容、権限、所有権を確認して、元に戻されたことを確認できます。

ファイルの最後の数行を見てください。

tail /etc/hosts

期待どおり、追加した `+192.168.0.2 node01 +`行がないこのような出力が表示されるはずです。

...

# The following lines are desirable for IPv6 capable hosts
::1 test-etckeeper test-etckeeper
::1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6

`+ / etc / hosts +`の現在のパーミッションと所有権をもう一度確認してください。

ls -l /etc/hosts

次のような出力が表示されます。

-rw-r--r-- 1 root root 704 Apr 17 15:01 /etc/hosts

ファイルの内容、および権限と所有権が正しく復元されました。

結論

このチュートリアルでは、Gitリポジトリに `+ / etc +`ディレクトリを保存する優れたツールであるetckeeperの使用方法を説明しました。 Bazaar、Mercurial、またはDarcsリポジトリに使用することもできます。

選択したVCSに関係なく、etckeeperは設定ファイルを管理し、変更を元に戻したり機能を変更する必要がある場合に常に以前の状態にロールバックできるようにします。