Etckeeper può essere usato per tenere traccia dei file di configurazione al di fuori di / etc?


11

In particolare, vorrei monitorare il mio grub.conf( /boot/grub/grub.conf) e alcuni file Oracle (ad es /db/app/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora.).

Ho tentato di utilizzare i collegamenti; tuttavia etckeeper / git traccia solo dove punta il collegamento, non il contenuto reale. E non riesco a creare collegamenti reali poiché i file si trovano su un altro volume.

So che potrei configurare un altro repository GIT ma preferirei avere tutto all'interno di etckeeper.

Aggiornare

Sulla base della risposta di nealmcb, ho realizzato il seguente script:

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

Per aggiungere o rimuovere un percorso è sufficiente aggiungere o rimuovere la mirror_dirchiamata in fondo.


Non è una vera risposta, ma poiché i commenti non sono consentiti (almeno per me) sopra, condividendo questo: Come riutilizzare / estendere il motore di metadati di etckeeper per il controllo git di filesystem non / etc, o estendere git nativamente con detta capacità? . (Per favore, non selezionare / contrassegnare per aver pubblicato un riferimento qui semplicemente perché non sono stato in grado di commentare, grazie.)
Johnny Utahh,

Risposte:


6

Ho modificato lo script sopra per includere anche file semplici.

forse qualcuno dovrebbe aggiungere la possibilità di configurarlo al di fuori di uno script (nella configurazione di etckeeper?) e inviarlo come patch per 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 ti consente di integrarlo con altri sistemi.

Volevo anche tenere traccia delle modifiche apportate da update-grub in / boot, quindi ho inserito il codice qui sotto /etc/etckeeper/commit.d/20mirror-outside-files

In questo modo ogni volta che etckeeper viene chiamato per altri motivi (quando installo software, a volte ogni notte, ecc.), Afferrerà e traccerà le revisioni nell'ultima configurazione di grub.

Ho inventato la convenzione per mettere questa roba in / etc / Mirror / path-to-outside-file , ad esempio, /etc/Mirror/boot/grub/grub.cfgma se qualcuno ha un precedente per un'altra tale convenzione, mi piacerebbe saperlo.

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

Aggiornare:

Si noti che per qualche motivo etckeeper non esegue questo quando si esegue un apt-get remove o purge, ad esempio per eliminare un vecchio kernel. Strano .... Ma puoi eseguirlo sudo etckeeper commitmanualmente in quel caso, o dopo un manuale update-grub.


3

etckeeper ora ha -dun'opzione per indicare su quale directory deve operare.

Mentre gli hook per attivare etckeeper generalmente usano il costrutto come etckeeper pre-install, ..., dovrai invece aggiungere hook che usano etckeeper pre-install -d /boot/grub. Questo eviterà la duplicazione dei file nel tuo approccio.

Si noti che se si considera che target di sistema, servizio, ..., i file sono file di configurazione (lo faccio - dopo tutto, i file sotto /lib/systemdnon sono così diversi dai file sotto /etc/init.d) quindi questa -dopzione ti aiuterà a tenere traccia di ciò che accade /lib/systemd.


1

Dalla sinossi: etckeeper init -d /directory

Ma attenzione! la prossima volta che lo eseguirai, o la prossima settimana, se dimentichi -d path, potrebbe creare un nuovo repository locale autonomo con la posizione predefinita in /etc.

Quindi consiglierei di affidare questo importante dettaglio a config, in etckeeper.conf. Un veloce, grep /etc \``which etckeeper\``rivela:, ETCKEEPER_DIR=/etce quindi usa questa variabile in etckeeper.conf.

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

Dal desiderio di "mantenere" altre cose, inclusi gli attributi dei file, ha etckeeper init -d / funzionato per me, ma in seguito dimenticare i dettagli è fastidioso. Quindi è meglio salvare questo dettaglio. Inoltre, uninitnon si annulla utilizzando VCS, ma elimina l'intero repository locale.


0

Non credo che etckeeper lo farà, ma ci sono un paio di soluzioni:

  1. inverti i collegamenti: metti un collegamento sul filesystem in un file in / etc /

  2. script la copia di quei file in / etc (backup) e fuori da / etc (restore). Quindi usa quegli script periodicamente o in un git hook appropriato.


2
Mentre il collegamento inverso è una buona idea, e lo uso in alcuni casi ci sono casi in cui non funzionerà. In particolare, non provare il collegamento inverso per il tuo grub.confaltrimenti non sarai in grado di avviare.
Zoredache,

@Zoredache - Esatto. Tuttavia, il collegamento inverso probabilmente funzionerebbe per i miei file Oracle. E il metodo di copia di @ pjz probabilmente funzionerebbe per qualsiasi cosa all'avvio (grub + kernel conf). Ci proverò la prossima settimana.
ErebusBat,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.