Linux / Unixでは、/etc
ディレクトリは、ホスト固有のシステム全体の構成ファイルとディレクトリが配置されている場所です。これは、システム全体のすべての構成ファイルの中心的な場所です。構成ファイルは、プログラムの動作を制御するために使用されるローカルファイルです。静的である必要があり、実行可能なバイナリにすることはできません。
システム構成ファイルへの変更を追跡するために、システム管理者は通常、構成ファイルを変更する前にそのコピー(またはバックアップ)を作成します。そうすれば、元のファイルを直接変更して間違えた場合でも、保存したコピーに戻すことができます。
このガイドでは、OpenSUSELeap15でetckeeperをインストールおよび構成する方法を学習します。
etckeeperのインストール
システムが最新であることを確認してください
sudo zypper refresh
sudo zypper update -y
Etckeeperは、デフォルトのOpenSUSEリポジトリで利用できます。インストールするには、次のコマンドを使用します。これにより、依存関係もインストールされます:
sudo zypper install etckeeper
インストールを受け入れるように求められたらyと入力し、インストールが完了するのを待ちます。
このコマンドでインストールされたパッケージを確認します
~> rpm -qi etckeeper
Name : etckeeper
Version : 1.18.7
Release : bp153.1.17
Architecture: x86_64
Install Date: Thu Mar 3 17:44:56 2022
Group : System/Management
Size : 113726
License : GPL-2.0+
Signature : RSA/SHA256, Sat Mar 13 02:04:56 2021, Key ID 9c214d4065176565
Source RPM : etckeeper-1.18.7-bp153.1.17.src.rpm
Build Date : Sat Mar 13 02:04:32 2021
Build Host : lamb54
Relocations : (not relocatable)
Packager : https://bugs.opensuse.org
Vendor : openSUSE
URL : http://etckeeper.branchable.com/
Summary : Store /etc under Version Control
Description :
The etckeeper program is a tool to let /etc be stored in a git,
mercurial, bzr or darcs repository. It hooks into yum to automatically
commit changes made to /etc during package upgrades. It tracks file
metadata that version control systems do not normally support, but that
is important for /etc, such as the permissions of /etc/shadow. It is
quite modular and configurable, while also being simple to use if you
understand the basics of working with version control.
Distribution: SUSE Linux Enterprise 15 SP3
etckeeperの構成
etckeeperをインストールしたら、構成する必要があります。 etckeeper構成ファイルは、このパス/etc/etckeeper/etckeeper.confにあります。
お気に入りのテキストエディタを使用して開きます。私はvimを使用しています。
sudo vim /etc/etckeeper/etckeeper.conf
ファイル内の構成には、小さく明確な説明があります。オプションを使用すると、使用するバージョン管理システムを設定し、オプションを VSCに渡すことができます。;タイマーを有効または無効にするには、特殊ファイルの警告を有効または無効にし、etckeeperが既存の変更を/etc
にコミットすることを有効または無効にします インストール前。
また、フロントエンドまたは上位レベルのパッケージマネージャー(apt、yum、dnfなど)と基盤または低レベルのパッケージマネージャー(dpkg、rpmなど)をetckeeperと連携するように設定できます。強い> 。
ファイルに変更を加えた場合は、ファイルを保存してファイルを閉じます。
gitリポジトリを初期化しています
次に、/etcの変更を追跡するためにgitリポジトリを初期化します。 Etckeeperは、rootを使用して実行するか、sudoコマンドを使用するユーザーとして実行する必要があります。 /etcディレクトリに切り替えて初期化します。
cd /etc
sudo etckeeper init
これは私のサーバーの出力です
~> cd /etc
/etc> sudo etckeeper init
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint: git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint: git branch -m <name>
Initialized empty Git repository in /etc/.git/
次に、 etckeeperの手順を実行します 自動的に機能するには、最初のコミットを実行して、/etc
の変更の追跡を開始する必要があります。 、次のように。
sudo etckeeper commit "initial commit with original etc configs"
変更とコミット
最初のコミットを実行した後、 etckeeper git経由 現在、/etc
の変更を追跡しています ディレクトリ。次に、構成ファイルのいずれかに変更を加えてみます。
次に、次のコマンドを実行して、最後のコミット以降に変更されたファイルを表示します。このコマンドは基本的に、/etc
の変更を表示します コミット用にステージングされていない場合、 VCS gitと「ステータス」を意味します 」はgitサブコマンドです。
sudo etckeeper vcs status
変更されたファイルとともに、次のような出力が表示されるはずです。
/etc> sudo etckeeper vcs status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: hosts
modified: ssh/sshd_config
no changes added to commit (use "git add" and/or "git commit -a")
次に、次のように最近の変更をコミットします。
sudo etckeeper commit "updated hosts file and disallowed root ssh login"
これに似た出力が表示されるはずです
/etc> sudo etckeeper commit "updated hosts file and disallowed root ssh login"
[master 9984ce4] updated hosts file and disallowed root ssh login
Author: ec2-user <[email protected]>
2 files changed, 3 insertions(+), 3 deletions(-)
コミットログの表示
すべてのコミット(各コミットのIDとコメント)のログを表示するには、次のコマンドを実行できます。
sudo etckeeper vcs log
出力
/etc> sudo etckeeper vcs log
commit 9984ce498ba68d15c8e1ac84dbec7b3cb6e3202f (HEAD -> master)
Author: ec2-user <[email protected]>
Date: Thu Mar 3 18:02:25 2022 +0000
updated hosts file and disallowed root ssh login
commit 179ae7654496e9190c700c1ea4584d0ff05d3418
Author: ec2-user <[email protected]>
Date: Thu Mar 3 17:59:00 2022 +0000
initial commit with original etc configs
コミットの詳細を表示することもできます。コミットIDを指定するだけです。 (最初の数文字は機能します)次のようになります:
sudo etckeeper vcs show 9984ce498ba68d15c8e1ac84dbec7b3cb6e3202f
さらに、示されているように2つのコミットの違いを確認できます。これは、次のセクションに示すように変更を取り消す場合に特に便利です。矢印キーを使用して上下または左右にスクロールし、q
を押して終了できます。 。
sudo etckeeper vcs show 9984ce 179ae
変更を取り消す方法
etckeeperの本質 /etc
への変更を追跡するのに役立ちます ディレクトリを作成し、必要に応じて変更を元に戻します。 / etc / ssh / sshd_configでいくつかの間違いを犯したことに気付いたと仮定します 最後に編集したときに、構成構造のエラーのためにsshdサービスを再開できない場合は、特定のコミットで保存したコピーに戻すことができます(例: 9984ce )次のように構成が正しいと思われる場合。
sudo etckeeper vcs checkout 9984ce /etc/ssh/sshd_config
または、すべての変更をキャンセルして、/etc
の下にあるすべてのファイルのバージョンに戻すこともできます。 (およびそのサブディレクトリ)特定のコミットに保存されます。
sudo etckeeper vcs checkout 9984ce
変更を自動的にコミットできるようにする
Etckeeper Systemd用のサービスユニットとタイマーユニットも同梱されています 、パッケージに含まれています。 「自動コミット」を起動するには 」の/etc
の変更 ディレクトリ、etckeeper.timer
を起動するだけです 今のところユニットを作成し、次のように稼働しているかどうかを確認します。
sudo systemctl start etckeeper.timer
ステータスを確認する
/etc> sudo systemctl status etckeeper.timer
● etckeeper.timer - Daily autocommit of changes in /etc directory
Loaded: loaded (/usr/lib/systemd/system/etckeeper.timer; disabled; vendor preset: disabled)
Active: active (waiting) since Thu 2022-03-03 18:08:39 UTC; 4s ago
Trigger: Fri 2022-03-04 18:08:39 UTC; 23h left
Triggers: ● etckeeper.service
Docs: man:etckeeper(8)
Mar 03 18:08:39 opensusesrv systemd[1]: Started Daily autocommit of changes in /etc directory.
次に、図のようにシステムの起動時に自動起動できるようにします。
sudo systemctl enable etckeeper.timer
結論
このガイドでは、etckeeperをインストールして使用し、gitなどのバージョン管理システムを使用して/etcディレクトリの変更を管理する方法を学びました。