Pour utiliser debconf, avant d'appeler dpkg-reconfigure, vous devez également supprimer /etc/localtime
et /etc/timezone
. Attention également aux éventuels espaces supplémentaires (comme dans votre question!) Qui ne sont pas bénins.
Donc, "façon debconf" qui fonctionne (dans Debian Stretch) serait:
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
La raison en est que le script de configuration tzdata essaie d'être intelligent, et s'il a déjà été configuré auparavant ou si l'utilisateur a manipulé manuellement les fuseaux horaires, il se comportera différemment.
SUPPLÉMENTAIRE
Pour déboguer un problème similaire vous-même, vous devez d'abord:
export DEBCONF_DEBUG=developer
qui fournirait les informations suivantes:
# 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
ce qui vous montrerait qu'il définit avec force les valeurs avant de les demander à l'utilisateur (écrasant ainsi les valeurs que vous définissez avec debconf-set-selections
).
Ensuite, vous changeriez le shebang /var/lib/dpkg/info/tzdata.config
de #!/bin/sh
en #!/bin/sh -x
, et suivriez le déroulement du programme, où vous verriez qu'il le fait:
+ [ -L /etc/localtime ]
+ readlink /etc/localtime
+ TIMEZONE=/usr/share/zoneinfo/Etc/UTC
en regardant, /var/lib/dpkg/info/tzdata.config
vous trouverez ceci:
# If /etc/localtime is a link, update /etc/timezone
if [ -L /etc/localtime ] ; then
TIMEZONE="$(readlink /etc/localtime)"
ce qui explique pourquoi la réponse @fiction fonctionne. En regardant plus dans le script, vous constaterez que la réponse @andrekeller fonctionne également dans les versions Debian plus récentes si vous supprimez '/ etc / localtime'.
Espérons que cette aide au débogage vous aidera lorsque la prochaine version de Debian rendra le script encore plus intelligent et que les réponses existantes deviendront invalides également. Plus d'informations sur le débogage de debconf peuvent être trouvées dans debconf-devel (7)