「Etckeeper」の版間の差分
(英語最新版に同期) |
(同期) |
||
1行目: | 1行目: | ||
[[Category:システム管理]] |
[[Category:システム管理]] |
||
[[en:Etckeeper]] |
[[en:Etckeeper]] |
||
+ | {{Related articles start}} |
||
− | Etckeeper は {{ic|/etc}} をバージョン管理します。 |
||
+ | {{Related|Git}} |
||
+ | {{Related|Cron}} |
||
+ | {{Related articles end}} |
||
+ | [http://etckeeper.branchable.com/ Etckeeper] は {{ic|/etc}} をバージョン管理します。 |
||
== インストール == |
== インストール == |
||
− | + | {{Pkg|etckeeper}} パッケージを[[インストール]]してください。 |
|
== 設定 == |
== 設定 == |
||
− | メインの設定ファイルは {{ic|/etc/etckeeper/etckeeper.conf}} です。このファイルで使用する VCS などの設定ができます。 |
||
− | + | 使用するバージョン管理システム (デフォルトは [[git]]) などのオプションは {{ic|/etc/etckeeper/etckeeper.conf}} で設定できます。 |
|
+ | |||
− | # etckeeper init |
||
+ | Etckeeper は {{ic|etckeeper.conf}} で {{ic|LOWLEVEL_PACKAGE_MANAGER}} あるいは {{ic|HIGHLEVEL_PACKAGE_MANAGER}} として [[pacman]] を使うことをサポートしています。 |
||
== 使用方法 == |
== 使用方法 == |
||
+ | 設定後、{{ic|/etc}} のリポジトリを初期化する必要があります: |
||
− | Etckeeper は {{ic|etckeeper.conf}} で {{ic|LOWLEVEL_PACKAGE_MANAGER}} として pacman の使用をサポートしています。pacman にはフック機能が存在しないため {{ic|HIGHLEVEL_PACKAGER_MANAGER}} として pacman を使うことは不可能です。そのため、手動で変更をコミットするか、以下のどれかの方法を使用する必要があります。 |
||
+ | # etckeeper init |
||
+ | ''etckeeper'' バージョン 1.18.3-1 現在、パッケージのインストール・アップデート・削除時に pre-install と post-install の [[pacman#フック|pacman フック]]が自動的に実行されるようになっています。手動で[[#ラッパースクリプト|ラッパースクリプト]]を設定する必要はありません。 |
||
− | === Pacman フック === |
||
− | {{Pkg|pacman}} 5.0.0 から、[[pacman]] にはフックのサポートが追加されています [https://projects.archlinux.org/pacman.git/tree/NEWS?h=v5.0.0]。トランザクションの前後に etckeeper を自動的に実行するには、以下の2つのフックファイルを作成してください。まずは hooks ディレクトリを作成する必要があります: |
||
− | # mkdir -p /etc/pacman.d/hooks |
||
+ | {{ic|/etc}} への他の変更を記録したい場合、手動で変更をコミットするか (使用するコマンドは etckeeper(8) の man ページを見てください)、あるいは以下のように定期的に記録するようにしてください。 |
||
− | {{hc|/etc/pacman.d/hooks/etckeeper-pre.hook|2= |
||
− | [Trigger] |
||
− | Operation = Install |
||
− | Operation = Upgrade |
||
− | Operation = Remove |
||
− | Type = Package |
||
− | Target = * |
||
+ | === systemd === |
||
− | [Action] |
||
− | Description = Etckeeper Pre-install |
||
− | Depends = etckeeper |
||
− | When = PreTransaction |
||
− | Exec = /usr/bin/etckeeper pre-install}} |
||
+ | パッケージにはサービス・タイマーユニットが付属しています。{{ic|etckeeper.timer}} を[[systemd/タイマー#管理|有効化]]することで使えます。 |
||
− | {{hc|/etc/pacman.d/hooks/etckeeper-post.hook|2= |
||
− | [Trigger] |
||
− | Operation = Install |
||
− | Operation = Upgrade |
||
− | Operation = Remove |
||
− | Type = Package |
||
− | Target = * |
||
+ | タイマーの使い方について詳しくは [[systemd/タイマー]]を見てください。ユニットを編集したい場合は [[systemd#ユニットファイルの編集]]を参照してください。 |
||
− | [Action] |
||
− | Description = Etckeeper Post-install |
||
− | Depends = etckeeper |
||
− | When = PostTransaction |
||
− | Exec = /usr/bin/etckeeper post-install}} |
||
+ | === Cron === |
||
− | pacman のフックに関する詳細は {{ic|man alpm-hooks}} を参照。 |
||
+ | 配布されているソースには [https://github.com/joeyh/etckeeper/blob/master/debian/cron.daily cron スクリプト] が含まれています。スクリプトを使うことで定期的に自動コミットできます。 |
||
− | === systemd === |
||
+ | 例えば、1日毎に実行するには: |
||
− | パッケージにはサービスとタイマーユニットが含まれています。{{ic|etckeeper.timer}} を[[systemd/タイマー#管理|有効化]]してください。 |
||
+ | # [[cron]] をインストール・有効化してください。 |
||
+ | # {{ic|/etc/cron.daily/''script_name''}} としてスクリプトを作成。 |
||
+ | # ''root'' でファイルに実行権限を付与 ({{ic|# chmod u+x /etc/cron.daily/''script_name''}})。 |
||
+ | 詳しくは [[cron#cronie]] や [[cron]] を見てください。 |
||
− | タイマーの詳細は [[systemd/タイマー]]を、付属のユニットを編集する場合は [[systemd#ユニットファイルの編集]]を見て下さい。 |
||
− | === |
+ | === Incron === |
+ | {{ic|/etc}} のファイルに変更が加えられたときに {{Pkg|incron}} を使って自動的に変更をコミットするように設定することもできます。{{man|7|inotify}} によるファイルシステム通知を利用します。 |
||
− | 配布されているソースの {{ic|debian/cron.daily}} に cron スクリプトが存在します。このスクリプトを使用することで定期的に変更を自動コミットすることができます。毎日スクリプトを実行するには、cron をインストール・有効化してから、etckeeper をビルドした srcdir からスクリプトを {{ic|/etc/cron.daily}} にコピーして実行可能属性を付与してください (例: {{ic|chmod +x /path/to/script}})。 |
||
+ | 詳しくは [http://inotify.aiken.cz/?section=incron&page=doc&lang=en] や [https://linux.die.net/man/8/incrond] を見てください。 |
||
− | === ラッパースクリプト === |
||
+ | === リモートリポジトリに自動プッシュ === |
||
− | 以下のようなスクリプトを PATH が通っているどこかに配置して、実行可能属性を付与し、{{ic|pacman -Syu}} の代わりにスクリプトを実行することで、etckeeper が他のシステムで使っているような自動コミット機能をエミュレートすることができます。 |
||
+ | {{Warning|etckeeper のリポジトリを誰でもアクセスできるリモートリポジトリにプッシュしてしまうと、パスワードハッシュや秘密鍵などの機密情報が漏洩する可能性があります。気をつけて使ってください。}} |
||
+ | {{ic|/etc/.git}} のローカルバックアップを作るだけでなく、コミットするたびに GitHub などのリモートリポジトリに変更を自動的にプッシュすることもできます。 |
||
− | #!/bin/bash |
||
− | |||
− | etckeeper pre-install |
||
− | pacman -Syu |
||
− | etckeeper post-install |
||
+ | まず、{{ic|etc/.git}} を編集してリモートの GitHub リポジトリを追加: |
||
− | もしくは {{ic|~/.bashrc}} に簡単なエイリアスを追加してください: |
||
+ | # git remote add origin ''<nowiki>https://github.com/user/repo.git</nowiki>'' |
||
− | alias pkg-update='sudo etckeeper pre-install && sudo pacman -Syu && sudo etckeeper post-install' |
||
+ | そして、フックを使用・設定してプッシュするようにしてください。 |
||
− | あるいは関数を使うことで pacman や pacman のラッパーに引数を指定することもできます: |
||
+ | ==== etckeeper に付属しているフックを使う ==== |
||
− | Pacman () { sudo etckeeper pre-install && sudo pacman "$@" && sudo etckeeper post-install; } |
||
+ | {{ic|/etc/etckeeper/etckeeper.conf}} の {{ic|PUSH_REMOTE}} オプションを編集して、etckeeper からプッシュしたいリモートリポジトリの名前を指定してください。例: |
||
− | 関数を使うときは、通常通りに pacman にフラグを付けて実行しますが、大文字の "P" を使うようにします。例: |
||
− | Pacman -Syu |
||
− | Pacman -R foo |
||
+ | PUSH_REMOTE="''origin''" |
||
− | {{Warning|Do not name your wrapper script "pacman" and rely on it appearing earlier in the PATH than {{ic|/usr/bin/pacman}}. One of the etckeeper pre-install hooks calls pacman without specifying its path, so your script will be invoked recursively without end.}} |
||
+ | スペースで区切ることで複数のリモートリポジトリを追加できます。 |
||
− | === Incron === |
||
+ | ==== カスタムフックを使う ==== |
||
− | 上記のスクリプトの代わりに、{{ic|/etc}} のファイルに変更が加えられたときに etckeeper を使って自動的に変更をコミットするように incron を設定することもできます。 |
||
+ | {{ic|/etc/etckeeper/commit.d/40github-push}} ファイルを作成 (実行権限を付与してください): |
||
− | === リモートリポジトリに自動的にプッシュ === |
||
− | {{Warning|etckeeper のリポジトリを誰でもアクセスできるリモートリポジトリにプッシュすることで、パスワードハッシュや秘密鍵などの機密情報が漏洩する可能性があります。気をつけて使って下さい。}} |
||
− | {{ic|/etc/.git}} のローカルバックアップを作ることを第一歩として、etckeeper ではさらにコミットするたびに Github などのリモートリポジトリに変更を自動的にプッシュすることができます。実行可能ファイル {{ic|/etc/etckeeper/commit.d/40github-push}} を作成: |
||
#!/bin/sh |
#!/bin/sh |
||
100行目: | 79行目: | ||
fi |
fi |
||
+ | ラッパースクリプトやエイリアスを実行するたびに、GitHub リポジトリに自動的に変更がコミットされます。 |
||
− | {{ic|etc/.git}} に移動してリモートの Github リポジトリを追加: |
||
+ | |||
+ | === ラッパースクリプト === |
||
+ | |||
+ | 頻繁に実行するコマンドの変更を追跡したい場合 (例: {{ic|''command''}})、シンプルなラッパースクリプトで自動化できます。例えば、以下のファイルを作成: |
||
+ | |||
+ | {{hc|/usr/local/bin/checketc.sh|2= |
||
+ | #!/bin/bash |
||
+ | |||
+ | etckeeper pre-install |
||
+ | ''command'' |
||
+ | etckeeper post-install}} |
||
+ | 作成したら実行可能権限を付与してください。また、bash のエイリアスや関数で Etckeeper のコマンドを呼び出すこともできます。詳しくは [[Bash#エイリアス]]を見てください。 |
||
− | # git remote add origin https://github.com/user/repo.git |
||
− | + | {{Note|Etckeeper バージョン 1.18.3-1 以前では Pacman による変更を追跡するのに上記のラッパースクリプトが必要でした。現在 Pacman はフックによってコマンドを自動的に実行します。}} |
2017年4月20日 (木) 21:40時点における版
Etckeeper は /etc
をバージョン管理します。
目次
インストール
設定
使用するバージョン管理システム (デフォルトは git) などのオプションは /etc/etckeeper/etckeeper.conf
で設定できます。
Etckeeper は etckeeper.conf
で LOWLEVEL_PACKAGE_MANAGER
あるいは HIGHLEVEL_PACKAGE_MANAGER
として pacman を使うことをサポートしています。
使用方法
設定後、/etc
のリポジトリを初期化する必要があります:
# etckeeper init
etckeeper バージョン 1.18.3-1 現在、パッケージのインストール・アップデート・削除時に pre-install と post-install の pacman フックが自動的に実行されるようになっています。手動でラッパースクリプトを設定する必要はありません。
/etc
への他の変更を記録したい場合、手動で変更をコミットするか (使用するコマンドは etckeeper(8) の man ページを見てください)、あるいは以下のように定期的に記録するようにしてください。
systemd
パッケージにはサービス・タイマーユニットが付属しています。etckeeper.timer
を有効化することで使えます。
タイマーの使い方について詳しくは systemd/タイマーを見てください。ユニットを編集したい場合は systemd#ユニットファイルの編集を参照してください。
Cron
配布されているソースには cron スクリプト が含まれています。スクリプトを使うことで定期的に自動コミットできます。
例えば、1日毎に実行するには:
- cron をインストール・有効化してください。
/etc/cron.daily/script_name
としてスクリプトを作成。- root でファイルに実行権限を付与 (
# chmod u+x /etc/cron.daily/script_name
)。
詳しくは cron#cronie や cron を見てください。
Incron
/etc
のファイルに変更が加えられたときに incron を使って自動的に変更をコミットするように設定することもできます。inotify(7) によるファイルシステム通知を利用します。
リモートリポジトリに自動プッシュ
/etc/.git
のローカルバックアップを作るだけでなく、コミットするたびに GitHub などのリモートリポジトリに変更を自動的にプッシュすることもできます。
まず、etc/.git
を編集してリモートの GitHub リポジトリを追加:
# git remote add origin https://github.com/user/repo.git
そして、フックを使用・設定してプッシュするようにしてください。
etckeeper に付属しているフックを使う
/etc/etckeeper/etckeeper.conf
の PUSH_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#エイリアスを見てください。