## Ssitemi per il controllo della versione

Il controllo della versione è l'arte della gestione dell'evolversi delle informazioni. È stato a lungo uno strumento critico per i programmatori, che spendono il loro tempo apportando piccole modifiche al software per poi cancellarle il giorno seguente. Ma l'utilità del software per il controllo della versione va oltre il mondo dello sviluppo di programmi. Ovunque si incontrino persone che utilizzino il computer per gestire informazioni in continuo cambiamento c'è posto per il controllo della versione.

### Subversion

Subversion è un software open source per il controllo della versione. Utilizzando Subversion è possibile registrare la storia del codice sorgente e dei documenti. È in grado di gestire l'evolversi di file e directory nel tempo. Nel repository centrale viene posizionato un albero di tutti i file. Il repository è come un server di file, tranne per il fatto che si ricorda qualsiasi cambiamento apportato.

#### Installazione

Per accedere al repository di Subversion utilizzando il protocollo HTTP, è necessario installare e configurare un server web. Apache2 funziona molto bene con Subversion. Fare riferimento alla sottosezione HTTP nella sezione Apache2 per installare e configurare un certificato digitale.

Per installare Subversion, in un terminale, digitare:

    sudo apt-get install subversion libapache2-svn

#### Configurazione del server

I passi seguenti presumono siano stati installati i pacchetti elencati precedentemente. Questa sezione descrive come creare un repository con Subversion e accedere al progetto.

##### Creare un repository con Subversion

Un repository può essere creato con il seguente comando:

    svnadmin create /posizione/del/repository/project

#### Metodi di accesso

È possibile accedere ai repository di Subversion in molti modi, dal disco locale o attraverso diversi protocolli di rete. La posizione di un repository è comunque sempre un URL. La tabella seguente descrive come i diversi schemi URL corrispondano ai metodi di accesso disponibili.

Tabella 4.1. Metodi di accesso

Schema | Metodo di accesso
--- | ---
file:// | Accesso diretto al repository (sul disco locale)
http:// | Accesso attraverso il protocollo WebDAV al server web Apache2 di Subversion
https:// | Come http://, ma con cifratura SSL
svn:// | Accesso attraverso un protocollo personalizzato a un server svnserve
svn+ssh:// | Come svn://, ma attraverso un tunnel SSH

In questa sezione viene descritto come configurare Subversion per tutti questi metodi. Saranno descritte solo gli elementi basilari. Per maggiori dettagli, fare riferimento al libro di svn.

##### Accesso diretto al repository (file://)

Questo è il metodo di accesso più semplice. Non necessita di alcun server di Subversion in esecuzione. Questo metodo serve per accedere a Subversione dalla stessa macchina in cui è in esecuzione. La sintassi del comando è la seguente:

    svn co file:///percorso/del/repository/progetto

o

    svn co file://localhost/percorso/del/repository/progetto

Se non viene specificato l'host, è necessario utilizzare tre slash (///), due per il protocollo (in questo caso file) e uno è lo slash iniziale del percorso. Se viene specificato l'host, utilizzare due slash (//).

I permessi di accesso al repository dipendono dai permessi impostati nel file system. Se l'utente possiede i permessi di scrittura e lettura, allora potrà eseguire checkout e commit al repository.

##### Accesso con il protocollo WebDAV (http://)

Per accedere la repository di Subversion utilizzando il protocollo WebDAV, è necessario configurare il server web Apache2. Aggiungere quanto segue al file `/etc/apache2/apache2.conf`:

     <Location /svn>
      DAV svn
      SVNPath /path/to/repos
      AuthType Basic
      AuthName "Your repository name"
      AuthUserFile /etc/subversion/passwd
      <LimitExcept GET PROPFIND OPTIONS REPORT>
      Require valid-user
      </LimitExcept>
      </Location>

È quindi necessario creare il file `/etc/subversion/passwd`. Questo file contiene le informazioni per l'autenticazione dell'utente. Per aggiungere una voce, per aggiungere un utente, è possibile utilizzare il seguente comando:

    htpasswd2 /etc/subversion/passwd user_name

Verrà richiesta la password. Una volta inerita, l'utente viene aggiunto al file. Ora, per accedere al repository, digitare:

                    svn co http://servername/svn

La password viene trasmessa come testo in chiaro. Per evitare attacchi di tipo password snooping, è necessario utilizzare la cifratura SSL. Per maggiori informazioni fare riferimento alla sezione seguente.

##### Accesso con protocollo WebDAV protetto da cifratura SSL (https://)

L'accesso al repository di Subversion attraverso il protocollo WebDAV con cifratura SSL (https://) è simile a http:// tranne per il fatto che è necessario installare e configurare un certificato digitale per il server Apache2.

È possibile installare un certificato digitale emesso da un'autorità di certificazione come Verisign. In alternativa è possibile installare i propri certificati auto-firmati.

I passi seguenti hanno come presupposto l'installazione di un certificato digitale all'interno del server web Apache2. Ora, per accedere a un repository Subversion, fare riferimento alla sezione precedente. I metodi di accesso sono esattamente gli stessi, tranne il protocollo. È necessario utilizzare https:// per accedere al repository.

##### Accesso con il protocollo personalizzato (svn://)

Una volta creato il repository è possibile configurare il controllo degli accessi modificando il file `/path/to/repos/project/conf/svnserve.conf`. Per esempio, per impostare l'autenticazione, togliere i commenti alle seguenti righe presenti nel file di configurazione:

    # [general]
    # password-db = passwd

Dopo aver tolto i commenti alle righe precedenti, è possibile gestire la lista degli utenti nel file passwd. Modificare il file `passwd` presente nella directory e inserire il nuovo utente. La sintassi da usare è la seguente:

    username = password

Per maggiori informazioni fare riferimento al file.

Per accedere a Subversion attraverso il protocollo svn://, sia dalla stessa macchina sia da un'altra macchina, avviare svnserver utilizzando il comando svnserve. La sintassi è la seguente:

    $ svnserve -d --foreground -r /path/al/repository
    # -d -- daemon mode
    # --foreground -- run in foreground (useful for debugging)
    # -r -- root of directory to serve

    Per ulteriori dettagli sull'utilizzo fare riferimento a:
    $ svnserve --help

Una volta eseguito questo comando, Subversion si mette in ascolto sulla porta predefinita (3690). Per accedere al repository del progetto, è necessario eseguire, da un terminale, il seguente comando:

    svn co svn://hostname/project project --username nome_utente

In base alla configurazione del server, verrà richiesta la password. Una volta autenticati, viene eseguito il check out del codice dal repository di Subversion. Per sincronizzare il repository del progetto con la copia locale, è possibile eseguire il comando update. La sintassi del comando è la seguente:

    cd project_dir ; svn update

Per maggiori informazioni sui sotto comandi di Subversion fare riferimento al manuale. Per esempio, per informazioni sul comando co (checkout), al prompt dei comandi digitare:

                    svn co help

##### Accesso con protocollo personalizzato a cifratura SSL (svn+ssh://)

La configurazione e le procedure sono le medesime del metodo svn:// . Per i dettagli consultare la sezione precedente. Questo passaggio prevede che si sia seguita la procedura precedente e il server Subversion sia stato avviato con il comando svnserve.

Si suppone che il server ssh sia in esecuzione sulla macchina e che accetti connessioni in entrata. Per una conferma, provare a collegarsi alla macchina attraverso SSH. Se il login viene eseguito, tutto è configurato. In caso contrario configurare SSH.

Il protocollo svn+ssh:// è utilizzato per accedere al repository di Subversion usando la cifratura SSL. I dati che vengono trasmessi sono cifrati con questo metodo. Per accedere al repository del progetto (per esempio attraverso un checkout), utilizzare, con il comando, la sintassi seguente:

    svn co svn+ssh://hostname/var/svn/repos/project

È necessario utilizzare il percorso completo (/path/al/repository/progetto) per accedere al repository di Subversion utilizzando questo metodo di accesso.

In base alla configurazione del server, viene richiesta la password. Utilizzare la password per il login con SSH. Una volta autenticati, viene fatto il checkout del codice dal repository di Subverison.

### Server CVS

CVS è un sistema di controllo della versione. È possibile utilizzarlo per registrare i cambiamenti al codice sorgente di un programma.

#### Installazione

Per installare cvs al prompt dei comandi digitare:

    sudo apt-get install cvs

Dopo aver installato cvs, si dovrebbe installare xinetd per avviare o fermare il server cvs. Per installare xinetd digitare:

    sudo apt-get install xinetd

#### Configurazione

Una volta installato CVS, il repository viene automaticamente inizializzato. In modo predefinito, risiede nella directory /var/lib/cvs. È possbile modificare questo percorso attraverso il seguente comando:

    cvs -d /your/new/cvs/repo init

Una volta configurato il repository iniziale, è possibile configurare xinetd per avviare il server CVS. È possibile copiare le seguetni righe nel file `/etc/xinetd/cvspserver`.

    service cvspserver
    {
         port = 2401
         socket_type = stream
         protocol = tcp
         user = root
         wait = no
         type = UNLISTED
         server = /usr/bin/cvs
         server_args = -f --allow-root /var/lib/cvs pserver
         disable = no
    }

Assicurarsi di modificare il repository nel caso in cui si sia modificata la directory predefinita del repository (/var/lib/cvs).

Quando si è configurato anche xinetd è possibile avviare il server CVS con il seguente comando:

    sudo /etc/init.d/xinetd start

Per avere la conferma che il server CVS sia avviato digitare il seguente comando:

    sudo netstat -tap | grep cvs

L'output del comando precedente dovrebbe essere:

    tcp 0 0 *:cvspserver *:* LISTEN

A questo punto è possibile aggiungere altri utenti, nuovi progetti e gestire il server CVS.

CVS consente di aggiungere nuovi utenti indipendentemente dal sistema operativo. Il modo più semplice è utilizzare l'utente Linux per CVS, benché presenti dei problemi di sicurezza. Consultare il manuale di CVS per maggiori dettagli.

#### Aggiungere progetti

Questa sezione illustra come aggiungere nuovi progetti a un repository CVS, creare la directory, aggiungervi i documenti necessari e i file sorgente. A questo punto, eseguire le seguenti istruzioni per aggiungere un progetto al repository CVS:

    cd your/project
    cvs import -d :pserver:username@hostname.com:/var/lib/cvs -m "Importing my project to CVS repository" . new_project start

È possibile utilizzare la variabile d'ambiente CVSROOT per memorizzare la directory root d iCVS. Una volta esportata la variabile CVSROOT, si può evitare di utilizzare l'opzione -d nel comando precedente.

. La stringa new_project, è un tag di vendita, mentre la stringa start è una stringa di rilascio. Non servono a nulla nel contesto presente, ma visto che CVS le richiede, vanno inserite.

Quando si aggiunge un nuovo progetto, l'utente CVS deve avere i permessi di scrittura per il repository CVS (/var/lib/cvs). In modo predefinito, il gruppo src possiede tali permessi. Basta semplicemente aggiungere l'utente a questo gruppo per permettergli di gestire progetti in un repository CVS.

### Riferimenti

Home page di Subversion

Libro su Subversion

Manuale CVS

Squid - Server proxy |  | Database