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 :
- Rendere gli URL più corti.
- 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