具体的には、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
呼び出しを追加または削除するだけです。
上記のスクリプトを編集して、プレーンファイルも含めました。
誰かがこれをスクリプトの外で(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"
etckeeperには、操作する必要のあるディレクトリを示す-d
オプションがあります。
Etckeeperをトリガーするフックは通常、構成をetckeeper pre-install
、...として使用しますが、代わりにetckeeper pre-install -d /boot/grub
を使用するフックを追加する必要があります。これにより、アプローチでのファイルの重複を回避できます。
Systemd target、service、...、ファイルが構成ファイルであると考える場合(結局のところ、/lib/systemd
の下のファイルは/etc/init.d
の下のファイルとそれほど変わらないことに注意してください)、この-d
オプションは、/lib/systemd
で何が起こったかを追跡するのに役立ちます。
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
の後に実行することもできます。
概要から: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を使用して元に戻すのではなく、ローカルリポジトリ全体を削除するだけです。
Etckeeperがこれを行うとは思いませんが、いくつかの解決策があります。
リンクを逆にする:/ etc /内のファイルへのリンクをファイルシステムに配置します
これらのファイルを/ etc(バックアップ)にコピーし、/ etc(復元)からコピーするスクリプトを作成します。次に、これらのスクリプトを定期的に、または適切なgitフックで使用します。