« Installation et mise en place d'un dépôt subversion » : différence entre les versions

De Linux Server Wiki
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Aucun résumé des modifications
 
(6 versions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
[[Category:serveur]]
[[Category:debian]]
[[Category:debian]]
'''<span style="color: red;">Tuto plus vraiment à jour</span>'''
[[Category:toupdate]]
Ce howto a été écrit au départ pour debian etch puis a été adapté pour debian lenny. Il reste cependant valable la plupart du temps pour ces deux versions de debian.
Ce howto a été écrit au départ pour debian etch puis a été adapté pour debian lenny. Il reste cependant valable la plupart du temps pour ces deux versions de debian.


Ce howto va vous montrer comment mettre en place un dépot subversion.
Ce howto va vous montrer comment mettre en place un dépot subversion.
Le domaine utilisé est <code>svn.pfoo.csnu.org</code> qui est un alias pour <code>core.csnu.org</code>.
Le domaine utilisé est <code>svn.pfoo.domain.tld</code> qui est un alias pour <code>srv.domain.tld</code>.
<code>core.csnu.org</code> est le domaine identifiant le serveur sur lequel se trouvera le dépôt subversion. Il possède l'adresse ipv4 <code>213.186.47.110</code> et l'adresse ipv6 <code>2001:41d0:1:d6e::110</code>.
<code>srv.domain.tld</code> est le domaine identifiant le serveur sur lequel se trouvera le dépôt subversion. Il possède l'adresse ipv4 <code>213.186.47.110</code> et l'adresse ipv6 <code>2001:41d0:1:d6e::110</code>.


Ce howto est construit de manière à respecter mon howto sur apache2. Les changements de permissions effectués dans ce howto supposent que vous êtes en umask 0027
Ce howto est construit de manière à respecter mon howto sur apache2. Les changements de permissions effectués dans ce howto supposent que vous êtes en umask 0027
Ligne 13 : Ligne 18 :
<pre>aptitude install subversion subversion-tools</pre>
<pre>aptitude install subversion subversion-tools</pre>


On peut maintenant créer le dépôt subversion. Dans mon cas, je vais le créer dans <cod>/srv/http/csnu.org/pfoo.csnu.org/svn/</code>
On peut maintenant créer le dépôt subversion. Dans mon cas, je vais le créer dans <code>/srv/http/domain.tld/pfoo.domain.tld/svn/</code>
<pre>svnadmin create /srv/http/csnu.org/pfoo.csnu.org/svn/</pre>
<pre>svnadmin create /srv/http/domain.tld/pfoo.domain.tld/svn/</pre>


Le dépôt ne devra être accessible par apache en lecture mais aussi en écriture :
Le dépôt devra être accessible par apache en lecture ainsi qu'en écriture :
<pre>
<pre>
chown -R root:www-data /srv/http/csnu.org/pfoo.csnu.org/svn/
chmod -R g+w /srv/http/domain.tld/pfoo.domain.tld/svn/db/
chmod -R g+w /srv/http/csnu.org/pfoo.csnu.org/svn/
mkdir -p /srv/http/domain.tld/pfoo.domain.tld/svn/dav/activities.d
chmod -R g+w /srv/http/domain.tld/pfoo.domain.tld/svn/dav/
chown -R root:www-data /srv/http/domain.tld/pfoo.domain.tld/svn/
</pre>
</pre>


Gardez à l'esprit que apache doit pouvoir exécuter (permission +x) tous les dossiers en amont de <code>/srv/http/csnu.org/pfoo.csnu.org/svn/</code>.
Gardez à l'esprit que apache doit pouvoir exécuter (permission +x) tous les dossiers en amont de <code>/srv/http/domain.tld/pfoo.domain.tld/svn/</code>.


=Ajout de la redirection dans la zone dns de bind=
=Ajout de la redirection dans la zone dns de bind=


Éditez le fichier de la zone dns de votre domaine (<code>/srv/bind/csnu.org.hosts</code> dans mon cas) et ajoutez les lignes suivantes :
Éditez le fichier de la zone dns de votre domaine (<code>/srv/bind/domain.tld.hosts</code> dans mon cas) et ajoutez les lignes suivantes :
<pre>
<pre>
core.csnu.org.  IN      A      213.186.47.110
srv.domain.tld.  IN      A      213.186.47.110
core.csnu.org.  IN      AAAA    2001:41d0:1:d6e::110
srv.domain.tld.  IN      AAAA    2001:41d0:1:d6e::110
svn.pfoo        IN      CNAME  core.csnu.org.
svn.pfoo        IN      CNAME  srv.domain.tld.
</pre>
</pre>


Ligne 60 : Ligne 67 :
==Configuration d'une vhost==
==Configuration d'une vhost==


Éditez le fichier <code>/etc/apache2/vhosts/svn.pfoo.csnu.org.conf</code> et ajoutez y les lignes suivantes:
Éditez le fichier <code>/etc/apache2/vhosts/svn.pfoo.domain.tld.conf</code> et ajoutez y les lignes suivantes:
<pre><nowiki>
<pre><nowiki>
<VirtualHost 213.186.47.110:80>
<VirtualHost 213.186.47.110:80>
         ServerName svn.pfoo.csnu.org
         ServerName svn.pfoo.domain.tld
         Include sites/svn.pfoo.csnu.org.conf
         Include sites/svn.pfoo.domain.tld.conf
</VirtualHost>
</VirtualHost>
<VirtualHost [2001:41d0:1:d6e::110]:80>
<VirtualHost [2001:41d0:1:d6e::110]:80>
         ServerName svn.pfoo.csnu.org
         ServerName svn.pfoo.domain.tld
         Include sites/svn.pfoo.csnu.org.conf
         Include sites/svn.pfoo.domain.tld.conf
</VirtualHost>
</VirtualHost>
</nowiki></pre>
</nowiki></pre>
Ligne 75 : Ligne 82 :


On peut maintenant créer le fichier de configuration du virtualhost.
On peut maintenant créer le fichier de configuration du virtualhost.
Ouvrez le fichier <code>/etc/apache2/sites/svn.pfoo.csnu.org.conf</code> avez votre éditeur de texte et ajoutez les lignes suivantes:
Ouvrez le fichier <code>/etc/apache2/sites/svn.pfoo.domain.tld.conf</code> avez votre éditeur de texte et ajoutez les lignes suivantes:
<pre>
<pre>
#Cette ligne est a décommenter si vous n'arrivez pas à utiliser les commandes copy et move de subversion en vous connectant en https:
#Cette ligne est a décommenter si vous n'arrivez pas à utiliser les commandes copy et move de subversion en vous connectant en https:
Ligne 83 : Ligne 90 :
       DAV svn
       DAV svn
       # chemin complet vers le dépôt SVN
       # chemin complet vers le dépôt SVN
       SVNPath /srv/http/csnu.org/pfoo.csnu.org/svn/
       SVNPath /srv/http/domain.tld/pfoo.domain.tld/svn/
       #On sécurise le tout par mot de passe.
       #On sécurise le tout par mot de passe.
       # htpasswd permettra de créer facilement le fichier
       # htpasswd permettra de créer facilement le fichier
       AuthType Basic
       AuthType Basic
       AuthName "pfoo's SVN"
       AuthName "pfoo's SVN"
       AuthUserFile /srv/http/csnu.org/pfoo.csnu.org/svn.htpasswd
       AuthUserFile /srv/http/domain.tld/pfoo.domain.tld/svn.htpasswd
       Require valid-user
       Require valid-user


       # fichier de configuration des permissions du dépot
       # fichier de configuration des permissions du dépot
       AuthzSVNAccessFile /srv/http/csnu.org/pfoo.csnu.org/svn.perm
       AuthzSVNAccessFile /srv/http/domain.tld/pfoo.domain.tld/svn.perm
   </location>
   </location>
</nowiki></pre>
</nowiki></pre>
Ligne 100 : Ligne 107 :
Nous allons créer un utilisateur pfoo ayant tous les droits sur le dépôt, et un utilisateur jonass n'ayant que des droits limités. Comme d'habitude, on préfèrera crypter les mots-de-passes en SHA (option -s)
Nous allons créer un utilisateur pfoo ayant tous les droits sur le dépôt, et un utilisateur jonass n'ayant que des droits limités. Comme d'habitude, on préfèrera crypter les mots-de-passes en SHA (option -s)
<pre>
<pre>
htpasswd -cs /srv/http/csnu.org/pfoo.csnu.org/svn.htpasswd pfoo
htpasswd -cs /srv/http/domain.tld/pfoo.domain.tld/svn.htpasswd pfoo
htpasswd -s /srv/http/csnu.org/pfoo.csnu.org/svn.htpasswd jonass
htpasswd -s /srv/http/domain.tld/pfoo.domain.tld/svn.htpasswd jonass
</pre>
</pre>


On donne les bonnes permissions au fichier contenant les utilisateurs:
On donne les bonnes permissions au fichier contenant les utilisateurs:
<pre>chown root:www-data /srv/http/csnu.org/pfoo.csnu.org/svn.htpasswd</pre>
<pre>chown root:www-data /srv/http/domain.tld/pfoo.domain.tld/svn.htpasswd</pre>


On peut maintenant créer le fichier contenant les accès des deux utilisateurs. Ouvrez le fichier <code>/srv/http/csnu.org/pfoo.csnu.org/svn.perm</code> et entrez y les lignes suivantes:
On peut maintenant créer le fichier contenant les accès des deux utilisateurs. Ouvrez le fichier <code>/srv/http/domain.tld/pfoo.domain.tld/svn.perm</code> et entrez y les lignes suivantes:
<pre>
<pre>
[groups]
[groups]
Ligne 122 : Ligne 129 :


Comme d'habitude, changer l'appartenance du fichier:
Comme d'habitude, changer l'appartenance du fichier:
<pre>chown root:www-data /srv/http/csnu.org/pfoo.csnu.org/svn.perm</pre>
<pre>chown root:www-data /srv/http/domain.tld/pfoo.domain.tld/svn.perm</pre>


=Le moment de vérité=
=Le moment de vérité=
Ligne 141 : Ligne 148 :


Pour réaliser votre backup avec <code>svn-backup-dumps</code> :
Pour réaliser votre backup avec <code>svn-backup-dumps</code> :
<pre>svn-backup-dumps /srv/http/csnu.org/pfoo.csnu.org/svn/ /root/backup/</pre>
<pre>svn-backup-dumps /srv/http/domain.tld/pfoo.domain.tld/svn/ /root/backup/</pre>


Pour restaurer un backup, il faut utiliser <code>svnadmin</code> :
Pour restaurer un backup, il faut utiliser <code>svnadmin</code> :
<pre>svnadmin load /srv/http/csnu.org/pfoo.csnu.org/svn/ < /root/backup/sauvegarde.svndmp</pre>
<pre>svnadmin load /srv/http/domain.tld/pfoo.domain.tld/svn/ < /root/backup/sauvegarde.svndmp</pre>


=Supprimer les anciennes révisions=
=Supprimer les anciennes révisions=
Ligne 152 : Ligne 159 :
Dans mon cas, je ne souhaite conserver que les 10 dernières révisions et je suis à la révision 453 :
Dans mon cas, je ne souhaite conserver que les 10 dernières révisions et je suis à la révision 453 :
<pre>
<pre>
svnadmin dump /srv/http/csnu.org/pfoo.csnu.org/svn/ -r 443:head > repository-443-head.dump
svnadmin dump /srv/http/domain.tld/pfoo.domain.tld/svn/ -r 443:head > repository-443-head.dump
rm -rf /srv/http/csnu.org/pfoo.csnu.org/svn/
rm -rf /srv/http/domain.tld/pfoo.domain.tld/svn/
svnadmin create /srv/http/csnu.org/pfoo.csnu.org/svn/
svnadmin create /srv/http/domain.tld/pfoo.domain.tld/svn/
svnadmin load /srv/http/csnu.org/pfoo.csnu.org/svn/ < repository-443-head.dump
svnadmin load /srv/http/domain.tld/pfoo.domain.tld/svn/ < repository-443-head.dump
------ Nouvelle révision 11 propagée (commit), basée sur révision 453
------ Nouvelle révision 11 propagée (commit), basée sur révision 453
</pre>
</pre>

Dernière version du 16 décembre 2015 à 20:09


Tuto plus vraiment à jour

Ce howto a été écrit au départ pour debian etch puis a été adapté pour debian lenny. Il reste cependant valable la plupart du temps pour ces deux versions de debian.

Ce howto va vous montrer comment mettre en place un dépot subversion. Le domaine utilisé est svn.pfoo.domain.tld qui est un alias pour srv.domain.tld. srv.domain.tld est le domaine identifiant le serveur sur lequel se trouvera le dépôt subversion. Il possède l'adresse ipv4 213.186.47.110 et l'adresse ipv6 2001:41d0:1:d6e::110.

Ce howto est construit de manière à respecter mon howto sur apache2. Les changements de permissions effectués dans ce howto supposent que vous êtes en umask 0027

Installation et création du dépôt

Pour installer svn, tapez:

aptitude install subversion subversion-tools

On peut maintenant créer le dépôt subversion. Dans mon cas, je vais le créer dans /srv/http/domain.tld/pfoo.domain.tld/svn/

svnadmin create /srv/http/domain.tld/pfoo.domain.tld/svn/

Le dépôt devra être accessible par apache en lecture ainsi qu'en écriture :

chmod -R g+w /srv/http/domain.tld/pfoo.domain.tld/svn/db/
mkdir -p /srv/http/domain.tld/pfoo.domain.tld/svn/dav/activities.d
chmod -R g+w /srv/http/domain.tld/pfoo.domain.tld/svn/dav/
chown -R root:www-data /srv/http/domain.tld/pfoo.domain.tld/svn/

Gardez à l'esprit que apache doit pouvoir exécuter (permission +x) tous les dossiers en amont de /srv/http/domain.tld/pfoo.domain.tld/svn/.

Ajout de la redirection dans la zone dns de bind

Éditez le fichier de la zone dns de votre domaine (/srv/bind/domain.tld.hosts dans mon cas) et ajoutez les lignes suivantes :

srv.domain.tld.  IN      A       213.186.47.110
srv.domain.tld.  IN      AAAA    2001:41d0:1:d6e::110
svn.pfoo        IN      CNAME   srv.domain.tld.

Bien-sur si vous ne disposez pas d'ipv6 vous n'avez pas besoin du champs AAAA.

Installation et configuration du module svn de apache2

Installation du module apache svn

Apache2 fournit un module qui permet de gérer le dépôt svn. Ce module est disponible via le paquet libapache2-svn. Nous allons l'installer :

aptitude install libapache2-svn

Normalement, le module est ajouté à la liste des modules activés automatiquement. Vous devriez alors voir les lignes suivantes à la fin de l'installation:

Enabling dav as a dependency
Module dav installed; run /etc/init.d/apache2 force-reload to enable.
Module dav_svn installed; run /etc/init.d/apache2 force-reload to enable.

Si ce n'est pas le cas, activez le module en tapant :

a2enmod dav_svn

Dans certains cas, si vous utilisez https, les opérations de déplacement (move) et de copie (copy) de subversion peuvent poser problème. La solution est d'utiliser le module headers de apache 2:

a2enmod headers

Reloadez ensuite apache2

/etc/init.d/apache2 restart

Configuration d'une vhost

Éditez le fichier /etc/apache2/vhosts/svn.pfoo.domain.tld.conf et ajoutez y les lignes suivantes:

<VirtualHost 213.186.47.110:80>
        ServerName svn.pfoo.domain.tld
        Include sites/svn.pfoo.domain.tld.conf
</VirtualHost>
<VirtualHost [2001:41d0:1:d6e::110]:80>
        ServerName svn.pfoo.domain.tld
        Include sites/svn.pfoo.domain.tld.conf
</VirtualHost>

Si vous voulez une vhost sécurisée en ssl, je vous renvois à mon howto sur apache2.

On peut maintenant créer le fichier de configuration du virtualhost. Ouvrez le fichier /etc/apache2/sites/svn.pfoo.domain.tld.conf avez votre éditeur de texte et ajoutez les lignes suivantes:

#Cette ligne est a décommenter si vous n'arrivez pas à utiliser les commandes copy et move de subversion en vous connectant en https:
#RequestHeader edit Destination ^https http early
   <location />
       # Chargement du module DAV svn (subversion)
       DAV svn
       # chemin complet vers le dépôt SVN
       SVNPath /srv/http/domain.tld/pfoo.domain.tld/svn/
       #On sécurise le tout par mot de passe.
       # htpasswd permettra de créer facilement le fichier
       AuthType Basic
       AuthName "pfoo's SVN"
       AuthUserFile /srv/http/domain.tld/pfoo.domain.tld/svn.htpasswd
       Require valid-user

       # fichier de configuration des permissions du dépot
       AuthzSVNAccessFile /srv/http/domain.tld/pfoo.domain.tld/svn.perm
   </location>
</nowiki>

Création des utilisateurs

Nous allons créer un utilisateur pfoo ayant tous les droits sur le dépôt, et un utilisateur jonass n'ayant que des droits limités. Comme d'habitude, on préfèrera crypter les mots-de-passes en SHA (option -s)

htpasswd -cs /srv/http/domain.tld/pfoo.domain.tld/svn.htpasswd pfoo
htpasswd -s /srv/http/domain.tld/pfoo.domain.tld/svn.htpasswd jonass

On donne les bonnes permissions au fichier contenant les utilisateurs:

chown root:www-data /srv/http/domain.tld/pfoo.domain.tld/svn.htpasswd

On peut maintenant créer le fichier contenant les accès des deux utilisateurs. Ouvrez le fichier /srv/http/domain.tld/pfoo.domain.tld/svn.perm et entrez y les lignes suivantes:

[groups]
author = pfoo
reader = jonass
[/]
@author = rw
@reader = r

Petite explication :

  • [groups] permet de définir les groupes d'utilisateurs. Chaque groupe peut contenir plusieurs utilisateurs séparés par des virgules (,).
  • [/] permet de définir les permissions de la racine du dépôt SVN. Tel que je l'ais fait ici, les membres du groupe author auront un accès en lecture et en écriture, alors que les membres du groupe reader n'auront qu'un accès en lecture. Les groupes sont précédés d'un @

Comme d'habitude, changer l'appartenance du fichier:

chown root:www-data /srv/http/domain.tld/pfoo.domain.tld/svn.perm

Le moment de vérité

Il ne reste plus qu'à reloader apache

/etc/init.d/apache2 reload

Et essayer de se connecter avec son navigateur. Normalement, vous devriez tomber sur une fenêtre vous demandant de vous loguer :)

Backup

On ne le redira jamais assez : les backups sont obligatoires pour toute les données importantes. Et particulièrement pour SVN, étant donné qu'il vous permet de gérer vos projets. Quoi de plus horrible que de perdre la totalité des révisions de son projet suite à un crash disque ? Alors bien-sur, le principe de SVN fait qu'il est en soi un système de backup, étant donné qu'en cas de crash du serveur, la révision HEAD (la plus récente) sera disponible chez tous vos collaborateurs. Mais perdre les anciennes révisions n'est peut-être pas acceptable pour tous.

Pour réaliser un backup, vous pouvez utiliser soit svnadmin, soit un petit script inclut avec svn qui se nomme svn-backup-dumps.
svn-backup-dumps est plus facile à utiliser et permet plusieurs options, comme par exemple, gziper les backups.

Pour réaliser votre backup avec svn-backup-dumps :

svn-backup-dumps /srv/http/domain.tld/pfoo.domain.tld/svn/ /root/backup/

Pour restaurer un backup, il faut utiliser svnadmin :

svnadmin load /srv/http/domain.tld/pfoo.domain.tld/svn/ < /root/backup/sauvegarde.svndmp

Supprimer les anciennes révisions

Après un certain temps d'utilisation vous voudrez peut-être supprimer les anciennes révisions de votre dépôt afin de faire le ménage et réduire la taille du dépôt. Pour réaliser cette action, il faut faire un dump des révisions que vous voulez garder, remettre le dépôt à zéro, puis recharger le dump

Dans mon cas, je ne souhaite conserver que les 10 dernières révisions et je suis à la révision 453 :

svnadmin dump /srv/http/domain.tld/pfoo.domain.tld/svn/ -r 443:head > repository-443-head.dump
rm -rf /srv/http/domain.tld/pfoo.domain.tld/svn/
svnadmin create /srv/http/domain.tld/pfoo.domain.tld/svn/
svnadmin load /srv/http/domain.tld/pfoo.domain.tld/svn/ < repository-443-head.dump
------ Nouvelle révision 11 propagée (commit), basée sur révision 453

Voila. Il ne vous reste plus qu'à faire un checkout sur le dépôt local de votre pc (car les révisions ne correspondront plus donc un simple update ne fonctionnera pas).

Documentation

http://subversion.tigris.org/