Rieccoci con il nostro tutorial sui repository svn, prima abbiamo visto cosa sono questi repository cvs/svn, adesso che sappiamo anche il principio di funzionamento possiamo iniziare a vedere cosa dobbiamo fare per crearne uno.
Con questa ultima parte vedremo che software ci serve per avere un repository di tipo SVN, con autenticazione tramite set di chiavi pubbliche/private, su tunnel ssh.
L’accesso visivo sarà garantito da un estensione di apache che ci consentirà di effettuare il browsing del repository via web con il nostro browser.
Installazione dei pacchetti
I pacchetti che ci servono sono solo due:
:~# apt-get update
:~# apt-get install subversion libapache2-svn
con l’ultimo pacchetto ci tireremo dietro come dipendenza anche il modulo di apache per svn webdav.
Preparazione del filesystem
In questo tutorial creeremo un solo repository e per comodità lo metteremo nella home dell’utente root.
:~# mkdir /root/svn-repo/
:~# svnadmin create –fs-type fsfs /root/svn-repo/progetto1
Adesso dobbiamo settare le cartelle con i permessi adeguati, siccome dare i permessi all’utente www-data sarebbe troppo poco sicuro, creeremo un gruppo chiamato subversion e dentro inseriremo gli utenti di sistema che dovranno avere accesso al repository.
:~# groupadd subversion
:~# addgroup mario subversion
:~# addgroup alex subversion
:~# chown -R www-data:subversion /root/svn-repo
:~# chmod -R 570 /root/svn-repo
Preparazione delle chiavi per autenticazione ssh
Finita la preparazione del filesystem e la creazione del repository vero e proprio, dobbiamo garantire l’accesso tramite un canale abbastanza sicuro al repository stesso, da parte degli utenti. Per far questo ci appoggiamo ad ssh, ma per semplificare le operazioni di autenticazione creeremo un set di chiavi DSA pubblica/privata, in modo che l’autenticazione avvenga senza richiesta di password; ricordiamoci di NON inserire una password durante la procedura di creazione chiavi altrimenti saremo punto e a capo.
L’operazione è da compiere con tutti gli utenti del sistema che dovranno accedere al repository.
:~# su mario
:~$ mkdir ~/.ssh
:~$ cd ~/.ssh
:~/.ssh$ ssh-keygen -t dsa
:~/.ssh$ cat id_dsa.pub|ssh mario@server.ext "cat – >> ~/.ssh/authorized_keys"
server.ext ovviamente è il nome host del server che stiamo usando. Ripetiamo la stessa operazione per ogni utente e poi testiamo il funzionamento.
:~$ mkdir ~/TEMP
:~$ echo "test del repository" > ~/TEMP/test.txt
:~$ svn import -m "importo il file di test su svn+ssh" ~/TEMP/ svn+ssh://server.ext/root/svn-repo/progetto1/trunk
:~$ svn co svn-ssh://server.ext/root/svn-repo/progetto1/trunk testcheckout
seguendo questi comandi dovremmo ritrovarci alla fine una cartella chiamata testcheckout con dentro un file test.txt con dentro scritto "test del repository", ce l’avete? complimenti il vostro repository funziona allora
Lato server possiamo dare un occhio all’intero repository lanciando il comando:
:~# svnlook tree /root/svn-repo/progetto1
Configurazione di WebDAV per il browsing via HTTP
Adesso che il repository è a posto potremmo voler garantire l’accesso (in sola lettura ovviamente), ai client via l’utilizzo di un normale browser internet, abilitiamo i moduli di apache che ci servono:
:~# a2enmod dav
:~# a2enmod dav_svn
tutta la configurazione la possiamo controllare in /etc/apache2/mods-available/dav_svn.conf. Eventualmente potremmo voler garantire l’accesso web solo agli utenti che effettivamente devono utilizzare il repository, per farlo creiamo un file .htpasswd inserendoci gli utenti da noi interessati:
:~# htpasswd2 -c /etc/apache2/dav_svn.passwd mario
:~# htpasswd2 /etc/apache2/dav_svn.passwd alex
adesso l’accesso web è garantito solo agli utenti mario ed alex, e questi dovranno inserire le proprie credenziali di accesso al server per vedere il repository svn anche via web. Di seguito un esempio del file /etc/apache2/mods-available/dav_svn.conf:
<Location /svn_progetto1>
DAV svn
SVNpath /root/svn-repo/progetto1
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/apache2/dav_svn.passwd
Require valid-user
SSLRequireSSL
</Location>
Com’è facile intuire con la direttiva RequireSSL forziamo l’accesso solo tramite HTTPS, commentandola otterremo l’accesso solo tramite HTTP.
Adesso possiamo testare da un pc client l’accesso remoto via https:
:~$ svn import -m "test import via https" https://server.ext/svn_progetto1 ~/TEMP
con webdav abbiamo un browsing molto semplicistico del repository, se utilizziamo invece tool quali websvn possiamo ottenere un controllo più completo del repository via browser.
Installazione e configurazione di WebSVN
Installiamo questi due pacchetti:
:~# apt-get install enscript websvn
enscript non è necessario, ma lo utilizzeremo per ottenere la colorazione dei caratteri su websvn.
Durante la configurazione di websvn ci verranno poste alcune domande, alla prima "quale tipo di server vuoi configurare" possiamo premere semplicemente Invio ed andare avanti; la seconda domanda ci chiede il path del repository e noi dovremo impostare /root/svn-repo, ed inoltre ci verranno richieste le cartelle specifiche dei progetti, utile per decidere quali progetti pubblicare su websvn e quali no.
Alla fine della configurazione avremo creato un file di configurazione dentro /etc/websvn/svn_deb_conf.inc; ulteriori configurazioni possono essere fatte tramite il file /etc/websvn/config.inc, un esempio di quest’ultimo file è il seguente:
<?php
// — LOOK AND FEEL —
//
// Uncomment ONLY the display file that you want.
$config->setTemplatePath("$locwebsvnreal/templates/Standard/");
// $config->setTemplatePath("$locwebsvnreal/templates/BlueGrey/");
// $config->setTemplatePath("$locwebsvnreal/templates/Zinn/");
// $contentType[".c"] = "plain/text"; // Create a new association
// $contentType[".doc"] = "plain/text"; // Modify an existing one
unset($contentType[".sh"]); // Remove a default association -> .sh
// is regarded as a binary file by default, needs to be unset
// — COLOURISATION —
// Uncomment this line if you want to use Enscript to colourise your file listings
//
// You’ll need Enscript version 1.6 or higher AND Sed installed to use this feature.
// Set the path above.
//
$config->useEnscript();
// Enscript need to be told what the contents of a file are so that it can be colourised
// correctly. WebSVN includes a predefined list of mappings from file extension to Enscript
// file type (viewable in setup.inc).
//
// Here you should add and other extensions not already listed or redefine the default ones. eg:
//
// php is default correctly colourized
$extEnscript[".java"] = "java";
$extEnscript[".pl"] = "perl";
$extEnscript[".py"] = "python";
$extEnscript[".sql"] = "sql";
$extEnscript[".java"] = "java";
$extEnscript[".html"] = "html";
$extEnscript[".xml"] = "html";
$extEnscript[".thtml"] = "html";
$extEnscript[".tpl"] = "html";
$extEnscript[".sh"] = "bash";
// — MISCELLANOUS —
// Uncomment this if you don’t have the right to use it. Be warned that you may need it however!
set_time_limit(0);
// Comment this line to turn off caching of repo information. This will slow down your browsing.
$config->setCachingOn();
// Number of spaces to expand tabs to in diff/listing view across all repositories
$config->expandTabsBy(8);
// To change the global option for individual repositories, uncomment and replicate
// the required line below (replacing ‘myrep’ for the name of the repository to be changed).
// $config->findRepository("myrep")->expandTabsBy(3); // Expand Tabs by 3 for repository ‘myrep’
?>
<?php
if ( file_exists("/etc/websvn/svn_deb_conf.inc") ) {
include("/etc/websvn/svn_deb_conf.inc");
}
?>
Adesso è il turno del virtualhost di apache per websvn:
<VirtualHost *:443>
ServerAdmin webmaster@server.ext
ServerName svn.server.ext
DocumentRoot /var/www/websvn/
<Location />
Options FollowSymLinks
order allow,deny
allow from all
AuthType Basic
AuthName "Subversion Repository"
Require valid-user
AuthUserFile /etc/apache2/dav_svn.passwd
<IfModule mod_php4.c>
php_flag magic_quotes_gpc Off
php_flag track_vars On
</IfModule>
</Location>
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.pem
</VirtualHost>
Fatto? Ok adesso riavviate apache…
:~# /etc/init.d/apache2 restart
e date un occhiata al vostro bel repository all’indirizzo https://svn.server.ext
Articoli (forse) correlati:













































January 28th, 2009 at 3:07 PM
Ottima guida,
grazie alessà
Ottima guida,
grazie alessà
January 28th, 2009 at 3:10 PM
Ottima guida
Lo so…
Lo so… :cool
prego