View previous topic :: View next topic |
Author |
Message |
bouleetbil Guru
Joined: 06 Jul 2004 Posts: 456 Location: Montpellier
|
Posted: Wed Mar 01, 2006 9:37 pm Post subject: [howto] subversion |
|
|
J'ai eu du mal à configurer subversion donc voici un début de howto pour ceux que cela intérresse.
Définition :
C'est un serveur qui centralise tous les fichiers à partager entre les membres d'un groupe et gère les modifications simultanées des fichiers, tout en gardant un historique de chaque version d'un fichier. Cela permet d'éviter les erreurs, par exemple si quelqu'un fait une mauvaise modification dans un fichier, il est très facile de revenir en arrière puisque chaque version d'un fichier se trouve sur le serveur.
Le plus connu des serveurs de source est CVS. Il est très utilisé sur le Web, mais Subversion gagne de plus en plus d’importance et ne va pas tarder à le remplacer. Subversion peut être considéré comme CVS 2 car les développeurs de CVS ont participé son développement. Le but était de garder tous les points forts de CVS tout en corrigeant tous ses défauts.
Le site officiel de Subversion est :
http://subversion.tigris.org/
Livre O'reilly sur subversion téléchargeable gratuitement mais en anglais
http://svnbook.red-bean.com/
1. Installation
Liste des use disponible : apache2 bash-completion berkdb emacs java minimal nls nowebdav perl python zlib
Code: | # echo "dev-util/subversion berkdb apache2" >> /etc/portage/package.use
# emerge subversion |
Pour lancer la configuration automatique :
Code: | # ebuild /var/db/pkg/dev-util/subversion-1.*/subversion-1.*.ebuild config |
2. Création du projet en local
Lors de l’évolution d’un programme, il se peut que les développeurs travaillent sur plusieurs versions en même temps.
Prenons pour exemple des développeurs qui viennent de sortir la version 1 d’un logiciel.
Les développeurs travaillent sur la version 2 qui implique des changements majeurs dans la structure du programme. Mais en même temps ils doivent sortir une version 1.1 qui corrigera des bogues de la version 1. Les versions 2 et 1.1 du logiciel sont incompatibles, c’est pourquoi il n’est pas possible de stocker tous les fichiers dans un même répertoire (trunk). Pour que les développeurs puissent travailleur sur les 2 versions en même temps, ils vont copier tous les fichiers du projet dans un nouveau répertoire. Ce nouveau répertoire contiendra la copie exacte des fichiers du projet, mais permettra de faire des modifications qui n’impacteront pas. Ce nouveau répertoire est une branche du projet.
La branche principale de travail est appelée "trunk", les autres branches ont pour répertoire racine "branches" dans la convention Subverion.
Le répertoire « trunk » du repository contient toujours la version qui sera amenée à évoluer le plus longtemps. Dans notre cas c’est la version 2 du projet.
Le répertoire « branches » du repository contient autant de répertoire qu’il y a des branches dans le projet.
Dans notre exemple, on a ici le répertoire trunk qui contient les fichiers de la version 2 du logiciel. Le répertoire branches contient un répertoire qui s’appelle « version1.x » et qui contient tous les fichiers de la version 1.1.
Pour résumer, créer une branche, c’est exactement comme si on avait 2 projets différents avec 2 repository différents. Le seul avantage est de regrouper toutes les branches dans un même repository.
Tags
Le concept de tag est de prendre une photo du repository à un moment donnée. Par exemple lors de la sortie d’un programme (version 1.0), il est intéressant de savoir quel numéro de révision correspond à telle version. Pour cela on peut tagger le repository afin de se souvenir plus simplement.
Un tag est une copie du repository à un moment donnée. Cela revient à copier dans un répertoire à part tous les fichiers du repository.
Un exemple de structure d’un repository. Cette architecture est conseillée par Subversion.
A la racine il y a 3 répertoires:
* trunk pour les fichiers de la version principale du projet
* branches pour les différents branches
* tags pour la sauvegarde de chaque version du projet
Seul le chef de projet a accès à la branche tags, car c’est lui qui décide quand les versions sortent.
Création du projet :
Code: |
# mkdir projet
# mkdir projet/branches
# mkdir projet/tags
# mkdir projet/trunks
|
3. configuration du projet en local :
Mettre les droits approprie pour /var/svn/repos en fonction des utilisateurs ayant accés aux sources
Import du projet :
Code: |
$ svn import /home/bouleetbil/Project file:///var/svn/repos/ -m "initial import"
|
A partir de maintenant, il est possible d'accéder au dossier des sources, pour un réseau local il est possible d'utiliser nfs ou samba pour le partage.
Pour récuperer le contenu du dépot :
Code: |
$ svn checkout file:///var/svn/repos test1
|
4. Configuration client Serveur
Il peut être utile de partager ces sources sur le réseau
/var/svn/repos/conf/svnserve.conf contient la configuration du démon svn, décommenter les lignes suivantes :
Code: | anon-access = read # tous le monde peut lire
auth-access = write # Seul les personnes identifiées peuvent écrirent
password-db = passwd # passwd contient les utilisateurs et les mots de passe |
Exemple de fichier /var/svn/repos/conf/password-db
Code: | [users]
harry = foopassword # harry a pour mot de passe foopassword
sally = barpassword # sally a pour mot de passe barpassword |
Le fichier de configuration du démon svn est /etc/conf.d/svnserve :
Code: |
# The commented variables in this file are the defaults that are used
# in the init-script. You don't need to uncomment them except to
# customize them to different values.
# Options for svnserve
#SVNSERVE_OPTS="--root=/var/svn"
# User and group as which to run svnserve
#SVNSERVE_USER="apache"
#SVNSERVE_GROUP="apache"
|
Pour une question de sécurité il est possible de passer "-r" en argument à svnserve. Cela reduit l'exportation au répertoire passé après -r
Code: | $ svnserve -d -r /var/svn/repos |
Configuration svn avec xinetd :
Code: |
service svnserve
{
disable = no
socket_type = stream
wait = no
user = root
group = root
log_type = FILE /var/log/svnserve
protocol = tcp
log_on_failure += USERID
port = 3690
server = /usr/bin/svnserve
server_args = -i -r /var/svn/repos
}
|
Pour démarrer le serveur svn
Soit en mode autonome :
Code: | # /etc/init.d/svnserve start |
Soit avec xinetd
Code: | # /etc/init.d/xinetd start |
Il est possible d'acceder au dépot via SSH si vous avez un serveur SSH actif :
Code: |
$ svn list svn+ssh://frogdev.dyndns.org/repos
|
Utilisation du module subversion avec Apache2
Editer /etc/conf.d/apache2 afin d'ajouter ces options :
Code: |
APACHE2_OPTS="-D DEFAULT_VHOST -D SVN -D SVN_AUTHZ -D DAV -D DAV_FS -D SSL -D SSL_DEFAULT_VHOST"
|
Apache doit avoir le droit d'écrire dans le répertoire du projet :
Code: |
# chown apache:apache /var/svn/repos/projet -R
|
Le fichier de configuration du module est ici /etc/apache2/modules.d/47_mod_dav_svn.conf
Code: |
GNU nano 1.3.9 Fichier : /etc/apache2/modules.d/47_mod_dav_svn.conf
<IfDefine SVN>
<IfModule !mod_dav_svn.c>
LoadModule dav_svn_module modules/mod_dav_svn.so
</IfModule>
<Location /svn/repos>
DAV svn
SVNPath /var/svn/repos
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /var/svn/repos/conf/passhttp
Require valid-user
</Location>
<IfDefine SVN_AUTHZ>
<IfModule !mod_authz_svn.c>
LoadModule authz_svn_module modules/mod_authz_svn.so </IfModule>
</IfDefine>
</IfDefine>
|
Pour une authentification HTTP basic
Code: | # htpasswd2 -cm /var/svn/repos/conf/passhttp harry |
Attention le paramètre c créer le fichier, il ne faut mettre ce paramètre que lors de la création du premier utilisateur.
Redémarrer apache :
Code: |
# /etc/init.d/apache2 restart
|
Maintenant le dépot est accessible :
Code: |
$ svn checkout http://frogdev.dyndns.org/svn/repos test1
|
Maintenant si vous voulez que votre dépot soit accéssible en lecture pour tous le monde :
Remplacer dans /etc/apache2/modules.d/47_mod_dav_svn.conf
par
Code: |
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
|
Maintenant, il est aussi possible de définir des règles.
Voici une autre configuration possible :
Code: | <IfDefine SVN>
<IfModule !mod_dav_svn.c>
LoadModule dav_svn_module modules/mod_dav_svn.so
</IfModule>
<Location /svn/repos>
DAV svn
SVNPath /var/svn/repos
AuthName "Subversion repository"
AuthUserFile /var/svn/repos/conf/passhttp
#On tente d’abord un accès anonyme, si ce n’est pas possible on authentifie
Satisfy Any
Require valid-user
AuthzSVNAccessFile /var/svn/repos/conf/PolitiqueSecu
#Comment authentifier un utilisateur
AuthType Basic
</Location>
<IfDefine SVN_AUTHZ>
<IfModule !mod_authz_svn.c>
LoadModule authz_svn_module modules/mod_authz_svn.so </IfModule>
</IfDefine>
</IfDefine> |
Le fichier /var/svn/repos/conf/PolitiqueSecu contient les règles.
Voici la stucture de ce fichier :
Code: |
[groups]
Nom_du_groupe = utilisateur1, utilisateur2, …
[Nom_du_repo : Path]
compte ou groupe = *, r, w
|
La première déclaration permet de définir des groupes d’utilisateurs. Ceci va permettre d’appliquer des droits directement sur un groupe.
Ensuite on déclare pour le répertoire d’un repository, les droits des utilisateurs.
Voici un exemple de configuration :
Code: |
[groups]
developpeur = harry, billy
[/]
*=r
admin=rw
[Projet1:/]
* = r
developpeur=rw
[Projet2:/]
*=
developpeur=r
[Projet2:/branches/harry]
harry=rw
|
Attention tous les utilisateurs doivent être créé aussi par htpasswd2 dans /var/svn/repos/conf/passhttp _________________ L'homme n'est pas fait pour travailler ça le fatigue.
LiveCD Gentoo : http://www.frogdev.info
Gentoo/Freebsd : http://www.frogdev.info/gentoo_freebsd.php |
|
Back to top |
|
|
PabOu Veteran
Joined: 11 Feb 2004 Posts: 1088 Location: Hélécine - Belgium
|
Posted: Wed Mar 01, 2006 10:17 pm Post subject: Re: [howto] subversion |
|
|
bouleetbil wrote: | Pour lancer la configuration automatique :
Code: | # ebuild /var/db/pkg/dev-util/subversion-1.*/subversion-1.*.ebuild config |
|
il n'y a pas une façon plus propre de le faire ?
parceque n'oubliez pas que lancer un ebuild avec son chemin est une "broken feature".
je confonds peut-etre.
en tout cas, joli how-to, bravo et merci ! |
|
Back to top |
|
|
bouleetbil Guru
Joined: 06 Jul 2004 Posts: 456 Location: Montpellier
|
Posted: Wed Mar 01, 2006 10:29 pm Post subject: |
|
|
Bonsoir,
Je crois que c'est lancer l'installation avec le chemin de l'ebuild qui est "broken feature"
La en faite c'est pour lancer une fonction inclue dans l'ebuild :
Code: |
if [[ ! -x /usr/bin/svnadmin ]]; then
die "You seem to only have build the subversion client"
fi
einfo ">>> Initializing the database in ${SVN_REPOS_LOC}..."
if [[ -e ${SVN_REPOS_LOC}/repos ]]; then
echo "A subversion repository already exists and I will not overwrite it."
echo "Delete ${SVN_REPOS_LOC}/repos first if you're sure you want to have a clean version."
else
mkdir -p ${SVN_REPOS_LOC}/conf
einfo ">>> Populating repository directory ..."
# create initial repository
/usr/bin/svnadmin create ${SVN_REPOS_LOC}/repos
einfo ">>> Setting repository permissions ..."
chown -Rf apache:apache ${SVN_REPOS_LOC}/repos
chmod -Rf 755 ${SVN_REPOS_LOC}/repos
fi
|
sinon il faut faire :
Code: | # mkdir -p /var/svn/conf
# /usr/bin/svnadmin create /var/svn/repos
# chown -Rf apache:apache /var/svn/repos
# chmod -Rf 755 /var/svn/repos |
_________________ L'homme n'est pas fait pour travailler ça le fatigue.
LiveCD Gentoo : http://www.frogdev.info
Gentoo/Freebsd : http://www.frogdev.info/gentoo_freebsd.php |
|
Back to top |
|
|
netfab Veteran
Joined: 03 Mar 2005 Posts: 1896 Location: 127.0.0.1
|
Posted: Thu Mar 02, 2006 10:24 am Post subject: |
|
|
Ou plus simplement :
Code: |
# emerge --config subversion
|
J'ai eu du mal aussi à m'y mettre. La première fois que je l'ai installé, j'ai choisi la première solution :
Quote: |
- svnserve daemon:
* 1. edit /etc/conf.d/svnserve
* 2. start daemon: /etc/init.d/svnserve start
* 3. make persistent: rc-update add svnserve default
|
Après avoir modifié les droits de /var/svn/repos pour apache:apache, rempli les différents fichiers de configuration, et redémarré les serveurs, çà fonctionnait.
Mais çà ne me paraissait pas clair, j'ai donc tout désinstallé, et recommencé. Et là, plus moyen de faire l'import initial : la commande svn import me renvoyait systématiquement un message d'erreur comme quoi je n'avais pas les droits sur certains dossiers.
J'ai finalement effectué les commandes pour l'accès par ssh :
Quote: |
- svn over ssh:
* 1. Fix the repository permissions:
* groupadd svnusers
* chown -R root:svnusers /var/svn/repos/
* chmod -R g-w /var/svn/repos
* chmod -R g+rw /var/svn/repos/db
* chmod -R g+rw /var/svn/repos/locks
|
Puis, un petit /etc/init.d/svnserve start, et çà fonctionnait du premier coup. |
|
Back to top |
|
|
kwenspc Advocate
Joined: 21 Sep 2003 Posts: 4954
|
Posted: Thu Mar 02, 2006 4:22 pm Post subject: |
|
|
eh bien, j'allais justement avoir besoin de me mettre à svn
Ce howto est le bienvenu donc! merci _________________ membre officieux du SAV Ati GEntoo |
|
Back to top |
|
|
marvin rouge Veteran
Joined: 01 Aug 2004 Posts: 1422 Location: Villa Lumierrante, Zonelibre
|
Posted: Sun Mar 05, 2006 10:46 am Post subject: |
|
|
Y'a un bout de temps que j'ai installé subversion, et à l'époque j'avais configuré un utilisateur de manière à ce qu'une connexion ssh le redirige automatiquement sur svn: en gros, l'utilisateur tape sa commande svn (par exemple svn log), et ça le connecte au serveur en ssh via une clé sans passphrase, ça effectue la commande et ça le déconnecte.
Pour ça, faut faire un fichier /etc/ssh/authorized_users (à configurer dans sshd_config par AuthorizedKeysFile /etc/ssh/authorized_users) avec dedans: Code: | command="/usr/local/bin/svnserve -t --tunnel-user=USER -r /var/svn/web_repos" ssh-dss la_clé_publique | (remplacer USER par le nom de l'utilisateur, et la_clé_publique aussi).
Dans ~/.ssh/config de USER je configure un alias "externe"
Le premier checkout se fait avec svn checkout svn+ssh://externe/
Ensuite, plus besoin de svn+ssh://, juste svn. |
|
Back to top |
|
|
netfab Veteran
Joined: 03 Mar 2005 Posts: 1896 Location: 127.0.0.1
|
Posted: Wed Mar 08, 2006 7:34 pm Post subject: |
|
|
Petit complément : Installation Trac
- Introduction
- Installation trac
- Configuration Apache -- Virtual Host
- Résolution de nom
- The end
1. Introduction :
Petite description de trac :
http://linuxfr.org/2004/04/21/16054.html wrote: |
Trac est un logiciel libre, sous licence GPL, combinant un Wiki, un navigateur de dépôt Subversion et un outil de suivi des bogues.
|
J'ai pour objectif de configurer apache de façon à pouvoir accéder avec mon navigateur aux différents projets par trac de la manière suivante :
Sachant que :
Quote: |
$ dnsdomainname
monreseau.net
$ hostname
machine1
|
Mes dépôts sont stockés dans le répertoire /data/svn-repos :
Quote: |
$ ls /data/svn-repos/
projet1 projet2
|
Par la suite, il faudra donc adapter le fichier de configuration pour apache avec vos propres valeurs.
2. Installation trac :
Les useflags :
Quote: |
$ grep trac /etc/portage/package.use
www-apps/trac cgi silvercity sqlite vhosts
|
Installation de trac sur l'hôte virtuel dev :
Code: |
# webapp-config -I -h dev -d trac trac 0.9.3
|
(Le répertoire /var/www/dev est apparu)
Création de l'environnement trac pour le projet 1 :
(on répond aux questions, en donnant le répertoire de dépôt du projet 1)
Code: |
# trac-admin /var/lib/trac/projet1 initenv
|
Création de l'environnement trac pour le projet 2 :
(on répond aux questions, en donnant le répertoire de dépôt du projet 2)
Code: |
# trac-admin /var/lib/trac/projet2 initenv
|
(les répertoires /var/lib/trac/projet1 et /var/lib/trac/projet2 sont apparus)
On modifie le propriétaire de la base de données trac pour chaque projet :
Code: |
# chown -R apache:apache /var/lib/trac/projet1/db
# chown -R apache:apache /var/lib/trac/projet2/db
|
Création utilisateur et mot de passe pour l'authentification trac :
Code: |
# htpasswd2 -m -c /data/svn-repos/projet1/conf/passwd netfab
# htpasswd2 -m -c /data/svn-repos/projet2/conf/passwd netfab
|
Vous pouvez certainement utiliser le même fichier que pour l'authentification http.
3. Configuration Apache -- Virtual Host
On créé le fichier /etc/apache2/vhosts.d/01_dev_vhost.conf contenant :
Code: |
<VirtualHost *:80>
# administrateur serveur
ServerAdmin root@machine1.monreseau.net
# Repertoire racine
DocumentRoot /var/www/dev/htdocs
ServerName dev.monreseau.net
ServerAlias dev
# les fichiers de logs : chemins relatifs à /usr/lib/apache2/
ErrorLog logs/dev-error_log
CustomLog logs/dev-access_log common
# lorsqu'on demande l'url http://dev.monreseau.net/projet1
ScriptAlias /projet1 /var/www/dev/cgi-bin/trac.cgi
<Location /projet1>
# environnement trac projet 1
SetEnv TRAC_ENV "/var/lib/trac/projet1"
</Location>
# lorsqu'on demande l'url http://dev.monreseau.net/projet1/login
# (demande de login sous trac)
<Location /projet1/login>
AuthType Basic
AuthName "Developpement sous Trac - projet1"
AuthUserFile /data/svn-repos/projet1/conf/passwd
Require valid-user
</Location>
# lorsqu'on demande l'url http://dev.monreseau.net/projet2
ScriptAlias /projet2 /var/www/dev/cgi-bin/trac.cgi
<Location /projet2>
# environnement trac projet 2
SetEnv TRAC_ENV "/var/lib/trac/projet2"
</Location>
# lorsqu'on demande l'url http://dev.monreseau.net/projet2/login
# (demande de login sous trac)
<Location /projet2/login>
AuthType Basic
AuthName "Developpement sous Trac - projet2"
AuthUserFile /data/svn-repos/projet2/conf/passwd
Require valid-user
</Location>
<Directory "/var/www/dev/htdocs">
Options Indexes MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
|
4. Résolution de nom :
J'utilise sur ce serveur un cache DNS (dnsmasq), donc en ce qui me concerne, j'ai juste à ajouter ce qui est en gras dans le fichier de configuration de dnsmasq :
/etc/dnsmasq.conf wrote: |
address=/dev.monreseau.net/192.168.2.78
address=/machine1.monreseau.net/192.168.2.78
address=/machine2.monreseau.net/192.168.2.85
[...]
|
Si vous n'utilisez pas de cache DNS, ajoutez ce nom dans votre /etc/hosts de façon à ce qu'il pointe vers l'adresse ip de votre serveur apache.
5. The end :
On lance apache :
Code: |
# /etc/init.d/apache2 start
|
Pour avoir accès aux tracs, il suffit de pointer son fureteur sur :
http://dev.monreseau.net/projet1/ ou http://dev.monreseau.net/projet2/
Ou encore :
http://dev/projet1/ ou http://dev/projet2/
En ajoutant la page index.html suivante dans /var/www/dev/htdocs/, on peut même passer par :
http://dev/ ou http://dev.monreseau.net/
/var/www/dev/htdocs/index.html wrote: |
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
</head>
<body>
<ul>
<li><a href="projet1/" title="projet1">Projet 1</a></li>
<li><a href="projet2/" title="projet2">Projet 2</a></li>
</ul>
</body>
</html>
|
Pour les puristes, il manque le doctype, et énormément d'autres choses.
Je vous laisse peaufiner |
|
Back to top |
|
|
bouleetbil Guru
Joined: 06 Jul 2004 Posts: 456 Location: Montpellier
|
|
Back to top |
|
|
ade05fr Apprentice
Joined: 18 Sep 2006 Posts: 281
|
Posted: Tue Dec 05, 2006 9:48 am Post subject: |
|
|
hello
moi quand je configure subversion avec apache je n'arrive pas à faire fonctionner le tout.
je tente d'accéder à ma page contenant le repository en faisant http://localhost/repository
j'ai regardé dans mon error-log d'apache et j'ai des lignes du genre
...driver for [DBDriver unset] not available..
-- et surtout à la fin de la log j'ai un segmentation fault
[notice] child pid 8923 exit signal segmentation fault (11)
...
voici ce que j'ai dans httpd.conf :
...
LoadModule dav_module modules/mod_dav.so
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
...
<Directory "var/svn/repository">
Allow from all
</Directory>
voici ce que j'ai dans le ficheir /etc/conf.d/apache2:
...
APACHE2_OPTS="-D DEFAULT_VHOST -D INFO -D LANGUAGE -D SSL -D SSL_DEFAULT_VHOST -D SVN -D SVN_AUTHZ -D DAV -D DAV_FS"
voici ce que j'ai dans /etc/apache2/conf/modules.d/47_mod_dav_svn.conf
<IfDefine SVN>
<IfModule !mod_dav_svn.c>
LoadModule dav_svn_module modules/mod_dav_svn.so
</IfModule>
<Location /repository>
DAV svn
SVNPath /var/svn/repository
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /var/svn/repository/conf/passhttp
Require valid-user
</Location>
<IfDefine SVN_AUTHZ>
<IfModule !mod_dav_svn.c>
LoadModule authz_svn_module modules/mod_authz_svn.so
</IfModule>
</IfDefine>
</IfDefine>
j'ai aussi fais un "chown -R apache:apache /var/svn/repository"
est ce que quelqu'un peut m'aider ? je ne comprends rien !!
merci d'avance |
|
Back to top |
|
|
bouleetbil Guru
Joined: 06 Jul 2004 Posts: 456 Location: Montpellier
|
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|