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


11

具体的には、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、一番下でコールを追加または削除します。


本当の答えではありませんが、上記のコメントは(少なくとも私にとっては)許可されていないので、これを共有します:非/ etcファイルシステムのgit制御のためにetckeeperのメタデータエンジンを再利用/拡張する方法、または前述の機能でgitをネイティブに拡張する方法は?。(ここにコメントを投稿できなかったという理由だけで、ここに参照を投稿するために私に目を向けないでください。)
ジョニーユタ

回答:


6

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

多分誰かがこれをスクリプトの外で(etckeeper config?で)設定し、これを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"

3

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

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

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

私は、/ etc /ミラー/の下にこのようなものを置くために規則を発明へのパス外のファイルなど、/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

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

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

systemdターゲット、サービス、...、ファイルが設定ファイルであると考える場合(/lib/systemdつまり、下のファイルは下のファイルとそれほど変わりません/etc/init.d)、この-dオプションはで何が起こっているかを追跡するのに役立ちます/lib/systemd


1

概要から: etckeeper init -d /directory

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

だから、etckeeper.confの設定にこの重要な詳細をコミットすることをお勧めします。簡単にgrep /etc \``which etckeeper\``、が明らかになります: ETCKEEPER_DIR=/etcなので、etckeeper.confでこの変数を使用してください。

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

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


0

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

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

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


2
逆方向リンクは良い考えですが、場合によってはそれを使用しますが、うまくいかない場合があります。具体的には、逆方向のリンクを試さないでください。そうしないと、grub.conf起動できなくなります。
ゾレダチェ

@Zoredache-まさに。ただし、Oracleファイルでは逆リンクがおそらく機能します。そして、@ pjzのコピー方法は、おそらくブート時(grub +カーネルconf)に動作します。来週これを試してみます。
ErebusBat
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.