Non-méthode interactive pour dpkg-reconfigure tzdata
Quand j'ai d'abord configurer un serveur Ubuntu, je m'assure que je aptitude install tzdata
, puis dpkg-reconfigure tzdata
de sorte que j'ai mis mon fuseau horaire correctement.
Je suis en train d'automatiser mon installation du serveur avec un script, et a remarqué cette pièce, sorte de jette une clé dans il être automatique, car il nécessite une session interactive avec l'intervention de l'utilisateur.
Est-il un moyen d'utiliser dpkg-reconfigure sans qu'il soit interactif?
- Cette question est maintenant de hors-sujet pour StackOverflow, et a une réponse sur ServerFault.
Vous devez vous connecter pour publier un commentaire.
Mise à JOUR: Cette question est maintenant de hors-sujet pour StackOverflow.
Veuillez voir la réponse correcte sur ServerFault.
unlink /etc/localtime
avantdpkg-reconfigure
, sinon il ne fonctionnera pas.dpkg-reconfigure -f noninteractive tzdata
, le /etc/timezone sera modifié pour revenir à l'original.La réponse par les drêches n'est pas comment il est fait correctement. Si vous voulez sans surveillance/script dpkg configuration de paquets, alors vous voulez utiliser la debconf de préconfigurer le mécanisme.
Dans votre cas, cela signifie que vous devez faire ce qui suit:
définir les variables d'environnement suivantes pour éviter que debconf essaie de demander à l'utilisateur toutes les questions:
puis preseed debconf avec les éléments suivants preseed.txt fichier (ou ce que d'autres paramètres que vous désirez):
vous avez défini ci-dessus fichier de préconfiguration en cours d'exécution:
vous pouvez maintenant installer tzdata (si elle n'est pas encore installé) via
apt
ou exécuterdpkg-reconfigure
. En fin de compte, tzdata sera mis en place en fonction de ce que vous avez spécifié dans votre debconf fichier de préconfiguration.N'oubliez pas que vous pouvez automatiser beaucoup plus en utilisant debconf la préconfiguration. Par exemple dans mon les preseeds j'ai toujours ensemble:
Vous pouvez toujours inspecter la debconf les paramètres de votre système en cours d'exécution
debconf-get-selections
. La sortie devrait vous donner une idée de la façon dont beaucoup de la configuration du système, vous êtes en mesure d'automatiser en utilisant debconf la préconfiguration.dpkg-reconfigure
avec-f noninteractive
de toute façon... (Ubuntu 12.04 LTS ici). Sinon, vos instructions a très bien fonctionné!/etc/{localtime,timezone}
quand tzdata est déjà installé. Voir stackoverflow.com/a/39275359/161114 .$ ssh node 'export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true;echo -e "tzdata tzdata/Areas select Europe\ntzdata tzdata/Zones/Europe select Amsterdam" > /tmp/tz ; sudo debconf-set-selections /tmp/tz; sudo rm /etc/localtime /etc/timezone; sudo dpkg-reconfigure -f non-interactive tzdata'
/tmp/tz
est un problème de sécurité. Au moment où vous lisez à partir de/tmp/tz
d'autres pourraient en ai écrit une autre valeur ou le fichier existait déjà (que vous n'avez pas à vérifier) et vous l'écrasez. Utilisationmktemp
pour éviter tous ces problèmes. Aussi, vous oubliez de supprimer vos fichiers temporaires à la fin. Enfin, à l'aide de votre de-e
comme argument pourecho
n'est pas portable et vous devez l'utiliserprintf
la place pour les retours à la ligne./etc/timezone
?Il y a un bug (https://bugs.launchpad.net/ubuntu/+source/tzdata/+bug/1554806ne sont pas fixés au moment de la rédaction de cette réponse) dans 16.04 qui provoque le contenu de
/etc/timezone
pour être remplacée par l'ancienne valeur lors de l'exécution dedpkg-reconfigure -f noninteractive tzdata
. Le correctif est comme suit (à partir du dessus de rapport de bug):Pas besoin de modifier manuellement le contenu de
/etc/timezone
. Cela a fonctionné pour moi sur Ubuntu 16.04.2 LTS.ln -fs...
) est décrite dans commentaire n ° 9 sur ce billet. Aussi, cette question est maintenant hors-sujet pour DONC. Merci de ne pas encourager OT questions par répondre 🙂Faire cela dans un
Dockerfile
:Dans mes expériences, j'ai décidé de la suppression des fichiers dans
/etc
nécessaire.ENV DEBIAN_FRONTEND...
parce que l'utilisation deENV
fera la variable persistent dans l'environnement, lorsque le récipient commence à courir trop (voir docs.docker.com/engine/reference/builder/#env pour un avertissement à ce sujet). en Regardant autour de vous pouvez voir queARG
doit être préféré dans cette situation (par exemple,ARG DEBIAN_FRONTEND...
) parce que la valeur de la variable n'est en effet alors que le récipient est en cours de construction.L'avancement de josch's réponse; de définir la debconf db valeurs et supprimer
/etc/{localtime,timezone}
avant d'exécuterdpkg-reconfigure
:-Cette méthode est connue pour travailler sur:-
printf 'tzdata tzdata/Areas select Europe\ntzdata tzdata/Zones/Europe select Berlin\n' | sudo dpkg-set-selections
/etc
quidpkg-reconfigure
sera la réécriture de toute façon.Voici mon
Dockerfile
pour la dernière Ubuntu 18.04 LTS distro, adapté de la réponse par @NilsBallmann. J'ai également supprimé les fichiers temp création et le compactage de l'installation du paquet en une seule couche: