Как автоматически отвечать на запросы установки (кроме кнопки "да")?

конспект

Я пытаюсь создать образ Docker, но он терпит неудачу, потому что один из пакетов, которые я пытаюсь получить apt install предлагает пользователю во время процесса установки. Я хотел бы ответить на это приглашение, но я не могу понять, как сделать это не в интерактивном режиме.

Описание

Я создаю образ Docker, и мой Dockerfile имеет следующую строку:

RUN apt install -y texlive-latex-extra

(В этом пакете есть несколько библиотек LaTeX, которые мне нужны.)

Во время установки это останавливается с:

Setting up tzdata (2018d-1) ...
debconf: unable to initialize frontend: Dialog
debconf: (TERM is not set, so the dialog frontend is not usable.)
debconf: falling back to frontend: Readline
Configuring tzdata
------------------

Please select the geographic area in which you live. Subsequent configuration
questions will narrow this down by presenting a list of cities, representing
the time zones in which they are located.

  1. Africa        6. Asia            11. System V timezones
  2. America       7. Atlantic Ocean  12. US
  3. Antarctica    8. Europe          13. None of the above
  4. Australia     9. Indian Ocean
  5. Arctic Ocean  10. Pacific Ocean
Geographic area:

На данный момент, он ждет некоторого ввода. (После этого появляется другое приглашение для выбора часового пояса - я полагаю, это важно знать для \today директива в файлах LaTeX. ¯\_(ツ)_/¯)

Как я могу ответить на это не в интерактивном режиме?

Что я пробовал до сих пор

Я пытался сделать это:

apt install -y texlive-latex-extra <(echo 12 && echo 2)

и это:

echo 12 && echo 2 | apt install -y texlive-latex-extra

Первый умер с этой ошибкой:

apt install -y texlive-latex-extra <(echo 12 && echo 9)

и второй, казалось, не имел никакого эффекта.

Для справки, вот мой Dockerfile до этого момента:

FROM ubuntu:latest

RUN apt update && apt upgrade -y && apt install -y curl bzip2 tar make gcc wget gnupg unzip
RUN apt install -y texlive
RUN apt install -y nodejs npm git
RUN npm install -g bower
RUN apt install -y texlive-latex-extra

ОБНОВИТЬ

Я нашел что-то близкое, что предложило бежать apt install с DEBIAN_FRONTEND=noninteractive, Это решило мою проблему достаточно.:) Тем не менее, я все еще хотел бы знать, как реагировать на запросы, поскольку предлагаемое там решение предлагает только то, как их подавить.

2 ответа

Решение

Если вы хотите написать сценарий взаимодействия с терминалом, вы можете использовать функцию ожидаемость в Linux (это может быть не очень легко; вам нужно прогнозировать взаимодействия).

Помните, что эмуляторы терминалов являются сложными и загадочными вещами (потому что терминалы, такие как VT100, были сложными). См. Termios (3), pty (7) и прочитайте Tty демистифицирован.

Конкретное приглашение к установке, упомянутое в вопросе, вызвано пакетомtzdata. Мне удалось настроить его неинтерактивно в моей сборке докера, установив следующие переменные среды:

      DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC apt-get install -y texlive-luatex texlive-latex-extra texlive-font

Я нашел это решение здесь: https://serverfault.com/questions/949991/how-to-install-tzdata-on-a-ubuntu-docker-image .

Другие вопросы по тегам