Bug#933231: exim4-base: /etc/cron.daily/exim4-base can't detect hostname via hostname --fqdn
Christian Garbs
mitch at cgarbs.de
Sat Jul 27 21:27:12 BST 2019
Package: exim4-base
Version: 4.92-8+deb10u1
Severity: normal
Tags: ipv6
After the update from Stretch to Buster, on one of my systems
/etc/cron.daily/exim4-base failed on every run with just
hostname: Name or service not known
as an error message.
I could trace this to the usage of "hostname --fqdn" in the script.
On this (and so far only on this) system this call simply fails:
$ hostname --fqdn
hostname: Name or service not known
The manpage of hostname(1) warns about the --fqdn option:
| If a machine has multiple network interfaces/addresses or
| is used in a mobile environment, then it may either have
| multiple FQDNs/domain names or none at all. Therefore
| avoid using hostname --fqdn, hostname --domain and dnsdomainname.
| hostname --ip-address is subject to the same limitations
| so it should be avoided as well.
I don't yet know why, but I indeed have two hostnames:
$ hostname --all-fqdns
het.cgarbs.de het.cgarbs.de
I guess one is for the IPv4 connection and the other for IPv6.
Because in my case both entries are the same and the cron.daily
script only needs one, I created a shell function that returns
only the first hostname and added it to the top of the cron.daily
script (see attached changed config file below):
# fix multiple hostnames, see warning about THE FQDN in hostname(1)
hostname()
{
/bin/hostname --all-fqdns | tr " " "\n" | grep -F . | sort | uniq | head -n 1
}
The shell function takes precedence over /bin/hostname and everything
works as expected.
Unfortunately, the hostname(1) manpage says "Do not make any assumptions
about the order of the output." regarding the --all-fqdns option.
So while using the shell function might be a partial fix, it is not a
very good one.
Is there another way to get a proper hostname, perhaps from Exim
or the Exim configuration, that can be used in /etc/cron.daily/exim4-base
instead of calling "hostname --fqdn"?
Regards
Christian
-- Package-specific info:
Exim version 4.92 #3 built 20-Jul-2019 11:35:58
Copyright (c) University of Cambridge, 1995 - 2018
(c) The Exim Maintainers and contributors in ACKNOWLEDGMENTS file, 2007 - 2018
Berkeley DB: Berkeley DB 5.3.28: (September 9, 2013)
Support for: crypteq iconv() IPv6 PAM Perl Expand_dlfunc GnuTLS move_frozen_messages Content_Scanning DANE DKIM DNSSEC Event OCSP PRDR PROXY SOCKS TCP_Fast_Open
Lookups (built-in): lsearch wildlsearch nwildlsearch iplsearch cdb dbm dbmjz dbmnz dnsdb dsearch ldap ldapdn ldapm mysql nis nis0 passwd pgsql sqlite
Authenticators: cram_md5 cyrus_sasl dovecot plaintext spa tls
Routers: accept dnslookup ipliteral iplookup manualroute queryprogram redirect
Transports: appendfile/maildir/mailstore/mbx autoreply lmtp pipe smtp
Malware: f-protd f-prot6d drweb fsecure sophie clamd avast sock cmdline
Fixed never_users: 0
Configure owner: 0:0
Size of off_t: 8
Configuration file search path is /etc/exim4/exim4.conf:/var/lib/exim4/config.autogenerated
Configuration file is /var/lib/exim4/config.autogenerated
# /etc/exim4/update-exim4.conf.conf
#
# Edit this file and /etc/mailname by hand and execute update-exim4.conf
# yourself or use 'dpkg-reconfigure exim4-config'
#
# Please note that this is _not_ a dpkg-conffile and that automatic changes
# to this file might happen. The code handling this will honor your local
# changes, so this is usually fine, but will break local schemes that mess
# around with multiple versions of the file.
#
# update-exim4.conf uses this file to determine variable values to generate
# exim configuration macros for the configuration file.
#
# Most settings found in here do have corresponding questions in the
# Debconf configuration, but not all of them.
#
# This is a Debian specific file
dc_eximconfig_configtype='internet'
dc_other_hostnames='cgarbs.de'
dc_local_interfaces='0.0.0.0.25 ; ::0.25'
dc_readhost=''
dc_relay_domains=''
dc_minimaldns='false'
dc_relay_nets=''
dc_smarthost=''
CFILEMODE='644'
dc_use_split_config='true'
dc_hide_mailname=''
dc_mailname_in_oh='true'
dc_localdelivery='mail_spool'
mailname:cgarbs.de
# /etc/default/exim4
EX4DEF_VERSION=''
# 'combined' - one daemon running queue and listening on SMTP port
# 'no' - no daemon running the queue
# 'separate' - two separate daemons
# 'ppp' - only run queue with /etc/ppp/ip-up.d/exim4.
# 'nodaemon' - no daemon is started at all.
# 'queueonly' - only a queue running daemon is started, no SMTP listener.
# setting this to 'no' will also disable queueruns from /etc/ppp/ip-up.d/exim4
QUEUERUNNER='combined'
# how often should we run the queue
QUEUEINTERVAL='30m'
# options common to quez-runner and listening daemon
COMMONOPTIONS=''
# more options for the daemon/process running the queue (applies to the one
# started in /etc/ppp/ip-up.d/exim4, too.
QUEUERUNNEROPTIONS=''
# special flags given to exim directly after the -q. See exim(8)
QFLAGS=''
# Options for the SMTP listener daemon. By default, it is listening on
# port 25 only. To listen on more ports, it is recommended to use
# -oX 25:587:10025 -oP /run/exim4/exim.pid
SMTPLISTENEROPTIONS=''
-- System Information:
Debian Release: 10.0
APT prefers oldstable-updates
APT policy: (500, 'oldstable-updates'), (500, 'stable'), (500, 'oldstable')
Architecture: amd64 (x86_64)
Kernel: Linux 4.19.0-5-amd64 (SMP w/1 CPU core)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
Versions of packages exim4-base depends on:
ii adduser 3.118
ii cron [cron-daemon] 3.0pl1-134
ii debconf [debconf-2.0] 1.5.71
ii exim4-config [exim4-config-2] 4.92-8+deb10u1
ii libc6 2.28-10
ii libdb5.3 5.3.28+dfsg1-0.5
ii lsb-base 10.2019051400
ii netbase 5.6
Versions of packages exim4-base recommends:
ii bsd-mailx [mailx] 8.1.2-0.20180807cvs-1
pn psmisc <none>
Versions of packages exim4-base suggests:
ii bsd-mailx [mail-reader] 8.1.2-0.20180807cvs-1
ii emacs-nox [mail-reader] 1:26.1+1-3.2
pn exim4-doc-html | exim4-doc-info <none>
pn eximon4 <none>
ii file 1:5.35-4
ii gnutls-bin 3.6.7-4
ii openssl 1.1.1c-1
pn spf-tools-perl <none>
pn swaks <none>
-- Configuration Files:
/etc/cron.daily/exim4-base changed:
if [ -n "$EX4DEBUG" ]; then
echo "now debugging $0 $@"
set -x
fi
hostname()
{
/bin/hostname --all-fqdns | tr " " "\n" | grep -F . | sort | uniq | head -n 1
}
E4BCD_DAILY_REPORT_TO="postmaster"
E4BCD_DAILY_REPORT_OPTIONS=""
E4BCD_WATCH_PANICLOG="yes"
E4BCD_PANICLOG_LINES="10"
E4BCD_PANICLOG_NOISE=""
if [ ! -x /usr/lib/exim4/exim4 ]; then
exit 0
fi
[ -f /etc/default/exim4 ] && . /etc/default/exim4
SPOOLDIR="$(exim4 -bP spool_directory | sed 's/.*=[[:space:]]\(.*\)/\1/')"
E4BCD_MAINLOG_NOISE="^[[:digit:][:space:]:-]\{20\}\(\(Start\|End\) queue run: pid=[[:digit:]]\+\|exim [[:digit:]\.]\+ daemon started: pid=[[:digit:]]\+, .*\)$"
if [ -n "$E4BCD_DAILY_REPORT_TO" ]; then
if [ -x "$(command -v eximstats)" ] && [ -x "$(command -v mail)" ]; then
if [ "$(< /var/log/exim4/mainlog grep -v "$E4BCD_MAINLOG_NOISE" | wc -l)" -gt "0" ]; then
< /var/log/exim4/mainlog grep -v "$E4BCD_MAINLOG_NOISE" \
| eximstats $E4BCD_DAILY_REPORT_OPTIONS \
| mail -s"$(hostname --fqdn) Daily e-mail activity report" \
$E4BCD_DAILY_REPORT_TO
else
echo "no mail activity in this interval" \
| mail -s"$(hostname --fqdn) Daily e-mail activity report" \
$E4BCD_DAILY_REPORT_TO
fi
else
echo "The exim4 cron job is configured to send a daily report, but eximstats"
echo "and/or mail cannot be found. Please check and make sure that these two"
echo "binaries are available"
fi
fi
log_this() {
TEXT="$@"
if ! logger -t exim4 -p mail.alert $TEXT; then
RET="$?"
echo >&2 "ALERT: could not syslog $TEXT, logger return value $RET"
fi
}
if [ "$E4BCD_WATCH_PANICLOG" != "no" ]; then
if [ -s "/var/log/exim4/paniclog" ]; then
if [ -x "/usr/local/lib/exim4/nonzero_paniclog_hook" ]; then
/usr/local/lib/exim4/nonzero_paniclog_hook
fi
if [ -z "$E4BCD_PANICLOG_NOISE" ] || grep -vq "$E4BCD_PANICLOG_NOISE" /var/log/exim4/paniclog; then
log_this "ALERT: exim paniclog /var/log/exim4/paniclog has non-zero size, mail system possibly broken"
if ! printf "Subject: exim paniclog on %s has non-zero size\nTo: root\n\nexim paniclog /var/log/exim4/paniclog on %s has non-zero size, mail system might be broken. The last ${E4BCD_PANICLOG_LINES} lines are quoted below.\n\n%s\n" \
"$(hostname --fqdn)" "$(hostname --fqdn)" \
"$(tail -n "${E4BCD_PANICLOG_LINES}" /var/log/exim4/paniclog)" \
| exim4 root; then
log_this "PANIC: sending out e-mail warning has failed, exim has non-zero return code"
fi
if [ "$E4BCD_WATCH_PANICLOG" = "once" ]; then
logrotate -f /etc/logrotate.d/exim4-paniclog
fi
fi
fi
fi
if [ -x /usr/sbin/exim_tidydb ]; then
cd $SPOOLDIR/db || exit 1
if ! find $SPOOLDIR/db -maxdepth 1 -name '*.lockfile' -or -name 'log.*' \
-or -type f -printf '%f\0' | \
xargs -0r -n 1 \
start-stop-daemon --start --exec /usr/sbin/exim_tidydb \
--chuid Debian-exim:Debian-exim -- $SPOOLDIR > /dev/null; then
# if we reach this, invoking exim_tidydb from start-stop-daemon has
# failed, most probably because of libpam-tmpdir being in use
# (see #373786 and #376165)
find $SPOOLDIR/db -maxdepth 1 -name '*.lockfile' -or -name 'log.*' \
-or -type f -printf '%f\0' | \
runuser --shell=/bin/bash \
--command="xargs -0r -n 1 /usr/sbin/exim_tidydb $SPOOLDIR > /dev/null" \
Debian-exim
fi
fi
-- debconf information:
* exim4-base/drec:
exim4/purge_spool: false
More information about the Pkg-exim4-maintainers
mailing list