SourceForge "light" im Eigenbau
Posted by Jesco Freund at Jan. 6, 2008 3:19 a.m.
Ein eigener kleiner Projektserver à la SourceForge.net lässt sich in abgespeckter Form ziemlich einfach realisieren – dank Subversion und Trac ist es kein Problem mehr, den Überblick über die eigenen Projekte zu bewahren. In diesem Beitrag beschreibe ich die Einrichtung eines Projektverwaltungs-Servers unter OpenBSD 4.2. Dabei werden die folgenden Vorgaben umgesetzt:
- Jedes Projekt erhält ein eigenes Subversion-Repository
- Jedes Projekt erhält eine eigene Trac-Instanz
- Die Trac-Instanzen sind unter http://projektname.domain.tld erreichbar
- Schreibender Zugriff auf das Subversion-Repository erfolgt nur über SSH mit Public Key Authentifizierung
- Die Trac-Instanzen werden bestmöglichst voneinander abgeschottet
Direkter anonymer SVN-Zugriff ist mit dem vorgestellten Setup zwar nicht möglich, aber dafür entschädigt Trac mit einem recht ordentlichen Source Code Browser.
Für den Nachbau wird ein lauffähiges OpenBSD 4.2 mit installiertem xbase42-Fileset benötigt – ohne libexpat verweigern Trac und Subversion den Dienst (siehe hierzu auch den entsprechenden Abschnitt der OpenBSD-Upgrade-Anleitung). Der in OpenBSD integrierte Apache wird später für den Zugriff auf die Trac-Instanzen benötigt; er muss daher mit mod_proxy-Unterstützung kompiliert sein. Wenn die Datei /usr/lib/apache/modules/libproxy.so nicht existiert, dann einfach wie in einem älteren Blog-Eintrag beschrieben den Apache neu konfigurieren und kompilieren – damit klappt es bei mir jedenfalls.
Die Installation ist dank vorhandener Packages problemlos, die Konfiguration simpel:
pkg_add subversion trac
ln -s /usr/local/bin/python2.4 /usr/local/bin/python
ln -s /usr/local/bin/pydoc2.4 /usr/local/bin/pydoc
mkdir /var/{svn,trac}
echo /usr/bin/false >> /etc/shells
Die Verzeichnisse /var/svn bzw. /var/trac sollen später die Subversion-Repositories bzw. die Trac-Instanzen aufnehmen. /usr/bin/false wird als Shell für die User benötigt, unter denen später die Trac-Instanzen laufen sollen.
Die Apache-Konfiguration muss dahingehend modifiziert werden, dass mod_proxy geladen wird:
vi /var/www/conf/httpd.conf
# die Zeile muss ggf. eingefügt werden:
LoadModule proxy_module /usr/lib/apache/modules/libproxy.so
apachectl stop
apachectl start
Nun ist alles soweit vorbereitet, dass ein Projekt eingerichtet werden kann. Ich stelle hier einmal die manuelle Einrichtung vor; natürlich ließen sich die beschriebenen Schritte für eine Plattform mit einer größeren Anzahl an Projekten automatisiert ausführen. Als Beispiel wird das Projekt „MyProject“ eingerichtet.
Die Trennung der Projekte erfolgt am einfachsten über die Dateisystem-Berechtigungen, die OpenBSD wie jedes andere unixoide Betriebssystem von Haus aus mitbringt. Um Benutzern des Systems den Zugriff auf mehrere Projekte zu ermöglichen, wird für jedes Projekt lediglich eine Gruppe angelegt, die dann Schreibberechtigung für das Repository bekommt. Für den Trac-Server wird ein eigenes Benutzer-/Gruppen-Pärchen angelegt, das nur für den Betrieb des Trac-Daemons zuständig ist:
groupadd -g 10001 myproject
adduser -home /var/trac
Use option ``-silent'' if you do not want to see all warnings and questions.
Reading /etc/shells
Check /etc/master.passwd
Check /etc/group
Ok, let us go.
Don not worry about mistakes. There will be a chance later to correct any input.
Enter username []: _myproject
Enter full name []: MyProject Trac User
Enter shell csh false ksh nologin sh [ksh]: false
Uid [1002]: 20001
Login group _myproject [_myproject]: [Enter]
Login group is ``_myproject''. Invite _myproject into other groups: guest no
[no]: [Enter]
Login class authpf daemon default mysql staff [default]: [Enter]
Enter password []: [Enter]
Set the password so that user cannot logon? (y/n) [n]: y
Name: _myproject
Password: ****
Fullname: MyProject Trac User
Uid: 20001
Gid: 20001 (_myproject)
Groups: _myproject
Login Class: default
HOME: /var/trac/_myproject
Shell: /usr/bin/false
OK? (y/n) [y]: y
Added user ``_myproject''
Copy files from /etc/skel to /var/trac/_myproject
Add another user? (y/n) [y]: n
Goodbye!
Als nächstes wird das Subversion-Repository angelegt und die Berechtigungen entsprechend angepasst:
svnadmin create --fs-type fsfs /var/svn/myproject
cd /var/svn/
chgrp -R myproject myproject
chmod -R g+w myproject
chmod g-w myproject/format
chmod g-w myproject/db/format
cd ~
Nun muss noch die Trac-Instanz erzeugt werden. Hierfür passen wir aber zunächst das etwas häßlich geratene Home-Verzeichnis des Trac-Users an:
cd /var/trac
mv _myproject myproject
chmod 0700 myproject
vipw
# Pfad des Home-Verzeichnisses für den User _myproject auf /var/trac/myproject anpassen
Die Trac-Umgebung erzeugen wir gleich unter dem dafür angelegten User:
sudo -u _myproject /bin/ksh
trac-admin /var/trac/myproject initenv
cd /var/trac/myproject
chmod -R o-rwx *
chmod -R g-rwx *
vi /var/trac/myproject/conf/trac.ini
# Konfiguration den eigenen Bedürfnissen anpassen
exit
Damit ist die Trac-Instanz betriebsbereit und kann gestartet werden:
sudo -u _myproject /usr/local/bin/tracd -p 10001 -b 127.0.0.1 -s -d --pidfile=/var/trac/myproject/trac.pid /var/trac/myproject/
Zu guter letzt muss noch dafür gesorgt werden, dass Trac auch von außerhalb erreichbar ist. Dazu wird der Apache um einen virtuellen Host mit mod_proxy ergänzt:
mkdir -p /var/www/vhosts/projects/myproject/logs
Die Datei /var/www/conf/httpd.conf bearbeiten und einen neuen virtuellen Host einfügen:
<VirtualHost 12.34.56.78:80>
ServerName myproject.domain.tld
ErrorLog vhosts/projects/myproject/logs/error_log
CustomLog vhosts/projects/myproject/logs/access_log combined
ServerAdmin webmaster@domain.tld
ProxyRequests Off
ProxyPass / http://127.0.0.1:10001/
ProxyPassReverse / http://127.0.0.1:10001/
<Directory proxy:*>
Order Deny,Allow
Allow from all
</Directory>
</VirtualHost>
Nach einem Neustart des Apachen sollte jetzt der Zugriff auf die Trac-Instanz über http://myproject.domain.tld/ funktionieren. Für den direkten Zugriff auf das Subversion-Repository wird ein User benötigt, der per SSH auf den Server zugreifen darf (z. B. Mitglied einer entsprechenden Gruppe ist und gültige public keys in ~/.ssh/authorized_keys liegen hat) und außerdem Mitglied der Gruppe myproject ist. der Zugriff erfolgt dann über svn+ssh://myproject.domain.tld/var/svn/myproject.
1 comment | Defined tags for this entry: Apache, OpenBSD, project hosting, svn, Trac

Content is subject to the conditions of the
Hinweis: Ich habe es in obigem Text nicht explizit angegeben, aber in der Konfigurationsdatei (trac.ini) muss im Abschnitt [trac] die Option base_url wegen des Betriebs hinter einem Proxy unbedingt gesetzt werden:
base_url = http://myproject.domain.tld/
Jesco on Jan. 10, 2008 20:59 CET