Installare Subversion Gentoo – How To

Questa non è altro che una mera traduzione di un articolo http://www.rockfloat.com/howto/gentoo-subversion.html, veramente ben fatto che ha permesso anche a un impedito come me di installare subversion su una gentoo installata su una virtual machine che tuttora uso per ordinare i repository dei sorgenti di quasi tutti i miei lavori:

Ringrazio l’autore John McFarlane che mi ha permesso di pubblicare la traduzione per intero su questo blog.

  • 1. Installare Subversion e Apache
    Subversion supporta 2 formati per lo stoccaggio dei dati:
    1. FSFS (Filesystem)
    2. BDB (Berkeley DB)

    Poiche’ FSFS e’ diventato quello di default e non e’ piu’ necessario usare berkdb nello USE flag.Dobbiamo
    aggiungere il supporto per apache2 a /etc/make.confPer esempio:

    USE="apache2 postgres gd xml -X -gtk -gnome -qt -kde -alsa"

    Installiamo Subversion and Apache. Naturalmente se avete apache gia’ installato saltatelo:

    root# emerge -a subversion apache
  • 2. Settare gli utenti e i permessi per le directories
    #Creare un gruppo per l'accesso ssh ai repositories
    root# groupadd svnusers
    # Creare la directory dove ci saranno i repositories
    root# mkdir -p /var/svn/repos
    root# chmod -R 775 /var/svn/repos
    root# mkdir /var/svn/conf
    #Aggiungere gli utenti che hanno bisogno di accedere ai repositories
    root# gpasswd -a apache svnusers
    #Aggiunge l'utente apache al gruppo svnusers
    root# gpasswd -a foouser svnusers
    #Aggiunge l'utente foouser al svnusers
  • 3. Avvio del servizio (per permettere l’accesso ssh )
    Eventualmente si potrebbe usare WEBDAV per l’accesso remoto,ma per ora usiamo ssh

    root# /etc/init.d/svnserve start
    root# rc-update add svnserve default
  • 4.Creare Un Repository di Test
    Un repository di test e’ un ottimo modo per testare con mano e capire come funzionano le cose!

    # Creare il test repository
    root# svnadmin create /var/svn/repos/test# Settare i permessi
    root# chown -R apache:svnusers /var/svn/repos/
    root# chmod -R g-w /var/svn/repos/test
    root# chmod -R g+rw /var/svn/repos/test/db
    root# chmod -R g+rw /var/svn/repos/test/locks
    # Aggiungere test directory e mostrarne i contenuti
    root# svn mkdir file:///var/svn/repos/test/foo -m "Creat test directory"
    root# svn ls file:///var/svn/repos/test/foo/
  • 5. Creare un progetto reale nel repository
    root# svnadmin create /var/svn/repos/your-project
    # Set permissions!
    root# chown -R apache:svnusers /var/svn/repos/your-project
    root# chmod -R g-w /var/svn/repos/your-project
    root# chmod -R g+rw /var/svn/repos/your-project/db
    root# chmod -R g+rw /var/svn/repos/your-project/locks
  • 6. Struttura tipica di un repository
    Una Struttura tipica di un repository e’ simile a questa:

    Project
    |--trunk
    |--tags
    |--branches

    1. Trunk e’ usato per mantenere tutte le modifiche fino alla data della versione stabile del vostro software.
    2. Tags e’ usato per le vecchie copie del software taggate alle varie milestones, per es. v1, v2, v3.
    3. Branches e’ usato per tutte le copie che pero’ sono ancora in sviluppo (per es. php4)… ma richiede una separazione e sarebbe necessaria un tutorial solo per spiegarle.[…]

  • 7. Mettere un progetto sotto il controllo di versione
    Occorre importare i file del progetto dentro il respository vostro-progetto. Qui verra’ come esempio verra’ usato il core di Apple Python files.

    • 1. Controllare che cosa si vuole mettere nel controllo di versione:
            user # cd /usr/lib/python2.4/site-packages/apple
            user # tree -a
            .
            |-- INSTALL
            |-- LICENSE
            |-- __init__.py
            |-- functions.py
            |-- functions_db.py
            |-- shell.py
            |-- test
            |   |-- __init__.py
            |   |-- files
            |   |   |-- null
            |   |   |-- services
            |   |   |-- rockfloat.conf
            |   |   `-- wget
            |   |       `-- wgetrc
            |   |-- test_all.py
            |   |-- test_functions.py
            |   `-- test_functions_db.py
            |-- www
            |   |-- __init__.py
            |   |-- filebrowser.py
            |   |-- html.py
            |   |-- next_previous.py
            |   |-- page.py
            |   |-- rss.py
            |   `-- user.py
            `-- xml_sax.py      4 directories, 22 files
    • 2. Prima di tutto voglio che il contenuto del mio progrtto vada nella trunk di /var/svn/repos/apple repository, e dovrei importarlo in questo modo:
            # Eseguire questo da un computer in remoto:
            user# cd /usr/lib/python2.4/site-packages/apple
            user# svn import . file:///var/svn/repos/apple/trunk -m 'Initial import'      Adding...
            Adding...
            Committed revision 1.
    • 3. Controllare i dati che sono stati immessi:
                root# svn ls file:///var/svn/repos/apple/trunk          INSTALL
                LICENSE
                __init__.py
                functions.py
                functions_db.py
                shell.py
                test/
                www/
                xml_sax.py
    • 4. fate un backup dei vostri dati prima del prossimo punto.
    • 5. Ora abbiamo bisogno di cancellare i sorgenti dal nostro computer *deep breath* (Fate un profondo respiro! LoL ndp) e estrarli nuovamente dal nostro repository.
      La ragione di tutto cio’ e’ perche’ tu non hai ora una directory di svn in locale. Tu hai importato i file dentro il server di svn occorre tirarne fuori una copia dai client per poterci lavorare.
      La differenza dei file sorgenti rispetto a prima e’ che in ogni directories del progetto c’e’ una .svn directory.
      Subversion usa questa cartella per fare tutto quello che deve fare in maniera veloce e pulita.
  • 8. Configurare Apache per supportare Svn allo startup
  • Update /etc/conf.d/apache2 by adding the following to the APACHE2_OPTS parameter:
    -D SVN -D SVN_AUTHZ -D DAV -D DAV_FS -D SSL -D SSL_DEFAULT_VHOST

    Per esempio:

    APACHE2_OPTS="-D PYTHON -D SSL -D SVN -D SVN_AUTHZ -D DAV -D DAV_FS"
  • 9. Creare un Apache password fileQuando un utente accede,subversion usa WEBDEV, L’autenticazione ora viene intercettata da apache.Per far si che apache faccia questa cosa occorre un file che
    controllare le password.E’ scontato che il file deve essere settato in scrittura solo da root!

    # Usare l'opzione -c per creare il file quando si aggiunge il primo utente
    root# htpasswd2 -c /var/svn/conf/svnusers foouser# Aggiungere un altro utente
    root# htpasswd2 /var/svn/conf/svnusers baruser
  • 10. Creare una policy per SVN dentro a un file
  • Il supporto per i diritti degli utenti è fantastico.
    Ti permette di dirgli se l’utente foouser ha i diritti di lettura e scrittura, mentre l’utente baruser può solo leggere

    root# nano -w /var/svn/conf/svnpolicy[your-project:/]
    * = r
    [another-project:/]
    foouser = rw
    baruser = r
    [yet-another:/trunk/procected]
    foouser = rw
  • 11. Configurare il supporto di apache per SVN
  • Fare il backup del /etc/apache2/modules.d/47_mod_dav_svn.conf, e renderlo simile a questo :
    
            
                    LoadModule dav_svn_module       modules/mod_dav_svn.so
            
            
                    DAV svn
                    SVNParentPath /var/svn/repos
                    #SSLRequireSSL
                    AuthType Basic
                    AuthName "Super Duper SVN Repository"
                    AuthUserFile /var/svn/conf/svnusers
                    AuthzSVNAccessFile /var/svn/conf/svnpolicy
    
                            Require valid-user
                    
                    SVNIndexXSLT /svnindex.xsl
            
            
                    
                            LoadModule authz_svn_module     modules/mod_authz_svn.so
                    
            
    
  • 12. Usare i template grafici di Subversion con i file xsl e css
    Credo che tu voglia rendere carino Subversion… o no? :-Dps
    nella mia versione di subversion non erano in gz ma in bz2 ma non cambia molto.

    root# cp /usr/share/doc/subversion-1.2.3-r2/svnindex.* /var/www/localhost/htdocs/
    root# cd /var/www/localhost/htdocs
    root# gunzip svnindex.css.gz
    root# gunzip svnindex.xsl.gz
  • 13. Riavvare apache
    Provare a riavvare il servizio di apache:

    root# /etc/init.d/apache2 restart

    Ora dovreste riuscire a vedere il vostro progetto a questo indirizzo:
    http://your-server/svn/repos/your-project/trunk/

  • 14. Consiglio veramente utile, Come creare una TAG
  • Se non avete una dir per le tag nel vostro repository occorre crearla:
    user# svn mkdir http://rockfloat.com/svn/repos/apple/tags -m "Initial creation"

    Qui c’e’ l’esempio di come popolare le tag o copiare i dati dalla trunk dentro la tag directory
    (create la tag specifica 0.1.1 e popolatela come riportato qui di seguito)

    user# svn cp \
    > http://rockfloat.com/svn/repos/apple/trunk \
    > http://rockfloat.com/svn/repos/apple/tags/0.1.0 \
    > -m "Initial release, doesn't do much of anything really"
L'articolo ti è stato utile?

Condividilo sulla tua rete di contatti Twitter, sulla tua bacheca su Facebook. Diffondere contenuti che trovi rilevanti aiuta questo blog a crescere. Grazie!