Vogliamo implementare un sistema di controllo versione con un interfaccia web (amministrazione e visualizzazione) sulla vostra distribuzione preferita? Vediamo come installare subversion, websvn su debian lenny.
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.
Come prerequisiti dobbiamo avere un server con installati apache2, php, mysql e pear funzionanti, se non avete questo potete facilemente reperire delle ottime guide (ad esempio su howtoforge.com). Procediamo con l’installazione di quanto necessitiamo (subversion, supporto ad apache2 come modulo a sv con webdav, libreria di PEAr per svnmanager), durante il processo rispondere “no” alla richiesta di configurazione di websvn:
apt-get install subversion libapache2-svn websvn pear install -d preferred_state=alpha VersionControl_SVN
Procediamo con la creazione della struttura (directory e file di configurazione che non vengono generati automaticamente dall’applicazione) per contenente le nostre future repository (repos) e file di configurazione e diamo i privilegi compliti ad apache:
mkdir /var/lib/svn cd /var/lib/svn mkdir repos mkdir sysconfig touch passwdfile touch accessfile chown -R www-data:www-data /var/lib/svn
Ora bisogna modificare il file di configurazione del modulo webdav per svn di apache, che si trova al seguente indirizzo:
/etc/apache2/mods-available/dav_svn.conf
Dal file dobbiamo attivare le seguenti funzioni (decommentare le righe):
<Location /svn> DAV svn SVNParentPath /var/lib/svn/repos AuthType Basic AuthName "Subversion Repository" AuthUserFile /var/lib/svn/passwdfile AuthzSVNAccessFile /var/lib/svn/accessfile Require valid-user </Location>
In questo modo abbiamo abilittao il servizio, definito un percorso all’interno dei quali si troveranno i nostri repos ed un sistema di autenticazione a livello di accesso http e svn. Procedere quindi con il download di svnmanager (la versione al momento della scrittura di questo post è la 1.0.8). Scarichiamo (o carichiamo) sul server l’ultima versione in /var/www e procediamo con l’installazione:
unzip svnmanager-1.08.zip ln -s svnmanager-1.08 svnmanager cd svnmanager cp config.php.linux config.php
Abbiamo definito un nome più semplice da ricordarsi (svnmanager) ed attivata la configurazione per piattaforma linux. Editiamo quindi il file di configurazione (config.php) ed andiamo a modificare quanto segue:
$svn_config_dir = "/var/lib/svn/svnconfig"; $svn_repos_loc = "/var/lib/svn/repos"; $svn_passwd_file = "/var/lib/svn/passwdfile"; $svn_access_file = "/var/lib/svn/accessfile"; $smtp_server = "localhost"; $dsn = "mysqli://svnmanager:PASSWORD@localhost/svnmanager"; // change PASSWORD with your password :-)
Come vedete abbiamo ripreso la struttura precedentemente creata e definito il nostro DSN (connettore al db attraverso un dbal). Procediamo quindi alla creazione in MySQL dell’account e del database come specificato nel DSN configurato precedentemente. Riavviamo quindi il servizio apache.
/etc/init.d/apache2 restart
Se vi collegate all’indirizzo del vostro server indicando la direcotory svnmanager la prima volta viene generata la struttura del DB ed in seguito avrete accesso all’interfaccia amministrativo di subversion.
http://your-ip/svnmanager
Accedete all’interfaccia amministrativa con l’accaunt definito nel file di configurazione e create un nuovo utente (date i privilegi amministrativi). Create quindi un progetto ed utilizzando il vostro tools prferito e caricate dei files. Accedete poi via browser e vedrete quanto caricato (previo autenticazione).
Mentre con un indirizzo di questo tipo:
http://your-ip/svn/repo-name
vi collegate (previo autenticazione) via webdav al vostro progetto.
Ora però vogliamo visualizzare tutto questo in una forma più consona al web, quindi avendo accesso alle informazioni in una maniera strutturata, potento utilizzare quei strumenti che ci permettono di capire l’evoluzione del nostro progetto (diff, formattazione, …). Procediamo quindi con la configurazione di websvn.
dpkg-reconfigure websvn
e procediamo con le scelte di default (chiaramente vogliamo configurare il servizio), afcendo però attenzione ad inserire i valori mostrati di seguito per quanto riguarda i repos di svn.
svn parent repositories: /var/lib/svn/repos svn repositories: [nothing]
A questo punto potremmo già accedere alle nostre repository al seguente indirizzo:
http://your-ip/websvn/
ma vedete che non abbiamo nessun tipo di protezione/autenticazione. Possiamo implementare il medesimo meccanismo di autenticazione utilizzato per webdav, ma al momento senza un controllo diretto sui files, ma unicamente sull’accesso. Modifichiamo il seguente file:
/etc/websvn/apache.conf
e aggiungiamo all’interno della direttiva Directory
AuthType Basic AuthName "Subversion Repository" Require valid-user AuthUserFile /var/lib/svn/passwdfile
Cosi facendo facciamo riferimento alla medesima lista di username/password (senza riferimenti ai repository). Per evitare questo andiamo a modificare il seguente parametro (in questo modo indichiamo al sistema di far riferimento anche agli accessi di subversion):
$config->useAuthenticationFile('/var/lib/svn/accessfile'); // Global access file
in
/etc/websvn/config.php
Se vogliamo rendere il tutto più sicuro dobbiamo implementare un’accesso tramite un protocollo sicuro, quindi l’unica soluzione che fa al nostro caso è quella di utilizzare https (quindi ssl). Procediamo quindi alla configurazione dei nostri certificati ed alla loro installazione/abilitazione nelle diverse configurazioni.
mkdir/etc/apache2/ssl make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem
viene generato un certificato di tipo selfsigned (quindi siete voi l’authority). Attenzione che alla domanda del commonName dovete inserire esattamente il nome del vostro dominio, ad esempio svn.mioserver.com. Il certificato avrà come validità 10 anni. Editiamo di nuovo i files /etc/apache2/mods-available/dav_svn.conf e /etc/websvn/apache.conf ed aggiungiamo ad entrambi la direttiva
SSLRequireSSL
in modo da richiedere la presenza del protocollo SSL, quindi l’accesso avverrà tramite https, al momento dell’autenticazione. A questo punto configurate il vostro dominio (usando il commonName definito nella creazione del vostro certificato SSL) per configuare il vostro dominio namebased, di seguito un esempio per la condivisione della /var/ww:
<VirtualHost your-ip:443> ServerName commonNAme ServerAdmin email@domain DocumentRoot "/var/www/" <Directory /var/www/> Options -Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> SSLEngine on SSLCertificateFile /etc/apache2/ssl/apache.pem ErrorLog "/var/logs/ssl.error.log" CustomLog "/var/logs/ssl.access.log" combined </VirtualHost>
Non vi basta che riavviare apache e questo punto avrete messo in sicurezza l’accesso a svn (ed ai tools per gestirlo). E questo è tutto, se avete domande, migliorie o commenti fatemi sapere.
Ciao,
grazie per la guida, mi sarà utile una volta capito come usarla al meglio!
Una parte non mi è chiara però: quando dici “Accedete all’interfaccia amministrativa con l’account definito nel file di configurazione”
Ma non trovo la sezione in cui il file viene compilato, cioè: dove credo l’utente per accedere al pannello web per la creazione di altri utenti o repository?
Grazie !
Ciao
ciao e grazie.
difatti ho dimenticato di indicare che al momento dell’installazione di svnmanager nel file config.php (che abbiamo utilizzato per definire le cartelle di svn e il dsn) impostiamo un account di default (che se non andiamo a modificare è admin/admin). Una volta popolato il db da svnmanager si accede all’interfaccia con queste credenziale, è poi opportuno cambiarle, a questo punto quelle nel file di configurazione non fanno più stato.
Grazie per l’appunto e ciao
Grazie, sono riuscito a completare l’installazione (a dire il vero era già completa mancava solo quello step).
Ciao!
ho provato la tua guida, solo che mi da il seguente errore usando sqlite.
Hai qualche idea? i diritti sono tutti impostati:
-rw-rw—- 1 www-data www-data 0 21 gen 19:51 svnmanager.db
Fatal Error
[2] sqlite_open() [function.sqlite-open]: unable to open database: /var/www/svnmanager-1.08/svnmanager (@line 138 in file /var/www/svnmanager-1.08/prado-2.0.3/framework/Data/adodb/drivers/adodb-sqlite.inc.php).
Debug Backtrace
#1 — pradoErrorHandler(…)
#2 adodb-sqlite.inc.php:138 — sqlite_open(…)
#3 adodb.inc.php:416 — ADODB_sqlite->_connect(…)
#4 adodb.inc.php:3713 — ADOConnection->Connect(…)
#5 TAdodb.php:318 — ADONewConnection(…)
#6 TAdodb.php:113 — TAdodb->open()
#7 — TAdodb->__call(…)
#8 DataModule.php:31 — TAdodb->MetaTables()
#9 TApplication.php:584 — DataModule->onLoad(…)
#10 TApplication.php:629 — TApplication->loadModule(…)
#11 TApplication.php:482 — TApplication->loadPage(…)
#12 index.php:5 — TApplication->run()
purtroppo non ho mai usato sqlite con php, però sembra che devi avere i privilegi di scrittura sia sui files che sulle cartelle (in cui risiede il tuo db di sqlite).
prova e fammi sapere. ciao