User Tools

Site Tools


doc:appunti:linux:sa:subversion_repository

Allestire un repository SVN

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.

  • FIXME 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? FIXME

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>
doc/appunti/linux/sa/subversion_repository.txt · Last modified: 2011/11/21 16:19 by niccolo