====== Allestire un repository SVN ====== Vedere le guide: * **[[http://www.howtoforge.com/debian_subversion_websvn|Setting up Subversion and websvn on Debian]]**. * **[[http://www.reviewingit.com/index.php/content/view/62/2/|Installing Subversion on Debian Etch Complete]]** * **[[http://svnbook.red-bean.com/index.en.html|Version Control with Subversion]]** ===== 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 [[http://supermind.nl/submin/about.html|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: 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 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 ''%%%%'', si aggiunge: ... AuthzSVNAccessFile /etc/apache2/svndav_my_project.acl ===== 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: ... AuthType Basic AuthName "Subversion Repository for my_project" AuthUserFile /etc/apache2/svndav.passwd Require valid-user