Gentoo Subversion Howto

Zusatz vom 10.11.2005: Die Gentoo Pakete wurden dahingehend geändert, dass es nur noch ein Paket für php, mod_php, und php cli gibt: dev-lang/php. Dieses Howto spiegelt die Umstellung noch nicht wider.

  1. Auswahl des BetriebssystemsAls Betriebssysteme fielen zwei in meine engere Auswahl. Auf jeden Fall sollte es ein Linux System sein, da Linux für seine Ausfallsicherheit bekannt ist und sich bestens über Secure Shell (SSH) administrieren lässt. Die zwei Kandidaten, zwischen denen ich mich entscheiden musste, waren Debian GNU/Linux und Gentoo.Debian ist eher ein System für Server in produktiven Umgebungen. Die Pakete für diese Distribution sind meist etwas veraltet, dafür ist aber gewährleistet, dass es Sicherheitsupdates für diese Pakete gibt.Gentoo ist ein relativ junges Linux-Projekt. Im Gegensatz zu Debian ist es nicht darauf ausgelegt möglichst zuverlässig und sicher zu laufen sondern eher aktuelle Pakete anzubieten. Bei Gentoo werden grundsätzlich alle Pakete aus den Quellcodes kompiliert. Dies ist zwar zeitaufwändig, dafür lassen sich die Pakete aber auf Wunsch schnell modifizieren. Es gibt z.B. das USE-Flag System, um bei Paketen die Unterstützung für bestimmte Software zu aktivieren oder deaktivieren. Bei einem Paketmanagement-System mit Binärpaketen wäre es hierzu nötig, den Quellcode herunterzuladen, die Konfigurationsparameter zu verändern und neu zu kompilieren.Das Paket subversion hat folgende USE Flags zur Auswahl:apache2 bash-completion berkdb emacs java nls nowebdav perl python zlib

    Will man nun beispielsweise die Unterstützung für den Apache2-Webserver aktivieren, so schreibt man einfach den Namen des Pakets und die gewünschten USE Flags in die Datei /etc/portage/package.use. Im Falle von Subversion und Apache2 sähe die Datei dann wie folgt aus:

    dev-util/subversion apache2

    Aufgrund dieser Vorteile für Entwicklungssysteme und der Tatsache, dass Subversion verhältnismäßig schnell weiterentwickelt wird, habe ich mich für Gentoo als Betriebssystem für den Subversion-Server entschieden.

    Subversion ist praktisch der Nachfolger des bekannten CVS. Viele Kritikpunkte an CVS wurden ausgebessert. Diese können unter anderem auf der Entwickler-Website oder in Wikipedia nachgelesen werden.
    Den grundlegenden Umgang mit Versionsverwaltungssystemen (Commit, Update etc.) setze ich in diesem Dokument voraus.

  2. SystemanforderungenDie Systemanforderungen an eine Versionsverwaltung wie Subversion sind vergleichsweise gering. Ein Rechner mit ca. 1Ghz Taktfrequenz, 256MB RAM und 40GB Festplatte sollte im Allgemeinen zum flüssigen Arbeiten mit mehreren Projekten ausreichen.Von Assistent Albert Niesen wurde mir ein Rechner mit folgender Spezifikation zur Verfügung gestellt: AMD Athlon 1000, 512MB RAM, 40GB Festplatte. Dieser steht nun im Multimedia-Labor und ist unter dem Hostnamen aippc-05.fh-trier.de ansprechbar.
  3. Installation Teil 1 (Subversion, Apache2, PHP5)Vorausgesetzt wird für die Installation des Subversion-Servers eine fertige Installation gemäß dem Gentoo Handbook.Die Partitionierung des Systems sieht wie folgt aus:Name Part Type FS Type Size (MB)
    -------------------------------------------------------
    hda1 Primary Linux ext2 65.81
    hda2 Primary Linux swap / Solaris 509.97
    hda3 Primary Linux ReiserFS 10001.95
    hda5 Logical Linux ReiserFS 29479.41
    Hierbei dient hda3 als Systempartition und hda5 als Datenpartition. Somit kann die Datenpartition /var falls benötigt mit geringem Aufwand auf eine andere Partition (z.B. auf einer größeren Festplatte) übertragen werden.Da wir von einigen Paketen die aktuelle Version benötigen, müssen wir diese erst auf „unstable“ (Entwicklerversion) stellen. Dazu muss man folgende Einträge in der Datei

    /etc/portage/package.keywords

    machen (falls die Datei nicht existiert, neu erstellen):

    dev-util/subversion
    net-www/apache
    net-www/gentoo-webroot-default
    dev-libs/apr
    dev-libs/apr-util
    dev-php/mod_php
    dev-php/PEAR-PEAR

    und, da php5 durch eine Eintrag in die package.mask fest gesperrt ist, müssen noch folgende Zeilen in die Datei

    /etc/portage/package.unmask

    eingetragen werden (Version 5.0 von PHP wird benötigt weil das Prado Framework, auf welchem SVNManager basiert, nicht mit PHP5.1 kompatibel ist):

    >=dev-php/mod_php-5.0.4
    >=dev-php/PEAR-PEAR-1.3.5-r1

    Es gibt mehrere Arten, einen Subversion-Server aufzusetzen. Hier wird der Weg über den Apache-Webserver gewählt, da man so die vielen Authentifizierungsmodule des Apaches nutzen kann.

    Damit Subversion mit dem Apache zusammenarbeitet, muss noch die USE Flag hierfür gesetzt werden. Diese USE Flag kann entweder global (für alle Pakete, die installiert werden) oder nur für ein bestimmtes Paket gesetzt werden. Da wir die Unterstützung hier nur für ein Paket benötigen, setzen wir die USE Flag in der Datei

    /etc/portage/package.use.

    Zusätzlich fügen wir noch benötigte Einträge für php5 ein, ohne die Portage beim Installieren Fehlermeldungen ausgibt bzw. die SVNManager benötigt. Damit sollte die Datei wie folgt aussehen:

    dev-util/subversion apache2
    >=dev-php/php-5 dba simplexml session sqlite spl
    >=dev-php/mod_php-5 dba simplexml session sqlite spl

    Nun kann mit emerge apache2 mod_php subversion die Installation der angegebenen Pakete gestartet werden. Etwaige Abhängigkeiten findet das Paketmanagement heraus und installiert diese automatisch vor dem jeweiligen Paket. Da bei Gentoo alle Pakete aus den Quellcodes kompiliert werden, kann diese Aktion auf Low-End Rechnern einige Stunden in Anspruch nehmen.

    Sobald die Programme fertig kompiliert sind, kann man die Konfigurationsdatei des Apache Webservers so anpassen, dass mod_php und mod_dav (siehe rfc25184) beim Starten aktiviert werden. In der Datei

    /etc/conf.d/apache2

    muss die mit APACHE2_OPTS beginnende Zeile wie folgt abgeändert werden:

    APACHE2_OPTS="-D DEFAULT_VHOST -D PHP5 -D DAV"

    Um die mod_dav Erweiterungen dav_svn und authz_svn einzubinden, wird die Datei

    /etc/apache2/modules.d/45_mod_dav.conf

    wie folgt angepasst:

    LoadModule dav_module    modules/mod_dav.so
    
    LoadModule dav_svn_module    modules/mod_dav_svn.so
    
    LoadModule authz_svn_module    modules/mod_authz_svn.so
    
    [...]

    und in der Datei

    /etc/apache2/vhosts.d/00_default_vhost.conf

    muss innerhalb der VirtualHost Direktive folgendes hinzugefügt werden:

    DAV svn
    SVNParentPath /var/www/localhost/htdocs/repos
    
    # our access control policy
    AuthzSVNAccessFile
    var/www/localhost/htdocs/repos/accessfile
    
    # only authenticated users may access the repository
    Require valid-user
    # how to authenticate a user
    AuthType Basic  AuthName "Subversion repository"
    AuthUserFile /var/www/localhost/htdocs/repos/passwdfile

    Damit der Webserver klar entscheiden kann, dass das DAV Modul für das Unterverzeichnis /svn zuständig ist, darf dieses Verzeichnis nicht unterhalb des als DocumentRoot angegebenen Ordners liegen. Deshalb passen wir in der 00_default_vhost.conf die DocumentRoot Variable und die zugehörige Directory Direktive wie folgt an:

    DocumentRoot "/var/www/localhost/htdocs/svnmanager"
    [...]

    Die angegebenen Dateien und Verzeichnisse werden in Kapitel 1.4 angelegt.
    Der Apache2 Webserver wird dann schließlich mit

    /etc/init.d/apache2 start

    gestartet. Mit einem Webbrowser kann man sich nun auf der Adresse http://[hostname] davon überzeugen, dass die Installation erfolgreich war.

  4. Installation Teil 2 (SVNManager)SVNManager ist ein Webinterface zur Administration des Subversion-Servers. Dort können Repositories erstellt werden, User- und Gruppenrechte verwaltet werden.Wie auf der SVNManager Projekthomepage beschrieben, benötigt SVNManager das Pear Modul VersionControl_SVN. Dieses kann mit dem Befehl pear install -f -o VersionControl_SVN installiert werden. Der Switch -f (–force) erzwingt dabei, dass Pakete installiert werden können, die nicht den „stable“ status im PEAR Repository haben. Durch die Angabe von -o (–onlyreqdeps) werden alle Module automatisch installiert, die VersionControl_SVN benötigt.Die .zip oder .tar.gz Datei (svnmanager-x.yy.zzz) muss nach/var/www/localhost/htdocs/svnmanagerentpackt werden um im Browser unter http://[hostname] erreichbar zu sein. Damit Apache die Datenbankdatei in dieses Verzeichnis schreiben darf, geben wir dem Benutzer unter dem Apache läuft (apache) alle Rechte auf das Verzeichnis und dessen Unterverzeichnisse

    chmod -R apache:apache /var/www/localhost/htdocs/svnmanager

    Nun muss die Konfiguratiunsdatei config.php des SVNManagers bearbeitet werden. Dies sind die Werte, die geändert werden sollten, die restlichen können bei den Standardeinstellungen belassen werden:

    $htpassword_cmd = "/usr/sbin/htpasswd2";
    $svn_repos_loc = "/var/www/localhost/htdocs/repos";
    $svn_passwd_file = "/var/www/localhost/htdocs/repos/passwdfile";
    $svn_access_file = "/var/www/localhost/htdocs/repos/accessfile";
    $smtp_server = "localhost";

    Natürlich sollte auch das Administratorpasswort abgeändert werden, in diesem Dokument gehe ich von admin_name = "admin" und admin_temp_password = "admin" aus.

    Das Verzeichnis /var/www/localhost/htdocs/repos muss noch erstellt werden, der Besitzer muss der user apache sein.

    Jetzt sollte man sich unter http://[hostname] mit dem admin user und admin temp password einloggen, um unter User Admin -> Add einen Benutzer mit Adminrechten anzulegen. Nachdem man einen Adminbenutzer angelegt hat, wird der temporäre Zugang aus der config.php ungültig.

  5. Einrichtung eines RepositorysGehen wir für unser Beispiel von folgendem Szenario aus:Zwei Studenten (student1 und student2) wollen gemeinsam an einem Softwareprojekt (projekt1) entwickeln. Der betreuende Professor (prof1) will gerne von Zeit zu Zeit einen Blick auf die Entwicklung des Projektes werfen und den Sourcecode auf seinem Heim-PC kompilieren.
    Um ein Repository so einzurichten, dass Zugriffe wie in obigem Beispiel beschrieben möglich sind, sollten folgende Schritte durchgeführt werden:

    • Als Administrator einloggen.
    • Unter Repository Admin -> Create a new Repository ein neues Repository mit dem Namen „projekt1“ anlegen.
    • Unter User Admin -> Add a new user to the repository system erst einen Benutzer „student1“, dann einen Benutzer „student2“ anlegen, beide jeweils ohne Admin-Rechte und mit 0 „Repository Grants“.
    • Unter User Admin -> Add a new user to the repository system einen Benutzer „prof1“ anlegen, mit Admin-Rechten und einer beliebigen Anzahl Repository Grants (Anzahl der Repositories, die der Benutzer anlegen darf) anlegen.
    • Unter Group Admin -> Create a new Group eine Gruppe „studenten“ anlegen.
    • Unter Group Admin -> Change a Group die Gruppe „studenten“ auswählen, „student1“ und „student2“ markieren und mit Confirm zur Gruppe hinzufügen.
    • Unter Repository Admin -> Change Group Privileges of a Repository „projekt1“ auswählen und dann der Gruppe „studenten“ Lese- und Schreibrecht geben indem man die Checkboxen „Write“ und „Read“ markiert und schließlich auf Add klickt. Mit einem Klick auf Done kommt man zurück ins Hauptmenü.
    • Unter Repository Admin -> Change User Privileges of a Repository wieder „projekt1“ auswählen und dem Benutzer „prof1“ Leserecht auf dem Repository geben. Mit Add bestätigen.

    Jetzt ist das Repository fertig angelegt und mit den richtigen Rechten versehen.
    Die Benutzer können nun über die Repository Adresse
    http:///svn/projekt1
    oder verschlüsselt über
    https:///svn/projekt1
    mit Benuternamen und Passwort auf das Repository zugreifen.

  6. Subversion ToolsHier werde ich einige weitere Tools nennen, die bei der Arbeit mit Subversion hilfreich sein können:
    • Subclipse (http://subclipse.tigris.org/)
      Eclipse Plugin zur direkten Versionsverwaltung in Eclipse
    • TortoiseSVN (http://tortoisesvn.tigris.org/)
      Integrierung von Subversion-Befehlen in den Windows Explorer
    • RapidSVN (http://rapidsvn.tigris.org/)
      Grafisches Tool zum Anzeigen von SVN-Repositories (Linux)
    • WebSVN (http://websvn.tigris.org/)
      Zur Betrachtung von SVN Repositories platformunabhängig über den Webbrowser
    • CVS2SVN (http://cvs2svn.tigris.org/)
      Skripte zur Migrierung von CVS Repositories nach SVN
    • Subcommander (http://subcommander.tigris.org/)
      Alternative zu RapidSVN, verwendet qt als Toolkit
    • eSvn (http://esvn.umputun.com/)
      Weitere Alternative, die auf qt basiert
    • JSVN (http://jsvn.alternatecomputing.com/)
      graphischer SVN Client, komplett in Java implementiert

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.0 License.