Untuk menggunakan debconf, sebelum memanggil dpkg-reconfigure, Anda juga harus menghapus /etc/localtime
dan /etc/timezone
. Waspadalah terhadap kemungkinan ruang tambahan (seperti dalam pertanyaan Anda!) Yang tidak jinak.
Jadi "cara debconf" yang berfungsi (dalam Debian Stretch) adalah:
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
Alasannya adalah bahwa skrip tzdata config mencoba menjadi pintar, dan jika skrip tersebut dikonfigurasi sebelumnya atau pengguna secara manual ikut campur dengan zona waktu, akan berperilaku berbeda.
TAMBAHAN
Untuk men-debug sendiri masalah yang serupa, pertama-tama Anda harus:
export DEBCONF_DEBUG=developer
yang akan memberikan info berikut:
# 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
yang akan menunjukkan kepada Anda bahwa ia secara paksa SET nilai-nilai sebelum meminta pengguna untuk mereka (sehingga menimpa nilai-nilai yang Anda tetapkan dengan debconf-set-selections
).
Kemudian Anda akan mengubah shebang /var/lib/dpkg/info/tzdata.config
dari dari #!/bin/sh
ke #!/bin/sh -x
, dan mengikuti alur program, di mana Anda akan melihat bahwa itu berubah :
+ [ -L /etc/localtime ]
+ readlink /etc/localtime
+ TIMEZONE=/usr/share/zoneinfo/Etc/UTC
melihat /var/lib/dpkg/info/tzdata.config
Anda akan menemukan ini:
# If /etc/localtime is a link, update /etc/timezone
if [ -L /etc/localtime ] ; then
TIMEZONE="$(readlink /etc/localtime)"
yang menjelaskan mengapa jawaban fiksi bekerja. Juga mencari di skrip lebih lanjut, Anda akan menemukan bahwa jawaban @andrekeller juga berfungsi di versi Debian yang lebih baru jika Anda menghapus '/ etc / localtime'.
Semoga bantuan debugging ini akan membantu Anda ketika versi Debian berikutnya membuat skrip menjadi lebih pintar dan jawaban yang ada menjadi tidak valid juga. Info lebih lanjut tentang debugging debconf dapat ditemukan di debconf-devel (7)