87 votes

Méthode non interactive pour dpkg-reconfigure tzdata

Lorsque j'ai configuré un serveur Ubuntu pour la première fois, je m'assure de aptitude install tzdata , puis de dpkg-reconfigure tzdata afin de définir correctement mon fuseau horaire.

J'essaie d'automatiser la configuration de mon serveur avec un script et j'ai remarqué que cette pièce met en quelque sorte un frein à son automatisation, car elle nécessite une session interactive avec intervention de l'utilisateur.

Existe-t-il un moyen d'utiliser dpkg-reconfigure sans qu'il soit interactif ?

32voto

Nils Ballmann Points 486

Faire cela dans un Dockerfile :

 FROM ubuntu:xenial

## for apt to be noninteractive
ENV DEBIAN_FRONTEND noninteractive
ENV DEBCONF_NONINTERACTIVE_SEEN true

## preesed tzdata, update package index, upgrade packages and install needed software
RUN truncate -s0 /tmp/preseed.cfg; \
    echo "tzdata tzdata/Areas select Europe" >> /tmp/preseed.cfg; \
    echo "tzdata tzdata/Zones/Europe select Berlin" >> /tmp/preseed.cfg; \
    debconf-set-selections /tmp/preseed.cfg && \
    rm -f /etc/timezone /etc/localtime && \
    apt-get update && \
    apt-get install -y tzdata

## cleanup of files from setup
RUN rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

Dans mes expériences, j'ai déterminé la suppression des fichiers en /etc nécessaire.

14voto

sergei_ivanov Points 81

Voici mon Dockerfile pour la dernière distribution Ubuntu 18.04 LTS, adapté de la réponse de @NilsBallmann. J'ai également supprimé la création de fichiers temporaires et compacté l'installation du package en une seule couche :

 FROM ubuntu:bionic

RUN export DEBIAN_FRONTEND=noninteractive; \
    export DEBCONF_NONINTERACTIVE_SEEN=true; \
    echo 'tzdata tzdata/Areas select Etc' | debconf-set-selections; \
    echo 'tzdata tzdata/Zones/Etc select UTC' | debconf-set-selections; \
    apt-get update -qqy \
 && apt-get install -qqy --no-install-recommends \
        tzdata \
 && apt-get clean \
 && rm -rf /var/lib/apt/lists/*

11voto

jah Points 1267

Faire avancer la réponse de josch ; définissez les valeurs de la base de données debconf et supprimez /etc/{localtime,timezone} avant d'exécuter dpkg-reconfigure :-

 $ echo "tzdata tzdata/Areas select Europe" > some/file.txt
$ echo "tzdata tzdata/Zones/Europe select Berlin" >> some/file.txt
$ sudo debconf-set-selections some/file.txt
$ sudo rm /etc/timezone
$ sudo rm /etc/localtime
$ sudo dpkg-reconfigure -f noninteractive tzdata
Current default time zone: 'Europe/Berlin'
Local time is now:      Thu Sep  1 17:13:16 CEST 2016.
Universal Time is now:  Thu Sep  1 15:13:16 UTC 2016.

Cette méthode est connue pour fonctionner sur: -

  • Ubunty Trusty (14.04.5 LTS)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X