Kategorien
Microblog

Jetzt ist aber genug „Komm mor…

Jetzt ist aber genug „Komm morgen wieder vorbei.“. #

Kategorien
Microblog

@admartinator Aber in London i…

@admartinator Aber in London ist es erst 14:04. #

Kategorien
Microblog

@Morgenland Wieso? Man kann Ro…

@Morgenland Wieso? Man kann Rolex-Uhren ja viel vorwerfen (z.B. dass fast alle hässlich sind), aber die Werke sind nicht von Pappe. #

Kategorien
Microblog

@heinzkamke Lieber Community,….

@heinzkamke Lieber Community,… 😉 #

Kategorien
Microblog

„Hoeren Sie mit UEberbezahlung…

„Hoeren Sie mit UEberbezahlung von populaeren Chronometern auf.“ — selten so drohend klingenden #Spam bekommen. #

Kategorien
Microblog

Meine „Twitter Fans“: @liamara…

Meine „Twitter Fans“: @liamara @mueller_wind @sauerstoff @flexfoxx @zellmi @tilohensel @zettt @ha75 @kahta (sagt http://mytwitterfans.com ). #

Kategorien
Microblog

@ha75 Die pflege ich zu ignori…

@ha75 Die pflege ich zu ignorieren. #StayFriends #Spam #

Kategorien
Microblog

Was hatte wohl der Googlesuche…

Was hatte wohl der Googlesucher vor, der mit der Anfrage „laser wasser anwenden“ zu mir kam? #

Kategorien
Microblog

RT @marcus Moin! Das wurde abe…

RT @marcus Moin! Das wurde aber auch Zeit: Trending Topics auf Deutsch: http://t.co/AaP78QU #

Kategorien
Microblog

Wenn ich vor dem Fenster so vi…

Wenn ich vor dem Fenster so viel Wasser sehe (und das nicht ordentlich in Meeresform rumliegt), dann will ich zurück ins Bett kriechen. #

Kategorien
Egoblog

Most Recent Mugshot

1289854651

Kategorien
Microblog

CDU-Parteitag, wo auch die jun…

CDU-Parteitag, wo auch die jungen wilden graue Haare haben. #Röttgen #ZDF #

Kategorien
Microblog

Komme (der Aufforderung nach) …

Komme (der Aufforderung nach) und besuche mal Barbapapa. #

Kategorien
Microblog

Habe letzten Freitag was geler…

Habe letzten Freitag was gelernt und bin *vor* der Heimfahrt nochmal aufs Klo gegangen (9km können lang sein). #

Kategorien
Microblog

RT @sauerstoff Ich bin eh der …

RT @sauerstoff Ich bin eh der einzig normale hier. #

Kategorien
Microblog

@Zellmi In USA-Land kann man A…

@Zellmi In USA-Land kann man Anrufbeantworter an die Wand und Telefone dann daran anschließen (seriell). In D-Land nicht (parallel). #

Kategorien
Microblog

Nanu? #Apple http://twitpic.co…

Nanu? #Apple http://twitpic.com/3748l8 #

Kategorien
Microblog

@buchmamsell Echt? Was hat den…

@buchmamsell Echt? Was hat denn in meinem alten Buch dann gefehlt? #Es (vielleicht nochmal lesen?) #

Kategorien
Blog

Einrichtung eines SVN-Spiegelservers

Der Subversion-Server des Kunden ist der langsamste seiner Art. Das sorgt für Frust; nicht nur blickt man in Eclipse oft minutenlang auf „Pending…“, wenn man Teilbäume aufklappen möchte, es schlagen auch Hudson-Builds fehl, weil svn update nicht durchgelaufen ist.

Für Hudson könnte man sich behelfen, indem man mit svnsync eine lokale (readonly-)Kopie des Repositories einrichtete, aber in der Entwicklungsumgebung hilft das nicht weiter. Seit Subversion 1.5 ist es zum Glück möglich, das dav_svn-Modul im Apache so zu konfigurieren, dass schreibende Zugriffe direkt auf ein zentrales Repository (den Master) umgeleitet werden während lesende Operationen auf einer lokalen Kopie ausgeführt werden.

Die im Netz zu diesem Thema zu findenden Anleitungen gehen größtenteils davon aus, dass man Master- und Slaveserver unter seiner eigenen Kontrolle hat. Wir können aber am Master nichts konfigurieren und werden deshalb eine etwas sparsamere Variante einrichten müssen.

Voraussetzungen:

  • Apache (min. 2.2)
  • svn (min. 1.5)
  • Apache mod_dav_svn und mod_proxy (sowie Module, von denen die jeweils abhängen)
  • Apache mod_ssl (wenn das Master-Repository per https erreichbar ist)

Schritt 0:

Benutzer anlegen (nennen wir ihn mal svnsync), mit dessen Account später die Synchronisation laufen wird. Weil der sich den Zugriff auf das Repository mit dem Webserver teilen wird, habe ich ihn in einer gemeinsamen Gruppe angelegt.

Schritt 1:

Repository anlegen (als root):

svnadmin create /var/www/svn/projekt

Die einzelnen Benutzer müssen wir nicht anlegen, weil das Benutzermanagement und die Commitrechte weiterhin vom Masterserver verwaltet werden.

Schritt 2:

Schreibenden Zugriff aufs Repository für alle Benutzer außer svnsync verbieten. Das geht mit einem „pre-revprop-change“-hook:

#!/bin/sh
USER="$3"

if [ "$USER" != "svnsync" ]; then
    echo >&2 "Only the svnsync user can change revprops"
    exit 1
fi

exit 0

Schritt 3:

Synchronisation starten:

Als Benutzer svnsync muss man die Synchronisationsverbindung erst erstellen (init) und dann die erste Synchronisation durchführen (sync). Je nachdem, wieviele Revisionen es im Master-Repository schon gibt kann das seine Zeit dauern.

 svnsync init file:///var/www/svn/projekt https://subversion.kunde.de/svn/projekt
 svnsync sync file:///var/www/svn/projekt

Passwörter für das Master-Repository müssen in dieser Phase eventuell eingegeben werden und werden dann im Home-Verzeichnis des Synchronisationsbenutzers im .svn-Verzeichnis gespeichert — das ist also mit der notwendigen Vorsicht/Sicherheit zu behandeln.Ständige Synchronisation einrichten:

Da uns, wie gesagt, das Master-Repository nicht gehört, können wir es nicht dazu bringen, uns von Änderungen zu unterrichten. Den sync-Befehl lassen wir deshalb von cron einmal pro Minute ausführen:

* * * * * svnsync sync file:///var/www/svn/projekt > /dev/null 2>&1

Schritt 4:

Zugriff über Apache einrichten:

In schmerzhaften Versuchen musste ich feststellen, dass der Zugriff über den Spiegel nur dann zuverlässig funktioniert, wenn sich die beiden Server möglichst ähnlich sind. Mit verschiedenen Repository-URLs (also wenn der „Verzeichnisname“ des Spiegels sich vom Original unterschied) hatte ich z.T. seltsame Fehlermeldungen („405 Unsupported Operation“,…). Auch der Wechsel von https (auf dem Kundenserver) auf http sorgt für unerklärliches Verhalten bei Verschiebe- und Umbenennoperationen. Wenn das Master-Repository über https erreichbar ist, benötigt man aber ohnehin mod_ssl (und muss den Parameter „SSLProxyEngine“ auf „on“ stellen).

Module laden (dies ist der Mindestumfang, und die Syntax unterscheidet sich je nach Linux/Apache-Distribution):

LoadModule dav_svn_module mod_dav_svn.so
LoadModule proxy_module mod_proxy.so
LoadModule proxy_http_module mod_proxy_http.so
LoadModule ssl_module mod_ssl.so

Konfiguration (Schnipsel an für diesen Apache geeignete Stelle einfügen):

SSLProxyEngine on

<Location /svn/projekt>
    DAV svn
    SVNPath /var/www/svn/projekt
    SVNMasterURI https://subversion.kunde.de/svn/projekt
</Location>

Jetzt kann man mit dem schnellen lokalen Server statt mit der weit entfernten lahmen Ente arbeiten (aber Achtung: nur per http(s) zugreifen, sonst entsteht Chaos!).

Kategorien
Microblog

Mein Kommentar muss erst noch …

Mein Kommentar muss erst noch „best�tigt“ werden… #