Debian server beheer

Subversion versiebeheer installeren

Subversion of SVN is een versiebeheersysteem. Het is ideaal voor websitebouwers en programmeurs omdat je alle versies van je werk bewaart, terug kunt naar eerdere versies en per versie commentaar op kunt slaan.

We beginnen met het installeren van subversion. Dat is makkelijk:

apt-get install subversion

We moeten nu eerst een script maken om er voor te zorgen dat de subversion daemon opstart als de computer reboot. Dit script komt van Dorkfolio met een paar kleine aanpassingen:

#!/bin/sh # # start/stop subversion daemon. # SVN_ROOT_PATH="/home/subversion/" SVN_USER="root" SVNSERVE="/usr/bin/svnserve" OPTIONS="-d -r $SVN_ROOT_PATH" # # Let's make sure SVN is actually installed # test -f $SVNSERVE || 'echo "svnserve not found at $SVNSERVE"; exit 0' # # Alright - let's start the daemon # case "$1" in start) echo "Starting subversion daemon: svnserve." start-stop-daemon -S -o -q -u $SVN_USER -c $SVN_USER -v -x $SVNSERVE -- $OPTIONS ;; stop) echo "Stopping subversion daemon: svnserve." start-stop-daemon -K -q -o -x $SVNSERVE ;; force-reload) $0 restart ;; restart) $0 stop $0 start ;; *) echo "Usage: /etc/init.d/svn_deamon {start|stop|force-reload|restart}" exit 1 ;; esac exit

Je kunt bovenstaand script kopiëren en opslaan als /etc/init.d/svn_deamon. De deamon zal nu opstarten als je de computer reboot. We moeten nog wel zorgen dat het script executable is:

chmod +x /etc/init.d/svn_deamon

Nu is het handig er voor te zorgen dat bash het commando svn_deamon gaat herkennen zodat je makkelijker zelf de server kunt starten en stoppen. Je moet daarvoor een kleine toevoeging aan het .bash_profile doen:

nano ~/.bash_profile

Voeg daar de volgende regel aan toe:

alias svndeamon='/etc/init.d/svn_deamon'

Bash herkent het nieuw commando pas nadat je de .bashrc opnieuw ingeladen hebt. Je kunt dat doen door uit te loggen en daarna opnieuw in te loggen of simpeler door

source ~/.bash_profile

Testen of dit gewerkt heeft is simpel, je voert het commando in:

svndeamon

Herkent bash het commando dan zie je:

Usage: /etc/init.d/svnserve {start|stop|reload|restart}

Is het niet gelukt dan zie je:

-bash: svndeamon: command not found

In dat geval moet je checken of je bovenstaande stappen goed uitgevoerd hebt. Is het wel gelukt dan kun je de server nu starten met het volgende commando:

svndeamon start

In de meeste gevallen is de deamon al opgestart bij de installatie en zul je zien:

Starting subversion daemon: svnserve. /usr/bin/svnserve already running.

Firewall aanpassen: poort 3690 openstellen

Voordat je de subversion server van buiten kunt bereiken moeten we zorgen dat poort 3690 open staat voor inkomend verkeer:

iptables -I INPUT 11 -p tcp --dport 3690 -j ACCEPT

Zie verder het hoofdstuk over iptables. Check voor de zekerheid ook even of je in hosts.deny of hosts.allow iets met poort 3690 gedaan hebt.

Een 'repository' maken

De volgende stap is nu het maken van één of meer repositories. Ik heb in het opstartscript gedefinieerd dat de repositories in /home/subversion komen te staan. Dat moeten we dus nu ook doen:

svnadmin create --fs-type fsfs /home/subversion/project_een svnadmin create --fs-type fsfs /home/subversion/project_twee svnadmin create --fs-type fsfs /home/subversion/project_drie

Je mag de namen van de repositories uiteraard vrij kiezen. De locatie ook, zo lang je in het opstartscript en bij het maken van de repositories maar hetzelfde gebruikt.

Toegang tot de repository instellen

Vervolgens gaan we instellen wie er hoe toegang krijgt tot de repository:

nano /home/subversion/project_twee/conf/svnserve.conf

Zoek daarin de onderstaande drie regels en pas die aan:

# anon-access = read # auth-access = write # password-db = passwd

Haal bij alle drie het # weg. Het # geeft aan dat het commentaar is. Ik wil over het algemeen alleen ingelogd gebruikers toegang geven. Dus maak ik er dit van:

anon-access = none auth-access = write password-db = passwd

Mocht je iedereen toegang willen geven kun je kiezen voor anon-access = read of zelfs anon-access = write al kan ik me niet direct een scenario voorstellen waarin dat handig is. Vervolgens moeten we nog het bestand met de logins en wachtwoorden aanpassen:

nano /home/subversion/project_twee/conf/passwd

Hierin voor je de gebruikers in zoals in onderstaand voorbeeld:

[users] kees = keesznwachtwoord truus = truusderwachtwoord

Overigens kan subversion ook SASL authenticatie gebruiken maar daar ga ik hier niet op in.

Nu kunnen de gebruikers met de juiste software van de repository via svn://mijndomein.com met de gebruikersnamen en wachtwoorden zoals die ingesteld zijn in passwd. Er zijn veel subversion clients te koop en zelfs gratis te krijgen. Ik gebruik zelf Cornerstone maar er is geen reden waarom jij dat ook zou moeten doen.

Een repository verwijderen

Er is geen speciaal svnserve commando om een repository te verwijderen. Je verwijdert simpelweg alle bestanden met:

rm -R /home/subversion/project_twee/

Wees voorzichtig met rm -R, je kunt er een hoop schade mee aanrichten.

Met bash makkelijker repositories inrichten

Je moet nu iedere keer als je een repository maakt opnieuw passwd en svnserve.conf aanpassen. Dat kan makkelijker. Ik heb voor mezelf een passwd en svnserve.conf gemaakt die in 99% van de gevallen voldoen en die opgeslagen in een map ~/svn_defaults/. Nu maken we een scriptje om een nieuwe repository te maken en meteen de goede passwd en svnserve.conf daar in te zetten. Bewerk .bash_profile:

nano ~/.bash_profile

Voeg daarin de volgende functie toe:

function svnlogin() { if [ -z "$1" ] then echo "Je moet een naam voor de svn repository invoeren" else if [ -d "/home/subversion/$1" ]; then echo "Repository $1 bestaat al en overschrijven doet dit script niet" else svnadmin create --fs-type fsfs /home/subversion/$1 echo "Repository $1 aangemaakt" cp ~/svn_defaults/passwd /home/subversion/$1/conf/passwd cp ~/svn_defaults/svnserve.conf /home/subversion/$1/conf/svnserve.conf echo "Default logins gekopieerd naar $1/conf/" fi fi }

Dit script werkt in drie stappen. Eerst checkt het of je wel een naam voor de repository ingevuld hebt. Vervolgens checkt het script of die repository al bestaat door te kijken of er een map met de naam is. Is dat niet het geval dan maakt het script de repository en kopieert mijn bestanden passwd en svnserve.conf er in.

Voor het commando werkt moet je bash nog vragen .bash_profile opnieuw in te laden:

source ~/.bash_profile

Nu kun je eenvoudig nieuwe repositories maken met:

svnlogin project_vier