Server di Versioni con Ubuntu

In Informatica ed in particolare in programmazione, si è spesso coinvolti in progetti in cui il singolo programmatore si trova a dare il proprio contributo in progetti già definiti. Un esempio tipico è il mondo dell’Open Source dove vi sono progetti, composti da diverse decine (se non centinaia) di file, che vengono messi a disposizione delle comunità. Quando il singolo sviluppatore è interessato a questi file, per motivi che possono andare dalla pura curiosità alla volontà di contribuire inserendo migliorie piuttosto che correggendo qualche bug, si trova ad avere a che fare con il “versioning” di un applicativo. In breve si trova a dover usare un apposito software che gli permetterà di ricevere l’ultima versione dei file che lo compongono nonchè, nel caso ne abbia modificato/aggiunto qualcuno, di uploadare ed aggiornare la versione di quelli ri-elaborati da lui.

Il server che è storicamente utilizzato, ma che ora ha ceduto il passo, è CVS (Concurrent Versions System). Ad oggi un server molto utilizzato è Subversion.

Quest’ultimo risulta molto semplice anche installarlo, ecco i brevi passi che occorre compiere, partendo da una installazione base di Ubuntu Server:

Installiamo quanto serve

sudo a2enmod dav_svn

creiamo ora il nostro repository in una directory nuova (usiamo /var perchè è istituzionalmente la directory dove si memorizzano tipologie di contenuti

che richiedono più spazio)

sudo svnadmin create /var/svn

aggiustiamo i diritti di scrittura/lettura per Apache sulla directory creata

sudo chown -R www-data:www-data /var/svn

ed ora configuriamo il nostro server personalizzando il file di configurazione

sudo vi /etc/apache2/mods-enabled/dav_svn.conf
de-commentiamo alcuni tag così da ottenere la seguente configurazione
<Location /svn>
 DAV svn
 SVNParentPath /var/svn
 AuthType Basic
 AuthName "Subversion Repository"
 AuthUserFile /etc/apache2/dav_svn.passwd
 </Location>

In pratica abbiamo configurato il server per mostrare più di un progetto (SVNPath) ed abbiamo inserito l’autenticazione per il solo (commit) mentre chiunque può scaricare i sorgenti via web visitando la url http://<indirizzo ip>/svn

Ora creiamo il file dav_svn.passwd che servirà per associare <username> a <password> con il seguente comando

sudo htpasswd -cm /etc/apache2/dav_svn.passwd <username>

da usare solo quando si crea la prima volta il file (modificatore -c) in seguito, per aggiungere un utente, potremo usare :

sudo htpasswd -m /etc/apache2/dav_svn.passwd <username>

il tool ci chiederà d’inserire la password. Al termine un bel :

sudo /etc/init.d/apache2 restart

Ora, ipotizziamo di volere importare il nostro progetto, al quale stiamo lavorando da tempo, e che vogliamo condividere.

Innanzitutto copiamo la directory con i file e poi :

svn import /path/directory/origine file:///var/svn/mioprogetto -m “Prima importazione”

ed ora, immaginando che il nostro sia un progetto di un applicativo web, creeremo la directory di destinazione in /var/www, quindi :

sudo mkdir /var/www/mioprogetto

e poi realizziamo il checkout del progetto al suo interno

svn checkout http://<indirizzo ip repository> /var/www/mioprogetto

aggiustiamo i diritti :

sudo chown -R www-data:www-data /var/www/mioprogetto

Ovviamente ogni volta che effettuerete una modifica ad un file in fase di commit non andrà in /var/www/mioprogetto bensì verrà salvato in /var/svn/mioprogetto

sarà per questo che subito dopo il commit dovrete realizzare l’update del file con un :

cd /var/www/mioprogetto
svn update

Buon versioning a tutti !!!