Настройка консоли приводит к зависанию обновления apt-get

776
erich

Я хочу автоматически установить apache2 на мой экземпляр EC2 при первой загрузке. Я использую базовый образ Ubuntu 16.04 LTS:

ubuntu/images/hvm-ssd/ubuntu-xenial-16.04-amd64-server-20180522 (ami-a4dc46db) 

Мой скрипт пользовательских данных ниже:

#!/bin/bash apt-get update && apt-get upgrade -y apt-get install apache2 -y 

После входа в систему и терпеливого ожидания я обнаружил, что apache2 не устанавливается. Поскольку этот скрипт запускается от имени пользователя root, я не мог видеть вывод, как если бы я запускал его вручную, поэтому я перенаправил весь вывод в файл журнала.

#!/bin/bash apt-get update && apt-get upgrade -y &>/var/log/erich 

Вот часть, которая зависает, ожидая ввода пользователя:

Setting up console-setup (1.108ubuntu15.4) ... 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 console-setup -------------------------   1. ARMSCII-8 8. ISIRI-3342 15. ISO-8859-16 22. ISO-8859-8 2. CP1251 9. ISO-8859-1 16. ISO-8859-2 23. ISO-8859-9 3. CP1255 10. ISO-8859-10 17. ISO-8859-3 24. KOI8-R 4. CP1256 11. ISO-8859-11 18. ISO-8859-4 25. KOI8-U 5. GEORGIAN-ACADEMY 12. ISO-8859-13 19. ISO-8859-5 26. TIS-620 6. GEORGIAN-PS 13. ISO-8859-14 20. ISO-8859-6 27. UTF-8 7. IBM1133 14. ISO-8859-15 21. ISO-8859-7 28. VISCII  Encoding to use on the console: 

Я могу использовать apt-mark holdэтот пакет в качестве меры пресечения, но это не решение. Как я могу установить тип кодировки по умолчанию?

0

2 ответа на вопрос

2
erich

Погуглив некоторые из ошибок debconf, с которыми сталкивается мой скрипт, другие ответы на все вопросы, похоже, имеют одну общую черту - удаленное выполнение через SSH. Похоже, что это также метод Amazon для выполнения сценариев пользовательских данных при подготовке экземпляров.

Эти SSH-соединения, по-видимому, не имеют доступа к определенным переменным среды или данным конфигурации по умолчанию, поэтому их явная настройка помогает уменьшить количество ошибок. Установка DEBCONF_FRONTEND=noninteractiveпеременной среды, как предлагается здесь и для других вопросов, не помогает в этом конкретном случае.

Я смог установить кодировку по умолчанию (из-за которой мой скрипт зависал) для пакета установки консоли, используя debconf-set-selectionsобновление базы данных конфигурации перед первым вызовом apt-get. Он принимает файл в качестве аргумента, поэтому строку конфигурации можно записать во временный файл и впоследствии удалить:

echo "console-setup console-setup/charmap47 select UTF-8" > encoding.conf debconf-set-selections encoding.conf rm encoding.conf apt-get update && apt-get upgrade -y 

Кроме того, я смог подавить многие предупреждения debconf, добавив export TERM=xtermв начало сценария.

1
Federico Bertola

Вы должны установить следующую переменную окружения в верхней части вашего скрипта export DEBCONF_FRONTEND=noninteractive:; обратитесь к руководству за дополнительными пояснениями (см. http://manpages.ubuntu.com/manpages/artful/man7/debconf.7.html ). Кроме того, чтобы быть действительно уверенным, добавьте -qqпереключатель к apt-get.

Обратите внимание, что я использую exportэто, поскольку это будет распространять переменную окружения на текущую и дочернюю переменные (вопреки VAR=VALUEобозначениям). Это необходимо, потому что apt-getбудут порождать другие процессы для настройки пакетов.

Это выдержка из страницы руководства Bash:

export [-fn] [name [= word]] ... export -p Предоставленные имена помечаются для автоматического экспорта в среду последующих выполненных команд. Если задана опция -f, имена относятся к функциям ...

Надеюсь это поможет!

я добавил это в начало скрипта, но `apt-get -qq install console-setup`, похоже, по-прежнему игнорирует эту директиву. erich 6 лет назад 1

Похожие вопросы