Subversion Tips

Aufsetzen eines Repository

Der Vorteil eines WebDav - Pepositories gegenüber eines SSH- Zugangs liegt in der Multiuser- Fähigkeit: Mit WebDav können viele User das gleiche Repository benutzen, und das Subversion generierte change log zeigt die unterschiedlichen Usernamen.

Um WebDav und Subversion unter SuSe 10.2 überhaupt zum Laufen zu bekommen, muß man das Packet Subversion-Server installieren.

Darin verbergen sich die Apache- Module mod_dav_svn und mod_authz_svn

Wenn man nach der Installation dann das zweifelhafte Vergnügen hat, das YAST nicht mehr die Installation des HTTP- Servers zuläßt (?), muß man die Module von Hand in den Server reinfrickeln:

die Module liegen unter /usr/lib/apache2/*.so, eingebunden werden sie aber aus dem Vezeichnis /usr/lib/apache2-prefork/, darum muß man erstmal einen symbolischen Link für die beiden Module anlegen.

die Liste der Module, die Apache beim Starten einbindet, findet sich in der /etc/sysconfig/apache2. Dort müssen die beiden Module ebenfalls ergänzt werden.

Eine brauchbare Repository - Configdatei entsteht beim Packetinstallieren in /etc/apache2/sysconfig.d/ . Diese ist gemäß den im folgenden gewählten Verzeichnissen anzupassen:

/etc/apache2/sysconfig.d/subversion.conf

# Example configuration for a subversion repository
# see /usr/share/doc/packages/subversion for the full documentation
#
<IfModule mod_dav_svn.c>
<Location /svn/red>
DAV svn
SVNPath /var/local/repos/red
# Limit write permission to list of valid users.
<LimitExcept GET PROPFIND OPTIONS REPORT>
# Require SSL connection for password protection.
# SSLRequireSSL
AuthType Basic
AuthName "RED Revison Control"
AuthUserFile /var/local/password
Require valid-user
</LimitExcept>
</Location>
</IfModule>

Zurzeit setzt das subversion-Paket kein Repository auf, man muss es manuell erzeugen. Eine mögliche Stelle für ein Repository ist in /var/local/repos/svn.

Erzeugen des Verzeichnisses

# mkdir -p /var/local/repos/svn/red

und der Repository Datenbank:

# svnadmin create /var/local/repos/svn/red

In die WebDav - Configuration schreibt man zweckmäßigerweise das Eltern- Verzeichnis, um so mehrere Repositories anlegen zu können

Trac dagegen benötigt ein Verzeichnis, was NICHT im gleichen Verzeichnis des Repositories liegen darf. Überlappen sich diese beiden Verzeichnisse, geht der Zugriff übers Web ziemlich in die Hose…

Also z.B.

# mkdir -p /var/local/repos/trac/red

Dies wird dann ebenfalls Apache beigebracht:

/etc/apache2/conf.d/trac.conf

<IfModule mod_alias.c>
Alias /trac /var/local/trac
</IfModule>
<Directory /var/local/trac>
Options +Indexes +Multiviews -FollowSymLinks
IndexOptions FancyIndexing \
ScanHTMLTitles \
NameWidth=* \
DescriptionWidth=* \
SuppressLastModified \
SuppressSize
order allow,deny
allow from all
</Directory>
<Location /trac/red>
SetHandler mod_python
PythonHandler trac.web.modpython_frontend
PythonOption TracEnv /var/local/trac/red
PythonOption TracUriRoot /trac/red
# PythonDebug on
</Location>

Wenn's irgendwie nicht funktioniert, kann man mit

PythonDebug on
</Location>

die überaus hilfreiche Debug- Funktion aktivieren

Und letztlich braucht man noch ein Verzeichnis für die Ergebnisse, welches ganz normal von Apache lesbar sein soll und die Ausführung von PHP erlauben muß

# mkdir -p /var/local/repos/res/

/etc/apache2/conf.d/redjobs.conf

##
## RED Outpt files
##
<IfModule mod_alias.c>
Alias /red /var/local/res
</IfModule>
<Directory /var/local/res>
Options +Indexes +Multiviews -FollowSymLinks +ExecCGI -Includes
IndexOptions FancyIndexing \
ScanHTMLTitles \
NameWidth=* \
DescriptionWidth=*
# SuppressLastModified \
# SuppressSize
order allow,deny
allow from all
</Directory>

Nun sind die Verzeichnisse für den WWW Server schreibbar zu machen:

# chown -R wwwrun:www /var/local

Konfiguration von Apache2

Um den Zugriff auf das Repository mittels Nutzerauthentifizierung zu ermöglichen, wird subversion und DAV mit Hilfe der passenden Configurations- Datei in Apache eingebunden:

WICHTIG: Das Subversion/DAV- verwaltete Verzeichnis darf nirgendwo anders in der Apache- Konfiguration verwendet werden (auch nicht z.B. als Alias). Dies führt sonst zu einer schwer verständlichen Fehlermeldung (301 Permanenty Removed) und zu einer langen Debug- Nacht vor'm Rechner….

Danach erzeugen Sie eine Nutzerauthentifizierungsdatei mit dem Kommando:

htpasswd2 -c /var/local/password ein-Nutzer

Sollen neue Mime-types ausgegeben werden, muß die Mime- config datei ergänzt und der Server danach neu gestartet werden:

/etc/apache2/mime.types:
model/x3d+xml x3d

Starten Sie Apache2 neu und Ihr neues Subversion Repository wird unter der URL http://hostname/repos/project1 verfügbar sein.

Trac Setup für Suse 11.1

Wir folgen den Instruktionen von http://en.opensuse.org/TRAC und installieren die dort genannten Packete.

Dann patchen wir das Track packet mit https://bugzilla.novell.com/show_bug.cgi?id=457674 (der dort gezeigte Patch passt aber nicht mehr zum aktuell im Trac- Packet enthaltenen Source..)

Folgen dann dem Kochrezept aus /usr/share/doc/packages/trac/README.SUSE.html und /usr/share/doc/packages/subversion/README.SuSE

Zusätzlich muß man noch mod_Python in der Apache- Konfiguration aktivieren und TRAC_MOD_PYTHON in ''/etc/.

Und last not least muß man im angelegten svn- Verzeichnis die Schreibrechte für das dav- Verzeichnis für den Webserver-User setzen. Das ist zwar so auch im o.g. SuSe- Howto beschrieben, aber zu dem Zeitpunkt, zu dem dies laut HowTo geschehen soll, gibt es das Dav- Verzeichnis noch gar nicht.

Erzeugen von Commit- Scripten

Wie man Commit- Scripte erzeugt, findet sich am besten unter Aufrüsten einer Diskstation zum RED- Server

Konfigurieren von SVN unter Windows auf einem Company- Rechner

Will man Subversion in der Kommandozeile auf dem Firmenrechner benutzen, weil die grafischen Frontends wie RapidSVN Admin- Rechte zum Installieren benötigen, die man meistens gar nicht hat, dann muß SVN auch mitgeteilt werden, durch welchen Proxy es überhaupt „nach aussen“ auf den Repository- Server gelangen kann.

Dazu legt man im Verzeichnis %APPDATA%\subversion die Datei SERVERS an oder man ändert die evt. schon vorhandene Datei. Die relevanten Einträge sind dabei:

[global]
http-proxy-host=12.34.56.79
http-proxy-port=83

Man kann aber evt. auch die Registry über VBS verändern:

Set WshShell = CreateObject( "WScript.Shell" ) WshShell.RegWrite "HKEY_CURRENT_USER\Software\Tigris.org\Subversion\Servers\global\", 0, "REG_DWORD" WshShell.RegWrite "HKEY_CURRENT_USER\Software\Tigris.org\Subversion\Servers\global\http-proxy-host", "19.12.1.44", "REG_SZ" WshShell.RegWrite "HKEY_CURRENT_USER\Software\Tigris.org\Subversion\Servers\global\http-proxy-port", "83", "REG_SZ" WshShell.RegWrite "HKEY_CURRENT_USER\Software\Tigris.org\Subversion\Servers\global\#http-proxy-username", "", "REG_SZ" WshShell.RegWrite "HKEY_CURRENT_USER\Software\Tigris.org\Subversion\Servers\global\#http-proxy-password", "", "REG_SZ"