Etckeeper peut-il être utilisé pour suivre les fichiers de configuration en dehors de / etc?


11

Plus précisément, je voudrais suivre mes grub.conf( /boot/grub/grub.conf) et certains fichiers Oracle (ie /db/app/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora).

J'ai essayé d'utiliser des liens; cependant, etckeeper / git ne suit que là où le lien pointe, pas le contenu réel. Et je ne peux pas créer de liens durs car les fichiers sont sur un autre volume.

Je sais que je pourrais configurer un autre référentiel GIT mais je préfère tout avoir dans etckeeper.

Mise à jour

Sur la base de la réponse de nealmcb, j'ai trouvé le script suivant:

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

Pour ajouter ou supprimer un chemin, il vous suffit d'ajouter ou de supprimer l' mirror_dirappel en bas.


Pas une vraie réponse, mais comme les commentaires ne sont pas autorisés (pour moi du moins) ci-dessus, partager ceci: Comment réutiliser / étendre le moteur de métadonnées de etckeeper pour git contrôler les systèmes de fichiers non / etc, ou étendre git nativement avec cette capacité? . (Merci de ne pas me cocher / ding pour avoir publié une référence ici simplement parce que je n'ai pas pu commenter, merci.)
Johnny Utahh

Réponses:


6

J'ai édité le script ci-dessus pour inclure également des fichiers simples.

peut-être que quelqu'un devrait ajouter une possibilité de configurer cela en dehors d'un script (dans la configuration etckeeper?) et l'envoyer comme patch à 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 vous permet de l'intégrer à d'autres systèmes.

Je voulais également suivre les modifications apportées par update-grub dans / boot, j'ai donc mis le code ci-dessous dans /etc/etckeeper/commit.d/20mirror-outside-files

De cette façon, à chaque fois que etckeeper est appelé pour d'autres raisons (lorsque j'installe un logiciel, parfois tous les soirs, etc.), il saisira et suivra les révisions dans la dernière configuration de grub.

J'ai inventé la convention pour mettre ce truc sous / etc / Mirror / path-to-outside-file , par exemple, /etc/Mirror/boot/grub/grub.cfgmais si quelqu'un a un précédent pour une autre de ces conventions, j'aimerais en entendre parler.

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

Mise à jour:

Notez que pour une raison quelconque, etckeeper ne l'exécute pas lorsque vous effectuez une suppression ou une purge apt-get, par exemple pour supprimer un ancien noyau. Odd .... Mais vous pouvez exécuter sudo etckeeper commitmanuellement dans ce cas, ou après un manuel update-grub.


3

etckeeper a maintenant une -doption pour indiquer sur quel répertoire il doit fonctionner.

Alors que les hooks pour déclencher etckeeper utilisent généralement la construction as etckeeper pre-install, ..., vous devrez ajouter des hooks qui utilisent à la etckeeper pre-install -d /boot/grubplace. Cela évitera la duplication de fichiers dans votre approche.

Notez que si vous considérez que les fichiers systemd target, service, ..., sont des fichiers de configuration (je le fais - après tout, les fichiers sous /lib/systemdne sont pas si différents des fichiers sous /etc/init.d) alors cette -doption vous aidera à garder une trace de ce qui se passe dans /lib/systemd.


1

Du synopsis: etckeeper init -d /directory

Mais méfiez-vous! la prochaine fois que vous l'exécuterez, ou la semaine prochaine, si vous oubliez -d path, cela pourrait créer un nouveau référentiel local autonome avec l'emplacement par défaut dans /etc.

Je recommande donc de valider ce détail important dans sa configuration, dans etckeeper.conf. Un rapide grep /etc \``which etckeeper\``, révèle: ETCKEEPER_DIR=/etcet donc il suffit d' utiliser cette variable dans etckeeper.conf.

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

Du désir de "garder" d'autres choses, les attributs de fichier inclus, ont etckeeper init -d / fonctionné pour moi, mais oublier plus tard le détail est ennuyeux. Il vaut donc mieux enregistrer ce détail. En outre, uninitn'annule pas l'utilisation du VCS, il supprime simplement le référentiel local entier.


0

Je ne pense pas que etckeeper fera cela, mais il y a quelques solutions:

  1. inverser les liens: mettre un lien sur le système de fichiers vers un fichier dans / etc /

  2. script la copie de ces fichiers dans / etc (sauvegarde) et hors de / etc (restauration). Utilisez ensuite ces scripts périodiquement ou dans un crochet git approprié.


2
Bien que le lien inverse soit une bonne idée, et je l'utilise dans certains cas, il y a des cas où cela ne fonctionnera pas. Plus précisément, n'essayez pas le lien inverse pour votre, grub.confsinon vous ne pourrez pas démarrer.
Zoredache

@Zoredache - Exactement. Cependant, le lien inverse fonctionnerait probablement pour mes fichiers Oracle. Et la méthode de copie de @ pjz fonctionnerait probablement pour n'importe quoi au démarrage (grub + kernel conf). J'essaierai cela la semaine prochaine.
ErebusBat
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.