Назад | Перейти на главную страницу

Как отладить проблему «Выбрать и установить программное обеспечение» при автоматической установке Ubuntu (14.04)

Я использую Packer для создания образа VirtualBox для Ubuntu 14.04. У меня есть скрипт Packer Вот, который раньше работал, но затем по какой-то причине (и несколько обновлений VirtualBox позже) начал давать сбой. Установка застревает на шаге «Выбрать и установить программное обеспечение»:

Если я запустил сценарий, используя -debug вариант, я не получаю никакой полезной информации от самого Packer:

~/Projects/src/github.com/yunojuno/trifecta/packer(master)$ SSH_USERNAME=vagrant SSH_PASSWORD=vagrant packer build -debug template.json
Debug mode enabled. Builds will not be parallelized.
virtualbox-iso output will be in this color.

==> virtualbox-iso: Downloading or copying Guest additions
    virtualbox-iso: Downloading or copying: file:///Applications/VirtualBox.app/Contents/MacOS/VBoxGuestAdditions.iso
==> virtualbox-iso: Pausing after run of step 'StepDownloadGuestAdditions'. Press enter to continue.
==> virtualbox-iso: Downloading or copying ISO
    virtualbox-iso: Downloading or copying: http://releases.ubuntu.com/14.04/ubuntu-14.04.3-server-amd64.iso
==> virtualbox-iso: Pausing after run of step 'StepDownload'. Press enter to continue.
==> virtualbox-iso: Pausing after run of step 'StepOutputDir'. Press enter to continue.
==> virtualbox-iso: Pausing after run of step 'StepCreateFloppy'. Press enter to continue.
==> virtualbox-iso: Starting HTTP server on port 8532
==> virtualbox-iso: Pausing after run of step 'StepHTTPServer'. Press enter to continue.
==> virtualbox-iso: Pausing after run of step 'StepSuppressMessages'. Press enter to continue.
==> virtualbox-iso: Creating virtual machine...
==> virtualbox-iso: Pausing after run of step 'stepCreateVM'. Press enter to continue.
==> virtualbox-iso: Creating hard drive...
==> virtualbox-iso: Pausing after run of step 'stepCreateDisk'. Press enter to continue.
==> virtualbox-iso: Pausing after run of step 'stepAttachISO'. Press enter to continue.
==> virtualbox-iso: Pausing after run of step 'StepAttachGuestAdditions'. Press enter to continue.
==> virtualbox-iso: Pausing after run of step 'StepAttachFloppy'. Press enter to continue.
==> virtualbox-iso: Creating forwarded port mapping for SSH (host port 4141)
==> virtualbox-iso: Pausing after run of step 'StepForwardSSH'. Press enter to continue.
==> virtualbox-iso: Executing custom VBoxManage commands...
    virtualbox-iso: Executing: modifyvm ubuntu1404 --memory 4096
    virtualbox-iso: Executing: modifyvm ubuntu1404 --cpus 1
==> virtualbox-iso: Pausing after run of step 'StepVBoxManage'. Press enter to continue.
==> virtualbox-iso: Starting the virtual machine...
==> virtualbox-iso: Waiting 10s for boot...
==> virtualbox-iso: Pausing after run of step 'StepRun'. Press enter to continue.
==> virtualbox-iso: Typing the boot command...
==> virtualbox-iso: Pausing after run of step 'StepTypeBootCommand'. Press enter to continue.
==> virtualbox-iso: Waiting for SSH to become available...

На этом этапе скрипт просто зависает, поскольку автоматическая установка не удалась (см. Снимок экрана выше).

Команда загрузки:

"boot_command": [
    "<esc><esc><enter><wait>",
    "/install/vmlinuz ",
    "noapic ",
    "preseed/url=http://{{ .HTTPIP }}:{{ .HTTPPort }}/preseed.cfg auto ",
    "locale=en_US ",
    "kbd-chooser/method=us ",
    "keyboard-configuration/modelcode=pc105 ",
    "keyboard-configuration/layout=US ",
    "keyboard-configuration/variant=US ",
    "hostname={{ .Name }} ",
    "fb=false ",
    "debconf/frontend=noninteractive ",
    "console-setup/ask_detect=false ",
    "initrd=/install/initrd.gz -- ",
    "<enter>"
],

Я недостаточно знаю об установках Linux, чтобы отладить это - как мне узнать, что на самом деле не работает, и исправить это?

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

Я могу собрать этот шаблон и получить работающую установку Linux.

Вам следует искать пресид pkgsel строк, поскольку вы не находитесь в интерактивном режиме установки, когда вы просите установщик установить пакет, который не существует (в настроенных репозиториях), он выдает ошибки в том виде, как вы видите.

Функция preseed очень мощная, вы можете делать что угодно с установкой. Это может быть довольно непрозрачно для отладки, но с Packer мы также попадаем в provisioner после завершения установки.

В данном случае это сценарии оболочки, https://github.com/yunojuno/trifecta/blob/master/packer/template.json#L61-L66

Я бы порекомендовал сохранить preseed super basic и выполнить настройку в вашей системе обеспечения, создать новый сценарий оболочки для добавления новых пакетов, выполнить другие настройки, которые вы хотите встроить в образ - даже удалить вещи, которые были установлены с помощью preseed.

На этапе подготовки вы можете использовать -debug переключитесь в Packer, чтобы действительно перейти к отладке более осязаемым способом - поскольку инициаторы - это сценарии оболочки, запускаемые через ssh-соединение на рабочей установленной виртуальной машине, если вы столкнетесь с проблемой, вы также можете подключиться к этому ssh или через графический интерфейс Virtualbox и отлаживайте работающую машину, прежде чем она будет очищена.

В проекте Bento есть отличные шаблоны Packer, которые вы можете использовать в качестве справочника - https://github.com/chef/bento/blob/master/ubuntu-14.04-amd64.json и https://github.com/chef/bento/blob/master/http/ubuntu-14.04/preseed.cfg - они созданы и поддерживаются Chef, но Chef на самом деле не установлен, они в основном представляют собой ванильную коробку Vagrant.

По сути - в настоящее время одно из имен ваших пакетов в preseed является фиктивным.

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

Редактировать:

Я подумал, что было бы полезно определить некоторые термины:

Упаковщик Программное обеспечение HashiCorp, автоматизирующее создание изображений. Базовый рабочий процесс Builder -> Provisioner -> Post Process

  • Строитель: для различных платформ виртуализации, например Virtualbox, Vmware, AWS EC2, Digital Ocean и т. Д. Каждый имеет свой формат изображения, поэтому нам нужно создать образ для каждого.
    Строители обычно используют устанавливаемую операционную систему инструменты автоматической автоматизации, чтобы обеспечить согласованную базу для подготовки. например Предварительная версия Debian / Ubuntu, RHEL / Centos Kickstart и т. Д.

  • Провайдер: Shell, Ansible, Chef, Salt, Puppet и т. Д. Они работают на всех установленных базовых образах и предназначены для настройки, установки программного обеспечения и т. Д.

  • Постпроцессоры: Vagrant, Atlas, Amazon и т. Д. Подготовьте свой образ для целей развертывания.

(В Packer есть еще пара дополнительных шагов рабочего процесса, но это основные.)

В дополнение к отличному ответу @rjocoleman, есть способ получить доступ к / var / log / syslog из запущенного установщика. Вы можете извлечь его, используя «Сохранить журналы отладки» в главном меню. Это помогает отладить Builder часть рабочего процесса, когда это абсолютно необходимо.