Per usare debconf, prima di chiamare dpkg-reconfigure, è necessario anche rimuovere /etc/localtime
e /etc/timezone
. Fai attenzione anche ai possibili spazi extra (come nella tua domanda!) Che non sono benigni.
Quindi "modo debconf" che funziona (in Debian Stretch) sarebbe:
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
Il motivo è che lo script di configurazione di tzdata cerca di essere intelligente, e se è mai stato configurato in precedenza o l'utente si è immischiato manualmente con fusi orari, si comporterà in modo diverso.
EXTRA
Per eseguire il debug di un problema simile, devi prima fare:
export DEBCONF_DEBUG=developer
che fornirebbe le seguenti informazioni:
# 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
che ti mostrerebbe che IMPOSTA forzatamente i valori prima di chiederli all'utente (sovrascrivendo così i valori impostati con debconf-set-selections
).
Quindi cambieresti shebang /var/lib/dpkg/info/tzdata.config
da #!/bin/sh
a #!/bin/sh -x
, e seguirai il flusso del programma, dove vedresti che lo fa:
+ [ -L /etc/localtime ]
+ readlink /etc/localtime
+ TIMEZONE=/usr/share/zoneinfo/Etc/UTC
guardandoti /var/lib/dpkg/info/tzdata.config
troverai questo:
# If /etc/localtime is a link, update /etc/timezone
if [ -L /etc/localtime ] ; then
TIMEZONE="$(readlink /etc/localtime)"
che spiega perché la risposta di @fiction funziona. Inoltre, guardando più nello script, scopriresti che @andrekeller answer funziona anche nelle versioni Debian più recenti se rimuovi '/ etc / localtime'.
Speriamo che questo aiuto per il debug ti aiuti quando la prossima versione di Debian rende lo script ancora più intelligente e anche le risposte esistenti non sono più valide. Maggiori informazioni sul debug di debconf sono disponibili in debconf-devel (7)