{"id":51,"date":"2016-06-19T23:11:58","date_gmt":"2016-06-19T21:11:58","guid":{"rendered":"http:\/\/www.forlex.it\/blog\/?p=51"},"modified":"2016-06-19T23:11:58","modified_gmt":"2016-06-19T21:11:58","slug":"server-di-versioni-con-ubuntu","status":"publish","type":"post","link":"http:\/\/www.forlex.it\/index.php\/2016\/06\/19\/server-di-versioni-con-ubuntu\/","title":{"rendered":"Server di Versioni con Ubuntu"},"content":{"rendered":"<p style=\"text-align: justify;\">In Informatica ed in particolare in programmazione, si \u00e8 spesso coinvolti in progetti in cui il singolo programmatore si trova a dare il proprio contributo in progetti gi\u00e0 definiti. Un esempio tipico \u00e8 il mondo dell&#8217;Open Source dove vi sono progetti, composti da diverse decine (se non centinaia) di file, che vengono messi a disposizione delle comunit\u00e0. Quando il singolo sviluppatore \u00e8 interessato a questi file, per motivi che possono andare dalla pura curiosit\u00e0 alla volont\u00e0 di contribuire inserendo migliorie piuttosto che correggendo qualche bug, si trova ad avere a che fare con il &#8220;versioning&#8221; di un applicativo. In breve si trova a dover usare un apposito software che gli permetter\u00e0 di ricevere l&#8217;ultima versione dei file che lo compongono nonch\u00e8, nel caso ne abbia modificato\/aggiunto qualcuno, di uploadare ed aggiornare la versione di quelli ri-elaborati da lui.<\/p>\n<p style=\"text-align: justify;\">Il server che \u00e8 storicamente utilizzato, ma che ora ha ceduto il passo, \u00e8 <a href=\"http:\/\/www.nongnu.org\/cvs\/\">CVS (<\/a><a href=\"http:\/\/www.nongnu.org\/cvs\/\">Concurrent Versions System<\/a><a href=\"http:\/\/www.nongnu.org\/cvs\/\">)<\/a>. Ad oggi un server molto utilizzato \u00e8 <a href=\"http:\/\/subversion.tigris.org\/\">Subversion<\/a>.<\/p>\n<p style=\"text-align: justify;\">Quest&#8217;ultimo risulta molto semplice anche installarlo, ecco i brevi passi che occorre compiere, partendo da una installazione base di Ubuntu Server:<\/p>\n<p>Installiamo quanto serve<\/p>\n<div>\n<pre>sudo a2enmod dav_svn<\/pre>\n<p>creiamo ora il nostro repository in una directory nuova (usiamo \/var perch\u00e8 \u00e8 istituzionalmente la directory dove si memorizzano tipologie di contenuti<\/p>\n<p>che richiedono pi\u00f9 spazio)<\/p>\n<div>\n<pre>sudo svnadmin create \/var\/svn<\/pre>\n<p>aggiustiamo i diritti di scrittura\/lettura per Apache sulla directory creata<\/p>\n<pre>sudo chown -R www-data:www-data \/var\/svn<\/pre>\n<p>ed ora configuriamo il nostro server personalizzando il file di configurazione<\/p>\n<pre>sudo vi \/etc\/apache2\/mods-enabled\/dav_svn.conf<\/pre>\n<div>de-commentiamo alcuni tag cos\u00ec da ottenere la seguente configurazione<\/div>\n<pre>&lt;Location \/svn&gt;\r\n DAV svn\r\n SVNParentPath \/var\/svn\r\n AuthType Basic\r\n AuthName \"Subversion Repository\"\r\n AuthUserFile \/etc\/apache2\/dav_svn.passwd\r\n &lt;\/Location&gt;<\/pre>\n<p>In pratica abbiamo configurato il server per mostrare pi\u00f9 di un progetto (SVNPath) ed abbiamo inserito l&#8217;autenticazione per il solo (commit) mentre chiunque pu\u00f2 scaricare i sorgenti via web visitando la url http:\/\/&lt;indirizzo ip&gt;\/svn<\/p>\n<p>Ora creiamo il file\u00a0dav_svn.passwd che servir\u00e0 per associare &lt;username&gt; a &lt;password&gt; con il seguente comando<\/p>\n<pre>sudo htpasswd -cm \/etc\/apache2\/dav_svn.passwd &lt;username&gt;<\/pre>\n<p>da usare solo quando si crea la prima volta il file (modificatore -c) in seguito, per aggiungere un utente, potremo usare :<\/p>\n<div>\n<pre>sudo htpasswd -m \/etc\/apache2\/dav_svn.passwd &lt;username&gt;<\/pre>\n<p>il tool ci chieder\u00e0 d&#8217;inserire la password. Al termine un bel :<\/p>\n<pre>sudo \/etc\/init.d\/apache2 restart<\/pre>\n<p>Ora, ipotizziamo di volere importare il nostro progetto, al quale stiamo lavorando da tempo, e che vogliamo condividere.<\/p>\n<p>Innanzitutto copiamo la directory con i file e poi :<\/p>\n<pre>svn import \/path\/directory\/origine file<a href=\"http:\/\/repository -m\">:\/\/\/var\/svn\/mioprogetto -m<\/a> \u201cPrima importazione\u201d<\/pre>\n<p>ed ora, immaginando che il nostro sia un progetto di un applicativo web, creeremo la directory di destinazione in \/var\/www, quindi :<\/p>\n<pre>sudo mkdir \/var\/www\/mioprogetto<\/pre>\n<p>e poi realizziamo il checkout del progetto al suo interno<\/p>\n<pre>svn checkout http:\/\/&lt;indirizzo ip repository&gt; \/var\/www\/mioprogetto<\/pre>\n<p>aggiustiamo i diritti :<\/p>\n<pre>sudo chown -R www-data:www-data \/var\/www\/mioprogetto<\/pre>\n<p>Ovviamente ogni volta che effettuerete una modifica ad un file in fase di commit non andr\u00e0 in \/var\/www\/mioprogetto bens\u00ec verr\u00e0 salvato in \/var\/svn\/mioprogetto<\/p>\n<p>sar\u00e0 per questo che subito dopo il commit dovrete realizzare l&#8217;update del file con un :<\/p>\n<pre>cd \/var\/www\/mioprogetto\r\nsvn update<\/pre>\n<p>Buon versioning a tutti !!!<\/p>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>In Informatica ed in particolare in programmazione, si \u00e8 spesso coinvolti in progetti in cui il singolo programmatore si trova a dare il proprio contributo in progetti gi\u00e0 definiti. Un esempio tipico \u00e8 il mondo dell&#8217;Open Source dove vi sono &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"\" href=\"http:\/\/www.forlex.it\/index.php\/2016\/06\/19\/server-di-versioni-con-ubuntu\/\"> <span class=\"screen-reader-text\">Server di Versioni con Ubuntu<\/span> Read More &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[6],"tags":[],"_links":{"self":[{"href":"http:\/\/www.forlex.it\/index.php\/wp-json\/wp\/v2\/posts\/51"}],"collection":[{"href":"http:\/\/www.forlex.it\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.forlex.it\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.forlex.it\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.forlex.it\/index.php\/wp-json\/wp\/v2\/comments?post=51"}],"version-history":[{"count":6,"href":"http:\/\/www.forlex.it\/index.php\/wp-json\/wp\/v2\/posts\/51\/revisions"}],"predecessor-version":[{"id":59,"href":"http:\/\/www.forlex.it\/index.php\/wp-json\/wp\/v2\/posts\/51\/revisions\/59"}],"wp:attachment":[{"href":"http:\/\/www.forlex.it\/index.php\/wp-json\/wp\/v2\/media?parent=51"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.forlex.it\/index.php\/wp-json\/wp\/v2\/categories?post=51"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.forlex.it\/index.php\/wp-json\/wp\/v2\/tags?post=51"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}