¿Se puede usar etckeeper para rastrear archivos de configuración fuera de / etc?

11

Específicamente me gustaría rastrear mi grub.conf( /boot/grub/grub.conf) y algunos archivos de Oracle (es decir /db/app/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora).

Intenté usar enlaces; sin embargo, etckeeper / git solo rastrea dónde apunta el enlace, no el contenido real. Y no puedo crear enlaces duros ya que los archivos están en otro volumen.

Sé que podría configurar otro repositorio GIT, pero preferiría tenerlo todo en etckeeper.

Actualizar

Basado en la respuesta de nealmcb se me ocurrió el siguiente 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"  

Para agregar o eliminar una ruta, simplemente agregue o elimine la mirror_dirllamada en la parte inferior.

ErebusBat
fuente
No es una respuesta real, pero dado que los comentarios no están permitidos (al menos para mí) arriba, compartir esto: ¿Cómo reutilizar / extender el motor de metadatos de etckeeper para el control git de sistemas de archivos que no son / etc, o extender git de forma nativa con dicha capacidad? . (Por favor, no me marque por favor para publicar una referencia aquí simplemente porque no pude comentar, gracias.)
Johnny Utahh

Respuestas:

6

Edité el script anterior para incluir también archivos sin formato.

tal vez alguien debería agregar la posibilidad de configurar esto fuera de un script (en la configuración de etckeeper) y enviarlo como un parche a 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"
jojoo
fuente
3

etckeeper le permite integrarlo con otros sistemas.

También quería rastrear los cambios realizados por update-grub en / boot, así que puse el código a continuación en /etc/etckeeper/commit.d/20mirror-outside-files

De esta forma, cada vez que se llama a etckeeper por otros motivos (cuando instalo software, a veces todas las noches, etc.), capturará y rastreará las revisiones en la última configuración de grub.

Inventé la convención para poner estas cosas en / etc / Mirror / path-to-outside-file , por ejemplo, /etc/Mirror/boot/grub/grub.cfgpero si alguien tiene un precedente para otra convención, me encantaría saberlo.

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

Actualizar:

Tenga en cuenta que, por alguna razón, etckeeper no ejecuta esto cuando realiza una eliminación o purga de apt-get, por ejemplo, para eliminar un núcleo antiguo. Extraño ... Pero puede ejecutarlo sudo etckeeper commitmanualmente en ese caso, o después de un manual update-grub.

nealmcb
fuente
3

etckeeper ahora tiene una -dopción para indicar en qué directorio debe operar.

Si bien los ganchos para activar etckeeper generalmente usan construcción como etckeeper pre-install, ..., deberá agregar ganchos que usen etckeeper pre-install -d /boot/gruben su lugar. Esto evitará la duplicación de archivos en su enfoque.

Tenga en cuenta que si considera que systemd target, service, ..., los archivos son archivos de configuración (lo hago, después de todo, los archivos debajo /lib/systemdno son tan diferentes de los archivos debajo /etc/init.d), entonces esta -dopción lo ayudará a realizar un seguimiento de lo que sucede /lib/systemd.

phep
fuente
1

De la sinopsis: etckeeper init -d /directory

¡Pero cuidado! la próxima vez que lo ejecute, o la próxima semana, si lo olvida -d path, podría crear un nuevo repositorio local independiente con la ubicación predeterminada /etc.

Por lo tanto, recomendaría asignar este detalle importante a su configuración, en etckeeper.conf. Un rápido, grep /etc \``which etckeeper\``revela:, ETCKEEPER_DIR=/etcy solo usa esta variable en etckeeper.conf.

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

Por el deseo de "mantener" otras cosas, los atributos de archivo incluidos, etckeeper init -d / funcionaron para mí, pero luego olvidar los detalles es molesto. Así que mejor guardar este detalle. Además, uninitno deshace el uso del VCS, solo elimina todo el repositorio local.

Juan Velásquez
fuente
0

No creo que etckeeper haga esto, pero hay un par de soluciones:

  1. invierta los enlaces: coloque un enlace en el sistema de archivos a un archivo en / etc /

  2. script la copia de esos archivos en / etc (copia de seguridad) y fuera de / etc (restaurar). Luego use esos scripts periódicamente o en un gancho git apropiado.

pjz
fuente
2
Si bien el enlace inverso es una buena idea, y lo uso en algunos casos, hay casos en los que no funciona. Específicamente, no intente el enlace inverso para usted grub.confo de lo contrario no podrá arrancar.
Zoredache
@ Zoredache - Exactamente. Sin embargo, el enlace inverso probablemente funcionaría para mis archivos de Oracle. Y el método de copia de @ pjz probablemente funcionaría para cualquier cosa en el arranque (grub + kernel conf). Lo intentaré la próxima semana.
ErebusBat