Когда я сначала настраиваю сервер Ubuntu, я уверен, что я aptitude install tzdata
, затем dpkg-reconfigure tzdata
, чтобы правильно настроить свой часовой пояс.
Я пытаюсь автоматизировать настройку сервера с помощью script, и заметил, что этот кусок сортирует ключ в автоматическом режиме, так как для этого требуется интерактивный сеанс с вмешательством пользователя.
Есть ли способ использовать dpkg-reconfigure, не будучи интерактивным?
Я нашел для вас следующие данные.
https://serverfault.com/a/84528
Изменить: (скопируйте и вставьте из приведенной выше ссылки...)
Вы должны указать интерфейс как "неинтерактивный", и он сохранит ваши текущие настройки.
dpkg-reconfigure примет текущие системные настройки как евангелие, так что просто измените свой часовой пояс так, как обычно, и запустите его с неинтерактивным флагом
например. для меня перейти на "Европа/Дублин", где я:
# echo "Europe/Dublin" > /etc/timezone
# dpkg-reconfigure -f noninteractive tzdata
Очевидно, это позволяет использовать кукольный /cfengine, как вам нравится распространять/etc/timezone.
Ответ от swill - это не то, как это делается правильно. Если вы хотите иметь конфигурацию пакетов без использования/сценария dpkg, то вы хотите использовать механизм ожидания debconf.
В вашем случае это означает, что вы должны сделать следующее:
установите следующие переменные среды, чтобы избежать того, что debconf пытается задать пользователю любые вопросы:
export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true
затем представьте debconf со следующим файлом preseed.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. Например, в моих запросах я всегда устанавливал:
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.
dpkg-reconfigure
с -f noninteractive
любом случае… (Ubuntu 12.04 LTS здесь). В противном случае ваши инструкции работали отлично!
Есть ошибка (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.
Переход josch; установите значения debconf db и удалить /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.
Этот метод, как известно, работает над: -
printf 'tzdata tzdata/Areas select Europe\ntzdata tzdata/Zones/Europe select Berlin\n' | sudo dpkg-set-selections
/etc
которые dpkg-reconfigure
все равно будет переписывать.
Выполнение этого в 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
, необходимые.
ENV DEBIAN_FRONTEND...
потому что использование ENV
заставит переменную сохраниться в среде, когда контейнер тоже начнет работать (см. Docs.docker.com/engine/reference/builder/#env для предупреждения об этом) , Глядя вокруг вы можете увидеть , что ARG
следует предпочесть в данной ситуации (например , ARG DEBIAN_FRONTEND...
) , так как значение переменной только в силе , пока контейнер строится.