Translation(s): English - Italiano


Sebbene il pacchetto subversion fornisce un leggero server subversion, svnserve, non fornisce i mezzi per eseguire questo server come servizio. Qui verranno discussi due modi per farlo.

Esecuzione di svnserve usando systemd

I sistemi Debian moderni usano systemd per l'esecuzione e la gestione dei servizi, perciò è meglio avviare il server svnserve usando systemd.

Come prima cosa, creare un utente di sistema per eseguire il servizio (root non è necessario ed è un po' insicuro).

# useradd -r svn

Poi creare un repository svn radice e darne la proprietà all'utente svn

# mkdir -p /srv/svn/repos; chown svn /srv/svn/repos

Creare la configurazione del servizio systemd per svnserve /etc/systemd/system/svnserve.service:

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

[Service]
Type=forking
RuntimeDirectory=svnserve
PIDFile=/run/svnserve/svnserve.pid
EnvironmentFile=/etc/default/svnserve
ExecStart=/usr/bin/svnserve $DAEMON_ARGS
User=svn
Group=svn
KillMode=control-group
Restart=on-failure

[Install]
WantedBy=multi-user.target

Poi aggiungere le opzioni di avvio del servizio in /etc/default/svnserve:

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

Queste opzioni vengono usate dal servizio per avviare svnserve.

Dopo aver fatto questo, creare una posizione per i file di log e dare all'utente svn i permessi per utilizzarla:

# mkdir /var/log/svnserve; chown svn /var/log/svnserve 

Aggiungere un file di configurazione per logrotate, per archiviare adeguatamente questo registro di log ogni tanto. /etc/logrotate.d/svnserve:

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

Da ultimo abilitare il servizio, avviarlo e controllare che funzioni come atteso

# systemctl enable svnserve.service

# systemctl start svnserve.service 

# systemctl status svnserve.service
* svnserve.service - Subversion protocol daemon
   Loaded: loaded (/etc/systemd/system/svnserve.service; enabled)
   Active: active (running) since Tue 2019-12-31 21:53:16 MSK; 39s ago
  Process: 798 ExecStart=/usr/bin/svnserve $DAEMON_ARGS (code=exited, status=0/SUCCESS)
 Main PID: 799 (svnserve)
   CGroup: /user.slice/user-1000.slice/session-31211.scope/system.slice/svnserve.service
           `-799 /usr/bin/svnserve --daemon --pid-file /run/svnserve/svnserve.pid --root /srv/svn/repos --log-file /var/log/svnserve/svnserve.log

Dec 31 21:53:16 svn svnserve[798]: DIGEST-MD5 common mech free
Dec 31 21:53:16 svn systemd[1]: Started Subversion protocol daemon.

In seguito, il servizio svnserve dovrebbe partire automaticamente all'avvio del sistema.

Questa guida è basata su questa voce in stackoverflow

Esecuzione di svnserve da inetd

Per il protocollo svn:// si deve aggiungere una riga al file /etc/inetd.conf per avviare svnserve automaticamente, ad esempio:

svn stream tcp nowait mio_utente_svn /usr/bin/svnserve svnserve -i -r /srv/svn

/srv/svn è dove risiedono i depositi (così gli utenti non devono avere /srv/svn incluso nei loro URL), e mio_utente_svn è l'utente con i permessi di lettura e scrittura sui depositi. Probabilmente si vorrà creare un utente specifico per l'esecuzione del servizio svnserve.

Dopo ave modificato il file /etc/inetd.conf eseguire come utente root

update-inetd --enable svn

C'è un duplice motivo per usare l'opzione -r :

  1. Rendere gli URL più corti.
  2. Garantisce che gli utenti remoti possano accedere solo alla parte del file system Unix designata.


Nota: se si sta cercando un tutorial sull'uso di un client subversion, si veda la pagina Tutorial SVN


CategorySoftware