Bug 27780 - /etc/cron.daily/{cyrus22,cyrus-imapd} verwendet /etc/imapd.conf
/etc/cron.daily/{cyrus22,cyrus-imapd} verwendet /etc/imapd.conf
Status: CLOSED FIXED
Product: UCS
Classification: Unclassified
Component: Mail
UCS 3.0
Other Linux
: P5 normal (vote)
: UCS 3.0-2
Assigned To: Felix Botner
Sönke Schwardt-Krummrich
: interim-3
Depends on:
Blocks:
  Show dependency treegraph
 
Reported: 2012-07-02 09:18 CEST by Tim Petersen
Modified: 2012-07-20 15:25 CEST (History)
1 user (show)

See Also:
What kind of report is it?: ---
What type of bug is this?: ---
Who will be affected by this bug?: ---
How will those affected feel about the bug?: ---
User Pain:
Enterprise Customer affected?:
School Customer affected?:
ISV affected?:
Waiting Support:
Flags outvoted (downgraded) after PO Review:
Ticket number:
Bug group (optional):
Max CVSS v3 score:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Tim Petersen univentionstaff 2012-07-02 09:18:31 CEST
Folgende Errormail wir von Cron verschickt:
"fatal error: can't open configuration file /etc/imapd.conf: No such file or directory"

Es wurde zwar der Pfad zur Configdatei in /etc/default/cyrus2.2 angepasst (/etc/imapd/imapd.conf) und auch korrekt eingelesen, allerdings verwendet folgender Code:
su "--command=/usr/sbin/chk_cyrus" - cyrus | ...[...]
"/etc/imapd.conf" als Konfigurationsdatei.

Die neue Konfig müsste bei "chk_cyrus" mit "-C" angegeben werden.
Comment 1 Jürgen Kahrs univentionstaff 2012-07-09 15:44:58 CEST
Zum Paket cyrus-common gehört die Datei /etc/cron.daily/cyrus-imapd und darin ist der fehlerhafte Aufruf:


CONF=/etc/imapd.conf
...
start-stop-daemon --start --exec /usr/sbin/chk_cyrus --quiet --chuid cyrus

Das ist die Stelle, wo "chk_cyrus" nun mit "-C" aufgerufen werden muss. An diesen Dateien können wir aber nichts ändern. Deshalb müssen wir einen anderen Weg finden, um dem chk_cyrus beizubringen, dass der seine Konfi-Datei unter /etc/imapd suchen soll. Vielleicht ein symlink ?
Comment 2 Jürgen Kahrs univentionstaff 2012-07-10 08:23:07 CEST
Ich habe mir einen DC master als mail server eingerichtet (apt-get install univention-mail-server) und auf diesem mail server tritt das Problem auch auf (/var/log/mail.info):

  21:51:40 ucs30-64-dc-smb master[22686]: can't open configuration file /etc/imapd/imapd.conf: No such file or directory


Etwas andere Meldung, aber im Prinzip das gleiche. Wenn ich den cron job von Hand aufrufe, dann wird die Variable CONF aber korrekt gesetzt und im log die obige Fehlermeldung NICHT auf.

sh -x /etc/cron.daily/cyrus-imapd 
+ set -e
+ LC_ALL=C
+ export LC_ALL
+ bak=/var/backups
+ bakfile=/var/backups/cyrus-mboxlist.txt.gz
+ CONF=/etc/imapd.conf
+ CHKCYRUS=0
+ [ -r /etc/default/cyrus-imapd ]
+ . /etc/default/cyrus-imapd
+ CONF=/etc/imapd/imapd.conf
+ MASTERCONF=/etc/imapd/cyrus.conf
+ OPTIONS=
+ umask 022
+ [ -x /usr/sbin/ctl_mboxlist ]
+ [ -f /usr/lib/cyrus/cyrus-hardwired-config.txt ]
+ grep -qE ^PACKAGE_VERSION[[:blank:]]+2[.][24] /usr/lib/cyrus/cyrus-hardwired-config.txt
+ [ -d /var/backups ]
+ [ -f /var/backups/cyrus-mboxlist.txt.gz ]
+ mv /var/backups/cyrus-mboxlist.txt.gz /var/backups/cyrus-mboxlist.txt.gz.bak
+ gzip -9
+ start-stop-daemon --start --exec /usr/sbin/ctl_mboxlist --quiet --chuid cyrus -- -d
+ [ 0 -ne 0 ]
+ [ -x /usr/sbin/chk_cyrus ]
+ mktemp -t cyrus-daily-cronjob.XXXXXXXXXX
+ tmpfile=/tmp/cyrus-daily-cronjob.b2EXymELn6
+ trap rm -f "${tmpfile}" 0
+ start-stop-daemon --start --exec /usr/sbin/chk_cyrus --quiet --chuid cyrus
+ rm -f /tmp/cyrus-daily-cronjob.b2EXymELn6
+ trap  0
+ exit 0

D.h. der Fehler tritt nur in der Laufzeitumgebung des cron jobs auf, nicht in der Laufzeitumgebung eines root users, der sich normal einlogt.
Comment 3 Tim Petersen univentionstaff 2012-07-10 08:43:42 CEST
Wie besprochen: Verwendest du da evt. Cyrus 2.4?
Auf einem OXASE mit Cyrus 2.2 schlägt auch das händische Ausführen des Cronjobs mit der Meldung fehl.
Comment 4 Jürgen Kahrs univentionstaff 2012-07-10 11:04:44 CEST
Ja, ich habe cyrus 2.4 installiert.

Tim, wird die E-Mail mit der Fehlermeldung jede Nacht verschickt oder passierte
das nur ein Mal ?

Ich frage danach, weil ich vermute, das die Mail nur ein Mal verschickt wird,
nämlich dann, wenn der mail server ganz frisch aufgesetzt wurde. Auf meinem
Test-System existiert die generierte .conf-Datei scheinbar erst seit 21:52 und
die Fehlermeldung ist von 21:51:40.

  ls -l /etc/imapd/imapd.conf
  -rw-r----- 1 cyrus sasl 1935  6. Jul 21:52 /etc/imapd/imapd.conf

Könnte es sein, dass die Datei einfach zu spät generiert wird ?
Comment 5 Jürgen Kahrs univentionstaff 2012-07-11 08:09:08 CEST
Um das Problem zu reproduzieren, ist es notwendig von einem UCS 2.4 auszugehen. Ich habe also ein UCS 2.4 als DC master mit cyrus (ohne kolab) installiert. Danach erfolgte ein upgrade auf UCS 2.4-4-7 mit Hilfe von:

  univention-updater net --ignoressh --ignoreterm

Der anschließende upgrade auf UCS 3.0-0 kann genau so angestartet werden, bleibt allerdings hängen mit der Meldung, dass man manuell ein tcs Paket de-installieren soll, um weitermachen zu können. Danach kann dann der upgrade auf UCS 3.0-0 durchlaufen. Auf UCS 3.0-0 ist nun noch immer der cyrus 2.2 installiert. Damit kann nun das Problem reproduziert werden durch manuelles Anstarten des cron jobs:

  /etc/cron.daily/cyrus22
  fatal error: can't open configuration file /etc/imapd.conf: No such file or directory
  fatal error: can't open configuration file /etc/imapd.conf: No such file or directory

Diese Fehlermeldungen treten nun auf Kommandozeile auf, sind aber nicht im /var/log/mail.log zu finden. Egal, zum Reproduzieren des Problems reicht das.
Comment 6 Jürgen Kahrs univentionstaff 2012-07-11 15:07:32 CEST
Ich hab einen patch für cyrus 2.2 eingecheckt und bauen lassen. Das neu gebaute Paket lasse ich noch mal auf einer frischen VM installieren, um damit zu testen.

cd patches/cyrus-imapd-2.2/3.0-0-0-ucs/2.2.13-19+squeeze1-ucs3.0-2

cat option-C-for_etc_imapd.patch 
patch to pass option -C to ctl_mboxlist and chk_cyrus so that they use /etc/imapd/imapd.conf (Bug #27780)
diff -ur cyrus-imapd-2.2-2.2.13/debian/cyrus-common-2.2.cyrus22.cron.daily cyrus-imapd-2.2-2.2.13/debian/cyrus-common-2.2.cyrus22.cron.daily
--- cyrus-imapd-2.2-2.2.13/debian/cyrus-common-2.2.cyrus22.cron.daily   2012-07-11 12:26:05.000000000 +0200
+++ cyrus-imapd-2.2-2.2.13/debian/cyrus-common-2.2.cyrus22.cron.daily   2012-07-11 12:40:09.402214143 +0200
@@ -41,7 +41,7 @@
 [ -d $bak ] || ( mkdir -p $bak ; chmod 600 $bak )
 [ -f $bakfile ] && mv ${bakfile} ${bakfile}.bak
 #      su "--command=/usr/sbin/ctl_mboxlist -d" - cyrus | ...
-start-stop-daemon --start --exec /usr/sbin/ctl_mboxlist --quiet --chuid cyrus -- -d | gzip -9 >${bakfile}
+start-stop-daemon --start --exec /usr/sbin/ctl_mboxlist --quiet --chuid cyrus -- -d -C "$CONF" | gzip -9 >${bakfile}
 
 # 2. clean up all leftover .stage directories in all spools listed in
 #    the default config file
@@ -66,7 +66,7 @@
        tmpfile=$(mktemp -t cyrus-daily-cronjob.XXXXXXXXXX)
        trap 'rm -f "${tmpfile}"' 0
 #      su "--command=/usr/sbin/chk_cyrus" - cyrus | ...
-       start-stop-daemon --start --exec /usr/sbin/chk_cyrus --quiet --chuid cyrus >"${tmpfile}" 2>&1 || cat "${tmpfile}" 1>&2
+       start-stop-daemon --start --exec /usr/sbin/chk_cyrus --quiet --chuid cyrus -- -C "$CONF" >"${tmpfile}" 2>&1 || cat "${tmpfile}" 1>&2
        rm -f "${tmpfile}"
        trap '' 0
 }
Comment 7 Jürgen Kahrs univentionstaff 2012-07-11 15:59:35 CEST
Ich hab noch mal einen snapshot meiner VM von heute Morgen genommen und auf 3.0-1 e93 mit allen aktuellen Paketen von 3.0-2 aktualisiert. Nun meldet /etc/cron.daily/cyrus22 keine Fehler mehr und im script ist die Option -C (wie von Tim vorgeschlagen) eingebaut.

/etc/cron.daily/cyrus22
sh -x /etc/cron.daily/cyrus22
+ set -e
+ LC_ALL=C
+ export LC_ALL
+ bak=/var/backups
+ bakfile=/var/backups/cyrus-mboxlist.txt.gz
+ CONF=/etc/imapd.conf
+ CHKCYRUS=0
+ '[' -r /etc/default/cyrus2.2 ']'
+ . /etc/default/cyrus2.2
++ CONF=/etc/imapd/imapd.conf
++ MASTERCONF=/etc/imapd/cyrus.conf
++ OPTIONS=
+ umask 022
+ '[' -x /usr/sbin/ctl_mboxlist ']'
+ '[' -f /usr/lib/cyrus/cyrus-hardwired-config.txt ']'
+ grep -qE '^PACKAGE_VERSION[[:blank:]]+2[.]2' /usr/lib/cyrus/cyrus-hardwired-config.txt
+ '[' -d /var/backups ']'
+ '[' -f /var/backups/cyrus-mboxlist.txt.gz ']'
+ mv /var/backups/cyrus-mboxlist.txt.gz /var/backups/cyrus-mboxlist.txt.gz.bak
+ gzip -9
+ start-stop-daemon --start --exec /usr/sbin/ctl_mboxlist --quiet --chuid cyrus -- -d -C /etc/imapd/imapd.conf
+ '[' 0 -ne 0 ']'
+ '[' -x /usr/sbin/chk_cyrus ']'
++ mktemp -t cyrus-daily-cronjob.XXXXXXXXXX
+ tmpfile=/tmp/cyrus-daily-cronjob.gC6bkCIiDQ
+ trap 'rm -f "${tmpfile}"' 0
+ start-stop-daemon --start --exec /usr/sbin/chk_cyrus --quiet --chuid cyrus -- -C /etc/imapd/imapd.conf
+ rm -f /tmp/cyrus-daily-cronjob.gC6bkCIiDQ
+ trap '' 0
+ exit 0
Comment 8 Sönke Schwardt-Krummrich univentionstaff 2012-07-13 11:32:00 CEST
Mit Cyrus2.2 wird jetzt im Cronjob korrekt die Datei /etc/imapd/imapd.conf für die Ausführung von ctl_mboxlist und ctl_cyrus verwendet.


Der Cyrus 2.4 Cronjob /etc/cron.daily/cyrus-imapd verwendet aber weiterhin die Datei /etc/imapd.conf. Dies führt ggf. zu falschem Verhalten, weil diese Datei nicht die richtigen Einstellungen enthält.
Der Patch muss auch für Cyrus 2.4 übernommen werden → REOPEN
Comment 9 Felix Botner univentionstaff 2012-07-13 12:21:41 CEST
auch für 2.4 übernommen.
Comment 10 Sönke Schwardt-Krummrich univentionstaff 2012-07-13 17:15:44 CEST
(In reply to comment #8)
> Mit Cyrus2.2 wird jetzt im Cronjob korrekt die Datei /etc/imapd/imapd.conf für
> die Ausführung von ctl_mboxlist und ctl_cyrus verwendet.

Dies gilt jetzt auch für den Cyrus 2.4. Beim Update wird die Datei automatisch aktualisiert. Bei beiden Versionen kann über die /etc/default/cyrus-imapd mit der Variable "CONF" eine alternative Datei definiert werden. 

→ VERIFIED
Comment 11 Stefan Gohmann univentionstaff 2012-07-20 15:25:13 CEST
UCS 3.0-2 has been released: 
  http://forum.univention.de/viewtopic.php?f=54&t=1905

If this error occurs again, please use "Clone This Bug".