Мы используем Packer 1.7.10 под VirtualBox 6.1.30 на macOS 11.6.3 для создания виртуальных машин разработки на основе Ubuntu Server 20.04.3, используя автоматическую установку cloud-init с ISO-образа сервера. Файл пользовательских данных содержит длинный список пакетов, которые необходимо установить при первой загрузке.
Когда это работает, это работает хорошо. Но частая установка этих пакетов завершается ошибкой через 15 или 20 минут сборки. То, что видно из выходных данных установщика на экране консоли VirtualBox, показывает, что установка некоторых пакетов завершена. Автоматическая установка запрашивает ввод данных пользователем, и Packer не может определить, что установка не удалась.
Мы наблюдали аналогичные сбои в наших предыдущих сценариях сборки виртуальной машины с использованием файлов preseed с Ubuntu 18.04, и обычно это происходило из-за того, что зеркало Ubuntu обрывалось или отказывалось от соединения. Обходной путь заключался в том, чтобы указать другое зеркало в файле preseed и повторить попытку.
Есть ли способ указать автоустановке повторить попытку установки пакетов или выбрать другое зеркало, когда соединение с зеркалом потеряно? Или нам лучше сделать это в сценарии оболочки в качестве поставщика Packer?
Файл пользовательских данных с некоторыми искаженными деталями:
#cloud-config
автоустановка:
версия: 1
# Сборка завершится с ошибкой аутентификации SSH, если это опущено.
личность:
имя хоста: "dev-gui"
имя пользователя: "dsa"
настоящее имя: "Простое приложение Dis"
пароль: ПРОПУЩЕН
локаль: "en_US.UTF-8"
клавиатура:
раскладка: "en"
вариант: ""
установщик обновлений:
обновление: да
СШ:
сервер установки: правда
разрешить-pw: правда
# Мы НЕ хотим, чтобы Packer запускал инициализаторы до тех пор, пока
# ВМ перезагрузилась.
ранние команды:
- "системная остановка sshd"
подходящий:
save_sources_list: ложь
IP-адрес: правда
данные пользователя:
# Установите разумный часовой пояс
часовой пояс: America/Los_Angeles
# Информация о пользователе и группе
группы:
- докер
- дса
- постгрес
- вбоксф
пользователи:
- имя: "дса"
gecos: "Простое приложение Dis"
основная_группа: "дса"
группы: [adm docker dsa postgres sudo vboxsf]
пароль: ПРОПУЩЕН
lock_passwd: ложь
sudo: "ВСЕ=(ВСЕ) NOPASSWD:ВСЕ"
# Пакеты для установки
пакеты:
- муравей
- автоматизировать
- бой
- бизон
- бмон
- мостовые утилиты
- кэш
- путь
- аккуратный
- cmake
- cppcheck
- завиток
- debconf-утилиты
- дифференциал
- дкм
- докер.ио
- доксиген
- emacs-нокс
- ожидать
- гибкий
- g++-мультибиблиотека
- gnuplot-nox
- iproute2
- льков
- libcap-ng-dev
- libglib2.0-dev
- libncurses-dev
- libpixman-1-dev
- libtool
- libtinyxml2-dev
- модуль-помощник
- nfs-ядро-сервер
- нукс-инструменты
- openjdk-11-jdk
- пилин
- python3-git
- python3-пип
- python3-пигменты
- python3-venv
- python3-virtualenv
- python3.8-dev
- сокат
- подрывная деятельность
- текинформо
- трассировка
- u-загрузочные инструменты
- распаковать
- xvfb
щелкает:
- имя: узел
канал: "16/стабильный"
классика: правда
- название: кодчекер
классика: правда