Неинтерактивный метод для dpkg-реконфигурировать tzdata
когда я впервые устанавливаю сервер Ubuntu, я уверен, что я aptitude install tzdata
, потом dpkg-reconfigure tzdata
чтобы я правильно установил свой часовой пояс.
Я пытаюсь автоматизировать настройку моего сервера с помощью скрипта и заметил, что этот кусок бросает ключ в него автоматически, так как он требует интерактивного сеанса с вмешательством пользователя.
есть ли способ использовать dpkg-reconfigure без его интерактивного использования?
6 ответов:
Я нашел следующие детали для вас.
https://serverfault.com/a/84528
Edit: (скопируйте и вставьте из приведенной выше ссылки...)
Вам нужно указать интерфейс как "неинтерактивный", и он сохранит ваши текущие настройки.dpkg-reconfigure будет принимать текущие Системные настройки как Евангелие, поэтому просто измените свой часовой пояс так, как вы обычно и запустите его с неинтерактивным флагом
например, для меня, чтобы изменить в "Европу / Дублин", где я нахожусь:
# echo "Europe/Dublin" > /etc/timezone # dpkg-reconfigure -f noninteractive tzdata
очевидно, что это позволяет использовать puppet /cfengine, как вам нравится распространять/etc / timezone также.
ответ на пойло не как это делается правильно. Если вы хотите автоматическую / скриптовую конфигурацию пакетов dpkg, то вы хотите использовать механизм предварительной загрузки debconf.
в вашем случае это означает, что вы должны сделать следующее:
установите следующие переменные среды, чтобы избежать того, что debconf пытается задать пользователю любые вопросы:
export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true
затем введите debconf со следующим значением.txt-файл (или любые другие настройки, которые вы хотите):
tzdata tzdata/Areas select Europe tzdata tzdata/Zones/Europe select Berlin
установить выше preseed-файл с помощью команды:
debconf-set-selections /your/preseed.txt
теперь вы можете установить tzdata (если он не установлен) через
apt
или выполните командуdpkg-reconfigure
. В конце концов, tzdata будет настроен в соответствии с тем, что вы указали в своем файле debconf preseed.помните, что вы можете автоматизировать намного больше, используя debconf preseeding. Например, в моих предварительных семенах я всегда устанавливайте:
locales locales/locales_to_be_generated multiselect en_US.UTF-8 UTF-8 locales locales/default_environment_locale select en_US.UTF-8
вы всегда можете проверить настройки debconf вашей текущей системы под управлением
debconf-get-selections
. Вывод должен дать вам некоторое представление о том, какую часть конфигурации системы вы можете автоматизировать с помощью debconf preseeding.
есть ошибка (https://bugs.launchpad.net/ubuntu/ + source/tzdata / + bug / 1554806, не исправлено на момент написания этого ответа) в 16.04 который вызывает содержимое
/etc/timezone
для перезаписи со старым значением при запускеdpkg-reconfigure -f noninteractive tzdata
. Исправление выглядит следующим образом (из приведенного выше отчета об ошибке):$ 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
нет необходимости вручную изменять содержимое
/etc/timezone
. Это сработало для меня на Ubuntu 16.04.2 LTS.
на
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/*
в своих экспериментах я определил удаление файлов в
/etc
необходимо.
продвижение josch's ответ; установите значения DB debconf и удалить
/etc/{localtime,timezone}
перед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.
этот метод, как известно, работает на:-
- Ubunty Trusty (14.04.5 LTS)
вот мой
Dockerfile
для последнего дистрибутива Ubuntu 18.04 LTS, адаптированного из ответа @NilsBallmann. Я также удалил создание временного файла и сжал установку пакета в один слой: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/*