Annexe S. Le travail en groupe avec CVS

Table des matières
1. Qu'est-ce que CVS ?
2. Installer et utiliser un client CVS
2.1. Installer le package
2.2. Utiliser CVS
3. Monter un serveur CVS
3.1. Installation et configuration de base
3.2. Configuration avancée
3.3. Ajouter un deuxième projet

1. Qu'est-ce que CVS ?

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 !

2. Installer et utiliser un client CVS

2.1. Installer le package

Le client et le serveur CVS sont contenus dans le package 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.

2.2. Utiliser CVS

[TODO : expliquer moi-même ou lier vers une doc française]

3. Monter un serveur CVS

3.1. Installation et configuration de base

3.1.1. Installation de base

A cause d'un bug dans le package, nous ne pouvons pas nous contenter de reconfigurer le package, 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

3.1.2. Ouvrir un premier projet

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

3.1.3. Donner l'accès aux utilisateurs du système via SSH

Note

Cette section requière 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 .

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).

Note

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

3.1.4. Donner l'accès à des utilisateurs extérieurs

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 .

serveur.exemple.org est le nom DNS du serveur.

Avertissement

Attention, le mot de passe est transmis en clair sur le réseau !

3.2. Configuration avancée

3.2.1. La notification de commit par mail

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 ~/config/cvs-loginfo.sh ~/config/cvs-commitinfo.sh /usr/local/bin/

ou :


% wget http://people.via.ecp.fr/~alexis/formation-linux/config/cvs-loginfo.sh
% wget http://people.via.ecp.fr/~alexis/formation-linux/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 !

3.2.2. Ajouter un accès à un utilisateur extérieur en lecture seule

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

Note

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

3.3. Ajouter un deuxième projet

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.