CransWiki:

Plusieurs personnes travaillant sur les serveurs, il est pratique de savoir qui modifie quoi et pourquoi. De plus garder un historique des configs est très utile.

Ces tâches seront gérées par CVS.

Point de vue utilisateur

{i} Depuis la mise à jour de sudo de janvier 2006, les variables d'environnement ne passent plus, on peut passer le CVSROOT et le EDITOR dans les arguments de cvs : cvs -d /var/lib/cvs -e jed (on peut mettre la commande alias cvs="sudo cvs -d /var/lib/cvs -e jed" dans les fichiers de conf du shell pour ne pas taper ces arguments à chaque fois). Cependant, la variable CVSROOT ou le paramètre -d n'ont pas besoin d'être précisés si on travaille dans des répertoires gérés par cvs (présence d'un sous-répertoire CVS).

Mise en place

Nous expliquons ici comment synchroniser ses fichiers de configuration avec cvs.

Base

Il faut tout d'abord un repository (lieu de stockage des fichiers) sur la machine (exemple dans /var/cvsroot)

mkdir /var/cvsroot
cvs -d /var/cvsroot init

Pour simplifier il est ensuite conseillé d'utiliser la variable d'environnement CVSROOT=/var/cvsroot.

/!\ Vocabulaire

On parle souvent du "CVS" pour dire le "repository". La distinction est bien faite dans cette section, mais le lecteur doit apprendre à distinguer quand on parle de la commande cvs ou du repository CVS.

Quand un répertoire est dans le repository, il possède un sous-répertoire CVS qui contient les informations privées de cvs, notamment :

Si on veut rajouter /etc dans le repository (en conservant /etc comme répertoire de travail), par exemple, il faut y mettre un sous-répertoire CVS. On peut le créer artificiellement de la manière suivante :

mkdir /tmp/etc
cd /tmp/etc
cvs import nectaris_etc 'Crans' 'Nectaris' # 'Crans' et 'Nectaris' peuvent être n'importe quoi
cd /
rm -rf /tmp/etc
cvs checkout nectaris_etc # Un répertoire CVS sera alors créé dans /nectaris_etc
mv nectaris_etc/CVS etc
rm -rf nectaris_etc

{i} Explications

On crée un répertoire vide (ici, nectaris_etc) dans le repository, puis on en récupère le sous-répertoire CVS que l'on place dans /etc.
Il faut bien distinguer l'arborescence "normale" et l'arborescence du repository : un répertoire du repository peut se trouver à plusieurs endroits dans l'arborescence normale (ce sont des copies de travail). Ici, on leurre cvs en lui faisant croire que le répertoire "normal" /etc est une copie de travail du répertoire nectaris_etc du repository.

C'est prêt, il n'y a plus qu'à ajouter et commiter les fichiers ou répertoires de son choix dans /etc.

Ajouter des documents à CVS

cvs add le_nouveau_truc_à_gérer_par_cvs

On n'oublie pas ensuite de faire un premier commit comme indiqué ci-après.

Pour ajouter un fichier contenu dans un sous-répertoire, il faut préalablement ajouter le sous répertoire à CVS.

cvs add le_repertoire_contenant_le_fichier
cvs add le_fichier_contenu_dans_le_repertoire

Avertissement pour les commits : cvs-syncmail

A chaque commit un mail sera envoyé à (aux) adresses de son choix.

Il faut récupérer le script syncmail (http://sourceforge.net/projects/cvs-syncmail/), il est disponible en paquet Debian. Il est nécessaire d'avoir python sur la machine.

Une version patchée (syncmail_linux syncmail_openBSD) est utilisée sur nos serveurs de manière à indiquer le véritable auteur des commits dans le from du mail au lieu de root.

/!\ Ce qui suit n'est pas nécessaire lorsque l'on configure CVS sur un nouveau serveur, étant donné que les scripts et le CVSROOT sont stockés sur le NFS.

Il faut maintenant configurer CVS : {{{ cd /tmp cvs checkout CVSROOT}}} Il faut alors modifier le fichier /tmp/CVSROOT/loginfo et ajouter la ligne (lancer syncmail sans arguments pour voir les différentes options disponibles).

ALL /usr/scripts/syncmail -m <serveur de mail> -qu "%s %V %v" addresse@mail.org 

Si on veut forcer le nom d'hôte, on peut rajouter l'option -f machin.crans.org .

Éditer si nécessaire le fichier /tmp/CVSROOT/config de manière à ce qu'il contienne :

UseNewInfoFmtStrings=yes

Cette opération permet d'éviter des deprecation warnings.

Enfin, il faut commiter ces 2 fichiers modifiés :

sudo cvs commit /tmp/CVSROOT/loginfo
sudo cvs commit /tmp/CVSROOT/config

Vérification si les fichiers sont synchros

Il suffi de lancer le script mailWarn_dirtyEtc.sh ou mailWarn_dirtyEtc.py (ce dernier permet de choisir son serveur de mail), contenu dans /etc/common_etc.

Il est astucieux de le croner tous les jours. La solution la plus simple consiste à creer un lien symbolique dans /etc/cron.daily.

Liens utiles


CransWiki: CransNostalgie/ConcurrentVersionsSystem (dernière édition le 2013-02-28 04:17:22 par WikiChopopope)