Para usar debconf, antes de llamar a dpkg-reconfigure, también debe eliminar /etc/localtime
y /etc/timezone
. También tenga cuidado con el posible espacio adicional (como en su pregunta) que no son benignos.
Entonces, "debconf way" que funciona (en Debian Stretch) sería:
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 razón es que el script de configuración tzdata intenta ser inteligente, y si alguna vez se configuró antes o si el usuario se ha entrometido manualmente con zonas horarias, se comportará de manera diferente.
EXTRA
Para depurar un problema similar, primero debe hacer:
export DEBCONF_DEBUG=developer
que proporcionaría la siguiente información:
# 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
lo que le mostraría que ESTABLECE los valores con fuerza antes de solicitarlos al usuario (sobrescribiendo así los valores que establezca debconf-set-selections
).
Luego, cambiaría shebang /var/lib/dpkg/info/tzdata.config
de #!/bin/sh
a #!/bin/sh -x
, y seguiría el flujo del programa, donde vería que sí:
+ [ -L /etc/localtime ]
+ readlink /etc/localtime
+ TIMEZONE=/usr/share/zoneinfo/Etc/UTC
mirando /var/lib/dpkg/info/tzdata.config
esto encontrarás esto:
# If /etc/localtime is a link, update /etc/timezone
if [ -L /etc/localtime ] ; then
TIMEZONE="$(readlink /etc/localtime)"
lo que explica por qué funciona @fiction answer. También mirando más en el script, encontrará que la respuesta @andrekeller también funciona en versiones más recientes de Debian si elimina '/ etc / localtime'.
Esperemos que esta ayuda de depuración lo ayude cuando la próxima versión de Debian haga que el script sea aún más inteligente y las respuestas existentes también se vuelvan inválidas. Se puede encontrar más información sobre la depuración de debconf en debconf-devel (7)