Problem:
Aus gewissen Gründen möchte man evtl. seinen Qmail selber kompilieren. Nur hat SWsoft den Qmail für Plesk ein bischen verändert/erweitert/verbessert.
Lösung:
Im Grunde braucht man die Original Qmail-Sourcen und folgenden Patch aus der swsoft knowledgebase. Achtet auf Eure Plesk-Version! (Patch für Plesk 7.4 reloaded) verfügbar und es sind nur die Qmail-Patches. Erweiterungen wie z.B. relaylock
finden sich nicht als Sourcecode.
#download
cd /usr/local/src
wget http://www.qmail.org/qmail-1.03.tar.gz
#hier die Patches für Plesk 8.2:
wget http://kb.swsoft.com/attachments/1161/plesk82_qmail_patches.tgz
#oder die Patches für Plesk 8.3:
wget http://kb.swsoft.com/attachments/1161/plesk83_qmail_patches.tgz
#auspacken:
tar xzf qmail-1.03.tar.gz
tar xzf qmail_patches.tar.gz
#patchen cd qmail-1.03
for p in ../qmail_patches/patch-* ; do patch -p0 < $p ; done
patch -p0 < ../qmail_patches/fr49-quota-patch
Theoretisch kann man nun seine Änderungen machen und dann kompilieren. Aber...
Achtung! make setup check
darf nicht (!!!) ausgeführt werden. Auch ./config
und make install
sollte man vermeiden.
Typischer Fehler:
undefined references to `errno'
Wird gelöst indem man die error.h
entsprechend ändert:
//extern int errno;
#include <errno.h>
Installation:
Je nachdem was man austauschen will muß vorher der entsprechende Dienst runter gefahren werden:
- Nur Dateien für den Mail-Empfang:
Hier muß lediglichxinetd
beendet werden, damit die Dateien frei zum überspielen sind.
Typischer Fehler hierbei:qmail-smtpd
läßt sich nicht überspielen weiltextfile busy
. Entweder mitkillall qmail-smtpd
komplett beenden oder einfach etwas (bis zu 5 Minuten) warten. - Dateien für den Mail-Versand und lokaler Zustellung:
Für diese Dateien sollte der Qmail beendet werden.
Beispiele:
Zwei klassische Beispiele:
qmail-queue-Patch
Wir nehmen den qmail-queue-Patch mit hinzu:
wget http://www.qmail.org/qmailqueue-patch
patch -p1 < qmailqueue-patch #Kompilieren: make WITH_QMAILQUEUE_PATCH=yes
Nach dem Compilieren kopiert man dann nur die wirklich veränderten Programme nach /var/qmail/bin/
. Im Falle des qmailqueue-Patch sind dies:
condredirect
, forward
, qmail-inject
, qmail-local
, qmail-qmqpd
, qmail-qmtpd
, qmail-send
, qmail-smtpd
, qreceipt
.
Zum Installieren muß Qmail als auch xinetd gestoppt werden.
SMTP-Logging:
Das SMTP-Programm qmail-smtpd
ist sehr stumm beim Empfang von Emails. Daher wollen wir anhand von SMTP-Auth etwas mehr Leben ins Logfile bringen.
Dazu bearbeiten wir die Datei qmail-smtpd.c
und ergänzen nur die Fett gedruckten Zeilen an der entsprechenden Stelle:
...
#include "wait.h"
#include "fd.h"
#include <syslog.h> /* huschi */
...
static void smtpauth_authenticate(void)
{
...
close(fds[1]);
wait_pid(&st, pid);
openlog("qmail-smtpd", 0, LOG_MAIL); /* huschi */
if (wait_exitcode(st) == 0) {
out("235 go ahead\r\n");
flush();
syslog(LOG_INFO, "smtp-auth[%i] ok for login: %s", getpid(), smtpauthlogin); /* huschi */
relayclient="";
authenticated=1;
return;
}
sleep(2);
out("535 auth failure\r\n");
flush();
syslog(LOG_DEBUG, "smtp-auth[%i] fail for login: %s", getpid(), smtpauthlogin); /* huschi */
return;
}
Nach einem make
kopiert man dann die neue qmail-smtpd
nach /var/qmail/bin/
.
Zum Installieren sollte kurz xinetd beendet werden.
Den Erfolg kann man dann im Maillog verfolgen:
tail -f /usr/local/psa/var/log/maillog | grep smtpd