CVS (Concurrent Versions System) est un logiciel libre basé sur une architecture client-serveur qui permet de travailler à plusieurs et en même temps sur les mêmes fichiers.
Malheureusement, c'est un programme très ancien qui souffre de certaines limitations gênantes. Pour s'affranchir de ces limitations, le logiciel libre Subversion (alias SVN) a vu le jour, et nous vous conseillons de le préférer à CVS. L'installation d'un serveur SVN est expliquée au chapitre Le travail en groupe avec Subversion. Si toutefois, pour une raison qui vous est propre, vous avez besoin d'installer un répository CVS, ce chapitre est là pour vous guider !
Le client et le serveur CVS sont contenus dans le paquet cvs :
#
apt-get install cvs
Répondez de la manière suivante aux questions qu'il vous pose :
Où sont vos entrepôts ? Il propose
par défaut /var/lib/cvs
: effaçez sa proposition et
validez avec une ligne vide.
Faut-il activer le pserver ? Répondez Non.
A cause d'un bug dans le paquet, nous ne pouvons pas nous contenter de reconfigurer le paquet, il faut le réinstaller complètement :
#
apt-get remove --purge cvs
#
apt-get install cvs
Répondez de la manière suivante aux questions qu'il vous pose :
Où sont vos entrepôts ? Il
propose par défaut /var/lib/cvs
; répondez
OK.
Voulez-vous corriger les chemins d'entrepôts invalides ? Répondez créer.
Faut-il activer le pserver ? Si vous comptez donner accès au CVS à des utilisateurs qui n'ont pas de compte sur le système, répondez Yes ; sinon, répondez No.
Pour simplifier un peu la vie des utilisateurs et de l'administrateur par la suite, créez le lien symbolique suivant :
#
ln -s /var/lib/cvs /cvs
Je vais vous guider pas-à-pas pour la création d'un CVS pour un projet d'exemple appelé projet1.
Commençez par créer un utilisateur cvs-projet1 et un groupe associé cvs-projet1 qui permettront une bonne gestion des droits d'accès au CVS :
#
adduser --system --group --home /var/lib/cvs cvs-projet1
Ensuite, créez le répertoire CVS du projet et donnez-lui les bonnes permissions :
#
cvs -d /cvs/projet1 init
#
chown -R cvs-projet1.cvs-projet1 /cvs/projet1
Cette section requiert qu'un serveur SSH soit installé sur le système. Pour plus d'informations sur ce sujet, cf L'accès à distance par SSH.
Pour donner un accès au CVS à l'utilisateur toto qui a un compte sur le système, il suffit alors de le rajouter dans le groupe cvs-projet1 :
#
adduser toto cvs-projet1
L'utilisateur toto peut alors se connecter au CVS par SSH :
%
export CVSROOT=":ext:toto@server.exemple.org:/cvs/projet1"
%
cvs checkout .
où serveur.exemple.org est le nom DNS du serveur. A l'exécution de la commande cvs, il vous demandera votre mot de passe système (ou votre pass-phrase si vous avez mis en place des clés SSH protégées par mot de passe).
Sur un système Unix ou Linux autre que Debian, il peut être nécessaire de préciser au préalable qu'il faut passer par SSH :
%
export CVS_RSH=ssh
Pour donner accès au CVS à des utilisateurs qui
n'ont pas de compte sur le système, il faut passer
par le pserver. Créez un fichier
/etc/cvs-pserver.conf
contenant :
CVS_PSERV_REPOS="/cvs/projet1"
Ensuite, créez le fichier
/cvs/projet1/CVSROOT/passwd
contenant
les utilisateurs et leurs mots de passe. Chaque ligne de ce
fichier définit un utilisateur ; chaque ligne contient dans l'ordre les
trois paramètres suivants séparées par des "deux-points" :
le nom de l'utilisateur,
le mot de passe crypté de l'utilisateur (obtenu avec la commande mkpasswd --hash=md5),
le nom de l'utilisateur système correspondant (dans notre cas, il s'agit de cvs-projet1).
Par exemple, pour deux utilisateurs login1 et login2, le fichier ressemblera à ça :
login1:$1$s8JghKDB$E9z0bKfOgZQM5MIbRWDVn0:cvs-projet1 login2:$1$LG7Kx.zw$zoP/eCpgwFhZm9HVRn.1g1:cvs-projet1
Enfin, restreignez les droits sur ce fichier :
#
chmod 600 /cvs/projet1/CVSROOT/passwd
L'utilisateur login1 peut maintenant se connecter au serveur en tapant :
%
export CVSROOT=":pserver:login1@serveur.exemple.org:/cvs/projet1"
%
cvs login
Logging in to :pserver:login1@serveur.exemple.org:2401/cvs/projet1 CVS password:
%
cvs checkout .
où serveur.exemple.org est le nom DNS du serveur.
Attention, le mot de passe est transmis en clair sur le réseau !
Nous allons configurer le serveur CVS pour qu'un mail soit envoyé à chaque commit ; ce mail devant contenir le nom de l'utilisateur qui a fait le commit, la liste des fichiers qu'il a modifiés et le message de commit.
Boris Dorès a écrit des scripts qui gèrent tout cela très bien.
Copiez-les dans le répertoire /usr/local/bin/
:
#
cp ~/fichiers-config/cvs-loginfo.sh ~/fichiers-config/cvs-commitinfo.sh /usr/local/bin/
ou :
%
wget http://formation-debian.via.ecp.fr/fichiers-config/cvs-loginfo.sh
%
wget http://formation-debian.via.ecp.fr/fichiers-config/cvs-commitinfo.sh
#
mv cvs-loginfo.sh cvs-commitinfo.sh /usr/local/bin/
Mettez les droits d'exécution sur ces scripts :
#
chmod 755 /usr/local/bin/cvs-loginfo.sh /usr/local/bin/cvs-commitinfo.sh
Ensuite, ajoutez la ligne suivante au fichier
/cvs/projet1/CVSROOT/commitinfo
:
ALL /usr/local/bin/cvs-commitinfo.sh
Et ajoutez la ligne suivante à la fin du fichier
/cvs/projet1/CVSROOT/loginfo
:
ALL /usr/local/bin/cvs-loginfo.sh adresse_de_provenance adresse_destination "Sujet_des_mails" $USER
en remplaçant adresse_de_provenance et adresse_destination par les adresses mail de provenance et de destination que vous voulez pour les mails de notification, et Sujet_du_mail par ce que vous voulez mettre en sujet des mails. Par exemple, vous pouvez mettre en adresse de destination un alias ou une mailing-list qui diffusera le mail à tous les participants au projet.
Désormais, les commits ne passeront plus inaperçus !
Pour donner accès en lecture seule dans le CVS à un utilisateur extérieur, il faut commençer par créer un compte d'utilisateur extérieur
normal, et ensuite spécifier par l'intermédiaire du fichier
/cvs/projet1/CVSROOT/readers
que ce compte n'a
que des droits en lecture. Ajoutez donc un compte, par exemple appelé
debutant, en ajoutant la ligne suivante au fichier
/cvs/projet1/CVSROOT/passwd
(avec le mot de passe
généré par mkpasswd --hash=md5) :
debutant:$1$LG7Kx.zw$zoP/eCpgwFhZm9HVRn.1g1:cvs-projet1
Pour créer un compte auquel on puisse accéder avec un mot de passe vide ou quelconque, il suffit de ne rien mettre à la place du mot de passe crypté :
debutant::cvs-projet1
Puis créez un fichier
/cvs/projet1/CVSROOT/readers
et inscrivez-y la
liste des comptes qui n'ont un accès qu'en lecture seul, à raison d'un
nom de compte par ligne. Dans notre exemple, le fichier contiendra
simplement :
debutant
Très brièvement, voilà comment rajouter un deuxième projet dans le CVS, qui s'appelle dans cet exemple projet2.
Créez un utilisateur et un groupe cvs-projet2 :
#
adduser --system --group --home /var/lib/cvs cvs-projet2
Créez un deuxième répertoire CVS avec les bons droits :
#
cvs -d /cvs/projet2 init
#
chown -R cvs-projet2.cvs-projet2 /cvs/projet2
Pour donner l'accès à certains utilisateurs du système, ajoutez-les dans le groupe cvs-projet2 :
#
adduser toto cvs-projet2
Pour donner l'accès à des utilisateurs extérieurs :
modifiez /etc/cvs-pserver.conf
:
CVS_PSERV_REPOS="/cvs/projet1:/cvs/projet2"
créez le fichier /cvs/projet2/CVSROOT/passwd
et le fichier /cvs/projet2/CVSROOT/readers
éventuel.
Restreignez les droits du fichier passwd
:
#
chmod 600 /cvs/projet2/CVSROOT/passwd
Si vous voulez des mails de notification des commits, ajoutez
aux fichiers /cvs/projet2/CVSROOT/commitinfo
et
/cvs/projet2/CVSROOT/loginfo
les lignes requises
comme pour le premier projet.