Un serveur SVN en 5 minutes

Bien qu'on soit en 2017, on peut avoir besoin d'un gestionnaire de source centralisé et Subversion reste une valeur sure. On va donc s'installer un serveur SVN sur Debian Jessie en 5 minutes chrono.

D'abord on installe SVN et on crée un répertoire pour les données.

$ apt-get install subversion
$ mkdir -p /srv/svn/repos

Et on initialise un dépôt (aka repository) nommé "yaxsoft".

$ svnadmin create /svn/repos/yaxsoft

On ajoute des droits d'accès simples : un utilisateur en lecture-écriture, pas d'accès anonyme.

Editer /srv/svn/repos/yaxsoft/svnserve.conf :

[general]
password-db = passwd
authz-db = authz
realm = Yax Repo

Editer /srv/svn/repos/yaxsoft/conf/authz :

[groups]
dev = yannic

[/]
* =
@dev = rw

Editer /srv/svn/repos/yaxsoft/conf/passwd :

[users]
yannic = mon_mot_de_passe

On crée un répertoire pour les logs :

$ mkdir -p /var/log/svn

On ajoute un utilisateur UNIX svn qui va lancer le serveur et aura les permission sur les fichiers de données :

$ adduser svn --system --disabled-login --no-create-home --group
$ chown -R svn:svn /srv/svn /var/log/svn

On crée le fichier avec les paramètres de lancement du service /etc/default/svnserve :

DAEMON_ARGS="--daemon --pid-file /srv/svn/svnserve.pid --root /srv/svn/repos --log-file /var/log/svn/svnserve.log"

Enfin, on définit le recyclage des logs avec un fichier /etc/logrotate.d/svn :

/var/log/svn/*.log {
    daily
    missingok
    rotate 10
    compress
    notifempty
    create 640 svn svn
    sharedscripts
    postrotate
        if /bin/systemctl status svnserve > /dev/null ; then \
            /bin/systemctl restart svnserve > /dev/null; \
        fi;
    endscript
}

Il reste à créer un fichier de lancement pour systemd : /etc/systemd/system/svnserve.service :

[Unit]
Description=Subversion daemon
After=syslog.target network.target

[Service]
Type=forking
PIDFile=/srv/svn/svnserve.pid
EnvironmentFile=/etc/default/svnserve
ExecStart=/usr/bin/svnserve $DAEMON_ARGS
ExecReload=/bin/kill -s SIGHUP $MAINPID
User=svn
Group=svn
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target

Finalement, on met le service en démarrage automatique et on lance notre serveur SVN :

$ systemctl daemon-reload
$ systemctl enable svnserve
$ systemctl start svnserve

Notre SVN est accessible en svn://mon_serveur/yaxsoft.