Mettre en place un projet sous CVS, Version du 04 Août 2004

Transcription

Mettre en place un projet sous CVS, Version du 04 Août 2004
Mettre en place
un projet sous CVS
Cotés client et serveur
par Mikaël Davranche
Version du 04 Août 2004
1
Introduction
Cette documentation a pour but de présenter pas à pas la mise à disposition d’un code existant sur un server CVS sous FreeBSD et les moyens
d’y accéder à partir de clients sous UNIX. Notons que CVS permet de nombreuses choses (branches, révisions, etc.) qui ne seront pas détaillées dans ce
‘Hello World’ du CVS.
2
Nos besoins
On souhaite que deux types d’accès au code soient possibles :
– Un en lecture seule, destiné à un grand nombre de personnes afin de
diffuser anonymement le code
– Un autre en lecture et écriture, destiné aux développeurs afin de pouvoir mettre à jour leur code et de pouvoir soumettre leurs modifications
3
Coté serveur
Avant de commencer, il nous faut avant tout créer un utilisateur ‘cvsmyproject’ appartenant au groupe ‘cvs-myproject’. Cela nous permettra
de mieux pouvoir gérer les droits. Cet utilisateur nous servira pour les
deux méthodes d’identification, mais uniquement pour le projet ‘myproject’. Créer un utilisateur et un groupe par projet permet en effet de gérer
les droits par projet plutôt que par repository. Ainsi, un utilisateur n’aura
pas forcément les mêmes droits pour un projet que pour un autre, même
s’ils appartiennent au même repository.
CVS est installé par défaut sur les distributions FreeBSD, on peut donc
directement commencer à le configurer.
3.1
Créer un repository
Il nous faut commencer par créer un repository :
[root]# cvs -d /usr/local/cvsrepository init
Cette commande crée le répertoire ‘/usr/local/cvsrepository/’ dans lequel
on peut trouver un répertoire ‘CVSROOT’, contenant divers fichiers d’administration du repository. C’est aussi dans ‘/usr/local/cvsrepository/’ que
l’on trouvera le(s) répertoire(s) correspondant au(x) projet(s) géré(s) par le
repository, à raison d’un répertoire par projet.
Remarquons que les droits associés au répertoire /usr/local/cvsrepository/
et à tous ses actuels fichiers et sous-répertoires ne permettent qu’à root ou
quà un membre du groupe wheel de démarrer un nouveau projet, ce que l’on
souhaite.
2
3.2
Mettre en place un accès en lecture
Comme nous l’avons vu, le premier type d’accès au code que l’on souhaite
mettre en place est un accès en lecture seule, destiné à un grand nombre de
personnes afin de diffuser anonymement le code. La mise en place de la
méthode ‘pserver’ (password-authentificating server) est sans aucun doute
le meilleur moyen de procéder.
Lorsqu’un un client CVS utilise la méthode ‘pserver’ pour se connecter à
un repository, il contacte par défaut le port 2401 du serveur. Pour l’instant,
le serveur n’attend pas de connexion sur ce port. Par contre, le programme
inetd (InterNET Daemon) lui, écoute sur ce port et a besoin de savoir qu’il
doit lancer le serveur CVS et le connecter au client quand il reçoit une connexion dessus. Cela se fait via les fichiers ‘/etc/services’ et ‘/etc/inetd.conf’.
Le fichier ‘/etc/services’ associe les numéros de ports à des services tandis
que ‘/etc/inetd.conf’ indique quoi faire pour un service donné. Par défaut,
la ligne suivante est déjà présente dans le fichier ‘services’ :
cvspserver
2401/tcp
Il nous suffit donc de spécifier l’action associée au service ‘cvspserver’
dans le fichier ‘/etc/inetd.conf’ :
cvspserver stream tcp nowait root /usr/bin/cvs
allow-root=/usr/local/cvsrepository pserver
cvs --\
Si inetd tourne déjà sur le serveur, il faut le forcer à relire son fichier de
configuration en lui envoyant un signal HangUP :
[root]# kill -HUP ‘cat /var/run/inetd.pid‘
Dans le cas contraire, il suffit de le lancer (ici avec les options par défaut) :
[root]# /usr/sbin/inetd -wW -C 60
Dans tous les cas, il faut s’assurer que inetd sera lancé au démarrage de
la machine en vérifiant que ‘inetd enable’ ait bien la valeur ‘YES’ dans le
fichier ‘/etc/rc.conf’ :
inetd_enable="YES"
Il nous faut maintenant créer un utilisateur du pserver. L’utilitaire ‘cvspadm’, présent dans les ports de la section ‘devel’, nous permettra d’effectuer
cette tâche facilement. Ci-dessous, la ligne de commande servant à créer l’utilisateur ‘anoncvs’ associé au mot de passe ‘anoncvs’, et dont la session CVS
s’exécutera avec les droits de l’utilisateur ‘cvs-myproject’ :
3
[root]# cvspadm -a -u anoncvs -p anoncvs -R /usr/local/cvsr\
epository -s cvs-myproject
Enfin, pour que cet utilisateur n’ait que le droit de lecture sur le repository, on ajoute son login au fichier ‘readers’ du répertoire ‘CVSROOT’ :
[root]# echo "anoncvs" >> /usr/local/cvsrepository/CVSROOT/\
readers
3.3
Mettre en place des accès en lecture et écriture
Le second type d’accès au code que l’on souhaite mettre en place est
un accès en lecture et écriture, destiné aux développeurs afin de pouvoir
mettre à jour leur code et de pouvoir soumettre leurs modifications. La mise
en place de la méthode ‘ext’ (external) via SSH est sans aucun doute le
meilleur moyen de procéder.
Le principe de la méthode ‘ext’ est de faire gérer l’authentification par
un programme externe, ici SSH. Il est aussi possible de faire en sorte que la
méthode ‘ext’ utilise RSH, mais en raison de son manque de sécurité notoire,
ce dernier s’est vu remplacé par SSH. Notons grâce à cette méthode, toutes
les communications entre le client et le serveur CVS seront cryptées, aussi
bien l’authentification que les données.
Pour que l’utilisateur puisse se connecter en SSH sur le serveur (et donc
au CVS par la méthode ‘ext’ via SSH), il nous faut créer un compte par
développeur à l’aide de la commande ‘adduser’. Pour des raisons de sécurité
que nous verrons après, ses utilisateurs doivent appartenir au groupe ‘cvsmyproject’. Suite à cela, il faut ajouter leur logins dans la liste des personnes authorisées à se connecter en SSH. Cette liste se trouve dans le fichier
‘/etc/ssh/sshd config’ :
AllowUsers dev1 dev2 dev3
3.4
Démarrer un nouveau projet
Plaçons-nous d’abord dans le répertoire contenant les fichiers sources à
placer sur le CVS :
[root]# pwd
/root/sources
[root]# ls
sample1.c
sample2.c
Puis importons les dans un projet que nous appellerons ‘myproject’, suite
à quoi nous devons définir que le propriétaire est ‘cvs-myproject’ du groupe
‘cvs-myproject’, afin que seuls les utilisateurs créés ci-dessus y aient accès
en écriture :
4
[root]# cvs -d /usr/local/cvsrepository import -m "Initial \
import into CVS" myproject root start
[root]# chown -R cvs-myproject:cvs-myproject /usr/local/cvs\
repository/myproject
Le projet ‘myproject’ est maintenant opérationnel !
4
Coté client (accès en lecture)
4.1
Se connecter
La commande suivante permet de se connecter au CVS, étape nécessaire
avant de pouvoir récupérer le code du projet. Rappelons que le mot de passe
choisi est ‘anoncvs’ :
cvs -d :pserver:[email protected]:/usr/local/cvsrepo\
sitory login
4.2
Récupérer les sources (checkout)
La commande suivante va créer un répertoire ‘myproject’ dans le répertoire
courant, contenant la totalité des sources du projet :
[user]$ cvs -d :pserver:[email protected]:/usr/local\
/cvsrepository checkout myproject
4.3
Mettre ses sources à jour (update)
La commande suivante va mettre à jour le répertoire ‘myproject’ du
répertoire courant et contenant déjà les sources du projet, importées via la
commande précédente :
cvs -d :pserver:[email protected]:/usr/local/cvsrepo\
sitory update -d -P myproject
4.4
Se déconnecter
La commande suivante permet de se déconnecter du CVS :
[user]$ cvs -d :pserver:[email protected]:/usr/local\
/cvsrepository logout
5
5
Coté client (accès en lecture et écriture)
Dans les quelques exemples suivants, ‘user’ est le nom d’un développeur
à qui on a donné les droits de lecture et d’écriture pour le projet ‘myproject’ sur le CVS, ainsi que le droit de se connecter en SSH, comme montré
précédemment. De plus, ces commandes supposent que la variable d’environnement ‘CVS RSH‘ soit placée à ‘ssh’. Cela peut se faire par l’utilisation
de la commande ‘export’ :
[user]$ CVS_RSH=ssh; export CVS_RSH
5.1
Récupérer les sources (checkout)
La commande suivante va créer un répertoire ‘myproject’ dans le répertoire
courant, contenant la totalité des sources du projet :
[user]$ cvs -d :ext:[email protected]:/usr/local/cvsrep\
ository checkout myproject
5.2
Mettre ses sources à jour (update)
La commande suivante va mettre à jour le répertoire ‘myproject’ du
répertoire courant et contenant déjà les sources du projet, importées via la
commande précédente :
[user]$ cvs -d :ext:[email protected]:/usr/local/cvsrep\
ository update -d -P myproject
5.3
Soumettre ses modifications (commit)
La mise à jour du projet sur le serveur se fait via la commande suivante
après s’être placé dans le répertoire du projet :
[user]$ cvs -d :ext:[email protected]:/usr/local/cvsrep\
ository commit -m "Commentaire"
Ce ‘commit’ permet de mettre à jour le serveur avec les éventuelles modifications qui ont été faites au contenu des fichiers, et de prendre en compte
les éventuelles commandes ‘add’ ou ‘remove’ précédamment entrées juste
avant le ‘commit’ :
– La commande ‘add’ permet d’ajouter un fichier ou répertoire sur le
serveur lors du prochain ‘commit’. Ce nouveau fichier ou répertoire
doit d’abord exister en local. La syntaxe de la commande ‘add’ est :
6
[user]$ cvs -d :ext:[email protected]:/usr/local/cvsrep\
ository add file.c
– La commande ‘remove’ permet de supprimer un fichier ou répertoire
vide du serveur lors du prochain ‘commit’. Ce fichier ou répertoire
doit d’abord avoir été supprimé en local. La syntaxe de la commande
‘remove’ est :
[user]$ cvs -d :ext:[email protected]:/usr/local/cvsrep\
ository remove file.c
Notons que le renommage d’un fichier ou son déplacement se fait de la
même façon qu’une suppression suivie d’une création (‘remove’ de l’ancien
nom puis ‘add’ du nouveau).
7

Documents pareils