||<#ff0000> L'installation du suivi de configuration (/etc) avec git est automatisée par l'installation d'un paquet, voir [[Git/SuiviDeConfiguration]] || = Installation manuelle du suivi de config avec git (déconseillée) = 1. On installe `git` : {{{ # aptitude install git-core }}} 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 }}} 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 " }}} 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 = ''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.