Introduzione

Subversion (noto anche come svn, che è il nome del suo client a riga di comando) è un sistema di controllo versione progettato da CollabNet Inc. con lo scopo di essere il naturale successore di CVS, oramai considerato superato. E' rilasciato sotto la licenza libera Apache.

Installazione

Operando sul server come utente root, installiamo Subversion con un solo comando:

# apt-get install subversion

Configurazione

Creiamo ora una directory per contenere i repository dei nostri progetti:

# mkdir –p /var/lib/svn

Quindi avviamo un primo progetto di prova all'interno della directory appena creata:

# svnadmin create /var/lib/svn/myproject

Abilitare HTTP

Subversion è ora installato e funzionante, ma può essere usato solo in locale sul server che lo ospita, che non è una cosa molto comoda. Abbiamo quindi bisogno di installare un web server e di configurarlo per ospitare Subversion.
Per l'installazione di Apache rimandiamo alla guida dedicata: Installare un ambiente LAMP: Linux, Apache2, SSL, MySQL, PHP5.
Al termine dell'installazione base di Apache possiamo installare il modulo SVN:

# apt-get install libapache2-svn

Ora dobbiamo configurare il modulo SVN di Apache modificando il suo file di configurazione principale:

# nano /etc/apache2/mods-available/dav_svn.conf

Il file di default è completamente commentato e non contiene nemmeno un'istruzione eseguibile, ma solo una configurazione di esempio disabilitata. Lasciamo pure tutto così e aggiungiamo alla fine del file la nostra configurazione:

<Location /svn>
  DAV svn
  SVNParentPath /var/lib/svn
  AuthType Basic
  AuthName "Ferdy Subversion Repository"
  AuthUserFile /etc/apache2/dav_svn.passwd
  <LimitExcept GET PROPFIND OPTIONS REPORT>
    Require valid-user
  </LimitExcept>
 </Location>

Quindi salviamo il file e riavviamo Apache:

# /etc/init.d/apache2 restart

Impostare i permessi sulla directory radice

Poichè interagiremo con Subversion attraverso Apache, è importante che il nostro webserver abbia i permessi di scrittura sulle directory del nostro repository. Impostiamo quindi i giusti permessi:

# chown -R www-data:www-data /var/lib/svn

Se decidiamo di utilizzare, oltre al modulo SVN di Apache, anche i client nativi di Subversion per i vari sistemi operativi:

  • Kdesvn è un client per Linux
  • RapidSVN è un client GUI per Microsoft Windows o Linux, scritto in C++ usando il framework wxWidgets
  • eSvn è un client basato su Qt
  • JSVN è un client basato su Swing (Java)
  • TortoiseSVN è un'estensione della shell di Microsoft Windows
  • RabbitVCS è un'estensione della shell di Linux
  • svnX è un client GUI per Mac OS X (link).
  • AnkhSVN è un addin per Microsoft Visual Studio .NET. Permette di eseguire le più comuni operazioni di Subversion direttamente dall'interno dell'IDE VS.NET.
  • Versions è un nuovo client per Mac OS X, dotato di un'interfaccia coerente con il Sistema Operativo Apple

è importante impostare uno script Cron che periodicamente aggiusti i permessi, mantenendo la possibilità di scrittura e modifica per il nostro Web Server.

Gestione degli utenti

Ora dobbiamo crreare il file contenente l'elenco degli utenti che avranno accesso a SVN. Per ora creeremo un solo utente admin:

# htpasswd –c /etc/apache2/dav_svn.passwd admin

Ci verrà chiesto di inserire la password dell'utente.
Possiamo in ogni momento aggiungere nuovi utenti con il comando:

# htpasswd /etc/apache2/dav_svn.passwd nuovo_utente

Si noti l'assenza dell'opzione -c, che va utilizzata solo nel caso in cui si voglia ricreare un nuovo elenco da zero, resettando gli attuali utenti configurati.

Sicurezza di Subversion

Per rendere più sicuro Subversion è bene farlo girare sotto HTTPS e non sotto HTTP.
Verifichiamo quindi che il modulo SSL di Apache sia abilitato:

# a2enmod ssl

e in caso riavviamo il web server:

# /etc/init.d/apache2 restart

Creiamo ora un Virtual Host per Subversion, copiando il file default-ssl:

# cp /etc/apache2/sites-available/default-ssl /etc/apache2/sites-available/subversion-ssl

Possiamo disabilitare HTTP e richiedere l'uso di SSL aggiungendo la linea:

# SSLRequireSSL

al file /etc/apache2/mods-available/dav_svn.conf.