ubuntu - tzdata - please select the geographic area in which you live subsequent configuration docker
Método no interactivo para dpkg-reconfigure tzdata (5)
Cuando configuro por primera vez un servidor Ubuntu, me aseguro de que aptitude install tzdata
, luego dpkg-reconfigure tzdata
para que configure mi zona horaria correctamente.
Estoy tratando de automatizar la configuración de mi servidor con un script, y me di cuenta de que esta pieza es una especie de llave en ser automática, ya que requiere una sesión interactiva con la intervención del usuario.
¿Hay alguna manera de usar dpkg-reconfigure sin que sea interactivo?
Avanzando la respuesta de josch ; establezca los valores db de debconf y elimine /etc/{localtime,timezone}
antes de ejecutar 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.
Se sabe que este método funciona en:
- Ubunty Trusty (14.04.5 LTS)
Encontré los siguientes detalles para ti.
https://serverfault.com/a/84528
Editar: (copiar y pegar desde el enlace de arriba ...)
Debe especificar el frontend como `no interactivo ''y guardará su configuración actual.
dpkg-reconfigure tomará la configuración actual del sistema como evangelio, así que simplemente cambie su zona horaria como lo haría normalmente y ejecútela con la bandera no interactiva
por ejemplo, para cambiar a "Europa / Dublín" donde estoy:
# echo "Europe/Dublin" > /etc/timezone
# dpkg-reconfigure -f noninteractive tzdata
Obviamente, esto le permite usar títere / cfengine como quiera distribuir / etc / timezone también.
Haciendo esto en 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 echo "tzdata tzdata/Areas select Europe" > /tmp/preseed.txt; /
echo "tzdata tzdata/Zones/Europe select Berlin" >> /tmp/preseed.txt; /
debconf-set-selections /tmp/preseed.txt && /
rm /etc/timezone && /
rm /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/*
En mis experimentos, determiné la eliminación de los archivos en /etc
necesarios.
Hay un error ( https://bugs.launchpad.net/ubuntu/+source/tzdata/+bug/1554806 , no corregido en el momento de escribir esta respuesta) en 16.04 que hace que el contenido de /etc/timezone
sea se sobrescribe con el valor anterior cuando se ejecuta dpkg-reconfigure -f noninteractive tzdata
. La solución es la siguiente (del informe de error anterior):
$ sudo ln -fs /usr/share/zoneinfo/America/New_York /etc/localtime
$ sudo dpkg-reconfigure --frontend noninteractive tzdata
Current default time zone: ''America/New_York''
Local time is now: Mon Feb 20 07:30:33 EST 2017.
Universal Time is now: Mon Feb 20 12:30:33 UTC 2017.
$ cat /etc/timezone
America/New_York
No es necesario cambiar manualmente los contenidos de /etc/timezone
. Esto funcionó para mí en Ubuntu 16.04.2 LTS.
La respuesta de swill no es cómo se hace correctamente. Si desea configuración dpkg desatendida / guionizada de paquetes, entonces desea usar el mecanismo de preconfiguración de debconf.
En su caso, esto significa que debe hacer lo siguiente:
Establezca las siguientes variables de entorno para evitar que debconf intente hacerle al usuario cualquier pregunta:
export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true
luego preseleccione debconf con el siguiente archivo preseed.txt (o cualquier otra configuración que desee):
tzdata tzdata/Areas select Europe tzdata tzdata/Zones/Europe select Berlin
configura el archivo preseed anterior ejecutando:
debconf-set-selections /your/preseed.txt
ahora puede instalar tzdata (si aún no está instalado) a través de
apt
o ejecutardpkg-reconfigure
. Al final, tzdata se configurará de acuerdo con lo que especificó en su archivo preseed debconf.
Recuerde que puede automatizar muchos más utilizando la preconfiguración de debconf. Por ejemplo, en mis preseeds siempre configuro:
locales locales/locales_to_be_generated multiselect en_US.UTF-8 UTF-8
locales locales/default_environment_locale select en_US.UTF-8
Siempre puede inspeccionar la configuración de debconf de su sistema actual ejecutando debconf-get-selections
. La salida debería darle una idea de la cantidad de configuración del sistema que puede automatizar utilizando la preconfiguración de debconf.