Wenn SVN plötzlich streikt

Wenn Sie Ihr SVN u.a. auch für die automatische Versionsverteilung nutzen (Stichwort "post-commit") und dieser Dienst plötzlich nicht mehr läuft, nutzen Sie folgende Möglichkeiten für die Analyse bzw. Lösung: Logging des post-commit hooks

  • Öffnen Sie die entsprechende Scriptdatei Beispiel:
    vi /srv/svn/example/hooks/post-commit
  • Ergänzen Sie die Datei entsprechend diesem Beispiel:
    #!/bin/sh
    echo `date` " Start SVN post-commit" >> /var/log/svn.log
    whoami >> /var/log/svn.log
    svn update /srv/htdocs/example --username x --password y >> /var/log/svn.log 2>&1
    echo `date` " End SVN post-commit" >> /var/log/svn.log
    In diesem Beispiel wird u.a. der Zeitstempel und der Benutzername des ausführenden Benutzers gespeichert
  • Legen Sie die angegebene Logdatei an:
    touch /var/log/svn.log
  • Setzen Sie die passende Berechtigung:
    chmod 777 /var/log/svn.log
    Natürlich sollte später die exakte Berechtigung für den richtigen Benutzer gesetzt werden. Für die Analyse ist die komplette Freigabe jedoch besser
  • Committen Sie eine Änderung in Ihrem System und prüfen Sie anschließend die Logdatei Beispiel:
    Thu Jan 14 21:44:43 CET 2010  Start SVN post commit
    wwwrun
    U    /srv/htdocs/example/test/index.php
    Updated to revision 1064.
    Thu Jan 14 21:44:44 CET 2010  Ende SVN post commit
Häufiger Fehler bei post-commit Problemen Sehr häufig finden Sie z.Bsp. die folgende Fehlermeldung in Ihrem Log:
Thu Jan 14 21:43:42 CET 2010  Start SVN post commit
wwwrun
svn: Can't convert string from native encoding to 'UTF-8':
svn: empf?\195?\164nger.bmp
Thu Jan 14 21:43:43 CET 2010  Ende SVN post commit
In diesem Beispiel wurde versucht, eine Datei "empfänger.bmp" im Trunk zu speichern. Aufgrund der Sprachdefinition in "locale":
LC_CTYPE=de_DE.UTF-8
konnte SVN mit dem Umlaut "ä" nicht viel anfangen und versuchte das Zeichen zu konvertieren. Den dadurch entstandenen Dateinamen konnte das System nicht erkennen. Lösungsvorschlag 1
  • Benennen Sie (im o.a. Beispiel) die Datei um in "empfaenger.bmp"
  • Lösen Sie den post-commit Hook manuell aus:
    sudo -u wwwrun /srv/svn/example/hooks/post-commit
  • Das SVN sollte wieder normal funktionieren
Lösungsvorschlag 2
  • Führen Sie folgenden Befehl aus:
    export LC_CTYPE=en_US.UTF-8
  • Überprüfen Sie Ihre "locale" Umgebung:
    locale
  • Nun sollten Sie u.a. den folgenden Eintrag sehen:
    LC_CTYPE="en_US.UTF-8"