fragen stichworte

Kann man mit etckeeper Konfigurationsdateien außerhalb von / etc verfolgen?

Insbesondere möchte ich meine grub.conf (/boot/grub/grub.conf) und einige Orakel-Dateien (d. h. /db/app/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora) verfolgen.

Ich habe versucht, Links zu verwenden. Etckeeper/git verfolgt jedoch nur die Stellen, auf die der Link verweist, nicht den eigentlichen Inhalt. Ich kann keine festen Links erstellen, da sich die Dateien auf einem anderen Volume befinden.

Ich weiß, ich könnte ein anderes GIT-Repository einrichten, aber ich hätte lieber alles in Etckeeper.

Aktualisieren

Basierend auf der Antwort von nealmcb entstand das folgende Skript:

#!/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"  

Um einen Pfad hinzuzufügen oder zu entfernen, fügen Sie einfach den Aufruf mirror_dir unten hinzu oder entfernen ihn.

antworten

Ich habe das obige Skript so bearbeitet, dass es auch einfache Dateien enthält.

Vielleicht sollte jemand eine Möglichkeit hinzufügen, dies außerhalb eines Skripts (in der etckeeper-config?) zu konfigurieren, und dies als Patch an joey hess senden?

#!/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 hat jetzt eine -d -Option, um anzugeben, in welchem ​​Verzeichnis es arbeiten soll.

Während Hooks, um Etckeeper auszulösen, normalerweise construct als etckeeper pre-install, ... verwenden, müssen Sie stattdessen Hooks hinzufügen, die etckeeper pre-install -d/boot/grub verwenden. Dies soll Dateiduplizierungen in Ihrem Ansatz vermeiden.

Beachten Sie, dass, wenn Sie bedenken, dass systemd target, service, ..., Dateien Konfigurationsdateien sind (ich tue - Dateien unter /lib/systemd unterscheiden sich nicht wesentlich von Dateien unter /etc/init.d), dann -d Option wird Ihnen helfen, zu verfolgen, was in /lib/systemd passiert.

Mit etckeeper können Sie es in andere Systeme integrieren.

Ich wollte auch die Änderungen verfolgen, die von update-grub in/boot vorgenommen wurden Ich habe den Code in /etc/etckeeper/commit.d/20mirror-outside-files

eingefügt

Wenn etckeeper aus anderen Gründen (wenn ich Software installiere, manchmal nachts usw.) auf diese Weise aufgerufen wird, werden Änderungen in der neuesten Grub-Konfiguration erfasst und verfolgt.

Ich habe die Konvention erfunden, um dieses Zeug unter/etc/Mirror/Pfad zur Außendatei zu platzieren, z. /etc/Mirror/boot/grub/grub.cfg aber wenn jemand für eine andere derartige Konvention Präzedenzfall hat, würde ich gerne davon erfahren.

#!/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

Update:

Beachten Sie, dass etckeeper dies aus irgendeinem Grund nicht ausführt, wenn Sie apt-get entfernen oder löschen, z. einen alten Kernel löschen. Seltsam .... Aber Sie können sudo etckeeper commit in diesem Fall manuell oder nach einem manuellen update-grub ausführen.

Aus der Zusammenfassung: etckeeper init -d/directory

Aber Vorsicht! Wenn Sie das nächste Mal ausführen oder nächste Woche, wenn Sie -d path vergessen, wird ein neues lokales Standalone-Repo erstellt.

Ich würde daher empfehlen, dieses wichtige Detail in der Konfiguration in etckeeper.conf zu begehen. Ein kurzer grep/etc \``which etckeeper\`` enthüllt: ETCKEEPER_DIR=/etc, verwenden Sie diese Variable also einfach in der etckeeper.conf.

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

Aus dem Wunsch, andere Dinge "zu behalten", einschließlich Dateiattribute, etckeeper init -d/ hat für mich gearbeitet, aber später das Detail zu vergessen, ist ärgerlich. Also am besten dieses Detail speichern. Außerdem macht uninit die Verwendung des VCS nicht rückgängig, es löscht nur das gesamte lokale Repo.

Ich glaube nicht, dass Etckeeper dies tun wird, aber es gibt ein paar Lösungen:

  1. kehre die Links um: Setzen Sie im Dateisystem einen Link zu einer Datei in/etc/

  2. Skript zum Kopieren dieser Dateien in/etc (Sicherung) und aus/etc (restore). Verwenden Sie diese Skripts dann regelmäßig oder in einem geeigneten Git-Hook.