10163
Commentaire: les sections les plus importantes vers le haut
|
5359
projet déjà en phase de déploiement + mise à jour
|
Texte supprimé. | Texte ajouté. |
Ligne 1: | Ligne 1: |
||<#FFFF50> '''APPEL A PARTICIPATION AUX TESTS DE DÉPLOIEMENT''' : Mettez ce système en place en suivant simplement les sections « Installation automatisée » et « Utilisation ». S'il restait encore un problème, signalez-le immédiatement via la liste de discussion technique de l'AUF. Aidez à tester le déploiement de ce système : c'est quasiment sans risque, et ce sera bientôt la façon '''officielle''' de faire à l'AuF. Affaire à suivre très prochainement. || == Introduction == |
= Introduction = |
Ligne 9: | Ligne 7: |
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é. | Il existe différents logiciels de ce type, parmi 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 9: |
/* ''A écrire : petites explications sur la notion de dépôt, orientée git et surveillance de /etc'' */ | '''Notre objectif est d'installer et de configurer `git` pour que l'administrateur d'un serveur puisse aisément faire le suivi de sa configuration.''' |
Ligne 13: | Ligne 11: |
Notre objectif ici est d'installer `git` sur un serveur pour que son ou ses administrateurs, et uniquement eux, puissent aisément faire le suivi de sa configuration. == Installation automatisée (recommandée) == |
= Installation automatisée (paquet auf-git-etc) = |
Ligne 19: | Ligne 15: |
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 |
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/ wheezy auf |
Ligne 24: | Ligne 19: |
Puis de lancer les commandes suivantes : {{{ $ sudo aptitude update # ignorer le message d'avertissement $ sudo aptitude install auf-keyring $ sudo aptitude update $ sudo aptitude install auf-git-etc |
Puis de lancer les commandes suivantes : {{{#!shell sudo aptitude update # ignorer le message d'avertissement sudo aptitude install auf-keyring # accepter l'installation « non signée » sudo aptitude update # aucun message d'avertissement ne doit s'afficher sudo aptitude install auf-git-etc |
Ligne 32: | Ligne 26: |
== Utilisation == | = Utilisation = |
Ligne 34: | Ligne 28: |
* '''Préliminaire''' : ajouter les lignes suivantes dans son `~/.bash_profile`, puis faire un `source ~/.bash_profile` (ou se reloguer) pour activation : {{{ # à ajouter à la fin de son fichier ~/.bash_profile : |
== Configuration préliminaire == Ajouter les lignes suivantes dans son `~/.bash_profile` (puis se reconnecter pour activation) : {{{#!shell |
Ligne 41: | Ligne 35: |
* 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 |
== Utilisation au quotidien == Pour voir les modifications avant de les envoyer dans le dépôt : {{{#!shell sudo git status # affiche la liste des fichiers modifiés, supprimés, nouveaux… sudo git diff # affiche les différences entre ce qui est stocké dans git et l'état actuel |
Ligne 47: | Ligne 42: |
* 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é # pour un fichier : toujours en notation relative $ sudo git commit -a # on enregistre *toutes* les modifications |
Pour envoyer les modifications dans le dépôt, on lance un `commit`. Il y a plusieurs façons de faire, parmi lesquelles : {{{#!shell 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 53: | Ligne 48: |
* Pour suivre un nouveau fichier ou tous les nouveaux fichiers d'un répertoire, par exemple suite à l'installation de nouveaux fichier de configuration : {{{ $ cd / $ sudo git add le/chemin/relatif/vers/le/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 ne plus 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 (nb : le chemin est relatif, sans / au début) }}} * Pour revoir les modifications, plusieurs techniques en ligne de commande : {{{ $ sudo tig <-- petit logiciel très sympa, à installer avec aptitude install tig $ sudo git whatchanged $ sudo git log -10 $ sudo git show ...(le code du commit)... |
Pour revoir les modifications, plusieurs techniques en ligne de commande : {{{#!shell 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 76: | Ligne 56: |
* Note : la plupart du temps, il est plus simple de prendre l'habitude de se placer à la racine pour faire les manipulations `git`. Un exemple typique : | == Exemple d'utilisation == |
Ligne 78: | Ligne 59: |
$ cd /etc | $ sudo vi profile <-----| ici on travaille $ sudo vi postfix/main.cf | $ cd / $ sudo git status -a | on fait un cd / $ sudo git diff | less <-----| puis on documente $ sudo git commit -a | son travail ... |
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 | 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 87: | Ligne 68: |
== Installation manuelle (déconseillée) == | Note : la plupart du temps, il est plus simple de prendre l'habitude de se placer à la racine pour faire les manipulations `git`. |
Ligne 89: | Ligne 70: |
1. On installe `git` : {{{ # aptitude install git-core |
== 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 : {{{#!shell cd / sudo git add le/chemin/du/fichier/ou/repertoire # il faut indiquer un chemin relatif (sans / au début) sudo git commit |
Ligne 94: | Ligne 79: |
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. {{{ # cd / # git init-db <--- Ou "git init" sur Git 1.5 (Debian Lenny, Ubuntu Gutsy) # chmod u=rwx,go= /.git <--- important ! Seul "root" doit pouvoir accéder au dépôt |
Attention : il faut éventuellement modifier le fichier `/etc/auf-git-etc/info/exclude` Pour arrêter de suivre un fichier ou un répertoire : {{{#!shell sudo vi /etc/auf-git-etc/info/exclude # on ajoute le nom du fichier dans les exclusions (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 101: | Ligne 87: |
3. Pour éviter d'avoir des "saletés" directement à la racine (`/`), on déplace le dépôt vers `/var/lib/git`. Le répertoire `/.git` à la racine ne sera en fait qu'un lien symbolique vers le véritable emplacement du dépôt : {{{ # mkdir /var/lib/git # mv /.git /var/lib/git/root # ln -s /var/lib/git/root /.git }}} 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` : {{{ # Le fichier /var/lib/git/root/info/exclude à modifier ou créer # 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 /etc/ld.so.cache # 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 *~ *# }}} 5. On fait le premier ajout de tous les fichiers à suivre (sauf les exclus indiqués ci-dessus), puis le premier ''commit'' : {{{ # cd / # git add etc usr/local # git commit -m "mise en route du suivi : /etc et /usr/local" --author "Prenom NOM <prenom.nom@auf.org>" }}} 6. On utilisera surtout `git` avec `sudo`. Il faut donc dire à `sudo` de ne pas supprimer les variables d'environnement utiles à `git` : {{{ # (... extrait de /etc/sudoers ...) # une ligne à ajouter au début de /etc/sudoers : Defaults env_keep += "GIT_COMMITTER_NAME GIT_COMMITTER_EMAIL GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL" }}} == Quelques automatisations quasi indispensables == ''Note : ces automatisations sont déjà mise en place par notre paquet Debian.'' Pour lancer un "status" à chaque connexion sur le serveur (très très utile) : 1. Permettre aux gens du groupe "admin" de lancer git status sans mot de passe : {{{ # et à ajouter vers la fin de /etc/sudoers : %admin ALL=(ALL) NOPASSWD: /usr/bin/git status -a }}} 1. Lancer le `git status` (via `sudo`) dans le `/etc/profile`, et configurer un peu les variables GIT : {{{ # A ajouter à la fin de /etc/profile : if [ "$PS1" ]; then # on lance un git status sur l'utilisateur est dans le groupe # admin ou bien si c'est root if $(id -Gn | grep -qw admin) || [ $(id -u) -eq 0 ]; then [ -x /usr/bin/git -a -e /.git ] && (cd / && sudo /usr/bin/git status -a) fi # les lignes suivantes tentent de configurer les variables GIT_* # si les résultats ne sont pas bien "devinés", définir les bonnes valeurs dans .bashrc GIT_AUTHOR_NAME=${GIT_AUTHOR_NAME:=$(getent passwd $(id -un)|cut -d: -f5|cut -d, -f1)} GIT_AUTHOR_EMAIL=${GIT_AUTHOR_EMAIL:=$(id -un)@$(hostname -f)} GIT_COMMITTER_NAME=${GIT_COMMITTER_NAME:=$GIT_AUTHOR_NAME} GIT_COMMITTER_EMAIL=${GIT_COMMITTER_EMAIL:=$GIT_AUTHOR_EMAIL} export GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL GIT_COMMITTER_NAME GIT_COMMITTER_EMAIL fi }}} Pour envoyer un mail à chaque commit : 1. Créer un script `/.git/hooks/post-commit` : {{{ #!/bin/bash recipients="admins@XX.auf.org" # adresse pour l'envoi du mail # On modifie un peu la sortie de git show : # 1) on ajoute "From git hostname" devant le nom en From # 2) on retire le [PATCH] dans le sujet, replacé par git-commit: # 3) on ajoute un champ To: # et on maile le tout via sendmail PATH=/usr/sbin:/usr/bin:/sbin:/bin git show --pretty=email | sed '1,6s/^From: /From: git '`hostname -f`' - /;1,6s/^Subject: \[PATCH\]/Subject: git-commit:/;2iTo: '"${recipients}" | head -c 16k | /usr/lib/sendmail ${recipients} exit 0 }}} 1. Activer le script : {{{ # chmod +x /.git/hooks/post-commit }}} 1. Faire un petit commit de test afin de vérifier ça marche, notamment que `sendmail` (Postfix, Exim, ...) envoie bien le message. == Ca ressemble à quoi ? == |
= Ca ressemble à quoi ? = |
Ligne 207: | Ligne 91: |
{{attachment:ce-que-montre-tig.png}} | {{attachment:ce-que-montre-tig.png}} = Annexes = |
Ligne 211: | Ligne 97: |
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 correctement * [[Tini]] n'ose pas le dire, mais il a fait un paquet Debian `git-etc-auf` qui fait tout le boulot d'installation. Un jour il osera. * il n'a pas vraiment osé, mais ProgFou a repris le flambeau et ne s'est pas encore brulé les doigts avec * Chouette ! Maintenant qu'on a notre [[DépôtAPT|dépôt APT AuF]], on va pouvoir FOOONNNCCCEEEEEEERRRR (dans le mur ?) |
Pour plus tard (post Etch) : * 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 |
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, parmi 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 l'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/ wheezy auf
Puis de lancer les commandes suivantes :
sudo aptitude update # ignorer le message d'avertissement sudo aptitude install auf-keyring # accepter l'installation « non signée » sudo aptitude update # aucun message d'avertissement ne doit s'afficher sudo aptitude install auf-git-etc
Utilisation
Configuration préliminaire
Ajouter les lignes suivantes dans son ~/.bash_profile (puis se reconnecter pour activation) :
export GIT_AUTHOR_NAME="Prénom 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 # affiche la liste des fichiers modifiés, supprimés, nouveaux… sudo git diff # affiche les différences entre ce qui est stocké dans git et l'état actuel
Pour envoyer les modifications dans le dépôt, on lance un commit. Il y a plusieurs façons de faire, parmi 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 | 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 un chemin relatif (sans / au début) sudo git commit
Attention : il faut éventuellement modifier le fichier /etc/auf-git-etc/info/exclude
Pour arrêter de suivre un fichier ou un répertoire :
sudo vi /etc/auf-git-etc/info/exclude # on ajoute le nom du fichier dans les exclusions (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 (post Etch) :
- 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