apt-get install tzdata noninteractive

100

Когда я пытаюсь

apt-get install -y tzdata

появляется опция командной строки для выбора часового пояса. Я пытаюсь использовать это в сценарии, чтобы выполнить некоторую настройку, как я могу запустить apt-get без ввода данных пользователем?

Я знаю, что могу перенастроить tzdata

echo "America/New_York" > /etc/timezone
dpkg-reconfigure -f noninteractive tzdata

Но при установке мне нужно, чтобы он работал полностью, даже если он не устанавливает правильный часовой пояс, я всегда могу его перенастроить.

Я старался

echo 5 | apt-get install -y tzdata

но он работает не так, как ожидалось.

ПЯ
источник

Ответы:

170

Это сценарий, который я использовал

(Обновленная версия с участием @elquimista из комментариев)

#!/bin/bash
export DEBIAN_FRONTEND=noninteractive

ln -fs /usr/share/zoneinfo/America/New_York /etc/localtime
apt-get install -y tzdata
dpkg-reconfigure --frontend noninteractive tzdata

Вроде нормально работает.

Как один лайнер:

DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata
ПЯ
источник
44
Если вас устраивает UTC, вот однострочник:DEBIAN_FRONTEND=noninteractive apt-get install -y tzdata
elquimista
4
Это такая боль. Я не могу установить tzdata, пока мне не будет предложено установить часовой пояс по умолчанию (запрос конфигурации во время установки пакета? Чья это была идея?), И я не могу установить часовой пояс по умолчанию без предварительной установки tzdata. Если вы передаете EOF, по умолчанию уже используется UTC. Почему бы просто не сделать это и позволить пользователям обновиться позже, если они захотят. Или позвольте мне установить переменную среды TZ и попросить tzdata ее найти.
theferrit32
2
Выполнение ln -fs /usr/share/zoneinfo/America/New_York /etc/localtimeшага до этого DEBIAN_FRONTEND=noninteractive apt-get install -y tzdataбыло единственным способом установить это без приглашения.
fncomp
То же самое касается меня, единственный способ, которым это сработало, - это сначала поместить оператор ln. @PYA.
jpruiz114
75

Если кто-то хочет этого добиться Dockerfile, используйте, как показано ниже.

ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get -y install tzdata
Ёнджэ
источник
2
Это может быть сделано в одной строке: переменная должна быть установлена на части. Не работает, если задано перед для детали. RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends ...DEBIAN_FRONTENDinstall&&update
Дэниел Стивенс,
6

Вся заслуга в этом должна принадлежать @PYA, но в правильном порядке:

ln -fs /usr/share/zoneinfo/America/New_York /etc/localtime
export DEBIAN_FRONTEND=noninteractive
apt-get install -y tzdata
dpkg-reconfigure --frontend noninteractive tzdata
jpruiz114
источник
Я отредактировал исходный ответ, чтобы отразить изменение порядка.
sebisnow 02
5

Недавно я нашел следующее решение в Dockerfile здание в броненосцы библиотеку FHE:

ln -snf /usr/share/zoneinfo/$(curl https://ipapi.co/timezone) /etc/localtime

Он в основном использует API, предоставляемый ipapi.co, для получения информации о часовом поясе. Это автоматически настраивает часовой пояс правильно, вместо того, чтобы пропускать диалоговое окно и использовать значение по умолчанию (UTC).

Патрик
источник
1

Вот как я это сделал:

echo 1 > input.txt
echo 1 >> input.txt
apt-get install -y tzdata < input.txt
ln -fs /usr/share/zoneinfo/America/Los_Angeles /etc/localtime
echo America/Los_Angeles > /etc/timezone

Первые два оператора echo создают текстовый файл, содержащий номера выбора для меню географической области и меню города / региона. Затем этот файл используется для ввода команды установки apt-get. Пакет tzdata будет установлен без запроса пользователя. Часовой пояс будет установлен на Африка / Абиджан, как если бы вы ввели 1 и 1 в ответ на обычные запросы. Затем я изменяю часовой пояс на то, что хочу, с помощью последних двух команд.

Вместо 1 и 1 вы можете использовать фактические числа для географической области и города / региона, которые вам нужны, но мне кажется, что эти числа могут измениться.

Майк Мериди
источник