SVN Hooks: automatischer Checkout nach Commits

Projekte mit Subversion zu verwalten macht für größere Projekte durchaus Sinn. In Kombination mit trac erhält man sogar noch ein sehr schickes Werkzeug zum Erstellen und Verwalten von Tickets, Milestones, Tags und Branches und noch ein Wiki dazu. Doch wenn mehrere Entwickler an einem Projekt arbeiten, das in einer einheitlichen Umgebung getestet werden soll, muss ständig nach jedem Commit auf der Testumgebung ein Checkout gemacht werden. Das ist zwar nicht viel Aufwand, aber es kann automatisiert werden. Besonders Webprojekte auf Basis dynamischer Skriptsprachen können davon profitieren, wie etwa ein PHP-Projekt, dass auf dem SVN-Server-eigenen Apache live getestet werden soll.

SVN bietet dazu sogenannte Hooks, die bei verschiedenen Events Skripts ausführen. Templates für Hooks befinden sich bereits im SVN-Repository unter /hooks/ – in diesem Beispiel wird ein Checkout in ein definiertes Verzeichnis ausgeführt, sobald ein Commit / Update erfolgt ist.

Dazu sind folgende Schritte notwendig:

  1. Template “post-commit.tpl” in “post-commit” umbenennen
    cd SVNREPO/hooks/
    mv post-commit.tpl post-commit
  2. post-commit So anpassen, dass das “SVNREPO/hooks/bin/autocheckout.sh” Skript ausgeführt wird
    [...]
    REPOS="$1"
    REV="$2"#commit-email.pl "$REPOS" "$REV" commit-watchers@example.org
    #log-commit.py --repository "$REPOS" --revision "$REV"
    ${REPOS}/hooks/bin/autocheckout.sh "$REPOS" "$REV" trunk/ /WEBROOT/MEINPROJEKT

    Die im Template vorhandenen zwei Befehlsaufrufe werden auskommentiert.
  3. autocheckout.sh erstellen
    mkdir bin/
    wget http://palita.net/blog/wp-content/uploads/autocheckout.txt bin/autocheckout.sh

    Anmerkung: Dieses Skript wurde übernommen von http://larve.net/people/hugo/2007/05/svn-auto-look-and-checkout
  4. autocheckout.sh und post-commit anpassen
    chmod a+x post-commit bin/autocheckout.sh
  5. Initiales Ausführen & Testen
    sudo -u apache env - ./post-commit WEBROOT/MEINPROJEKT 234
    (234 durch die aktuelle Revision ersetzen, apache durch den Benutzer ersetzen, der Schreibzugriff auf das Webroot hat.)
  6. Commit & Test!

Unter Plesk 9 funktioniert es einwandfrei, jedoch muss dafür eventuell das Webverzeichnis mit Schreibrechten für den Benutzer “apache” versehen werden.

Weblinks:

Posted in Linux at Januar 25th, 2010. No Comments.

Emails mit Procmail vorfiltern

Es hat mich immer genervt, dass alle Emails, die von einem Server ausgehen (z.B. Fail2Ban, logwatch etc.) immer in meinem Postfach landen und als ungelesene Emails irgendwann mein Handy zum bimmeln Bringen, dem ich keine Regeln beibringen kann. Die Lösung ist denkbar einfach, wenn sie mir auch erst heute in den Sinn kam: einfach procmail die Arbeit machen lassen, anstelle meines Mailclients.

Procmail ist ein Mailprozessor, der zum serverseitigen Filtern von Emails eingesetzt wird. Um einen Procmail-Filter bei einer QMail-Umgebung (sowohl procmail als auch qmail sind bei Plesk standardmäßig integriert) aufzusetzen, bewegt man sich erst mal ins Verzeichnis des Mailnamen.

Für email@domain.com etwa
cd /var/qmail/mailnames/domain.com/email

In diesem Verzeichnis mit dem bevorzugten Editor (vi / nano / …) eine Datei .procmailrc erstellen, und folgenden Inhalt zur Filterung von Server-Mails erstellen:
# .procmailrc
MAILDIR=/var/qmail/mailnames/domain.com/email/Maildir
DEFAULT=${MAILDIR}

# Filter Servermails
:0:
* ^From.*@NERVIGERSERVER.COM
.VERZEICHNIS/new

Dabei NERVIGERSERVER.COM durch die Domain ersetzen, von dem der Server seine Mails sendet, und VERZEICHNIS durch das IMAP-Verzeichnis, in das die Nachricht verschoben werden soll. /new sollte dabei stehen bleiben.

Jetzt die Datei speichern, und die Datei .qmail im selben Verzeichnis editieren.

Die etwa so aussehende Datei

| true
| /usr/bin/deliverquota ./Maildir

wird jetzt so abgeändert, dass neue Emails nicht mehr an Deliverquota sondern an Procmail gesendet werden. Der Veränderte Inhalt der Datei dazu wäre etwa

| true
#| /usr/bin/deliverquota ./Maildir
| preline /usr/bin/procmail -m .procmailrc

Mehr muss nicht unternommen werden. Man sollte natürlich erst mal Testen ob es funktioniert, bevor man sich darauf verlässt, bevor keine Mails mehr ankommen, unter CentOS 5 und Plesk9 sollte es nach dieser Anleitung gar keine Probleme geben. Bei anderen Systemen sind die Pfade eventuell abweichend.

Procmail kann natürlich noch viel mehr, die manpage von procmailex(5) verrät eigentlich alles.

Manpage online: http://www.gsp.com/cgi-bin/man.cgi?section=5&topic=procmailex

Posted in Linux at Januar 11th, 2010. No Comments.

Plesk 9 und qmail: Bare LF

Wer folgendes in seinem Maillog sieht…

Jan 1 00:00:00 hostname qmail-queue-handlers[15388]: possibly qmail-smtpd exited by timeout, reset connection. See "http://pobox.com/~djb/docs/smtplf.html." for get more information.

… hat ein kleines Problem: Emails von einigen Hotmail-Servern werden nicht mehr empfangen. Grund ist ein Fehler der Hotmail-Server, die anstelle vom von QMail erwarteten CRLF (Carriage Return & Line Feed) nur ein LF am ende einer jeden Zeile bekommt. Die Lösung steht bereits in der Plesk Knowledge-Base:

  1. Download und compilieren von ucspi-tcp sources:
    http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz (Quelle und Anweisungen: http://cr.yp.to/ucspi-tcp/install.html)
  2. Dateien entpacken und in das neue Verzeichnis wechseln:
    tar xfz ucspi-tcp-0.88.tar.gz
    cd ucspi-tcp-0.88
  3. Benötigt wird daraus die Binary aus fixcrio.c, die aber in der Originalversion kein TLS-Support hat. Also sollte man sich eine gepatchte Version von Parallels herunterladen und mit der Originalen ersetzen:
    http://kb.parallels.com/Attachments/11152/Attachments/fixcrio.c
  4. Da sonst wahrscheinlich sowieso ein Fehler auftritt, folgendes in der error.h korrigieren:
    die Zeile
    extern int errno;
    durch
    #include <errno.h>
    ersetzen.
  5. Compilieren:
    make
    make setup check
  6. Compilierte fixcrio binary nach /var/qmail/bin kopieren und Rechte an die Anderen Dateien angleichen:
    cp fixcrio /var/qmail/bin/
    chmod 555 /var/qmail/bin/fixcrio
    chgrp qmail /var/qmail/bin/fixcrio
  7. Den Eintrag
    /var/qmail/bin/fixcrio
    In den Dateien /etc/xinet.d/smtp_psa und /etc/xinet.d/smtps_psa vor “/var/qmail/bin/qmail-smtpd” einfügen. smtp_psa sähe dementsprechend so aus:
    server_args = -Rt0 /var/qmail/bin/relaylock /var/qmail/bin/fixcrio /var/qmail/bin/qmail-smtpd /var/qmail/bin/smtp_auth /var/qmail/bin/true /var/qmail/bin/cmd5checkpw /var/qmail/bin/true
  8. xinet.d neustarten (service xinetd restart)
  9. Fertig

Danach sollte der Fehler nicht mehr auftreten.

Links:

Posted in Linux at Januar 3rd, 2010. No Comments.

SpamAssassin Problem 2010

Spamassassin hat einen kleinen Bug, der Emails aus dem Jahr 2010 spontan bis zu 3.6 Punkte vergibt, betroffen sind die Versionen 3.2.0 bis 3.2.5.

Behoben wird der kleine Bug entweder mit sa-update oder auch ganz einfach – folgendes am Ende der local.cnf unter /etc/mail/spamassassin/ einfügen:

score FH_DATE_PAST_20XX 0

Weitere Infos dazu auf der Spamassassin Webseite

Posted in Linux at Januar 2nd, 2010. No Comments.