web-dev-qa-db-ja.com

etckeeperを使用して/ etcの外部の設定ファイルを追跡できますか?

具体的には、grub.conf/boot/grub/grub.conf)といくつかのOracleファイル(つまり、/db/app/Oracle/product/10.2.0/db_1/network/admin/tnsnames.ora)を追跡したいと思います。

リンクを使ってみました。ただし、etckeeper/gitは、実際のコンテンツではなく、リンクが指している場所のみを追跡します。また、ファイルが別のボリュームにあるため、ハードリンクを作成できません。

別のGITリポジトリをセットアップできることはわかっていますが、すべてをetckeeper内に配置したいと思います。

更新

Nealmcbの回答に基づいて、次のスクリプトを思いつきました。

#!/bin/sh
set -e

# Based on nealmcb's idea/script from http://serverfault.com/questions/211425/

# If you want other configuration data or files on the system also
# opportunistically tracked via etckeeper, use this script to copy them in.

# If there is a hook of some sort available related to the files
# you're mirroring, you can call etckeeper directly and track them
# proactively, rather than just opportunistically here.

MIRROR_ROOT=/etc/etckeeper.mirror.d
echo "etckeeper: mirroring outside files to $MIRROR_ROOT/:"

mirror_dir() {
   LOCAL_PATH=$1
   echo "  $LOCAL_PATH"
   mkdir -p $MIRROR_ROOT/$LOCAL_PATH
   rsync -a $LOCAL_PATH/ $MIRROR_ROOT/$LOCAL_PATH
}


mirror_dir "/boot/grub"
mirror_dir "/root"  

パスを追加または削除するには、下部にあるmirror_dir呼び出しを追加または削除するだけです。

11
ErebusBat

上記のスクリプトを編集して、プレーンファイルも含めました。

誰かがこれをスクリプトの外で(etckeeper構成で?)構成し、これをパッチとしてjoey hessに送信する可能性を追加する必要がありますか?

#!/bin/sh
set -e

# Based on nealmcb's + ErebusBat's script from http://serverfault.com/questions/211425/

# If you want other configuration data or files on the system also
# opportunistically tracked via etckeeper, use this script to copy them in.

# If there is a hook of some sort available related to the files
# you're mirroring, you can call etckeeper directly and track them
# proactively, rather than just opportunistically here.

MIRROR_ROOT=/etc/etckeeper.mirror.d
echo "etckeeper: mirroring outside files to $MIRROR_ROOT/:"

mirror_dir() {
   LOCAL_PATH=$1
   echo "  $LOCAL_PATH"
   mkdir -p $MIRROR_ROOT/$LOCAL_PATH
   rsync -a --del $LOCAL_PATH/ $MIRROR_ROOT/$LOCAL_PATH
}

mirror_file() {
   LOCAL_PATH=$1
   DIRPATH=`dirname $LOCAL_PATH | head -n 1`
   echo "  $LOCAL_PATH"
   mkdir -p $MIRROR_ROOT/$DIRPATH
   rsync -a --del $LOCAL_PATH $MIRROR_ROOT/$DIRPATH
}
mirror_file "/var/srv/foo_bar/blog/config.py"
mirror_file "/var/srv/foo_bar_another_Host/trac/conf/trac.ini"
mirror_file "/tmp/wildcards/*.jpg"
6
jojoo

etckeeperには、操作する必要のあるディレクトリを示す-dオプションがあります。

Etckeeperをトリガーするフックは通常、構成をetckeeper pre-install、...として使用しますが、代わりにetckeeper pre-install -d /boot/grubを使用するフックを追加する必要があります。これにより、アプローチでのファイルの重複を回避できます。

Systemd target、service、...、ファイルが構成ファイルであると考える場合(結局のところ、/lib/systemdの下のファイルは/etc/init.dの下のファイルとそれほど変わらないことに注意してください)、この-dオプションは、/lib/systemdで何が起こったかを追跡するのに役立ちます。

3
phep

etckeeperを使用すると、他のシステムと統合できます。

また、/ bootのupdate-grubによって行われた変更を追跡したかったので、以下のコードを/etc/etckeeper/commit.d/20mirror-outside-filesに配置しました。

このようにして、etckeeperが他の理由で呼び出されると(ソフトウェアをインストールするとき、時には毎晩など)、最新のgrub構成のリビジョンを取得して追跡します。

私はこのようなものを/ etc/Mirror /path-to-outside-fileの下に置くための規則を発明しました。 /etc/Mirror/boot/grub/grub.cfgしかし、誰かが別のそのような大会の前例を持っているなら、私はそれについて聞いてみたいです。

#!/bin/sh
set -e

# If you want other configuration data or files on the system also
# opportunistically tracked via etckeeper, use this script to copy them in.

# If there is a hook of some sort available related to the files
# you're mirroring, you can call etckeeper directly and track them
# proactively, rather than just opportunistically here.

echo etckeeper: mirroring outside files

mkdir -p /etc/Mirror/boot/grub
cp -p /boot/grub/grub.cfg /etc/Mirror/boot/grub

更新:

Apt-get removeまたはpurgeを実行すると、何らかの理由でetckeeperがこれを実行しないことに注意してください。古いカーネルを削除します。奇妙なことに....しかし、その場合は手動でSudo etckeeper commitを実行することも、手動でupdate-grubの後に実行することもできます。

3
nealmcb

概要から:etckeeper init -d /directory

しかし、注意してください!次回実行するとき、または来週、-d pathを忘れた場合、デフォルトの場所が/etcである新しいスタンドアロンローカルリポジトリが作成される可能性があります。

したがって、この重要な詳細をetckeeper.confのconfigにコミットすることをお勧めします。簡単なgrep /etc \``which etckeeper\``は、ETCKEEPER_DIR=/etcを明らかにするので、etckeeper.confでこの変数を使用するだけです。

sed -i '1 i\ETCKEEPER_DIR=/' /etc/etckeeper/etckeeper.conf

ファイル属性を含め、他のものを「保持」したいという願望から、etckeeper init -d /は私のために働きましたが、後で詳細を忘れるのは面倒です。したがって、この詳細を保存するのが最善です。また、uninitはVCSを使用して元に戻すのではなく、ローカルリポジトリ全体を削除するだけです。

1
Juan Velasquez

Etckeeperがこれを行うとは思いませんが、いくつかの解決策があります。

  1. リンクを逆にする:/ etc /内のファイルへのリンクをファイルシステムに配置します

  2. これらのファイルを/ etc(バックアップ)にコピーし、/ etc(復元)からコピーするスクリプトを作成します。次に、これらのスクリプトを定期的に、または適切なgitフックで使用します。

0
pjz