Taille: 4646
Commentaire: imakse
|
Taille: 5738
Commentaire: là, c'est ok ?
|
Texte supprimé. | Texte ajouté. |
Ligne 1: | Ligne 1: |
Git est un système de gestion de versions. Voir sa [http://fr.wikipedia.org/wiki/Git_(logiciel) page wikipédia] | ||<#FFFF50> '''APPEL A PARTICIPATION AUX TESTS DE DÉPLOIEMENT''' :<<BR>> Mettez ce système en place en suivant les sections « Installation automatisée » et « Utilisation ».<<BR>> En cas de problème, signalez-le immédiatement via la liste de discussion technique de l'AUF. || |
Ligne 3: | Ligne 3: |
'''Note : testé sur Gutsy... en cours de test sur Etch''' | = Introduction = |
Ligne 5: | Ligne 5: |
= Suivre la config d'une machine avec git = | On veut pouvoir documenter les modifications faites dans `/etc` et dans `/usr/local`, qui sont ''grosso modo'' les deux répertoires permettant de décrire comment fonctionne un serveur. Cette documentation est indispensable en cas d'administration à plusieurs, mais elle est également très utile quand on est seul à gérer : c'est un aide-mémoire indispensable vu la vitesse à laquelle évoluent les technologies et donc les configurations. |
Ligne 7: | Ligne 7: |
On veut pouvoir documenter les modifications faites dans /etc et dans /usr/local. | Pour cela, on utilise un logiciel de gestion de version. Ce logiciel va nous permettre de documenter chaque modification effectuée sur un fichier ou un ensemble de fichier. '''On pourra ensuite retrouver à quel moment à été faite une modification, par qui et pour quelle raison.''' |
Ligne 9: | Ligne 9: |
== Installation == | Il existe différents logiciels de ce type, parmis lesquels on peut citer l'ancètre RCS, son fils CVS, son petit-fils Subversion (`svn`) et dans la génération qui vient d'arriver : `git`. C'est ce dernier logiciel que nous avons choisi car il est moins bavard, moins intrusif dans le code à surveiller, et surtout très bien documenté. |
Ligne 11: | Ligne 11: |
1. On installe `git` : | '''Notre objectif est d'installer et de configurer `git` pour que s'administrateur d'un serveur puisse aisément faire le suivi de sa configuration.''' = Installation automatisée (paquet auf-git-etc) = Vous avez maintenant à votre disposition un paquet Debian [[http://git.auf.org/?p=auf-git-etc.git|réalisé en interne à l'AuF]]. Pour profiter de ce paquet il vous suffit de créer un fichier `/etc/apt/sources.list.d/auf.list` avec le contenu suivant : |
Ligne 13: | Ligne 20: |
# aptitude install git-core | deb http://apt.auf.org/ etch auf |
Ligne 16: | Ligne 23: |
2. On créée un dépôt général pour toute la machine. Attention à bien régler les droits : seul `root` doit pouvoir accéder au dépôt, sinon les fichiers du genre `shadow` seraient accessibles à tous. | Puis de lancer les commandes suivantes : |
Ligne 18: | Ligne 25: |
# cd / # git init (ou "git init-db" sur une Debian Etch, git version 1.4) # chmod u=rwx,go= /.git |
# aptitude update # ignorer le message d'avertissement # aptitude install auf-keyring # accepter l'installation "non signée" # aptitude update # aucun message d'avertissement ne doit s'afficher # aptitude install auf-git-etc |
Ligne 23: | Ligne 31: |
3. Pour éviter d'avoir des "saletés" directement à la racine (`/`), on déplace le dépôt. Le répertoire `/.git` à la racine ne sera en fait qu'un lien symbolique vers le véritable emplacement du dépôt : | = Utilisation = == Configuration préliminaire == Ajouter les lignes suivantes dans son `~/.bash_profile`, puis se reloguer pour activation : |
Ligne 25: | Ligne 37: |
# mkdir /var/lib/git # mv /.git /var/lib/git/root # ln -s /var/lib/git/root /.git |
# lignes à ajouter à la fin de son fichier ~/.bash_profile (puis se reloguer pour activation) : export GIT_AUTHOR_NAME="Prenom NOM" export GIT_AUTHOR_EMAIL="prenom.nom@auf.org" |
Ligne 30: | Ligne 42: |
4. On veut suivre `/etc` et `/usr/local` seulement, pour cela on modifie les exclusions au niveau du dépôt, dans le fichier `/var/lib/git/root/info/exclude` : | == Utilisation au quotidien == Pour voir les modifications avant de les envoyer dans le dépôt : |
Ligne 32: | Ligne 46: |
# Le fichier /var/lib/git/root/info/exclude : # Par défaut, on exclut tout, sauf /etc /* !/etc # ... mais dans /etc on interdit certains fichiers : /etc/*shadow* /etc/ssh/ssh_host_*_key /etc/mtab /etc/adjtime # On n'interdit pas non plus le parcours de /usr. Mais dans ce parcours, # on interdit tout sauf /usr/local. C'est la technique pour inclure /usr/local... !/usr /usr/* !/usr/local # quelques type fichiers à ne pas jamais considérer, globalement : *.dpkg-old *.dpkg-new .*.swp *~ *# |
$ sudo git status -a # affiche la ligne des fichiers modifiés, supprimés, nouveaux... $ sudo git diff # affiche les différences entre la version stockée dans git et la version actuelle |
Ligne 54: | Ligne 50: |
5. On fait les premiers ajouts et le premier ''commit'' : | Pour envoyer les modifications dans le dépôt, on lance un ''commit''. Il y a plusieurs façons de faire, parmis lesquelles : |
Ligne 56: | Ligne 52: |
# cd / # git add etc usr/local # git commit -m "mise en route du suivi : /etc et /usr/local" --author "moi <email@auf.org>" |
$ sudo git commit un/seul/fichier/modifié # on enregistre les modification d'un seul fichier (attention : toujours en notation relative) $ sudo git commit -a # on enregistre *toutes* les modifications |
Ligne 61: | Ligne 56: |
== Utilisation == Après '''chaque''' modification d'un fichier, enregistrer les modifications : {{{ # git commit -a}}} Si on veut suivre un nouveau fichier, ou ne committer les modifications que de ce fichier : {{{ # git add fichier # git commit}}} et pour un répertoire (modifier `exclude` si c'est en dehors de /etc ou /usr/local): {{{ # cd / ; git add un/reper/toire # git commit}}} Pour voir les modifications, plusieurs techniques en ligne de commande : {{{ # tig <-- à installer avec aptitude install tig # git whatchanged # git log -10 # git show ...(le code du commit)... |
Pour revoir les modifications, plusieurs techniques en ligne de commande : {{{ $ sudo git log -10 # rappel succinct des 10 dernières modifications $ sudo git show # affiche les détails de la dernière modification $ sudo git show 4961aef5e675fd148 # 4961aef5e675fd148 = le début du code de la modification à afficher en détail $ sudo git whatchanged # liste des modifications $ sudo tig # petit logiciel très sympa, à installer avec aptitude install tig |
Ligne 84: | Ligne 65: |
== Quelques scripts d'automatisation (wrapper) == | == Exemple d'utilisation == |
Ligne 86: | Ligne 67: |
A ajouter dans son `~/.bashrc` : {{{ export GIT_COMMITTER_NAME="Prenom NOM" export GIT_COMMITTER_EMAIL="prenom.nom@auf.org"}}} |
{{{ $ cd /etc | ici on travaille, dans cet exemple $ sudo vi profile <-----| on modifie la configuration du $ sudo vi postfix/main.cf | logiciel Postfix $ cd / $ sudo git status -a | une fois le travail fait, on va sur / $ sudo git diff <-----| puis on documente ce qu'on a fait $ sudo git commit -a | (pourquoi, comment...) }}} |
Ligne 91: | Ligne 77: |
=== confcommit === | Note : la plupart du temps, il est plus simple de prendre l'habitude de se placer à la racine pour faire les manipulations `git`. |
Ligne 93: | Ligne 79: |
attachment:confcommit | == Suivre de nouveaux fichiers / Ne plus suivre des fichiers == |
Ligne 95: | Ligne 81: |
Permet une utilisation plus simple via `sudo` : * trouve le nom de l'auteur/committer par les variables d'environnement GIT_ et/ou SUDO_USER * `confcommit -a` : effectue un `git commit -a` pour committer toutes les modifications et suppression de fichiers * `confcommit -n` : effectue un `git add etc usr/local` pour ajouter tous les nouveaux fichiers |
Pour suivre un nouveau fichier ou tous les nouveaux fichiers d'un répertoire, par exemple suite à l'installation de nouveaux fichiers de configuration : {{{ $ cd / $ sudo git add le/chemin/du/fichier/ou/repertoire # il faut indiquer le chemin en "relatif" (sans / au début) $ sudo git commit }}} Attention : il faut éventuellement modifier le fichier `/.git/info/exclude` |
Ligne 100: | Ligne 89: |
=== confcommit-status === | Pour arrêter de suivre un fichier ou un répertoire : {{{ $ sudo vi /.git/info/exclude # on ajoute le nom du fichier dans les excludes (exemple : /etc/ldap.secret) $ cd / $ sudo git rm le/chemin/du/fichier/a/ne/plus/suivre # on le retire du dépôt (note : le chemin est relatif, sans / au début) }}} |
Ligne 102: | Ligne 96: |
attachment:confcommit-status | = Ca ressemble à quoi ? = |
Ligne 104: | Ligne 98: |
A lancer via un `cron` au moins quotidien, il donne la liste des modifications non encore enregistrées : fichiers modifiés, fichiers supprimés, nouveaux fichiers. | Juste pour donner une idée, voici ce que donne le petit programme `tig` lorsqu'on le lance sur une machine bien suivie : |
Ligne 106: | Ligne 100: |
== Un serveur gitweb central == | {{attachment:ce-que-montre-tig.png}} |
Ligne 108: | Ligne 102: |
''brouillon (manip testées, ça marche, mais j'ai peut-être oublié quelques détails)'' | = Annexes = |
Ligne 110: | Ligne 104: |
1. Installation de gitweb sur un serveur à IP publique. Attention, puisqu'il permettra d'accéder à des fichiers du type `shadow` : accès restreint par mot de passe, éventuellement à certaines IP, voir certificat ssl si on passe en mode parano. 2. Dans /var/lib/git on créée des dépôts (un par serveur à suivre). Ces dépots appartiennent à un utilisateur "gitweb" (pas à root) {{{ gitweb@serveur-git$ GIT_DIR=/var/lib/git/apollon git init-db gitweb@serveur-git$ ln -s /var/lib/git/apollon /var/cache/git/apollon # prise en compte par gitweb }}} 3. On met les clés publiques des comptes root des serveurs dans `/home/gitweb/.ssh/authorized_keys` 4. Pour synchroniser le dépôt local d'un serveur avec le dépôt sur le serveur gitweb : {{{ # git push --all ssh://gitweb@serveur-gitweb/var/lib/git/apollon }}} 5. C'est tout. |
== Améliorations à trouver == |
Ligne 123: | Ligne 106: |
== Améliorations à prévoir == | Pour plus tard (Lenny) : * correction du bogue quand on joue avec un "/.git" (y a-t-il un bogue, d'ailleurs ? ) * `git-stash` pour relier apt et git |
Ligne 125: | Ligne 110: |
. interfaçage avec apt : voir http://bryan-murdock.blogspot.com/2007/07/put-etc-under-revision-control-with-git.html . hooks à comprendre : envoyer un mail à chaque commit, synchroniser avec le gitweb à chaque commit, etc... |
== Annexes == * historique : /InstallationManuelle |
APPEL A PARTICIPATION AUX TESTS DE DÉPLOIEMENT :
Mettez ce système en place en suivant les sections « Installation automatisée » et « Utilisation ».
En cas de problème, signalez-le immédiatement via la liste de discussion technique de l'AUF.
Introduction
On veut pouvoir documenter les modifications faites dans /etc et dans /usr/local, qui sont grosso modo les deux répertoires permettant de décrire comment fonctionne un serveur. Cette documentation est indispensable en cas d'administration à plusieurs, mais elle est également très utile quand on est seul à gérer : c'est un aide-mémoire indispensable vu la vitesse à laquelle évoluent les technologies et donc les configurations.
Pour cela, on utilise un logiciel de gestion de version. Ce logiciel va nous permettre de documenter chaque modification effectuée sur un fichier ou un ensemble de fichier. On pourra ensuite retrouver à quel moment à été faite une modification, par qui et pour quelle raison.
Il existe différents logiciels de ce type, parmis lesquels on peut citer l'ancètre RCS, son fils CVS, son petit-fils Subversion (svn) et dans la génération qui vient d'arriver : git. C'est ce dernier logiciel que nous avons choisi car il est moins bavard, moins intrusif dans le code à surveiller, et surtout très bien documenté.
Notre objectif est d'installer et de configurer git pour que s'administrateur d'un serveur puisse aisément faire le suivi de sa configuration.
Installation automatisée (paquet auf-git-etc)
Vous avez maintenant à votre disposition un paquet Debian réalisé en interne à l'AuF.
Pour profiter de ce paquet il vous suffit de créer un fichier /etc/apt/sources.list.d/auf.list avec le contenu suivant :
deb http://apt.auf.org/ etch auf
Puis de lancer les commandes suivantes :
# aptitude update # ignorer le message d'avertissement # aptitude install auf-keyring # accepter l'installation "non signée" # aptitude update # aucun message d'avertissement ne doit s'afficher # aptitude install auf-git-etc
Utilisation
Configuration préliminaire
Ajouter les lignes suivantes dans son ~/.bash_profile, puis se reloguer pour activation :
# lignes à ajouter à la fin de son fichier ~/.bash_profile (puis se reloguer pour activation) : export GIT_AUTHOR_NAME="Prenom NOM" export GIT_AUTHOR_EMAIL="prenom.nom@auf.org"
Utilisation au quotidien
Pour voir les modifications avant de les envoyer dans le dépôt :
$ sudo git status -a # affiche la ligne des fichiers modifiés, supprimés, nouveaux... $ sudo git diff # affiche les différences entre la version stockée dans git et la version actuelle
Pour envoyer les modifications dans le dépôt, on lance un commit. Il y a plusieurs façons de faire, parmis lesquelles :
$ sudo git commit un/seul/fichier/modifié # on enregistre les modification d'un seul fichier (attention : toujours en notation relative) $ sudo git commit -a # on enregistre *toutes* les modifications
Pour revoir les modifications, plusieurs techniques en ligne de commande :
$ sudo git log -10 # rappel succinct des 10 dernières modifications $ sudo git show # affiche les détails de la dernière modification $ sudo git show 4961aef5e675fd148 # 4961aef5e675fd148 = le début du code de la modification à afficher en détail $ sudo git whatchanged # liste des modifications $ sudo tig # petit logiciel très sympa, à installer avec aptitude install tig
Exemple d'utilisation
$ cd /etc | ici on travaille, dans cet exemple $ sudo vi profile <-----| on modifie la configuration du $ sudo vi postfix/main.cf | logiciel Postfix $ cd / $ sudo git status -a | une fois le travail fait, on va sur / $ sudo git diff <-----| puis on documente ce qu'on a fait $ sudo git commit -a | (pourquoi, comment...)
Note : la plupart du temps, il est plus simple de prendre l'habitude de se placer à la racine pour faire les manipulations git.
Suivre de nouveaux fichiers / Ne plus suivre des fichiers
Pour suivre un nouveau fichier ou tous les nouveaux fichiers d'un répertoire, par exemple suite à l'installation de nouveaux fichiers de configuration :
$ cd / $ sudo git add le/chemin/du/fichier/ou/repertoire # il faut indiquer le chemin en "relatif" (sans / au début) $ sudo git commit
Attention : il faut éventuellement modifier le fichier /.git/info/exclude
Pour arrêter de suivre un fichier ou un répertoire :
$ sudo vi /.git/info/exclude # on ajoute le nom du fichier dans les excludes (exemple : /etc/ldap.secret) $ cd / $ sudo git rm le/chemin/du/fichier/a/ne/plus/suivre # on le retire du dépôt (note : le chemin est relatif, sans / au début)
Ca ressemble à quoi ?
Juste pour donner une idée, voici ce que donne le petit programme tig lorsqu'on le lance sur une machine bien suivie :
Annexes
Améliorations à trouver
Pour plus tard (Lenny) :
- correction du bogue quand on joue avec un "/.git" (y a-t-il un bogue, d'ailleurs ? )
git-stash pour relier apt et git
Annexes
historique : /InstallationManuelle