« Subversion » : différence entre les versions
Ligne 77 : | Ligne 77 : | ||
# Where to find authorised users list | # Where to find authorised users list | ||
password-db = passwd | password-db = /home/svn/passwd | ||
Et remplir le fichier de passwd du repository avec | Et remplir le fichier de passwd du repository avec |
Version du 26 juin 2005 à 11:15
La SVN (petit nom de SubVersion) a pour but de remplacer la CVS. Pour l'utilisateur lambda, l'utilisation en est quasiment identique, mais les fonctionnalité supplémentaires sont tout de même non négligeables. Cette page explique comment importer la CVS dans SVN proprement et comment configurer les repositories pour que les accès soit limités comme désiré.
Elle est actuellement sur Skinwel pour 2 raisons :
- pour éviter de se retrouver comme la CVS sur Gwennoz auquel trop de personnes ont accès
- parce que skinwel héberge très peu de services
Installation de SVN
Installation du programme
L'installation comporte plusieurs éléments : SubVersion, le viewer Web, le mailer, le script d'import de CVS...
apt-get install subversion subversion-tools cvs2svn websvn svnmailer
Il faut alors créer le compte utilisateur svn
adduser svn mkdir /home/svn chown svn:root /home/svn
Création des repositoires
SVN gérant projet par projet, il faut séparer les projets. On va donc créer un repositoire par projet :
svnadmin create --fs-type fsfs /home/svn/nom_du_projet
Une fois le repositoire créé, il faut réaliser l'import depuis la CVS :
cd /tmp scp -r gwennoz:/home/cvs cvs cvs2svn --existing-svnrepos -s /home/svn/nom_du_projet cvs/nom_du_projet
Il faut répéter l'opération pour tous les projets...
Si un projet a des sous projets importants, il faut vaut mieux créer un repositoire pour chaque sous projet important
Lancement du serveur
SVN utilise son propre serveur. Celui-ci se lance simplement en appelant le daemon svnserver. Pour plus de sécurité, ou pour aussi plus de clarté, on rajoute un chroot :
sudo -u svn svnserver -d -r /home/svn
Configuration des repositoires
La svn sert à stocker différents type de données :
- des projets publics
- des projets privés
- des données de configuration
Il faut donc une configuration spécifique pour chaque type de projet. Les configurations se font via :
- la configuration du repositoire (répertoire /home/svn/projet/conf/)
- les droits d'accès au répertoire.
Projet public
Un projet public est un projet dont les sources sont publiques accessibles à tous. Pour un tel projet on doit avoir :
- un accès anonyme en lecture
- des accès lecture/écriture pour les développeurs
- un accès au websvn
droit d'accès au repositoire
Les droits d'accès par défaut (644 ou 755) sont corrects, le projet étant public. Ils permettent à la fois l'accès via svnserve, web et svn+ssh. Il suffit simplement de donner la propriété du répertoire au bon utilisateur
cd /home/svn chown svn -R nom_du_projet
configuration du serveur svn
Le fichier svnserve.conf doit être de la forme :
# Global Section [general] # Name of the project realm = le nom du projet # Read-only anonyme access anon-access = read # Read/Write access for authentified users auth-access = write # Where to find authorised users list password-db = /home/svn/passwd
Et remplir le fichier de passwd du repository avec
# User list [users] name_user1 = password_user1 name_user2 = password_user2 name_user3 = password_user3 ...
configuration du websvn
Le websvn doit afficher se projet, il faut donc l'indiquer. Pour ceci il suffit d'éditer le fichier /etc/websvn/svn_deb_conf.inc et d'ajouter la ligne :
$config->addRepository("nom du projet", "/home/svn/nom_du_projet");
Projets privés
Les projets privés sont des projets internes au BR dont les sources ne sont pas diffusées. Il bénéficie donc d'un accès en lecture/écriture pour les développeurs... et rien d'autre.
droits d'accès au repositoire Il faut bien s'assurer que l'accès au répertoire est limité aux seuls personnes qui ont le droit d'accès... c'est à dire au serveur svn
cd /home/svn chmod g-rwx -R projet chmod o-rwx -R projet chown svn -R projet
Configuration du serveur svn
Le fichier svnserve.conf doit être de la forme :
# Global Section [general] # Name of the project realm = le nom du projet # Only known users can access anon-access = none # Read/Write access for authentified users auth-access = write # Where to find authorised users list password-db = passwd
Et remplir le fichier de passwd du repository avec
# User list [users] name_user1 = password_user1 name_user2 = password_user2 name_user3 = password_user3 ...
Fichiers de configuration
Les fichiers de configuration vivent dans un autre monde... dans lequel il faut absolument éviter tout accès pirate à la machine. Pour ceci le mieux est d'utiliser la méthode parano de l'authentification via ssh et du transfert via svn over ssh. La configuration est très simple
droits d'accès
Le svn+ssh utilise le compte de l'utilisateur sur la machine, il faut donc que tous les utilisateurs qui l'utilisent aient un compte sur la machine. Les droits d'accès aux fichiers sont ceux de l'utilisateur. Il faut donc placer les newsmestres dans le group news et les roots dans le groupe adm.
Ensuite :
cd /home/svn chmod o-rwx -R projet chown svn:news -R news //Dans le cas de la conf des newsgroups chown svn:adm -R projet //Dans le cas des utilitaires root
configuration du serveur svn
# Global Section [general] # Name of the project realm = le nom du projet # Only known users can access anon-access = none # Read/Write access for authentified users auth-access = write # No svn authentificcation... it uses Unix's one # password-db = passwd
Utilisation de svn
SVN s'utilise aussi simplemennt que CVS avec cependant quelques différences notables, en particulier la checkout utilise une syntaxe différente
Récupérer un module
La commande diffère selon que le module est accessible via le svnserver ou svn+ssh :
en svn :
svn co svn://[user@]skinwel/nom_du_projet/partie_a_co
en svn+ssh :
svn co svn+ssh://user@skinwel/home/svn/nom_du_projet/partie_a_co
Pour la plupart des utilisateurs la partie à co sera trunk, mais ça peut être aussi branches/nom_de_la_branche, ou Tag/nom_du_tag... ou n'importe quel sous répertoire...
Retour :