Bonjour,
Je souhaite mettre en place un système de gestion de version pour les fichiers de configuration de mes serveurs virtuels.
J'ai une multitude de serveurs linux me servant à faire des expériences et je n'ai pas du tout la place pour faire des backups aussi souvent que je le souhaite. C'est pour cela que je souhaite me concentrer sur la sauvegarde et le versioning des fichiers de configuration.
Au final j'aimerais avoir un historique des changements, pouvoir retrouver un fichier supprimé ou encore retrouver une configuration qui marchait bien utilisée il y a des mois de cela. Ce que fait finalement tout bon système de gestion de version.
Il ne s'agit pas de traquer tout les fichiers du système bien entendu, mais de spécifier une liste de fichiers pour chaque linux.
Alors il y a etckeeper qui permet de se focaliser sur /etc mais j'aimerais traquer d'avantage comme des fichiers de conf d'un utilisateur ou encore des fichiers de /var.
J'ai donc essayé d'init un git à la racine et d'ajouter des fichiers. Mais il se trouve qu'il y a plusieurs problèmes. Je ne pas ajouter un fichier depuis un sous répertoire, et il y à la problématique de clone un repo existant à la racine d'un système.
Si vous connaissez un projet utilisant git permettant de faire cela, ou alors un moyen magique d'utiliser facilement git à la racine d'un système je suis preneur :)
Merci par avance :)
# GIT_WORK_TREE
Posté par GaMa (site web personnel) . Évalué à 2.
Je connais pas d'outils faisant ça, mais déjà j'éviterais de faire un dépôt git à la racine
Je ferais plutôt un dépôt git dans un dossier quelconque en mettant:
C'est à tester, mais en jouant avec les variables d'environnement GIT_* (ou les options qui vont à la place) tu dois pouvoir te faire un truc qui va bien comme il faut.
Matthieu Gautier|irc:starmad
[^] # Re: GIT_WORK_TREE
Posté par lay . Évalué à 0.
En effet cela a l'air de fonctionner en utilisant :
git --work-tree=/ --git-dir=/home/user/git_backup/.git/ add etc/conf.d/hostname
git --work-tree=/ --git-dir=/home/user/git_backup/.git/ status
mais ne marche pas avec :
cd /etc/conf.d
git --work-tree=/ --git-dir=/home/user/git_backup/.git/ add hostname
où il n'arrive pas à résoudre le chemin du fichier.
Je vais donc partir sur cette solution et créer un petit outil utilisant git et l'api de bitbucket (je n'ai pas de système de backup totalement sûr chez moi) pour faciliter et automatiser certaines tâches.
Merci du tuyau :)
[^] # Re: GIT_WORK_TREE
Posté par B16F4RV4RD1N . Évalué à 2.
il faut être à la racine du dépôt git pour rajouter un fichier dans un sous-répertoire ??
J'ai un peu des doutes par rapport à cette limitation, mais dans mercurial on peut le faire depuis n'importe où en tout cas.
Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it
[^] # Re: GIT_WORK_TREE
Posté par lay . Évalué à 1.
En effet il est normalement possible de le faire depuis n'importe quel sous répertoire.
Mais dans le cas d'un work tree à la racine, il n'arrive pas à résoudre le chemin.
D'après mes recherches plusieurs patchs existent, mais je souhaite resté sur la version stable de git.
# Périmètre
Posté par Sébastien Koechlin . Évalué à 3.
Personnellement, je m'arrange pour que systématiquement, toute la configuration système soit dans /etc. En m'imposant ce genre de contrainte, je m'assure que la sauvegarde est facile à faire et la restauration n'est pas prise de tête.
La sauvegarde se limite alors à /etc, /home, /usr/local et quelques répertoires de /var (surtout /var/backups remplis quotidiennement par backupninja)
[^] # Re: Périmètre
Posté par lay . Évalué à 0.
C'est en effet un bonne solution de backup dans mon cas.
Mais l'utilisation de git et de pouvoir avoir accès à un historique des modifications au lieu de rechercher dans les différents backups est un gros plus qui m'a fait basculer vers un système de versioning.
J'espère gagner de précieuses heures à l'avenir :)
# Autres solutions : Puppet + versionning
Posté par ze_farf . Évalué à 2.
Bonsoir,
Perso je me ferai plutôt un serveur puppet avec du versionning sur les fichiers puppetisés.
http://docs.puppetlabs.com/
Ou encore une solution à base de rsync avec des fichiers versionnés également et des scripts de post-commit.
Amuse toi bien en tout cas :)
# Ça marche :)
Posté par lay . Évalué à 1.
Finalement pour résoudre mon problème j'ai fait un petit outil en python.
Celui initialise un repo git dans un répertoire ~/.gitstore/data et créer automatiquement un repo sur bitbucket ayant comme nom l'host de la machine si le repo n’existe pas déjà, ou alors clone le repo si il est déjà présent.
Quand j'ajoute des fichiers ou répertoires grâce à l'outil, il copie les fichiers du système dans le repo et les ajoute à git.
Quand je demande une sauvegarde, il liste les fichiers contenus dans git et pour chaque fichier il vérifie si il correspond à celui présent sur le système.
Si le fichier est différent, il écrase celui dans git et si il n’existe plus il le supprime de git.
C'est clairement du bricolage, mais ça fait exactement le travail voulu.
Je peux donc créer un repo sur une nouvelle machine, ajouter des fichiers, traquer les modifications, push les fichiers modifiés.
Si je refait une machine existant déjà, cela clone les fichiers, et je peux choisir de les dispatcher sur le système un à un, ou de push directement les fichiers modifiés.
Il ne me reste plus qu'à broder quelques commandes pour lister les fichiers supprimés ou afficher un fichier d'une version donnée.
Merci à vous pour ces pistes :)
[^] # Re: Ça marche :)
Posté par totof2000 . Évalué à 2.
Si c'est pour faire du Python, pourquoi ne pas utiliser Mercurial ?
[^] # Re: Ça marche :)
Posté par benoar . Évalué à 2.
Tu te rends compte que t'es en train de recoder exactement les fonctionnalités de git ?
Je pense que la solution du dessus, avec un patch pour le problème de rajouter des fichiers en relatif, t'irais plutôt bien, non ?
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.