Migration serveur SVN multi-depot.

Lors du renouvellement d'un serveur, j'ai eu besoin de déplacer une centaine de dépôts SVN sur le nouveau.

Pour mémo j'en profite pour me faire une petite procédure avec installation de subversion et connexion sur LDAP.

Installation du serveur SVN sur Debian :

apt-get update
apt-get install subversion subversion-tools

Pour la partie LDAP j'ai aussi besoin de ça :

apt-get install libapache2-svn apache2-mpm-worker

Ensuite, il faut créer l’arborescence de base. Dans mon cas je la place dans /var/svn

cd /var
mkdir svn

A partir d'ici, le SVN fonctionne. Il est déjà possible de créer un premier dépôt.

svnadmin create subversion/depot

Configuration de la liaison LDAP :

On commence par adapter le fichier /etc/apache2/mods-enabled/dav_svn.conf à nos besoins.

<Location /svn>
  DAV svn
  SVNParentPath /var/svn
  SVNAutoversioning on

  AuthzSVNAccessFile /var/svn/svnaccess
  AuthBasicProvider ldap
  AuthType Basic
  AuthName "Connection subversion"
  AuthLDAPURL "ldap://ldap.entreprise:389/DC=mon,DC=entreprise,DC=net?sAMAccountName?sub?(objectClass=*)"
  AuthLDAPBindDN "CN=Utilisateur LDAP,DC=mon,DC=entreprise,DC=net"
  AuthLDAPBindPassword "MotDePasse"
  Require valid-user
</Location>

Relancer apache pour valider.

/etc/init.d/apache2 restart

Ensuite on crée le fichier /var/svn/svnaccess qui vas contenir la liste des droits:

Dans mon cas j'ai créé un groupe @admin et j'ai placé Benoit qui a tous les droits sur l'ensemble des repository.

 ### This file is an example authorization file for svnserve.
 ### Its format is identical to that of mod_authz_svn authorization
 ### files.
 ### As shown below each section defines authorizations for the path and
 ### (optional) repository specified by the section name.
 ### The authorizations follow. An authorization line can refer to:
 ###  - a single user,
 ###  - a group of users defined in a special [groups] section,
 ###  - an alias defined in a special [aliases] section,
 ###  - all authenticated users, using the '$authenticated' token,
 ###  - only anonymous users, using the '$anonymous' token,
 ###  - anyone, using the '*' wildcard.
 ###
 ### A match can be inverted by prefixing the rule with '~'. Rules can
 ### grant read ('r') access, read-write ('rw') access, or no access
 ### ('').
 
 [aliases]
 # joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research
 # Institute/CN=Joe Average
 
 [groups]
 # harry_and_sally = harry,sally
 # harry_sally_and_joe = harry,sally,&joe
 admin = benoit,toto
 
 # [/foo/bar]
 # harry = rw
 # &joe = r
 # * =
 
 # [repository:/baz/fuz]
 # @harry_and_sally = rw
 # * = r
 
 [/]
 @admin = rw

Passons à la migration des dépôts en deux étapes.

Première étape sauvegarder l'ensemble des dépôts. Pour cela j'utilise le dump de SVN et je zip l'ensemble dépôt par dépôt.

Script d'export export.sh:

for repo in `ls -1`
 do
        echo "Processing $repo"
        svnadmin dump -q --deltas $repo | gzip -c > "/var/svn/"$repo".svn.gz"
 done

Déplacer ensuite les zip sur le nouveau serveur avec filezilla par exemple.

Puis, utiliser le script d'import. Celui-ci dezip les dump puis crée les dépôts svn pour finir par replacer les données.

Script d'import import.sh:

for repo in `ls -1`
 do
        temp=`echo $repo | sed 's/\..*//'`
        echo "Creation du depot: $temp"
        svnadmin create $temp &&
        gzip -d |
        sed -e '/^svn:log$/,/^PROPS-END$/ s/\x0D/ /' -e '/^svn:ignore$/,/^PROPS-END$/ s/\x0D/\n/' |
        cat $repo | gzip -d | svnadmin load -q --force-uuid $temp
 done

Si tout s'est bien passé, se rendre sur la page http://votreserveur/svn/depot Vous devriez retrouver vos dépôts.

Ajouter un commentaire

Les commentaires peuvent être formatés en utilisant une syntaxe wiki simplifiée.

Haut de page