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 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.
[TODO : expliquer moi-même ou lier vers une doc française]
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 |
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 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 . |
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 :
|
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 ~/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 !
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é :
|
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.
Précédent | Sommaire | Suivant |
Faire marcher une connexion sans fil | Niveau supérieur | Trucs et Astuces |