Неинтерактивный метод для dpkg -configure tzdata - PullRequest
68 голосов
/ 29 декабря 2011

Когда я сначала настраиваю сервер Ubuntu, я проверяю aptitude install tzdata, затем dpkg-reconfigure tzdata, чтобы правильно установить часовой пояс.

Я пытаюсь автоматизировать настройку сервера с помощью скрипта, изаметил, что эта часть вбрасывает гаечный ключ в автоматическое состояние, так как требует интерактивного сеанса с вмешательством пользователя.

Есть ли способ использовать dpkg -configure без интерактивности?

Ответы [ 6 ]

83 голосов
/ 29 декабря 2011

ОБНОВЛЕНИЕ : Этот вопрос теперь не по теме для StackOverflow.
Пожалуйста, смотрите правильный ответ на ServerFault .

55 голосов
/ 20 декабря 2013

Ответ swill не в том, как это делается правильно. Если вам нужна конфигурация пакетов dpkg без участия пользователя / с помощью сценариев, то вы хотите использовать механизм предварительного заполнения debconf.

В вашем случае это означает, что вы должны сделать следующее:

  • установите следующие переменные окружения, чтобы debconf не пытался задавать пользователю какие-либо вопросы:

    export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true
    
  • и затем preseed 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 будет настроен в соответствии с тем, что вы указали в файле preseed debconf.

Помните, что вы можете автоматизировать гораздо больше, используя предварительное задание 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. Вывод должен дать вам некоторое представление о том, какую часть конфигурации системы вы можете автоматизировать с помощью preseeding debconf.

24 голосов
/ 20 февраля 2017

В 16.04 имеется ошибка (https://bugs.launchpad.net/ubuntu/+source/tzdata/+bug/1554806,, не исправленная на момент написания этого ответа), из-за которой содержимое /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.

18 голосов
/ 20 декабря 2017

Делая это за 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 Необходимое.

9 голосов
/ 01 сентября 2016

Advising josch 's ответ; установить значения в базе данных 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)
5 голосов
/ 16 августа 2018

Вот мой 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/*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...