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