SVN über Apache 2 auf einem Debian oder Ubuntu System einzurichten ist kein großer Akt. Aber dafür gibt es schon massig schlechte Anleitungen, u.a. von Leuten die noch nie was vom Debian-Way gehört haben. Da wird kein a2enmod oder so modernes Zeug empfohlen, nein da wird noch schön an der /etc/apache2/httpd.conf rumeditiert.
Einfacher, und vor allem schneller geht es natürlich wenn man diesen (oder einen ähnlichen) weg befolgt.
Installation
Ich geh mal davon aus das der Apache Webserver schon installiert und für den "normalen" Betrieb Konfiguriert wurde. Nun fehlen nur noch die Pakete:
- libapache2-svn
- subversion
Vorbereitungen
Meine Repositories liegen unter /var/lib/svn, was auch sehr sinnvoll ist. Auf zusätzliche Verzeichnisse unterhalb vom /-Dateisystem sollte man absehen, den dies werden gerne mal bei Backups vergessen, und sich auch nicht gerade FHS Konform.
Der erste Schritt besteht also darin dieses Verzeichnis anzulegen (Debian Anwender sollten wenn sie eh schon root sind einfach das sudo weglassen):
sudo mkdir /var/lib/svn
Wichtig sind noch die Dateirechte (und Eigentümer!!!) für dieses Verzeichnis, den der Apache Webserver muss darauf sowohl lesen als auch schreiben dürfen. Dies stelle ich mit folgendem Befehl sicher:
sudo chown -R www-data:www-data /var/lib/svn
Natürlich muss man das immer machen wenn man in diesem Verzeichniss was verändert (Ausnahme ist natürlich es wurden durch den Webserver geändert, oder mit dem Pseudouser www-data), da sonst ggf. der Dateieigentümer nicht mehr passt!
Konfiguration
Jetzt geht es an die Konfiguration vom Apache.
Notwendige Module
Nachfolgende Module Apache Module sind nötig damit das ganze auch funktioniert:
auth_basic
authz_default
authn_file
authz_host
authz_user
dav
dav_svn
Dies sollte man einfach mit a2enmod machen. In der Regel sind all diese Module aber schon nach der Installation geladen!
Virtual Host Konfiguration
Nun geht es (in meinem Fall) an die Datei /etc/apache2/sites-available/svn, dies ist der Virtual Host für meine SVN Subdomain:
<VirtualHost *>
ServerName svn.example.com
ServerAdmin admin@example.com
<Location />
DAV svn
SVNParentPath /var/lib/svn
AuthType Basic
AuthName "Subversion Repository Access"
AuthUserFile /etc/apache2/svn.htpasswd
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
</Location>
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
ServerSignature On
</VirtualHost>
Diese Virtual Host kann man nun mit a2ensite svn aktivieren.
Benutzerverwaltung
Natürlich muss man noch die in der Virtual Host Konfiguration angegeben htpasswd Datei anlegen und mit Benutzern füllen:
sudo htpasswd -c /etc/apache2/svn.htpasswd benutzer
sudo chown www-data:www-data /etc/apache2/svn.htpasswd
Weiter Benutzer kann man ebenfalls mit htpasswd anlegen:
sudo htpasswd /etc/apache2/svn.htpasswd neuerbenutzer
Nun kann der Apache Webserver neu gestartet werden:
sudo /etc/init.d/apache2 force-reload
Repositories
Das bringt natürlich alles noch nichts ohne irgendwelche Repositories zu haben. Das Anlegen eines Repositories geht wie gewohnt über:
sudo -i
sudo -u www-data svnadmin create /var/lib/svn/dasisteinrepo
exit
Hat man schon ein anderes Repository, welches man bisher z.b. über file: genutzt hat kann man hiermit
svnadmin dump file:///pfad/zum/repository | gzip --best > svn.dump.gz
einen Dump vom alten Repository erzeugen, und mit
zcat svn.dump.gz | svnadmin load file:///var/lib/svn/dasisteinrepo
in das neue Repository laden. Hier bitte wieder daran denken das die Dateirechte noch passen!
Mit diesem Repository kann man wie mit jedem anderen Arbeiten, nur das man jetzt über http darauf zugreift, ein Checkout würde z.B. jetzt so aussehen:
svn co http://svn.example.com/dasisteinrepo
Sobald man versucht was am Repository zu ändern bekommt man eine Aufforderung wegen Benutzer & Passwort. Hat man keine Zugangsdaten kann man nur Auschecken.
Sicherheit
Es gibt zu dieser Konstellation aber noch ein paar Punkte bezüglich der Sicherheit:
- Jeder Benutzer (valid-user) kann jedes Repository bearbeiten » Abhilfe schafft hier die Dokumentation vom Apache, in dem man z.b. Gruppen usw. anlegt.
- Die Übertragung ist nicht Verschlüsselt, und daher für tcpdump usw.. kein Problem! Es ist sinnvoll bei wichtigen Sachen auf HTTPS auszuweichen!