Kann etckeeper verwendet werden, um Konfigurationsdateien außerhalb von / etc zu verfolgen?

11

Insbesondere möchte ich meine grub.conf( /boot/grub/grub.conf) und einige Oracle-Dateien (dh /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, wo der Link verweist, nicht den tatsächlichen Inhalt. Und ich kann keine festen Links erstellen, da sich die Dateien auf einem anderen Volume befinden.

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

Aktualisieren

Basierend auf der Antwort von nealmcb habe ich das folgende Skript entwickelt:

#!/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 mirror_dirAnruf unten hinzu oder entfernen ihn .

ErebusBat
quelle
Keine wirkliche Antwort, aber da Kommentare (zumindest für mich) oben nicht erlaubt sind, teilen Sie dies: Wie kann man die Metadaten-Engine von etckeeper für die Git-Steuerung von Nicht- / etc-Dateisystemen wiederverwenden / erweitern oder Git mit dieser Funktion nativ erweitern? . (Bitte kreuzen Sie mich nicht an, weil ich hier eine Referenz gepostet habe, nur weil ich keinen Kommentar abgeben konnte.)
Johnny Utahh

Antworten:

6

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-Konfiguration?) zu konfigurieren und dies als Patch an Joey Hess zu 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"
Jojoo
quelle
3

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

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

Auf diese Weise wird etckeeper jedes Mal, wenn es aus anderen Gründen aufgerufen wird (wenn ich Software installiere, manchmal nachts usw.), Revisionen in der neuesten Grub-Konfiguration abrufen und verfolgen.

Ich habe die Konvention erfunden, um dieses Zeug unter / etc / Mirror / path-to-external-file abzulegen , z. B. /etc/Mirror/boot/grub/grub.cfgaber wenn jemand einen Präzedenzfall für eine andere solche Konvention hat, würde ich gerne davon hören.

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

Aktualisieren:

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

nealmcb
quelle
3

etckeeper hat jetzt die -dOption anzugeben, in welchem ​​Verzeichnis es betrieben werden muss.

Während Hooks zum Auslösen von etckeeper im Allgemeinen das Konstrukt as etckeeper pre-install, ... verwenden, müssen Sie etckeeper pre-install -d /boot/grubstattdessen Hooks hinzufügen, die verwendet werden. Dadurch wird eine Dateiduplizierung in Ihrem Ansatz vermieden.

Beachten Sie, dass diese Option Ihnen hilft, den Überblick darüber zu behalten, was passiert , wenn Sie davon ausgehen, dass systemd-Ziel-, Dienst-, ... -Dateien Konfigurationsdateien sind (ich tue - schließlich unterscheiden sich Dateien unter /lib/systemdnicht so stark von Dateien unter /etc/init.d) .-d/lib/systemd

phep
quelle
1

Aus der Zusammenfassung: etckeeper init -d /directory

Aber Vorsicht! Wenn Sie -d pathes das nächste Mal ausführen oder nächste Woche, wenn Sie es vergessen , wird möglicherweise ein neues eigenständiges lokales Repo mit dem Standardspeicherort in erstellt /etc.

Daher würde ich empfehlen, dieses wichtige Detail in die Konfiguration in etckeeper.conf zu übernehmen. Ein schnelles ,, grep /etc \``which etckeeper\``enthüllt: ETCKEEPER_DIR=/etcund verwenden Sie diese Variable einfach in der etckeeper.conf.

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

Aus dem Wunsch heraus, andere Dinge zu "behalten", einschließlich Dateiattributen, etckeeper init -d / hat es für mich funktioniert, aber später das Detail zu vergessen, ist ärgerlich. Speichern Sie dieses Detail am besten. Außerdem wird uninitdas VCS nicht rückgängig gemacht, sondern nur das gesamte lokale Repo gelöscht.

Juan Velasquez
quelle
0

Ich glaube nicht, dass etckeeper dies tun wird, aber es gibt einige Lösungen:

  1. Umkehren der Links: Setzen Sie im Dateisystem einen Link zu einer Datei in / etc /

  2. Skript das Kopieren dieser Dateien in / etc (Backup) und aus / etc (Restore). Verwenden Sie diese Skripte dann regelmäßig oder in einem geeigneten Git-Hook.

pjz
quelle
2
Während der umgekehrte Link eine gute Idee ist und ich ihn in einigen Fällen verwende, gibt es Fälle, in denen er nicht funktioniert. Versuchen Sie insbesondere nicht, den umgekehrten Link für Sie zu verwenden grub.conf, da Sie sonst nicht booten können.
Zoredache
@ Zoredache - Genau. Der umgekehrte Link würde jedoch wahrscheinlich für meine Oracle-Dateien funktionieren. Und und @ pjz 'Kopiermethode würde wahrscheinlich für alles beim Booten funktionieren (grub + kernel conf). Ich werde es nächste Woche versuchen.
ErebusBat