Est-il possible d'utiliser etckeeper avec un seul dépôt git partagé?

9

J'ai remarqué que plusieurs personnes ont recommandé d'utiliser etckeeper pour appliquer le contrôle de version à mon répertoire / etc.

Il me semble que l'installation par défaut place un référentiel sur la même machine que le / etc que vous essayez de gérer. Cela fonctionne bien pour le contrôle de version, mais ne donne pas l'avantage supplémentaire de faire une sauvegarde hors serveur des fichiers - ou me permet de dupliquer des parties de / etc d'une machine source à une autre.

Est-il possible de partager un seul dépôt git sur une machine d'administration centrale, de sorte que etckeeper sur chaque serveur stocke ses données au même endroit?

(Je fais maintenant une chose similaire avec svn et certains scripts personnalisés pour valider et restaurer des fichiers, mais je dois me rappeler de les valider lorsque j'apporte des modifications.)

Brent
la source

Réponses:

8

Tout d'abord, utilisez install etckeeper, configuré pour git dans /etc/etckeeper/etckeeper.conf. Suivez la méthode d'installation de etckeeper pour votre distribution ou depuis la source.

Bientôt, vous aurez un /etc/.git

Maintenant sur votre serveur, assurez-vous d'avoir un dépôt (sûr) à pousser pour ...

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

Maintenant sur l'hôte initial, envoyez votre dépôt local au serveur via ssh:

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

Somedir peut bien sûr être relatif dans ce cas (suivant la convention ssh)

Faites-le chaque fois que vous apportez une modification qui affecte / etc (et est intégrée dans /etc/.git par etckeeper) et vous aurez à la fois des référentiels locaux et hors machine pour votre machine.

Ou configurez ssh sans mot de passe et créez un hook dans /etc/etckeeper/commit.d/ afin que cela se produise automatiquement si la machine est toujours connectée.

quanta
la source
2
Ça a l'air génial. Existe-t-il un moyen de stocker le référentiel local dans un sous-répertoire du référentiel distant? Je voudrais faire quelque chose de similaire, en utilisant un seul référentiel distant pour stocker les configurations (séparées) pour plusieurs serveurs.
Andrew Ferrier
peut git pushfonctionner vers votre dépôt git créé? vous avez probablement besoin de créer un dépôt nu dans somedir le crochet sous commit.d est vraiment une bonne idée, j'aime ça
larrycai
3

Il est possible d'ajouter une configuration de branche distante pour mapper la branche principale du référentiel etckeeper de chaque serveur à une branche du référentiel distant. Pour ce faire, vous pouvez exécuter les commandes suivantes sur chaque serveur:

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

Après cette configuration, les suivantes git pushenverront les modifications de chaque branche principale de serveur à la branche de serveur dédiée sur le référentiel central.

Bien que les branches n'aient pas de point de départ commun, cela permet de comparer facilement le même fichier de deux branches différentes, représentant deux serveurs différents, en exécutant:

git diff origin/server1 origin/server2 -- file

Ceci peut être combiné avec la configuration automatisée suggérée par jojoo .

TTT
la source
git push -u origin master: $ HOSTNAME ne fonctionne pas ici. Le référentiel à distance est un référentiel nu vide. erreur: src refspec master ne correspond à aucun.
Bertl
1

Comment le faire automatiquement, l'histoire complète:

Créez le fichier /etc/etckeeper/commit.d/60-push (n'oubliez pas de chmod + x it) sur les clients.

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

central_server est défini dans la configuration ssh, voir ci-dessous. /var/git/client_name.git est le répertoire du serveur central, contenant le dépôt git.

La configuration ~ / .ssh / de root (!) Devrait contenir quelque chose comme ceci:

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

Ensuite, vous devez lancer le dépôt git sur le serveur central

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

Testez-le avec une modification mineure dans / etc puis un etckeeper commit "test push'ing".

jojoo
la source
1

Ce n'est pas le propos. Si vous souhaitez diffuser largement la configuration, vous configurez un autre référentiel en plus du référentiel local de chaque machine, et vous avez le choix entre chaque machine si nécessaire. Cela permet à chaque machine de dévier (branche, vraiment) et de conserver le contrôle des révisions.

jldugger
la source
Je ne sais pas comment faire cela (deuxième référentiel). Peux-tu élaborer?
Brent
Vous devrez probablement cloner l'un des dépôts sur votre "référentiel central"; vous n'en avez besoin que d'un. De là, vous pouvez apporter des modifications, puis chacun des serveurs peut sélectionner les correctifs stockés dans une révision. La configuration initiale varie d'un DSCM à l'autre. Pour git, voir kernel.org/pub/software/scm/git-core/docs/gittutorial.html
jldugger
-2

Vous ne voulez vraiment pas faire de etckeeper votre politique de sauvegarde. Bien qu'il soit bien d'avoir une copie de vos fichiers de configuration, ce n'est guère suffisant pour être considéré comme un plan de reprise après sinistre.

Concentrez-vous plutôt sur de véritables sauvegardes de votre système. Le simpliste pourrait être un cronjob pour alimenter une tarball sur bande ... oh, c'est vrai. Personne n'utilise plus de bandes. D'accord, un cronjob pour rsync tous vos fichiers sur un NAS dédié . Pour des solutions de sauvegarde plus robustes, jetez un œil à Amanda et Bacula .

Et pour le cas des universitaires, j'ai pu pousser mon repo etckeeper jusqu'à github comme tout autre git repo.

Shazburg
la source
Personne ne parle d'en faire une politique de sauvegarde. Mais d'après mon expérience, il est pratique de tout avoir en un seul endroit, sur un serveur plus sécurisé.
Brent
1
Ensuite, j'ai mal compris. Si ce que vous cherchez vraiment est un moyen de stocker et de distribuer la configuration de vos systèmes de manière centralisée, alors peut-être Puppet ( reductivelabs.com/products/puppet ) pourrait vous être utile.
Shazburg
par exemple: nous poussons toutes nos configurations vers un seul hôte. il exécute un trac, qui est utilisé pour visualiser les changements de configuration (et bien sûr écrire des tickets, si quelque chose ne fonctionne pas, ...) imo c'est super pratique, je peux par exemple comparer les crontabs de tous nos hôtes avec quelques clics.
jojoo