¿Es posible usar etckeeper con un único repositorio git compartido?

9

Noté que varias personas me han recomendado usar etckeeper para aplicar el control de versiones a mi directorio / etc.

Me parece que la instalación predeterminada coloca un repositorio en la misma máquina que el / etc que está tratando de administrar. Esto funciona bien para el control de versiones, pero no brinda el beneficio adicional de hacer una copia de seguridad de los archivos fuera del servidor, ni me permite duplicar partes de / etc de una máquina fuente a otra.

¿Es posible compartir un único repositorio git en una máquina de administración central, de modo que etckeeper en cada servidor almacene sus datos en el mismo lugar?

(Estoy haciendo algo similar ahora con svn y algunos scripts personalizados para confirmar y revertir archivos, pero tengo que acordarme de confirmarlos cuando realice cambios).

Brent
fuente

Respuestas:

8

Primero, use install etckeeper, configurado para git en /etc/etckeeper/etckeeper.conf. Siga el método de instalación de etckeeper para su distribución o desde la fuente.

Pronto tendrás un /etc/.git

Ahora en su servidor, asegúrese de tener un repositorio (seguro) para impulsar ...

 # ssh faruser@farhost     
 # mkdir somedir cd somedir && git init && chmod 700 .git    
 # exit

Ahora en el host inicial, envíe su repositorio local al servidor a través de ssh:

# cd /etc && git push faruser@farhost:somedir

Somedir, por supuesto, puede ser relativo en este caso (siguiendo la convención ssh)

Haga esto cada vez que realice un cambio que afecte a / etc (y etckeeper lo agregue a /etc/.git) y tendrá repositorios locales y fuera de la máquina para su máquina.

O configure ssh sin contraseña y realice un enlace en /etc/etckeeper/commit.d/ para que ocurra automáticamente si la máquina siempre está conectada.

quanta
fuente
2
Esto se ve genial. ¿Hay alguna manera de tener el repositorio local almacenado en un subdirectorio del remoto? Me gustaría hacer algo similar, usando un único repositorio remoto para almacenar las configuraciones (separadas) para varios servidores.
Andrew Ferrier
¿puede git pushfuncionar para tu repositorio de git creado? probablemente necesites crear un repositorio desnudo en somedir, el gancho debajo de commit.d es una muy buena idea, me gusta
larrycai
3

Es posible agregar una configuración de bifurcación remota para asignar la bifurcación maestra del repositorio etckeeper de cada servidor a una bifurcación en el repositorio remoto. Para hacerlo, puede ejecutar los siguientes comandos en cada servidor:

cd /etc
git branch -m master $HOSTNAME
git remote add origin [email protected]:path/to/single/repo.git
git push -u origin master:$HOSTNAME

Después de esta configuración, los siguientes git pushenviarán cambios desde cada rama maestra del servidor a la rama del servidor dedicado en el repositorio central.

Aunque las ramas no tendrán un punto de partida común, esto permite comparar fácilmente el mismo archivo de dos ramas diferentes, que representan dos servidores diferentes, ejecutando:

git diff origin/server1 origin/server2 -- file

Esto se puede combinar con la configuración automática sugerida por jojoo .

TTT
fuente
git push -u maestro de origen: $ HOSTNAME no funciona aquí. El repositorio remoto es un repositorio vacío vacío. error: src refspec master no coincide con ninguno.
Bertl
1

Cómo hacerlo automáticamente, la historia completa:

Cree el archivo /etc/etckeeper/commit.d/60-push (no olvide chmod + x) en los clientes.

#!/bin/sh
git push central_server:/var/git/client_name.git master

central_server se define en la configuración ssh, ver más abajo. /var/git/client_name.git es el directorio en el servidor central, que contiene el repositorio git.

El ~ / .ssh / config de root (!) Debería contener algo como esto:

host central_server
Hostname 192.168.0.1
User etckeeper #a user on the central server 
IdentityFile ~/.ssh/custom_key # key is in authorized_keys in
             #etcpeeper@central_server:~/.ssh/authorized_keys

Luego debe iniciar el repositorio git en el servidor central

mkdir /var/git/client_name.git
su etckeeper
cd /var/git/client_name.git
git --bare init

Pruébelo con una edición menor en / etc y luego un etckeeper comete "test push'ing".

jojoo
fuente
1

Ese no es el punto. Si desea distribuir ampliamente la configuración, configure otro repositorio además del repositorio local de cada máquina, y haga que cada máquina elija según sea necesario. Lo que esto hace es permitir que cada máquina se desvíe (se ramifique, realmente) y retenga el control de revisión.

jldugger
fuente
No estoy seguro de cómo hacer esto (segundo repositorio). ¿Puedes elaborar?
Brent
Probablemente necesite clonar uno de los repositorios en su "repositorio central"; solo necesitas uno. Desde allí puede hacer cambios, y luego cada uno de los servidores puede seleccionar los parches almacenados en una revisión. La forma de configurarlo inicialmente varía entre los DSCM. Para git, consulte kernel.org/pub/software/scm/git-core/docs/gittutorial.html
jldugger
-2

Realmente no desea que etckeeper sea su política de respaldo. Si bien tener una copia de sus archivos de configuración sería bueno, no es suficiente para calificar como un plan de recuperación ante desastres.

Concéntrese en tener copias de seguridad reales de su sistema. El simplista podría ser un cronjob para alimentar un tarball a la cinta ... oh, cierto. Ya nadie usa cintas. Bien, un trabajo temporal para sincronizar todos sus archivos a un NAS dedicado . Para obtener soluciones de respaldo más sólidas, eche un vistazo a Amanda y Bacula .

Y para el caso de los académicos, pude llevar mi repositorio etckeeper a github como cualquier otro repositorio git.

Shazburg
fuente
Nadie habla de hacer de esto una política de respaldo. Pero en mi experiencia, es conveniente tener todo en un solo lugar, en un servidor más seguro.
Brent
1
Entonces entendí mal. Si lo que realmente está buscando es un medio para almacenar y distribuir centralmente la configuración de sus sistemas, entonces Puppet ( reductivelabs.com/products/puppet ) sería de alguna ayuda allí.
Shazburg
por ejemplo: estamos empujando todas nuestras configuraciones a un host. allí se ejecuta un seguimiento, que se utiliza para visualizar los cambios de configuración (y, por supuesto, escribir tickets, si algo no funciona, ...) es muy conveniente, por ejemplo, puedo comparar los crontabs de todos nuestros hosts con unos pocos clics
jojoo