Table of Contents
Allestire un repository SVN
Vedere le guide:
Setup una-tantum
Installare i pacchetti:
- subversion
- libapache2-svn
- enscript
- websvn
Creare la directory e aggiungere un gruppo. In questo semplice esempio tutti gli utenti svn apparterranno al gruppo e potranno accedere a tutti i progetti.
mkdir /var/lib/svn addgroup subversion
Configurando WebDAV (vedere più avanti) per ogni repository sarà possibile puntare il browser su un URL del tipo http://host/svn/my_project/
. Il controllo di accesso avviene tramite autenticazione HTTP, è possibile anche definire delle ACL sulle directory.
Se si installa WebSVN (vedere più avanti) si potrà puntare il browser all'indirizzo http://host/websvn/
e sfogliare i vari repository. Il controllo di accesso può avvenire con lo stesso file di configurazione usato da WebDAV.
Per utilizzare SVN via web esiste anche Submin, non pacchettizato Debian.
- Configurare l'HTTPS.
Creazione di un repository
Si vuole un repository SVN a cui accedere via ssh (richiede utente Unix) e via http (richiede autenticazione HTTP).
Per creare un nuovo repository di nome my_project
:
svnadmin create --fs-type fsfs /var/lib/svn/my_project chgrp -R subversion /var/lib/svn/my_project chmod -R g+w /var/lib/svn/my_project chmod -R o-r /var/lib/svn/my_project chmod -R o-x /var/lib/svn/my_project find /var/lib/svn/my_project -type d | xargs chmod g+s
I comandi sopra fanno in modo che tutti i file appartengano al gruppo subversion
, settare il bit SETGID sulle directory impone che anche i file nuovi apparterranno a tale gruppo. Per accedere al repository SVN sia via ssh che via http è necessario che l'utente Unix e il demone http appartengano al gruppo:
adduser niccolo subversion adduser www-data subversion /etc/init.d/apache2 restart
Per migliorare il debug (ad esempio per vedere gli errori di Permission denied) si edita sul server il file /etc/subversion/config
impostando l'opzione ssh nella sezione [tunnels]
:
[tunnels] ssh = $SVN_SSH ssh -o ControlMaster=no
Adesso si prova a fare un import
dal proprio PC verso il server:
mkdir trunk echo "Prova" > trunk/README svn import -m "Prova di import via ssh+svn" trunk svn+ssh://host/var/svn/my_project/trunk
Proviamo adesso a fare un list e quindi un checkout:
svn list svn+ssh://host/var/svn/my_project/trunk svn co svn+ssh://host/var/svn/my_project/trunk
Per vedere il contenuto del repository dal server stesso:
svnlook tree /var/svn/my_project/
Configurazione accesso WebDAV
Consente l'accesso al repository tramite protocollo HTTP, l'autenticazione e l'eventuale controllo di accesso viene eseguito dal server web, quindi non è necessario avere un account Unix sul server.
In un file del tipo /etc/apache2/sites-available/svn_dav
si configura l'accesso WebDAV:
<Location /svn/my_project> DAV svn SVNPath /var/lib/svn/my_project #SVNParentPath /var/lib/svn AuthType Basic AuthName "Subversion Repository for my_project" AuthUserFile /etc/apache2/svndav_my_project.passwd #AuthUserFile /etc/apache2/svndav.passwd Require valid-user #SSLRequireSSL </Location>
Ovviamente si deve creare il file delle password con htpasswd
ed eventualmente configurare l'accesso in HTTPS. Per sfogliare il progetto basta puntare il browser su http://host/svn/my_project
.
Per pubblicare tutti i repository con una sola configurazione si usa la direttiva SVNParentPath
al posto di SVNPath
, in tal caso è opportuno dare un nome appropriato alla Location
e alla AuthUserFile
.
Il file indicato da AuthUserFile deve appartenere a root:www-data
con mode 640
. Viene gestito con htpasswd
.
Per accedere tramite WebDAV si usa la sintassi:
svn co http://host/svn/my_project/trunk
viene chiesto login e password per l'autenticazione HTTP, non quella ssh.
ACL
Per definire delle ACL sulle singole directory basta creare un file, ad esempio /etc/apache2/svndav_my_project.acl
:
[groups] rwgroup = usera, userb rogroup = userc [my_project:/] @rwgroup = rw @rogroup = r [my_project:/trunk] @rwgroup = rw @rogroup = r
Se il file si riferisce ad un solo repository si può omettere la parte my_project:
nel titolo della sezione. Nel file di configurazione di Apache, nella opportuna <Location>
, si aggiunge:
<Location /svn/my_project> ... AuthzSVNAccessFile /etc/apache2/svndav_my_project.acl </Location>
Configurazione accesso con WebSVN
Consente di sfogliare un repository SVN vedendo le modifiche apportate, scaricando i file, ecc. È possibile impostare un controllo di accesso sulle singole directory.
Il pacchetto Debian installa il file di configurazione /etc/apache2/conf.d/websvn
che pubblica l'alias http://host/websvn
, la root dei progetti SVN e i progetti pubblicati sono configurati in /etc/websvn/svn_deb_conf.inc
. Utilizzare dpkg-reconfigure
per aggiornare la configurazione.
$config->parentPath() | Dichiara una directory che contiene uno o più repository. |
---|---|
$config->addRepository() | Dichiara una directory di un solo repository. |
Il demone http deve avere accesso al repository (che può essere anche remoto), eventualmente si impostano le credenziali di accesso nello stesso file di configurazione.
Per attivare il controllo di accesso bisogna creare un Subversion access file. Si può usare lo stesso file ACL usato per WebDAV. Dovrebbe essere possibile usare lo stesso file ACL anche per il programma Subversion (quindi rendere le ACL valide per ogni metodo di accesso). Per il singolo repository tale file viene indicato in conf/svnserve.conf
, a livello di sistema forse va messo in /etc/subversion/config
?
Nella configurazione di WebSVN si aggiunge (è preferibile editare /etc/websvn/config.php
piuttosto che /etc/websvn/svn_deb_conf.inc
, perché non viene riscritto dal gestore pacchetti Debian):
$config->useAuthenticationFile('/etc/apache2/svndav.acl');
È più sensato in questo caso usare un file di autenticazione globale (valido per ogni progetto) e non quello del singolo progetto.
In ogni caso bisogna proteggere l'applicativo con l'autenticazione Apache, ad esempio in /etc/apache2/conf.d/websvn
si aggiunge:
<Directory /usr/share/websvn> ... AuthType Basic AuthName "Subversion Repository for my_project" AuthUserFile /etc/apache2/svndav.passwd Require valid-user </Directory>