Для використання debconf перед тим, як зателефонувати в dpkg-переконфігурування, потрібно також видалити /etc/localtime
та /etc/timezone
. Також остерігайтеся можливого додаткового місця (як у вашому питанні!), Яке не є доброякісним.
Отже, "deconcon way", який працює (в Debian Stretch), був би:
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
Причина полягає в тому, що скрипт tzdata config намагається бути розумним, і якщо він коли-небудь конфігурувався раніше або користувач вручну втручався в часові пояси, він буде вести себе по-різному.
ДОПОМОГА
Щоб налагодити подібну проблему самостійно, спершу зробіть:
export DEBCONF_DEBUG=developer
яка б надала таку інформацію:
# 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
яка покаже вам , що він силою встановлює значення , перш ніж питати користувача для них (таким чином , перезапис значення, задані з debconf-set-selections
).
Тоді ви змінили б хатину в /var/lib/dpkg/info/tzdata.config
с #!/bin/sh
к #!/bin/sh -x
і стежити за ходом програми, де ви бачите , що він робить:
+ [ -L /etc/localtime ]
+ readlink /etc/localtime
+ TIMEZONE=/usr/share/zoneinfo/Etc/UTC
дивлячись на /var/lib/dpkg/info/tzdata.config
вас, ви побачите це:
# If /etc/localtime is a link, update /etc/timezone
if [ -L /etc/localtime ] ; then
TIMEZONE="$(readlink /etc/localtime)"
що пояснює, чому працює відповідь @fiction. Також, дивлячись більше на сценарій, ви побачите, що відповідь @andrekeller також працює в новіших версіях Debian, якщо ви видалите '/ etc / localtime'.
Сподіваємось, ця допомога з налагодження допоможе вам, коли наступна версія Debian зробить сценарій ще розумнішим, а наявні відповіді також стануть недійсними. Більше інформації про налагодження debconf можна знайти в debconf-devel (7)