「Etckeeper」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(序文を更新)
(→‎使用方法: 情報を更新)
18行目: 18行目:
 
== 使用方法 ==
 
== 使用方法 ==
   
設定後、{{ic|/etc}} のリポジトリを初期化する必要があります:
+
設定後、{{ic|/etc}} パスのリポジトリを初期化する必要があります:
 
# etckeeper init
 
# etckeeper init
   
  +
そして、最初のコミットを実行して変更を追跡します。これは etckeeper が自動的に動作できるようにするために必要な手順です。
''etckeeper'' バージョン 1.18.3-1 現在、パッケージのインストール・アップデート・削除時に pre-install と post-install の [[pacman#フック|pacman フック]]が自動的に実行されるようになっています。手動で[[#ラッパースクリプト|ラッパースクリプト]]を設定する必要はありません。
 
  +
# etckeeper commit "first commit"
   
  +
''etckeeper'' バージョン 1.18.3-1 では、パッケージのインストール、更新、および削除時に、インストール前およびインストール後の [[pacman フック]] が自動的に実行されます。手動 [[#ラッパースクリプト]] で行う必要ありません。
{{ic|/etc}} への他の変更を記録したい場合、手動で変更をコミットするか (使用するコマンドは {{man|8|etckeeper}} の man ページを見てください)、あるいは以下のように定期的に記録するようにしてください。
 
  +
  +
{{ic|/etc}} パスへの他の変更を追跡するには、変更を手動でコミットするか (コマンドについては {{man|8|etckeeper}} のマニュアルページを参照)、または以下の一時的な解決策のいずれかを使用する必要があります:
  +
  +
{{Warning|git checkout/rebase/merge/cherry-pick/... により、ファイルのアクセス許可が壊れ、たとえば SSH/sudo ログインが拒否される可能性があります。 }}
  +
''git'' はファイルのパーミッションを直接保存できないため、''etckeeper'' によって処理され、チェックアウト後に ''etckeeper init'' を再度実行してパーミッションを復元する必要があります。
  +
あるいは、[[systemd#systemd-tmpfiles - 一時ファイル]] を使用してアクセス許可を保存することもできます。
   
 
=== systemd ===
 
=== systemd ===

2024年2月11日 (日) 00:56時点における版

関連記事

Etckeeper は、リポジトリ内の /etc/ を追跡するためのツールのコレクションです (GitMercurialBazaar、または Darcs がサポートされています) pacman フック は、システムのアップグレード前に変更を自動的にコミットし、ファイルのアクセス許可が追跡されます。これはバージョン管理では通常サポートされていませんが、/etc/shadow などのファイルにとっては重要です。

インストール

etckeeper パッケージをインストールしてください。

設定

使用するバージョン管理システム (デフォルトは git) などのオプションは /etc/etckeeper/etckeeper.conf で設定できます。

Etckeeper は etckeeper.confLOWLEVEL_PACKAGE_MANAGER あるいは HIGHLEVEL_PACKAGE_MANAGER として pacman を使うことをサポートしています。

使用方法

設定後、/etc パスのリポジトリを初期化する必要があります:

# etckeeper init

そして、最初のコミットを実行して変更を追跡します。これは etckeeper が自動的に動作できるようにするために必要な手順です。

# etckeeper commit "first commit"

etckeeper バージョン 1.18.3-1 では、パッケージのインストール、更新、および削除時に、インストール前およびインストール後の pacman フック が自動的に実行されます。手動 #ラッパースクリプト で行う必要ありません。

/etc パスへの他の変更を追跡するには、変更を手動でコミットするか (コマンドについては etckeeper(8) のマニュアルページを参照)、または以下の一時的な解決策のいずれかを使用する必要があります:

警告: git checkout/rebase/merge/cherry-pick/... により、ファイルのアクセス許可が壊れ、たとえば SSH/sudo ログインが拒否される可能性があります。

git はファイルのパーミッションを直接保存できないため、etckeeper によって処理され、チェックアウト後に etckeeper init を再度実行してパーミッションを復元する必要があります。 あるいは、systemd#systemd-tmpfiles - 一時ファイル を使用してアクセス許可を保存することもできます。

systemd

パッケージにはサービス・タイマーユニットが付属しています。etckeeper.timer有効化することで使えます。

タイマーの使い方について詳しくは systemd/タイマーを見てください。ユニットを編集したい場合は systemd#ユニットファイルの編集を参照してください。

Cron

配布されているソースには cron スクリプト が含まれています。スクリプトを使うことで定期的に自動コミットできます。

例えば、1日毎に実行するには:

  1. cron をインストール・有効化してください。
  2. /etc/cron.daily/script_name としてスクリプトを作成。
  3. root でファイルに実行権限を付与 (# chmod u+x /etc/cron.daily/script_name)。

詳しくは cron#Croniecron を見てください。

Incron

/etc のファイルに変更が加えられたときに incron を使って自動的に変更をコミットするように設定することもできます。inotify(7) によるファイルシステム通知を利用します。

詳しくは [1]incrond(8) を見てください。

リモートリポジトリに自動プッシュ

警告: etckeeper のリポジトリを誰でもアクセスできるリモートリポジトリにプッシュしてしまうと、パスワードハッシュや秘密鍵などの機密情報が漏洩する可能性があります。気をつけて使ってください。

/etc/.git のローカルバックアップを作るだけでなく、コミットするたびに GitHub などのリモートリポジトリに変更を自動的にプッシュすることもできます。

まず、etc/.git を編集してリモートの GitHub リポジトリを追加:

# git remote add origin https://github.com/user/repo.git

そして、フックを使用・設定してプッシュするようにしてください。

etckeeper に付属しているフックを使う

/etc/etckeeper/etckeeper.confPUSH_REMOTE オプションを編集して、etckeeper からプッシュしたいリモートリポジトリの名前を指定してください。例:

PUSH_REMOTE="origin"

スペースで区切ることで複数のリモートリポジトリを追加できます。

カスタムフックを使う

/etc/etckeeper/commit.d/40github-push ファイルを作成 (実行権限を付与してください):

#!/bin/sh
set -e

if [ "$VCS" = git ] && [ -d .git ]; then
  cd /etc/
  git push origin master
fi

ラッパースクリプトやエイリアスを実行するたびに、GitHub リポジトリに自動的に変更がコミットされます。

ラッパースクリプト

頻繁に実行するコマンドの変更を追跡したい場合 (例: command)、シンプルなラッパースクリプトで自動化できます。例えば、以下のファイルを作成:

/usr/local/bin/checketc.sh
#!/bin/bash

etckeeper pre-install
command
etckeeper post-install

作成したら実行可能権限を付与してください。また、bash のエイリアスや関数で Etckeeper のコマンドを呼び出すこともできます。詳しくは Bash#エイリアスを見てください。

ノート: Etckeeper バージョン 1.18.3-1 以前では Pacman による変更を追跡するのに上記のラッパースクリプトが必要でした。現在 Pacman はフックによってコマンドを自動的に実行します。