Um debconf zu verwenden, müssen Sie vor dem Aufruf von dpkg-reconfigure auch /etc/localtime
und entfernen /etc/timezone
. Achten Sie auch auf möglichen zusätzlichen Platz (wie in Ihrer Frage!), Der nicht harmlos ist.
Also "debconf way", das funktioniert (in Debian Stretch), wäre:
echo "tzdata tzdata/Areas select Europe" | debconf-set-selections
echo "tzdata tzdata/Zones/Europe select Madrid" | debconf-set-selections
rm -f /etc/localtime /etc/timezone
dpkg-reconfigure -f noninteractive tzdata
Der Grund dafür ist, dass das tzdata-Konfigurationsskript versucht, intelligent zu sein, und sich anders verhält, wenn es zuvor konfiguriert wurde oder der Benutzer sich manuell in Zeitzonen eingemischt hat.
EXTRA
Um ein ähnliches Problem selbst zu beheben, führen Sie zunächst Folgendes aus:
export DEBCONF_DEBUG=developer
die folgende Informationen bereitstellen würde:
# dpkg-reconfigure -f noninteractive tzdata
debconf (developer): starting /var/lib/dpkg/info/tzdata.config reconfigure 2018e-0+deb9u1
debconf (developer): <-- VERSION 2.0
debconf (developer): --> 0 2.0
debconf (developer): <-- CAPB backup
debconf (developer): --> 0 multiselect escape
debconf (developer): <-- SET tzdata/Areas Etc
debconf (developer): --> 0 value set
debconf (developer): <-- SET tzdata/Zones/Etc UTC
debconf (developer): --> 0 value set
debconf (developer): <-- INPUT high tzdata/Areas
debconf (developer): --> 30 question skipped
debconf (developer): <-- GO
debconf (developer): --> 0 ok
debconf (developer): <-- GET tzdata/Areas
debconf (developer): --> 0 Etc
debconf (developer): <-- INPUT high tzdata/Zones/Etc
debconf (developer): --> 30 question skipped
debconf (developer): <-- GO
debconf (developer): --> 0 ok
debconf (developer): starting /var/lib/dpkg/info/tzdata.postinst configure 2018e-0+deb9u1
debconf (developer): <-- VERSION 2.0
debconf (developer): --> 0 2.0
debconf (developer): <-- GET tzdata/Areas
debconf (developer): --> 0 Etc
debconf (developer): <-- GET tzdata/Zones/Etc
debconf (developer): --> 0 UTC
debconf (developer): <-- STOP
Dies würde Ihnen zeigen, dass die Werte gewaltsam gesetzt werden, bevor der Benutzer danach gefragt wird (wodurch die von Ihnen eingestellten Werte überschrieben werden debconf-set-selections
).
Dann würden Sie shebang in ändern /var/lib/dpkg/info/tzdata.config
aus #!/bin/sh
zu #!/bin/sh -x
, und der Programmablauf folgen, wo Sie würden sehen , dass es funktioniert:
+ [ -L /etc/localtime ]
+ readlink /etc/localtime
+ TIMEZONE=/usr/share/zoneinfo/Etc/UTC
Wenn /var/lib/dpkg/info/tzdata.config
Sie sich das ansehen, werden Sie folgendes finden:
# If /etc/localtime is a link, update /etc/timezone
if [ -L /etc/localtime ] ; then
TIMEZONE="$(readlink /etc/localtime)"
Das erklärt, warum @fiction answer funktioniert. Wenn Sie sich das Skript genauer ansehen, werden Sie feststellen, dass @andrekeller answer auch in neueren Debian-Versionen funktioniert, wenn Sie '/ etc / localtime' entfernen.
Hoffentlich hilft Ihnen diese Hilfe beim Debuggen, wenn die nächste Version von Debian das Skript noch intelligenter macht und vorhandene Antworten ebenfalls ungültig werden. Weitere Informationen zum Debuggen von debconf finden Sie in debconf-devel (7).