SVN

Subversion, webdav, LDAP e restrizioni sulle cartelle

Se avete bisogno di configurare un server svn su Linux con autenticazione tramite LDAP, webdav ed inserire specifiche restrizioni su determinate cartelle, potete seguire le seguenti istruzioni.

  • Uno: dovete installare subversion e apache sul vostro server Linux (ometterò questa parte).
  • Two: dovete configurare webdav per accedere ad svn tramite http e configurare l’accesso tramite LDAP.

    Assicuratevi di avere i seguenti moduli di apache installati e configurati:

    LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
    LoadModule dav_module modules/mod_dav.so
    LoadModule dav_svn_module modules/mod_dav_svn.so
    LoadModule authz_svn_module modules/mod_authz_svn.so
    LoadModule authn_alias_module modules/mod_authn_alias.so
    

    Assunzioni:

    • Sono solito configurare subversion sotto la directory /srv/svn.
    • Gli utenti a cui è permesso di accedere a subversion devono appartenere al gruppo LDAP CN=SVN-AUTHORIZATION,OU=Groups GSO,DC=test,DC=example,DC=com

    Modificate il file /etc/apache2/mods-enabled/dav_svn.conf (su Ubuntu, su altre distribuzioni potrebbe essere posizionato altrove) ed assicuratevi di avere le seguenti configurazioni:

    <Location /svn/>
      # Abilitare svn su webdav
      DAV svn
      # Impostare il parent path per repositori multipli
      SVNParentPath /srv/svn/
      # Impostare il tipo di autenticazione
      AuthType Basic
      # Impostare il nome dell'autenticazione
      AuthName "FLR Subversion Repository"
      # Impostare il file che conterrà le autorizzazioni (permessi)
      AuthzSVNAccessFile /etc/apache2/dav_svn.authz
      # Consentire di listare il parent path
      SVNListParentPath On
      # Utilizzare LDAP per l'autenticazione
      AuthBasicProvider ldap
      # Il server LDAP è autoritativo (cioè l'autenticazione finale è delegata a LDAP)
      AuthzLDAPAuthoritative On
      # Utente di bin per LDAP
      AuthLDAPBindDN "CN=svnbind,OU=Users OS,DC=test,DC=example,DC=com"
      # Password dell'utente di bind per LDAP
      AuthLDAPBindPassword mypassword
      # LDAP URL
      AuthLDAPUrl "ldap://ldap_ip_address:389/DC=test,DC=example,DC=com?sAMAccountName?sub?(&(&(objectClass=user)(objectCategory=person))(memberof=CN=SVN-AUTHORIZATION,OU=Groups GSO,DC=test,DC=example,DC=com))"
    
      # E' necessario un utente valido
      Require valid-user
    </Location>
  • Three Create il file dei permessi /etc/apache2/dav_svn.authz
    Dovrà avere il seguente contenuto in base alle vostre esigenze:

    [groups]
    admin = matteo
    group1 = user1, user2, user3
    group2 = user2
    group3 = user4
    
    ###################################
    [/]
    * = r
    @admin = rw
    ###################################
    [repository1:/]
    * = rw
    ###################################
    [repository2:/]
    * =
    @admin = rw
    @group1 = rw
    ###################################
    [repository3:/]
    * =
    @admin = rw
    @group2 = rw
    @group1 = r
    ###################################
    [repository4:/]
    * = r
    @admin = rw
    [repository4:/trunk/sources]
    * = r
    @admin = rw
    @group3 = rw
    ###################################

    Adesso riavviate apache con /etc/init.d/apache2 restart

  • Quattro: create finalmente i repositori.

    Da root impartite i seguenti comandi:

    cd /srv/svn
    svnadmin create repository1
    chown www-data.www-data -R repository1
    svnadmin create repository2
    chown www-data.www-data -R repository2
    svnadmin create repository3
    chown www-data.www-data -R repository3
    svnadmin create repository4
    chown www-data.www-data -R repository4

    Siete adesso pronti per utilizzare subversion con account LDAP, webdav e restrizioni su directory personalizzate.

Script per rimuovere le directory .svn da un progetto

Quando non si vuole distribuire con i propri sorgenti anche le directory svn è sufficiente creare un export del progetto con il comando:
svn export svn://path_to_repository projectname

Spesso però non ho accesso al repositorio pertanto mi è toccato rimuovere a mano le varie directory .svn.

Fino a che si è trattato di un paio di directory l’ho sempre fatto a mano, ma proprio oggi mi sono trovato davanti ad un progetto con centinaia di directory annidate e quindi mi sono realizzato un semplice script che mi venisse in aiuto:

find . -type d -name .svn -exec rm -r '{}' \;