SVN Server einrichten
Trac/Subversion auf Debian Sarge
Am Schluss dieser Anleitung sollen folgende Komponenten auf dem Server installiert sein:
- Debian Sarge
- Trac (in der aktuellen Version 0.10.3.1 Das Debian Paket ist etwas veraltet.)
- Apache2 mit mod_python
- OpenSSL
- Subversion 1.1 (Mit dem FSFS Datenbank Filesystem --fs-type=fsfs,)
- htpasswd zur Benutzeridentifikation-
- Tools wie Midnight Commander und ssh
Installation des Betriebsystems
Das ISO Image des Debian Betriebsystem kann auf der Setie http://www.debian.org heruntergeladen und auf CD gebrannt werden (debian-31r5-i386-netinst.iso). Ich benutze die Version 3.1 rev5 weil ich damit schon Erfahrungen auf einem anderen Server gemacht habe.
Danach kann die CD in den Server eingelegt und gebootet werden. Als erster Schritt kann die Sprache ausgewählt werden. In unserm Fall 'Deutsch', danach im nächsten Dialog das Land: 'Schweiz' und entsprechend das Tastaturlayout auf 'Schweizerdeutsch'.
Danach führt die Installationsroutine eine Hardwareerkunng druch, die einige Zeit in Anspruch nimmt.
Darauf folgt die Eingabe des Rechnernamens und des Domainnamens. Da der Rechner in ein lokales Netz zu liegen kommt, wähle ich einen Namen der mit .local endet.
Danach kann die Harddisk entsprechend den Wünschen partitioniert werden.
Ich lege folgende an:
- 60GB ext3 Mountpoint /
- 150 GB ext3 Mountpoint /var
- 40.1 GB Swap
danach wird mit dem Menupunkt Partionierung beenden und Änderungen übernehmen und einer Bestätigung mit Ja die Partitionierung abgeschlossen und das Filesystem erstellt.
Danach kann der Menupunkt Grundsystem installieren gewählt werden damit die Systemdaten des Betriebsystem auf die Harddisk kopiert werden.
Da eine ältere Hardware als Server zum Einsatz kommt, habe ich den 2.4er Kernel verwendet.
Als Bootloader war eingentlich GRUB geplant, aus irgendeinem Grund hat die Installation aber nicht funktioniert, so dass ich LILO installieren musste.
Die Basiskonfiguration startet direkt nach dem reboot. Für die APT-Quellen habe ich den unstable Tree genommen. Falls später noch etwas an der Grundkonfiguration geändert werden soll, kann das mit base-config gemacht werden. Danach muss das
Installation der benötigten Pakete Apache, Python, und Libraries
Trac setzt auf das Subversion Versionsverwaltungssystems. Dieses ist bereits als Debian Paket binär verfügbar. Weitere benötigte Pakete sind:
- apache2
- openssl
- python2.3
- clearsilver-dev
- python2.3-clearsilver
- subversion
- python2.3-subversion
- subversion-tools
- libapache2-mod-fcgid
- libsqlite0
- python2.3-sqlite
- enscript
- docutils
- cvs2svn
- libapache2-mod-fcgid
- python2.3-setuptools
- python-docutils
- python-dev
- trac
- mc
- ssh
apt-get install apache2 python2.3 clearsilver-dev python2.3-clearsilver subversion python2.3-subversion subversion-tools libapache2-mod-fcgid libsqlite0 python2.3-sqlite enscript docutils cvs2svn libapache2-mod-fcgid python2.3-setuptools python-docutils python-dev mc ssh openssl
Subversion Konfigurieren
Ein empfehlenswertes Buch ist als PDF verfügbar: Version Control with Subversion.
Ein Subversion Projekt anlegen
An diesem Punkt muss jetzt ein Subversion (abgekürzt "SVN") Repository angelegt werden. Trac braucht ein existierendes Projekt damit es die Sourcen darin speichern kann.
Von der Kommandozeile geht das mit dem Befehl. Falls das Verzeichnis /var/svn noch nicht existiert, muss es mit mkdir /var/svn angelegt werden.
svnadmin create /var/svn/testprojekt --fs-type fsfs
Note: alle Kommandos in dieser Anleitung werden als Benutzer root ausgeführt.
CVS Repositiries importieren/konvertieren
Falls bestehende CVS Repositories nach SVN konvertiert werden sollen kann das mit dem Befehlcvs2svn --fs-type=fsfs -s /path/to/new/svn/repo /path/to/cvs/repo
gemacht werden.
Wichtig ist, dass als Filesystem für die Datenbank FSFS angegeben wird. FSFS gibt es nur für Subversion >= 1.1. Es ist jedoch sehr empfehlenswert es zu benutzen, da das (default) Berkeley DB filesystem zusammen mit dem Apache2 zu Fehler führen kann.
SVN Repository Permissions und Authentication
Nach svnadmin create oder cvs2svn, ist jetzt ein SVN repository angelegt und eigentlich steht jetzt nichts mehr im Wege um sich dort einzuloggen.
Wie auch immer, jetzt sollten noch die Rechte und Gruppenzugehörighkeiten so gesetzt werden, dass die Repositories von Trac gelesen werden können.
Das ist auf verschiedene Wege möglich. In dieser Anleitung geschieht es indem ein Benutzer "svnowner" hinzugefügt wird.
adduser svnowner
Damit der Apache Webserver darauf zugreifen kann muss der www-data user (Der Webserver User in Debian) zur svnowner Gruppe hinzugefügt werden:
usermod -Gsvnowner www-data
Alle repositories sollten sein:
chown -R svnowner /var/svn/testprojekt
chgrp -R svnowner /var/svn/testprojekt
Zusätzlich muss sichergestellt sein, dass die "svnowner" Gruppe Schreibrechte im neuen Subversion Repository hat.
chmod 775 -R /var/svn/testprojekt
Das muss so gemacht werden, damit der www-data User (hier der Apache webserver) Schreib- und Lesezugriffe auf die Repositories hat.
Einrichten von Subversion Benutzen
Nachdem ein ein neues oder konvertiertes svn Repository erstellt worden ist, müssen Benutzer festgelegt werden welche Zugrifsrechte auf die Dateien haben. Das ist leider ein wenig unschön gelöst. Die Passwörter der Benutzer können für jedes Repository in der Datei /var/svn/reponame/svnserve.conf eingetragen werden.
Es ist auch möglich eine einzelne Datei für alle Repositories anzulegen welche dann zum Beispiel unter /etc/subversion/users.list abgespeichert werden kann und in der snvserv.conf Datei eingebunden werden kann.
Egal welch Lösung gewählt wird, die Benutzereinträge habe immer dieselbe Form:
[users]
dave = davespassword
stu = stuspassword
steve = stevespassword
joey = joeyspasswordDieser Schritt muss nur einmal beim erzeugen des Repositories gemacht werden. Falls später ein weiterer Benutzer hinzugefügt werden muss, kann die Liste erweitert werden.
Zugriffsrechte auf das Repository setzen
Falls die Benutzer in einem separaten File angegeben worden sind, muss am Ende des Repoitory-Konfigurationsfile sunserv.conf der Verweis auf die Benuzter/Passwort Datei angegeben werden.
[general]
password-db = /etc/subversion/users.list
realm = intranet
As an example, in the case of the Withers Recruitment site, this file is found at /var/svn/withersrecruit/conf/svnserve.conf. For any repository, it can be found at /var/svn/repositoryname/conf/svnserve.conf.
Once again, to be clear, password-db=/etc/subversion/users.list is just something I made up. It could be changed to whatever file the users are kept in for this repo, and could be different for any repo if you wanted special access permissions for this repository. Same goes for the realm = intranet.
If you're interested in reading more on the thrilling subject of SVN repository access permission.
Fernzugriff auf SVN über Apache
Es gibt verschiedene Möglichkeiten übers Netz auf ein SVN Repository zuzugreifen. Ich wähle diese Methode, weil es die einzige ist, bei der man auf dem Server nicht für alle Benutzer einen Acount einrichten muss.
Es müssen zwei Module für den Apache installiert werden:
apt-get install libapache2-svn libapache2-mod-dav libapache-mod-ssl
Die Datei apache2.conf muss um folgende Einträge erweitert werden:
########### Apassungen SVN
<Location /svn>
DAV svn
SVNParentPath /var/svn
</Location>
<Location /svn/qualireader>
AuthType Basic
AuthName "qr3"
AuthUserFile /var/trac/qr3/.htpasswd
Require valid-user
</Location>
########## Ende Anpassungen SVN
Danch kann der apache neu gestartet werden. Der wenn dieselben Benuzer vom Trac System übernehmen kann, kann als .htpasswd Datei einfach dieselbe wie fürs Trac verwendet werden.
Trac Installation
Trac gibt es nur in einer recht veralteten Version im Sarge Pool. Ich möchte daher gerne die aktuelle Version installieren. Diese muss aber zuerste compiliert und installiert werden. (Achtung: python-dev muss installiert sein!)
Das ist aber eigenlich kein Problem:
wget http://ftp.edgewall.com/pub/trac/trac-0.10.3.1.tar.gz
tar -xzf trac-0.10.3.1.tar.gz
cd trac-0.10.3.1
python ./setup.py install
Und damit ist das Ganze auch schon erledigt.
Initialisieren eines Trac Projekts
Jetzt kann ein Trac Projekt initialisiert werden. Dazu werden einige Infos benötigt über die es Sinn mach sich im Voraus einige Gedanken zu machen:
- Trac-Pfad (normalerweise /var/trac/projektname)
- Projektname
- Datenbank String (normalerweise Defaultvorgabe verwenden)
- Repository Typ (svn)
- SVN Repository
- Template (Falls nicht das Default Template verwendet werden soll.)
Danach kann ein Trac Projet mit einem Kommandozeilenaufruf erstellt werden
trac-admin /var/trac/testprojekt initenvDas Script wird ausgeführt. Die oben genannten Angaben werden nacheinander abgefragt.
Project Name: Ein Projektname
Database Connection String: Einfach Enter drücken. Ich habe hier immer die default-Vorgabe verwendet.
Repository Type: svn für Subversion
Path to repository: Eingabe des Pfades aufs Subversion Repository, zB.. /var/svn/testprojekt.
Templates directory: Wenn keine eigenen Templates vorhanden sind einfach Enter drücken fürs Default Template.
Gratulation, Trac ist jetzt konfiguriert!
Es kann mit dem integrierten Webserver getestet werden:
tracd --port 8000 /var/trac/testprojektand view your new Trac project at http://localhost:8000
Eigenlich könnte man hier stoppen. Da der Apache Webserver einige Möglichkeiten bietet, die wir nutzen wollen (ssh) muss Trac unter Apache2 laufen.
Benutzerverwaltung
Es wird die Apache Benutzerverwaltung verwendet. Für jedes Projekt sollen verschiedene Benutzer zugelassen werden können darum kommt das .htpasswd File ins Projektverzeichnis.
htpasswd -c /etc/trac/testprojekt/.htpasswd usernameSollen weitere Benutzer hinzugefügt werden erfolgt der Aufruf ohne -c (create) Option:
htpasswd /etc/trac/trac.htpasswd usernameWobei username der neue Benutzer ist.
Ein User muss als Trac-Administrator ausgewählt werden:
trac-admin /var/trac/testprojekt permission add username TRAC_ADMINWeitere Infos unter permissions page.
Apache2 Konfigurieren
Der Webserver muss auf die SQLite Datenbank lesen und schreiben können ("www-data"):
chown -R www-data /var/www/trac/dbApache2 und mod_python einrichten
In der Datei /etc/apache2/apache2.conf habe ich folgende Zeilen hinzugefügt:
########### Anpassungen für Trac
<Location /projects>
SetHandler mod_python
PythonHandler trac.web.modpython_frontend
PythonOption TracEnvParentDir /var/trac
PythonOption TracUriRoot /projects
</Location>
<LocationMatch /projects/testprojekt/login>
AuthType Basic
AuthName "testprojekt"
AuthUserFile /var/trac/testprojekt/.htpasswd
Require valid-user
</LocationMatch>
######### Ende Trac
Weiter mit der SSL Installation:
Apache2 und SSL
Damit die SVN Zugriffe über eine verschlüsselte Verbindung stattfinden können installieren wir OpenSSL auf dem Server. Danach ist es möglich über eine https:// Verbindung aufs Repository zuzugreifen.
Falls das Paket nicht schon installiert ist kann es mit folgender Zeile nachgeholt werden:
apt-get install apache2 openssl
Jetzt muss noch ein Zertifikat erstellt werden, welches auf dem Server abgelegt wird und die Authentizität des Servers bestätigen soll. Da es ein 'selbstunterzeichnetes' Zertifikat handelt, sagt es nicht allzuviel über die Sicherheit aus, allerdings ist es für den Gebrauch im 'privaten' Rahmen genügend. Die Benutzer der Webseite müssen einfach darüber informiert werden, dass sie das Zertifikat auf dem Browser installieren sollen.
mkdir /etc/apache2/ssl RANDFILE=/dev/random openssl req $@ -new -x509 -days 365 -nodes \
-out /etc/apache2/ssl/apache.pem \
-keyout /etc/apache2/ssl/apache.pem
chmod 600 /etc/apache2/ssl/apache.pem
Danach verlangt das Programm einige Eingaben.Falls das Zertifikat länger als einen Monat gültig sein soll, kann der Defaultwert mit der -days Option (Wie im Beispiel -days 365), verändert werden.
Kopiere die Datei '/etc/apache2/sites-available/default' - in eine die z.B. 'ssl' heisst:
cd /etc/apache2/sites-available/
cp default ssl
Aktiviere SSL
Das wird gemacht indem ein sym-Link auf das Script in /etc/apache2/sites-available/ in das Verzeichniss /etc/apache2/sites-enabled/ erstellt wird. Für 'default' sollte es dort schon einen Link geben. Apache hat sogar ein spezielles Kommando bereit, welches genau einen solchen Symlink erstellt.
# a2ensite sslDas Modul muss ebenfalls aktiviert werden:
# a2enmod ssl
Dann muss noch in der /etc/apache2/ports.conf die folgende Zeile hinzugefügt werden:
Listen 443
Bearbeite /etc/apache2/sites-available/ssl (Oder wie auch immer die Datei genannt worden ist) und ändere den port 80 auf 443. Auch das virtual host setting muss geändert werden.
Füge die Zeile "SSLEngine On" und "SSLCertificateFile /etc/apache2/ssl/apache.pem" hinzu. Das Konfigurationsfile sollte mit den folgenden Zeilen beginnen:
NameVirtualHost *:443
<VirtualHost *:443>
SSLEngine OnSSLCertificateFile /etc/apache2/ssl/apache.pem ...
</VirtualHost>
Nach einem Neustart des Apache /etc/init.d/apache2 sollte nun https-verfügbar sein.
Teste mit:
https://hostname/