Esecuzione di un server Subversion

Esecuzione di un server Subversion

Questa sezione descriverà come settare, amministrare e rendere sicuro un server Subversion.

Dipendenze del server Subversion

Settaggio di un server Subversion.

Le seguenti istruzioni installeranno un server Subversion che verrà settato per usare OpenSSH come metodo sicuro di accesso remoto, con svnserve disponibile per accesso anonimo.

La configurazione del server Subversion consiste nei seguenti passi:

1. Setup di utenti, gruppi e permessi

Bisognerà essere l'utente root per la parte di configurazione iniziale. Creare il gruppo e utente svn con i seguenti comandi:

groupadd svn &&
useradd -c "SVN Owner" -d /home/svn -m -g svn -s /bin/false svn

Se si vogliono avere repository multipli bisogna avere un gruppo dedicato a ciascun repository per una più semplice amministrazione. Creare il gruppo svntest per il repository di test e aggiungere l'utente svn a questo gruppo con i seguenti comandi:

groupadd svntest &&
usermod -G svntest svn

In aggiunta si può settare umask 002 mentre si lavora con un repository così che tutti i nuovi file saranno scrivibili dal proprietario e gruppo. Questo è reso obbligatorio creando uno script wrapper per svn e svnserve:

mv /usr/bin/svn /usr/bin/svn.orig &&
mv /usr/bin/svnserve /usr/bin/svnserve.orig &&
cat >> /usr/bin/svn << "EOF"
#!/bin/sh
umask 002
/usr/bin/svn.orig "$@"
EOF
cat >> /usr/bin/svnserve << "EOF"
#!/bin/sh
umask 002
/usr/bin/svnserve.orig "$@"
EOF
chmod 0755 /usr/bin/svn{,serve}
[Nota]

Nota

Se si usa Apache per lavorare con il repository su HTTP, anche per accesso anonimo, bisogna racchiudere /usr/sbin/httpd in uno script similare.

2. Creare un repository Subversion.

Con subversion-1.1.0 e successivi, è disponibile un nuovo tipo di repository data-store, FSFS. C'è un tradeoff per la velocità con il nuovo backend, tuttavia il repository ora può essere messo su un network mount, e una corruzione non impone all'amministratore di recuperare il repository. Per maggiori informazioni e confronti tra FSFS e BDB si veda http://svnbook.red-bean.com/svnbook-1.1/ch05.html#svn-ch-5-sect-1.2.A. Opzionalmente si può passare bdb al posto di fsfs nel seguente comando per creare BerkelyDB data-store.

Creare un nuovo repository Subversion con i seguenti comandi:

install -d -m0755 /srv &&
install -d -m0755 -o svn -g svn /srv/svn/repositories &&
svnadmin create --fs-type fsfs /srv/svn/repositories/svntest

Ora che il repository è creato bisogna popolarlo con qualcosa di utile. Bisognerà avere un setup predefinito del layout della directory esattamente come si vuole che appaia il proprio repository. Per esempio, qui c'è un setup di esempio del layout di BLFS con una radice di svntest/. Sarà necessario settare un albero directory simile al seguente:

          svntest/            # The name of the repository
             trunk/           # Contains the existing source tree
                BOOK/
                bootscripts/
                edguide/
                patches/
                scripts/
             branches/        # Needed for additional branches
             tags/            # Needed for tagging release points

Una volta che si è creato il proprio layout di directory come mostrato sopra si è pronti a fare l'importazione iniziale:

svn import -m "Initial import." \
    [/path/to/source/tree] \
    file:///srv/svn/repositories/svntest

Ora proseguire e cambiare l'informazione di proprietario e gruppo sul repository, e aggiungere il proprio utente normale ai gruppi svn e svntest:

chown -R svn:svntest /srv/svn/repositories/svntest &&
chmod -R g+w /srv/svn/repositories/svntest &&
chmod g+s /srv/svn/repositories/svntest/db &&
usermod -G svn,svntest,[insert existing groups] [username]

svntest è il gruppo assegnato al repository svntest. Come citato in precedenza questo facilita l'amministrazione di repository multipli quando si usa OpenSSH per l'autenticazione. Proseguendo bisognerà aggiungere il proprio utente regolare e ogni utente aggiuntivo che si vuole che abbia accesso in scrittura al repository, ai gruppi svn e svntest.

In aggiunta si noterà che la nuova directory db del repository è set-groupID. Se il ragionamento non è immediatamente ovvio, quando si usa un metodo di autenticazione esterno (come ssh) lo sticky bit è impostato in modo che tutti i nuovi file apparterranno all'utente, ma al gruppo svntest. Chiunque nel gruppo svntest può creare file, ma dare comunque a tutto il gruppo accesso in scrittura a questi file. Questo evita di tener fuori dal repository altri utenti.

Ora proseguire e tornare al proprio normale account utente, e dare un'occhiata al proprio nuovo repository usando svnlook:

svnlook tree /srv/svn/repositories/svntest/
[Nota]

Nota

Potrebbe essere necessario uscire e rientrare per rinfrescare la propria group membership. 'su [username]' dovrebbe funzionare bene a questo proposito.

3. Configurare il server

Come citato in precedenza queste istruzioni configureranno il server per fargli usare solo ssh per l'accesso in scrittura al repository e per fornire accesso anonimo usando svnserve. Ci sono molti altri modi per fornire accesso al repository. Queste configurazioni aggiuntive sono spiegate meglio presso http://svnbook.red-bean.com/.

Per ciascun repository deve essere fatta una configurazione dell'accesso. Creare il file svnserve.conf per il repository svntest usando i seguenti comandi:

cp /srv/svn/repositories/svntest/conf/svnserve.conf \
    /srv/svn/repositories/svntest/conf/svnserve.conf.default &&
cat > /srv/svn/repositories/svntest/conf/svnserve.conf << "EOF"
[general]
anon-access = read
auth-access = write
EOF

Non c'è molto altro sul file di configurazione. Si noterà che è necessaria solo la sezione generale. Dare un'occhiata al file svnserve.conf.default per informazioni sull'uso del metodo di autenticazione incluso in svnserve.

4. Avvio del server

Ci sono molti modi di avviare svnserve. Il modo più comune è di avviarlo come un processo inetd o xinetd. In alternativa si può usare un bootscript per avviare il servizio all'accensione.

[Nota]

Nota

Se non si vuole fornire accesso anonimo ai propri repository svn o usare l'autenticazione inclusa in svnserve non bisogna eseguire svnserve.

Se si usa inetd aggiungere una linea a /etc/inetd.conf usando i seguenti comandi:

cat >> /etc/inetd.conf << "EOF"
svn stream tcp nowait svn /usr/bin/svnserve svnserve -i
EOF

Se si usa xinetd aggiungere le seguenti linee al file /etc/xinetd.conf:

cat >> /etc/xinetd.conf << "EOF"
service svn
{
        port                    = 3690
        socket_type             = stream
        protocol                = tcp
        wait                    = no
        user                    = svn
        server                  = /usr/bin/svnserve
        server_args             = -i -r /srv/svn/repositories
}
EOF

Infine se si vuole semplicemente avviare il server all'accensione installare il bootscript svn incluso nel pacchetto blfs-bootscripts-6.0.

make install-svn

Last updated on