Direct naar de tekst

Subversion heeft ook een eigen svnserve deamon zodat het svn:// protocol gebruikt kan worden. Met een launchd plist (XML) bestand wordt bij het opstarten van de Mac automatisch de svnserve daemon gestart.

Subversion svnserve automatisch opstarten

Geschreven door Dennis Burger op

Dit artikel gaat ervan uit dat Subversion al op de Mac draait. Plus dat er een vaste plek is waar de Subversion Repositories staan. In dit voorbeeld staan de repositories op de volgende locatie:

Subversion repository pool

/Library/Subversion/Repository

Natuurlijk kun is deze plek niet verplicht.

SVN repositories benaderen

Er zijn een aantal manier om een SVN repository te benaderen. Via het file-system zelf, als de repository op dezelfde computer staat als waar de working-copy staat. Dit gaat dan bijvoorbeeld via:

Local file-system

Een SVN checkout ziet er dan als volgt uit:

svn checkout file:///Library/Subversion/Repository/mijn-project/trunk mijn-project/

Op deze manier kun je heel snel verbinding maken met de lokale repository.

Apache met mod_dav en mod_svn

Apache ondersteunt webDAV en hiermee kun je ook een Subversion repositories beschikbaar maken via het HTTP protocol (port 80):

svn checkout http://ip-nummer-mac/svn/mijn-project/trunk mijn-project/

Deze manier is wat langzamer omdat het eerst via Apache verbinding moet maken. Het voordeel is wel dat je met Apache de toegang tot de repositories kun beperken met een usernames en passwords.

Voor deze opzet is een apart artikel geschreven: Subversion beschikbaar maken via Apache.

Via Subversions eigen svn:// protocol

Als Subversion is geinstalleerd wordt ook het svnserve Unix programma mee geinstalleerd.

Dit is een lichtgewicht achtergrond server / daemon waarmee je direct met een SVN repository kan communiceren. Het draait op z’n eigen protocol, namelijk svn://. Een svn checkout zou er dan ongeveer zo uit kunnen zien:

svn checkout svn://ip-nummer-mac/mijn-project/trunk mijn-project/

Dit is een snellere manier dan met Apache. Want je maakt direct verbinding met de repository. Bovendien kun je op deze manier ook usernames en passwords toekennen aan bepaalde svn repositories.

Via snvserve en ssh

Er is nog een extra veiligheids techniek die toegepast kan worden op bovenstaande svn:// manier. Dat is svnserve toeganklijke maken via een SSH (secure shell) tunnel. Lees hiervoor de gratis documentatie van Subversion. In de PDF versie vanaf pagina 171.

##Firewall en port nummer

Het voordeel van de Apache of svnserve manier is dat je de SVN repositories beschikbaar kan maken via het netwerk. Dus ook aan Linux en Windows gebruikers.

Uiteraard heeft dit ook weer te maken met de firewall en beveiliging op de Mac. De port nummer die svnserve gebruikt is port nummer 3690. Met het shareware programma DoorstopX kun je makkelijk de ingebouwde Unix ipfw firewall configureren.

Configueren van svnserve

In dit artikel gaan we svnserve configureren en automatisch laten opstarten als de Mac opstart. Daarbij geven we aan welke hoofdmap (parent directory) we willen serveren via svn://. Dit heeft als bijkomend voordeel dat de URL’s (paden) korter worden en makkelijker te typen en onthouden zijn.

Handmatig svnserve opstarten

Open de Terminal en typ onderstaande in. Vervang het laatste stuk met het pad waar de SVN repositories staan:

sudo svnserve -d -r /Library/Subversion/Repository

Met -d geef je aan dat je svnserve als een Unix daemon (achtergrond programma / proces) wilt draaien. Met bovenstaand pad geef je met -r aan waar de svn repository parent-directory staat. De repositories staan dus een map verder, bijvoorbeeld:

/Library/Subversion/Repository/mijn-project

Op deze manier zijn alle repositories die achter -r vermeld staan bereikbaar via het eigen SVN protocol:

svn://ip-nummer-mac/mijn-project

svn://ip-nummer-mac/mijn-tweede-project

Dit is aanzienlijk korter.

hosts file

Met het hosts file (Windows, Mac en Linux) kun je ook makkelijk zelf een soort nepdomein aanmaken waardoor bovenstaande er zo uit kan zien:

svn://mijn-mac.local/mijn-project

In het hosts bestand wordt het IP nummer van de Mac ge-mapped aan de naam mijn-mac.local. Hier is het artikel te klein voor dus zoek op internet naar uitleg over het hosts bestand.

In het artikel Apache mod_vhost_alias virtual hosts en Apache virtual hosts wordt dit concept ook uitgelegd.

launchd

Natuurlijk is het een beetje vermoeiend en omslachtig om elke keer met de hand svnserve met parameter te starten. Uiteraard heeft de Mac ook een soort manager die automatisch achtergrond programma’s en Unix processen opstart, genaamd: launchd.

De configuratie bestanden, die launchd inleest, zijn allemaal in XML formaat en bevatten Unix commando’s die bijvoorbeeld door de Unix root user uitgevoerd worden. Hiermee wordt bijvoorbeeld de Apache webserver, de MySQL database en vele andere Apple Mac gerelateerde achtergrond processen opgestart.

Lingon

Met het gratis programma Lingon kunnen we ook zelf zo’n XML plist opstart bestand maken. Daar gaan we verder niet op in.

Eigenlijk is alles al aanwezig nadat Subversion is geinstalleerd. Het enige dat nodig is is een plist bestand (property list, welke in XML formaat is) om aan te geven welke commando’s geladen moet worden tijdens het opstarten van de Mac.

Voorbeeld plist bestand

Download het voorbeeld org.tigris.subversion.svnserve.plist bestand:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>KeepAlive</key>
	<false/>
	<key>Label</key>
	<string>org.tigris.subversion.plist</string>
	<key>ProgramArguments</key>
	<array>
		<string>/usr/local/bin/svnserve</string>
		<string>-d</string>
		<string>-r</string>
		<string>/Library/Subversion/Repository</string>
	</array>
	<key>RunAtLoad</key>
	<true/>
</dict>
</plist>

… en bewaar deze op de volgende locatie met de juiste naam:

/Library/LaunchDaemons/org.tigris.subversion.svnserve.plist

In dit plist bestand staat in feite wat we net zelf hebben ingetyped in de Terminal. Met het Terminal programma (/Applications/Utilities/Terminal) geven de juiste rechten aan dit bestand:

sudo chown root:wheel /Library/LaunchDaemons/org.tigris.subversion.svnserve.plist

sudo chmod 644 /Library/LaunchDaemons/org.tigris.subversion.svnserve.plist

Herstarten

Nu staat het opstart bestand op de juist plek. Met een herstart kunnen we zien of de Mac het nu zelf heeft opgestart. Met het Apple Activity Monitor programma (/Applications/Utilities/Activity Monitor) kunnen we zien of svnserve ook daadwerkelijk automatisch is opgestart. Zoek rechtsbovenin naar svnserve.

Unix commando

Dit kun je ook achterhalen met een Unix commando:

ps -ax | grep svnserve

Als er twee regels in beeld komen (1 van grep en een andere) betekend dat het proces draaid.

Handmatig opstarten launchd plist bestanden

Het plist xml bestand kunnen we ook handmatig in de Terminal in laden en laten starten. Al heb ik deze manier nog niet werkend gezien.

Inladen plist bestand in launchd

Let op! Dit is 1 lange regel zonder afbrekingen.

sudo launchctl load /Library/LaunchDaemons/org.tigris.subversion.svnserve.plist

Handmatig starten van svnserve via launchd

Ook dit is 1 lange regel zonder afbrekingen.

sudo launchctl start /Library/LaunchDaemons/org.tigris.subversion.svnserve.plist

User management

Met svnserve draaiend en de repositories bereikbaar via snv:// kunnen we zelf users gaan aanmaken die (beperkte) toegang krijgen tot de SVN repositories.

Lees hiervoor de gratis online (of download de PDF versie, vanaf pagina 169, hoofdstuk Built-in authentication and authorization) documentatie van Subversion.