Je souhaite configurer un script qui modifie automatiquement le fuseau horaire sur une machine (exécutant Ubuntu 11.10) et définit également les bonnes valeurs à la base de données debconf
. J'ai essayé ce qui suit, mais cela ne fonctionne pas (à la fin, le fuseau horaire actuel reste inchangé et si je cours manuellement le dpkg-reconfigure tzdata
commande, les valeurs sélectionnées sont en effet les anciennes):
#!/bin/sh -e
echo "tzdata tzdata/Areas select Europe" | debconf-set-selections
echo "tzdata tzdata/Zones/Europe select Madrid" | debconf-set-selections
echo "tzdata tzdata/Zones/America select " | debconf-set-selections
dpkg-reconfigure -f noninteractive tzdata
Donc, à présent, je le fais en train de jouer avec les fichiers /etc/localtime
et /etc/timezone
directement, mais je préfère préférer le dpkg-reconfigure
et debconf
way.
La façon la plus simple que je connaisse est:
echo "Europe/Zurich" > /etc/timezone
dpkg-reconfigure -f noninteractive tzdata
Je viens de découvrir qu'avec Debian Stretch (9), vous devez également changer/etc/localtime, donc quelque chose comme:
ln -fs /usr/share/zoneinfo/`cat /etc/timezone` /etc/localtime
est nécessaire. Pour modifier Andrekeller's Reshant Vous avez besoin:
echo "Europe/Zurich" > /etc/timezone
ln -fs /usr/share/zoneinfo/`cat /etc/timezone` /etc/localtime
dpkg-reconfigure -f noninteractive tzdata
Pour utiliser DEBCONF, avant d'appeler DPKG-RECONFIGURE, vous devez également supprimer /etc/localtime
et /etc/timezone
. Aussi méfiez-vous d'un espace supplémentaire possible (comme dans votre question!) Qui ne sont pas bénignes.
Donc, "debconf Way" qui fonctionne (à 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 est que le script de configuration TZData essaie d'être intelligent et s'il a déjà été configuré auparavant ou que l'utilisateur a été interdelé manuellement avec des fuseaux horaires, se comportera différemment.
[~ # ~] extra [~ # ~]
Pour déboguer vous-même un problème similaire, vous feriez d'abord faire:
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
qui vous montrerait que cela définit les valeurs avant de les demander à l'utilisateur (donc écraser les valeurs que vous avez définies avec debconf-set-selections
).
Ensuite, vous changeriez Shebang en /var/lib/dpkg/info/tzdata.config
de #!/bin/sh
à #!/bin/sh -x
et suivez le flux de programme, où vous verriez que cela fait:
+ [ -L /etc/localtime ]
+ readlink /etc/localtime
+ TIMEZONE=/usr/share/zoneinfo/Etc/UTC
regarder /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 @FICTION Répondre fonctionne. Vous trouverez également dans le script plus, vous constatez que @andrekeller répondre fonctionne également dans les versions de Debian plus récentes si vous supprimez '/ etc/localtime'.
Espérons que cette aide de débogage vous aidera lorsque la prochaine version de Debian rend le script encore plus intelligent et les réponses existantes sont également invalides. Plus d'informations sur le débogage debconf peuvent être trouvées dans Debconf-devel (7)