Thailand ...ein Daueraufenthalt

Subversion - Grundinstallation

by Kun Pho


Posted on Mittwoch Februar 02, 2022 at 01:58nachm. in Technik Administration


Der Teufel steckt oft im Detail


... und das Detail ist teuflisch gut versteckt. Als Programmierer weiß man nicht nur, wie ein Versionskontrollsystem funktioniert, sondern auch wie man es installiert und konfiguriert. Stop - Installation ok, Konfiguration ? Wie oft kommt dieses in 10 Jahren vor? Und schon wieder habe ich Stunden verbracht, mit der Fehlermeldung: svn:Authorization failed! Es ist die schlichte Aussage, dass die Anmeldung ok war, aber die Berechtigungen für den Vorgang nicht ausreichen. Die vielen Stunden Suche und Recherche kannst Du Dir sparen, wenn Du eine gute Check-Liste hast. Nach erfolgreicher Installation geht es so für eine einfache SVN-Installation weiter.


Die Beschreibung passt zu: OpenSuse Tumbleweed und Subversion 1.14.1 (r1886195)


Konfigurationsdateien


Subversion verteilt die Einstellungen auf globale und Repository-abhängige Parameter. Die globalen Einstellungen findest Du im Home-Verzeichnis des Eigentümers, dieses ist der User, der die Installation durchgeführt hat und das Verzeichnis dort heißt: .subversion. Bei einer einfachen Installation interessiert mich nur, wie die Keystore-Abfrage deaktiviert werden kann und das läßt sich in der Datei config einstellen:



  • vi $HOME/.subversion/config

  • password-stores =

  • kwallet-wallet =


Beide Einträge leer lassen. Mehr ist hier erstmal nicht zu tun.


Die Einstellungen in den Repositories setzen natürlich voraus, dass sie bereits existieren:



  • mkdir -p /srv/svn/repos/

  • svnadmin create /srv/svn/repos/InternetPuzzle131


Der Ordner /srv/svn/repos/ ist der Trailer für jedes Repository. Danach wird ein Repository für das Projekt InternetPuzzle131 angelegt. Die Aufruf-URL für dieses Repository ist dann: svn://192.168.1.10/InternetPuzzle131


Statt der IP-Adresse kann natürlich auch ein bekannter Hostname oder eine Domaine benutzt werden. Achtung! Bei allen Konfigurationen immer den vollen Pfad  mitnehmen. Es interessieren uns hier 3 Dateien. Sie liegem im Ordner /srv/svn/repos/InternetPuzzle131/conf:



  • authz

  • passwd

  • svnserve.conf


Alle Einträge in den Konfigurationsdateien beginnen in Spalte 0. Ein Leerzeichen vor einem Eintrag, wird auch als solches gelesen! Wir stellen hier die Berechtigungen ein. In authz fügen wir die folgenden Zeilen ein:



  • [InternetPuzzle131:/]

  • * = r

  • niknak = rw

  • seinfreund = rw


Sie Bedeuten: Im Repository InternetPuzzle131 gilt rekursiv vom Root-Verzeichnis (/) abwärts für anonymous-user die Lese-Berechtigung und die user: niknak und seinfreund haben zusätzlich die Schreib-Berechtigung. Da niknak und seinfreund die gleichen Berechtigungen haben, kann man sie auch in eine Gruppe zusammen fassen. Das sieht dann in authz so aus:



  • [groups]

  • nn_and_sf = niknak,seinfreund

  • [InternetPuzzle131:/]

  • * = r

  • nn_and_sf = rw


In passwd werden die user mit Passwörtern beglückt :-) Jeder Benutzer hat eine eigene Zeile. Das sieht dann so aus und braucht keine weitere Erklärung:



  • [users]

  • niknak = knickknack

  • seinfreund = dideldumm


In svnserve.conf sind 4 Einstellungen zu machen:



  • anon-access = read

  • auth-access = write

  • password-db = passwd

  • authz-db = authz


Die ersten beiden Zeilen drücken das Gleiche aus, wie die file-bezogenen Berechtigungen aus authz, hier aber mit Bezug auf das Repository. Die letzten Beiden sind die Verweise auf die Dateien.


Jetzt sollten wir eigentlich fertig sein. Es funktioniert aber trotzdem noch nicht :-(


Das teuflische Detail:


vi /etc/sysconfig/svnserve enthält die Start-Optionen für den Subversion-Daemon und die sind default auf Read only gesetzt:



  • SVNSERVE_OPTIONS="-d -R -r /srv/svn/repos"

  • rcsvnserve stop


lösche das -R und werde glücklich. :-)



  • SVNSERVE_OPTIONS="-d -r /srv/svn/repos"

  • rcsvnserve start


Nun läßt sich das Repository ohne Fehler befüllen, z.B. mit:



  • svn import /home/nicknak/ftp-Ordner/InternetPuzzle131/ file:///srv/svn/repos/InternetPuzzle131 -m Inital


... und wenn es wieder raus soll mit:


  • svn co svn://localhost/InternetPuzzle131 /home/nicknak/InternetPuzzle131


aus dem lokalen Datei-System.




In Eclipse benutze ich das Plugin: subversive SVN-Teamprovider und NativeJavaHL - Connector. Beide über den üblichen Weg installieren und fertig. Das Grundsystem läuft somit reibungslos. Es gibt noch einen kleinen Fallstrick: Wenn Du Subversion als root installiert hast und Deinen ersten Commit absetzen möchtest stolperst Du über Diese Meldung:



  • Some of selected resources were not committed.
    Permission denied
    svn: Commit failed (details follow):
    svn: Can't open file '/srv/svn/repos/KrimsKrams/db/txn-current-lock': Permission denied


Das ist jetzt kein Faux pas, denn wenn Du die Versionskontrolle nur lokal einsetzen möchtest, ist dieses durchaus legitim. Es hebelt aber den Sinn der verteilten Entwicklung aus. Dann schauen wir uns mal den Verursacher an:



  • drwxr-sr-x 1 root root 310 Jun  9 11:02 db


Der Subversive-Client kommt nicht als authentischer root zum Server und die Subversion-Datenbank verhindert somit einen Schreibzugriff aus der Ferne, da hilft auch das Sticky-Bit nicht weiter. Die Berechtigungen für das db-Verzeichnis müssen also dem Client entsprechend angepasst werden.


Für für das Fine-tuning empfehle ich einen Blick in die  Apache - Doku und den Gesamt-Überblick in Red-Bean.