Running a Subversion Server

Running a Subversion Server

Cette section décrira la façon de paramétrer, administrer et sécuriser un serveur Subversion.

Dépendances du serveur Subversion

Requises

Subversion-1.7.1 et OpenSSH-5.9p1

Paramétrage d'un serveur Subversion.

Les instructions suivantes installeront un serveur Subversion, qui sera paramétré pour utiliser OpenSSH comme méthode sécurisée à distance, avec svnserve disponible pour un accès anonyme.

La configuration du serveur Subversion consiste dans les étapes suivantes :

1. Régler l'utilisateur, le groupe et les droits

Vous devrez être l'utilisateur root pour la partie initiale de la configuration. Créez l'utilisateur et groupe svn avec les commandes suivantes :

groupadd -g 56 svn &&
useradd -c "SVN Owner" -d /home/svn -m -g svn -s /bin/false -u 56 svn

Si vous envisagez d'avoir plusieurs dépôts, vous devriez avoir un groupe décjé à chaque dépôt pour faciliter l'administration. Créez le groupe svntest pour le dépôt de test et ajoutez l'utilisateur svn au groupe avec les commandes suivantes :

groupadd -g 57 svntest &&
usermod -G svntest -a svn

En outre, vous devriez régler umask 002 pendant que vous travaillez avec un dépôt pour que tous les nouveaux fichiers soient accessibles en écriture au propriétaire et au groupe. Ceci est rendu obligatoire par la création d'un script enveloppe pour svn et svnserve :

mv /usr/bin/svn /usr/bin/svn.orig &&
mv /usr/bin/svnserve /usr/bin/svnserve.orig &&
cat >> /usr/bin/svn << "EOF"
#!/bin/sh
umask 002
/usr/bin/svn.orig "$@"
EOF
cat >> /usr/bin/svnserve << "EOF"
#!/bin/sh
umask 002
/usr/bin/svnserve.orig "$@"
EOF
chmod 0755 /usr/bin/svn{,serve}
[Note]

Note

Si vous utilisez Apache pour travailler avec le dépôt par HTTP, même pour un accès anonyme, vous devriez envelopper /usr/sbin/httpd dans un script similaire.

2. Créer un dépôt Subversion.

Avec subversion-1.1.0 et supérieur, un nouveau type de dépôt de stockage de données est disponible, FSFS. Il y a un échange pour plus de vitesse avec la nouvelle fondation, cependant on peut mettre maintenant le dépôt sur un montage réseau, et toute corruption n'a pas besoin d'admin pour récupérer le dépôt. Pour plus d'informations et par comparaison avec FSFS et BDB, voir http://svnbook.red-bean.com/svnbook-1.1/ch05.html#svn-ch-5-sect-1.2.A.

Créez un nouveau dépôt Subversion avec les commandes suivantes :

install -v -m 0755 -d /srv &&
install -v -m 0755 -o svn -g svn -d /srv/svn/repositories &&
svnadmin create --fs-type fsfs /srv/svn/repositories/svntest

Maintenant que le dépôt est créé, vous devriez le peupler avec quelque chose d'utile. Vous devrez avoir une présentation de répertoire prédéfinie paramétrée ressemblant exactement à ce à quoi vous voudriez que votre dépôt ressemble. Par exemple, voici un modèle du paramétrage de BLFS avec une racine de svntest/. Vous devrez paramétrer une arborescence de répertoire ressemblant à ce qui suit :

          svntest/            # The name of the repository
             trunk/           # Contient l'arborescence des sources existantes
                BOOK/
                bootscripts/
                edguide/
                patches/
                scripts/
             branches/        # Nécessaire pour des branches supplémentaires
             tags/            # Nécessaire pour tagguer les points de versions

Une fois que vous avez créé votre aménagement de répertoire, comme indiqué ci-dessus, vous êtes prêt à faire l'importation initiale :

svn import -m "Initial import." \
    </chemin/vers/arborescence/source> \
    file:///srv/svn/repositories/svntest

Maintenant modifiez les informations de propriétaire et de groupe du dépôt et ajoutez un utilisateur non privilégié aux groupes svn et svntest :

chown -R svn:svntest /srv/svn/repositories/svntest &&
chmod -R g+w /srv/svn/repositories/svntest &&
chmod g+s /srv/svn/repositories/svntest/db &&
usermod -G svn,svntest -a <username>

svntest est le groupe affecté au dépôt svntest. Comme indiqué plus haut, cela facilite l'administration de plusieurs dépôts lors de l'utilisation de OpenSSH pour l'authentication. En anticipant, vous devrez ajouter votre utilisateur non privilégié et n'importe quel utilisateur supplémentaire auquel vous pouvez vouloir donner accès en écriture au dépôt, aux groupes svn et svntest.

En outre, vous remarquerez que le nouveau répertoire du dépôt db est set-groupID. Si le raisonnement n'est pas immédiatement évident, quand on utilise une méthode d'authentication externe (telle que ssh), le bit sticky est réglé de sorte que tout les nouveaux fichiers appartiendront à l'utilisateur, mais au groupe svntest. Quiconque dans le groupe svntest peut créer des fichiers, mais donnez encore l'accès en écriture à tout le groupe à ces fichiers. Ceci évite d'exclure d'autres utilisateurs du dépôt.

Maintenant, repassez en accès pour utilisateur non privilégié, et jetez un œil sur le nouveau dépôt en utilisant svnlook :

svnlook tree /srv/svn/repositories/svntest/
[Note]

Note

Il se peut que vous deviez vous déconnecter et y revenir pour rafraîchir vos appartenances au groupe. 'su <nom_utilisateur>' devrait aussi fonctionner.

3. Configurer le Serveur

Comme indiqué précédemment, ces instructions configureront le serveur pour n'utiliser que ssh pour un accès en écriture au dépôt et pour fournir un accès anonyme en utilisant svnserve. Il y a plusieurs autres manières de fournir un accès au dépôt. Ces configurations supplémentaires sont mieux expliquées sur http://svnbook.red-bean.com/.

La configuration de l'accès doit se faire pour chaque dépôt. Créez le fichier svnserve.conf pour le dépôt svntest en utilisant les commandes suivantes :

cp /srv/svn/repositories/svntest/conf/svnserve.conf \
    /srv/svn/repositories/svntest/conf/svnserve.conf.default &&
cat > /srv/svn/repositories/svntest/conf/svnserve.conf << "EOF"
[general]
anon-access = read
auth-access = write
EOF

Il n'y a pas grand à chose du tout avoir avec le fichier de configuration. Vous remarquerez que seule la section générale est est nécessaire. Jetez un œil sur le fichier svnserve.conf.default pour des informations sur l'utilisation de la méthode d'authentication de svnserve intégrée.

4. Démarrage du Serveur

Il y a deux manières démarrer svnserve. La façon la plus habituelle est de le lancer comme processus inetd ou xinetd. Vous pouvez aussi utiliser un script de démarrage pour lancer le service au démarrage.

[Note]

Note

Si vous ne souhaitez pas fournir d'accès anonyme à vos dépôts svn ou si vous utilisez l'authentication intégrée de svnserve, vous n'avez pas besoin de lancer le script svnserve.

Si vous utilisez inetd, ajoutez une ligne à /etc/inetd.conf en utilisant les commandes suivantes :

cat >> /etc/inetd.conf << "EOF"
svn stream tcp nowait svn /usr/bin/svnserve svnserve -i
EOF

Si vous utilisez xinetd, la commande suivante créera le fichier serveur Subversion en tant que fichier /etc/xinetd.d/svn :

cat >> /etc/xinetd.d/svn << "EOF"
# Début de /etc/xinetd.d/svn

service svn
{
        port                    = 3690
        socket_type             = stream
        protocol                = tcp
        wait                    = no
        user                    = svn
        server                  = /usr/bin/svnserve
        server_args             = -i -r /srv/svn/repositories
}

# Fin de /etc/xinetd.d/svn
EOF

Enfin, si vous souhaitez simplement démarrer le serveur au démarrage, installez le script de démarrage svn inclus dans le paquet blfs-bootscripts-20111226.

make install-svn

Last updated on 2011-11-16 05:12:05 +0100