Exemple d’instalació de subversion


Feia temps que em volia muntar un sistema de control de versions i ja tenia nyipat el subversion. Només faltava posar-s’hi i dedicar-li un poc de temps a deixar-lo al meu gust.

Subversion és un sistema molt potent a l’hora que flexible. Per fer-lo servir tenim infinitat de possibilitats més o menys complicades en funció de les nostres necessitats. Com sempre, cal establir un compromís entre prestacions, dificultat i cost de manteniment.

En aquest article expos breument el compromís que he triat jo pel cas que m’ocupava; explic els passos a seguir per tenir-ho tot funcionant en un no res , resumesc, a manera de referència ràpida, les comandes més comunes que habitualment farem servir i, finalment, mencion alguns dels clients gràfics més usuals per manetjar-se més còmodament amb els repositoris subversion.

.capcalera {background:#FFFF8B; vertical-align:bottom;}
.linia {background:#D7DEFF; vertical-align:top;}
ul li span {font-weight:bold;}

Índex:

  • Introducció
    • Requisits
    • Sol·lució adoptada
  • Instal·lació
  • Configuració
  • Notes d’ús
    • Resum de comandes comunes
    • Cicle de treball típic
    • Llegenda d’indicadors
  • Enllaços
    • Manuals i documentació
    • Front-en gràfics

Introducció:
En primer lloc diré que tota la documentació necessària, tant per posar en marxa un repositori subversion, com per fer-lo servir com a client, la podeu trobar al Manual de Subversion(1). Aquest document només és una guia ràpida per montar i utilitzar la configuració que jo necessitava i que pas a descriure tot seguit:
Requisits:

  • Poder albergar varis projectes i crear-ne de nous sense gaïre complicació. Però no cal que els usuaris puguin fer-ho. Basta amb els administradors.
  • Poder accedir, tant per lectura com per escriptura, als repositoris des de la xarxa (LAN i/o Internet).
  • Poder restringir l’accés per lectura i/o escriptura en els accessos per xarxa als repositoris o a determinats subdirectoris d’aquests en funció de l’usuari. Els usuaris no accediràn localment des del servidor perquè no hi tenen compte. Tampoc és necessari que hi hagi usuaris privilegiats que puguin atorgar/retirar permisos. La gestió dels privilegis la poden fer perfèctament els administradors del servidor.

Sol·lució adoptada:
Per cobrir els objectíus marcats, hem optat per una instalació senzilla de subversion i accés remot via http/web-dav (dav_svn_module) amb el mòdul web-dav-svn per Apache2*. Necessitam Apache2 perque web-dav-svn no està disponible per Apache 1.
L’autenticació la resolem amb el sistema d’autenticació natíu d’Apache i el control de restriccións el fem mitjançant el mòdul authz_svn_module (tots dos mòduls al paquet libapache2-svn en Debian) que ens permet, mitjançant un senzill fitxer de text, atorngar o restringir drets de lectura i/o escriptura als diferents usuaris sobre directoris concrets dels repositoris.
En aquest plantejament senzill, tenim únicament tres elements en joc, que podem ubicar al lloc que considerem més oportú:

  • Els repositoris.
  • El fitxer amb els comptes d’usuari vàlids (nom d’usuari i clau d’accés)
  • El fitxer amb les definicions de permisos d’accés.

Per simplicitat, i per major facilitat a l’hora de fer un backup global, els repositoris s’han agrupat tots baix un únic directori. En el nostre cas en un disc habilitat ‘ad-hoc’ per albergar-los que hem montat a /var/svn.
Donat que hi pot arribar a haver un número considerable d’usuaris del repositori, hem decidit ubicar el fitxer de permisos dins el mateix disc per tal de fer backup de tot de cop. Així els repositoris, finalment, els hem posat baix /var/svn/repos i el fitxer de permisos l’hem ubicat a /var/svn/access.
El fitxer amb els comptes d’usuari, en contenir informació més sensible i, en no ser vital aquesta (en cas de desastre es podrien tornar a crear un per un sense que suposàs un trauma greu) hem preferit deixar-lo a /etc (/etc/svn-auth-file). Però això és totalment opcional.
Per a la resta de l’article suposarem la configuració exposada aquí. Però fàcilment es poden canviar les ubicacions tant dels repositoris com dels fitxers, si així es creu convenient.

Instal·lació:

  • Instalam el sofware al servidor:
    # apt-get install subversion apache2 libapache2-svn
  • Si teniem l’Apache 1 instalat i no volem migrar els serveïs que ja tenim en marxa a Apache 2, canviarem el port ón escolta l’Apache2. Per això editarem el fitxer /etc/apache2/ports.conf. Cercarem la línia ‘Listen’, eliminarem el ’80’ (port http) i afegirem un número de port lliure a la nostra elecció (per exemple el 8080).
  • Cream el directori ón volem emmagatzemar els repositoris (per exemple /var/svn/repos:
    # mkdir -p /var/svn/repos
  • Donat que, principalment, pensam accedir al repositori via http (amb l’extensió dav-svn), canviarem el propietari i grup de l’arbre a www-data.
    # chown -R www-data:www-data /var/svn
  • Configuració:

  • Configuració d’apache2:
    • Cream el lloc web posant el següent contingut al fitxer /etc/apache2/sites-availible/svn:

      <Location /svn>
        DAV svn
        # Qualsevol url del tipus “/svn/foo” es mapejarà al repositori /var/svn/repos/foo
        SVNParentPath /var/svn/repos

        # Fitxer de política d’accés
        AuthzSVNAccessFile /var/svn/access

        # Només els usuaris autenticats poden accedir al repositori
        Require valid-user

        # Tipus d’autenticació d’usuari
        AuthType Basic
        AuthName “Repositori Subversion”
        AuthUserFile /etc/svn-auth-file
      </Location>

    • Activam el lloc web:
      # ln -s /etc/apache2/sites-available/svn /etc/apache2/sites-enabled/svn
    • Rearrancam Apache2 perquè els canvis surtin efecte:
      # /etc/init.d/apache2 restart
  • Creació dels usuaris que accediràn al repositori.
    • Cream el primer usuari (-c crea el fitxer, -m registra el password en md5):
      # htpasswd -cm /etc/svn-auth-file nomusuari
    • Cream els altres usuaris (notau que el fitxer de passwords és el que hem especificat abans a la configuració del lloc web):
      # htpasswd -m /etc/svn-auth-file nomusuari
  • Creació dels repositoris (Vegeu el resum de comandes comunes).
    • Per crear un repositori abans ens convertirem en l’usuari www-data per evitar problemes de permisos en accedir-hi via http. També podriem canviar el propietari i grup posteriorment, però si n’hem de crear varis de cop ens serà més còmode així.

      # su www-data
      $ cd /var/svn/repos/
      $ svnadmin create nom_del_repositori

  • Assignació de permisos als usuaris.
    • Per assignar permisos als diferents usuaris sobre els repositoris o sobre subdirectoris d’aquests editarem el fitxer /var/svn/access que hem especificat a la configuració del lloc web. L’hem posat aquí per facilitar fer backup també dels drets que té cada usuari. També hi podriem haver posat el de passwords, però aquesta informació, a més de ser més sensible, es pot recuperar (o fins i tot regenerar) més fàcilment després d’un desastre.
    • Inicialment només té sentit donar accés a l’arrel del repositori a algún usuari perque pugui pujar la primera còpia de les dades:

      [nom_repositori:/]
      nom_usuari = rw

    • Posteriorment ja s’afinaràn els permisos de cada usuari sobre els directoris que interessi. Un exemple més elaborat:

      [projecte1:/]
      admin = rw
      supervisor = r

      [projecte1:/imatges]
      dissenyador = rw
      programador = r

      [projecte1:/fonts]
      programador = rw

    Notes d’ús
    Resum de comandes comunes:

    ComandaComentari

    svnadmin create /cami/al/repositori

    Crea un repositori.

    svn import /cami/al/projecte file:///cami/al/repositori -m “Comentari”

    Puja l’arbre del projecte.

    svn checkout file:///cami/al/repositori/trunk nom_directori

    Crea una nova còpia de treball.

    svn diff

    Dins el directori de la còpia de treball, mostra les diferències amb el repositori.

    svn commit

    Puja les modificacións al repositori.

    svn update

    Sincronitza la còpia de treball amb el repositori.

    svn revert nomfitxer

    Reverteix les modificacions fetes al fitxer. No requereix de connexió, però no recupera directoris esborrats.

    svn add nomfitxer
    svn add nomdirectori

    Activa el control de versions sobre el fitxer o directori especificat. En el cas d’un directori afegeix també tot el seu contingut. La informació s’afegirà al repositori al pròxim commit.

    svn cleanup

    Posa la còpia local en un estat consistent si s’ha interromput alguna operació inacabada.
    S’ha d’executar sempre que subversion digui que alguna part de la nostra copia de treball està bloquejada (locked).

    svn help

    Ajuda en línia.

    Cicle de treball típic:

    • Actualitzar la teva còpia de treball
      • svn update
    • Fer canvis
      • svn add – Afegir fitxers o directoris (i el seu contingut).
      • svn delete – Esborrar fitxers o directoris.
      • svn copy – Copiar fitxers o directoris.
      • svn move – Moure fitxers o directoris
    • Examinar els canvis
      • svn status
      • svn diff
      • svn revert
    • Convergir amb els canvis de tercers
      • svn merge
      • svn resolved
    • Entregar els canvis
      • svn commit

    (Font original(2))

    Llegenda d’Indicadors:

    U (Updated)Fitxer actualitzat (canvis registrats al servidor).
    A (Added)Fitxer o directori afegit a la còpia de treball.
    D (Deleted)Fitxer o directori eliminat de la còpia de treball.
    R (Replaced)Fitxer o directori reemplaçat a la còpia de treball. És a dir: eliminat i substituït per un de nou amb el mateix nom, però que el repositori el considerarà com un objecte distint amb diferentes històries.
    G (merGed)Tant el fitxer local com el del repositori han canviat, però Subversion els ha pogut fer convergir amb èxit.
    C (Conflicting)El fitxer rebut ha sofert canvis que entren en conflicte amb canvis a la còpia local. Serà necessària intervenció humana.

    Enllaços:
    Manuals i documentació:
    Manual de Subversion(1)
    Revoluciona tu código con Subversion(3)
    A quick start(4)
    Un altre howto (Howtoforge)(5)
    Front-end gràfics:
    eSVN(6)
    RapidSVN(7) (GTK)
    Tortoise SVN(8) (per a indígenes amb Hasefroch)
    Lista de enlaces de este artículo:

  • http://svnbook.red-bean.com/en/1.1/index.html
  • http://svnbook.red-bean.com/en/1.1/ch03s05.html
  • http://bulma.net/body.phtml?nIdNoticia=1985
  • http://svnbook.red-bean.com/en/1.1/ch01s07.html
  • http://www.howtoforge.com/debian_subversion_websvn
  • http://esvn.umputun.com/
  • http://rapidsvn.tigris.org/
  • http://tortoisesvn.tigris.org/
  • Este post ha sido traido de forma automatica desde https://web.archive.org/web/20140625063149/http:/bulma.net/body.phtml?nIdNoticia=2165 por un robot nigromante, si crees que puede mejorarse, por favor, contactanos.


    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.