Eigentlich ist update-alternatives dazu da, um einem das Leben leichter zu machen – soll es doch die Verwaltung mehrerer alternativer Versionen für ein Programm vereinfachen. So einfach ist’s dann leider aber nicht – viele Anleitungen sind recht fehlerhaft.
Die Problemstellung: Zimbra + sendmail
Das Backup-Script sollte Mails verschicken. Das macht es am besten über sendmail. Aber natürlich das Zimbra Sendmail vom Zimbra postfix. Also musste ich meinem Ubuntu 10.04 Server beibringen, dass /usr/sbin/sendmail auf /opt/zimbra/postfix/sbin/sendmail verlinkt. Sicher – ich hätte den Symlink auch einfach manuell selbst setzen können. Aber solche Basteleien am System vorbei schaffen nur ärger. Also verwende ich update-alternatives. Und da kam es zum ersten Problem. Folgt man den offiziellen Anleitungen, braucht man einfach nur folgendes machen:
root@sun:/home/infinity# update-alternatives --install /usr/sbin/sendmail mta-sendmail /opt/zimbra/postfix/sbin/sendmail 25
update-alternatives: Verwende /opt/zimbra/postfix/sbin/sendmail, um /usr/sbin/sendmail (mta-sendmail) in Auto-Modus bereitzustellen.
update-alternatives: Warnung: Ersetze /usr/sbin/sendmail nicht durch einen Link.
root@sun:/home/infinity# update-alternatives --display mta-sendmail
mta-sendmail - Auto-Modus
Link verweist zur Zeit auf /opt/zimbra/postfix/sbin/sendmail
/opt/zimbra/postfix/sbin/sendmail - Priorität 25
Gegenwärtig »beste« Version ist /opt/zimbra/postfix/sbin/sendmail.
root@sun:/home/infinity# sendmail
Please install an MTA on this system if you want to use sendmail!
Mist. Dabei habe ich doch eigentlich einen MTA. Den von Zimbra. (Dem Teil mit „mta-sendmail“ bespreche ich weiter unten, der hat es auch noch in sich.) Im Internet kursieren diverse Anleitungen, wie man das umgehen kann, neben einem nicht in den Quellen verfügbaren Dummy-MTA (auch irgendwie gruselige Idee) gab es auch die Lösung, einfach sendmail zu installieren. Gesagt, getan:
root@sun:/home/infinity# aptitude install sendmail
[...]
Jetzt habe ich einen nutzlosen und inaktiven Mini-MTA. Schön und gut, jetzt wollen wir aber den Zimbra-Sendmail verlinken. Schauen wir erstmal, was da ist:
root@sun:/home/infinity# update-alternatives --display sendmail
update-alternatives: error: Keine Alternativen für sendmail.
… aber ich habe mir doch grade sendmail installiert?! Naja, probieren wir es mal nach der Anleitung von oben:
root@sun:/home/infinity# update-alternatives --install /usr/sbin/sendmail mta-sendmail /opt/zimbra/postfix/sbin/sendmail 25
update-alternatives: error: Alternativen-Link /usr/sbin/sendmail wird bereits von sendmail-msp verwaltet.
Aber ich habe doch einfach nur der Anleitung gefolgt? Ist mta-sendmail ggf. einfach nicht richtig? Ausprobieren:
root@sun:/home/infinity# update-alternatives --install /usr/sbin/sendmail sendmail-msp /opt/zimbra/postfix/sbin/sendmail 25
update-alternatives: error: Alternativen-Link /usr/sbin/sendmail wird bereits von sendmail-msp verwaltet.
Wie widersinnig. Ich will doch in der Gruppe sendmail-msp eine neue Alternative hinzufügen – und update-alternatives sagt mir, dass es schon eine gäbe? Des Rätsels Lösung ist eigentlich ganz einfach – der Symlink heisst genauso wie die Gruppe. Also:
root@sun:/home/infinity# update-alternatives --install /usr/sbin/sendmail-msp sendmail-msp /opt/zimbra/postfix/sbin/sendmail 25
update-alternatives: using /opt/zimbra/postfix/sbin/sendmail to provide /usr/sbin/sendmail-msp (sendmail-msp) in auto mode.
Das sieht gut aus. Probieren wir es aus:
root@sun:/home/infinity# sendmail
Das Programm »sendmail« ist in folgenden Paketen enthalten:
[...]
Nicht installiert. Aber ich habe es doch grade bereitgestellt? Nun, mal die Gruppe sendmail-mta anschauen:
root@sun:/home/infinity# update-alternatives --display sendmail-msp
sendmail-msp - Auto-Modus
Link verweist zur Zeit auf /opt/zimbra/postfix/sbin/sendmail
/opt/zimbra/postfix/sbin/sendmail - Priorität 25
/usr/lib/sm.bin/sendmail - Priorität 25
Slave lib.sendmail: /usr/lib/sm.bin/sendmail
Slave sendmail: /usr/lib/sm.bin/sendmail
Slave sendmail-msp.8.gz: /usr/share/man/man8/sendmail.sendmail.8.gz
Slave sendmail.8.gz: /usr/share/man/man8/sendmail.sendmail.8.gz
Gegenwärtig »beste« Version ist /opt/zimbra/postfix/sbin/sendmail.
Also muss man den Slave „sendmail“ auch noch bereitstellen. Die Namens- und Gruppendopplungen werden langsam nervig. Aber probieren wir mal, ein Slave hinzuzufügen:
@sun:/home/infinity# update-alternatives --install /usr/sbin/sendmail-msp sendmail-msp /opt/zimbra/postfix/sbin/sendmail 25 --slave /usr/sbin/sendmail sendmail /opt/zimbra/postfix/sbin/sendmail
update-alternatives: using /opt/zimbra/postfix/sbin/sendmail to provide /usr/sbin/sendmail-msp (sendmail-msp) in auto mode.
Das sieht doch erfolgsversprechend aus. Wenn man den Symlinks folgt, kann man sehen, dass es funktioniert:
root@sun:/home/infinity# ls -l /usr/sbin/sendmail
lrwxrwxrwx 1 root root 26 2012-09-08 11:22 /usr/sbin/sendmail -> /etc/alternatives/sendmail
root@sun:/home/infinity# ls -la /etc/alternatives/sendmail
lrwxrwxrwx 1 root root 33 2012-09-08 11:22 /etc/alternatives/sendmail -> /opt/zimbra/postfix/sbin/sendmail
Wow. Endlich! Was lernen wir daraus? Nutze Deinen Kopf, wenn Du Anleitungen aus dem Netz liest. Denn die dort verwendeten Befehle sind selten korrekt, aber ein guter Hinweis auf die weitere Vorgehensweise. Das gilt übrigens auch für folgendes – im Netz findet man gerne auch solche Befehle:
root@sun:/home/infinity# update-alternatives --install sendmail-msp sendmail-msp /opt/zimbra/postfix/sbin/sendmail 25
Das funktioniert nicht, da der erste Parameter nach –install ein absoluter Pfad sein muss. Vermutlich wurde diese Bedingung irgendwann in der langen Versionshistorie von update-alternatives hinzugefügt – und die Anleitungen im Netz haben dies noch nicht berücksichtigt.
Noch eine Kleinigkeit – vollständiges Deaktivieren von Sendmail
So ein MTA hat die Eigenart, sich automatisch starten zu wollen. Das wollen wir aber natürlich nicht. Also entfernen wir es:
root@sun:/home/infinity# update-rc.d S21sendmail remove
Removing any system startup links for /etc/init.d/S21sendmail ...
Leider bringt Sendmail noch ein sehr nerviges Cron mit, welches auch dann ausgeführt wird, wenn Sendmail nicht genutzt wird. Widersinnig. Das muss auch noch weg. Das heisst, dass wir in /etc/mail/sendmail.conf die Zeile MSP_MODE=“cron“; auf MSP_MODE=“none“; ändern müssen. Danach führen wir noch den Config-Generator aus:
/usr/share/sendmail/update_conf
Nun ist alles fertig – ich wünsche viel Spaß mit sendmail!
Für den Aufmerksamen Leser: Ich habe zwischendurch mit LANG=C auf englisch gewechselt, um besser nach den Fehlermeldungen googlen zu können. Ich bau jetzt nicht alles einsprachig nach, sorry 😉
Schreibe einen Kommentar