Вопрос или проблема
Я настраиваю бесконтрольную установку для Ubuntu Server 20.04 с помощью packer
. Однако, несмотря на то что я указал autoinstall
в boot_command
, установщик всегда спрашивает меня о подтверждении (мне нужно вручную ввести “yes” – в середине скриншота):
Это очевидно подрывает концепцию “бесконтрольной установки”, но я не могу понять, в чем проблема. Я привожу ниже два разных boot_command
, которые я использую, и полную конфигурацию в конце поста.
Оба boot-команды приводят к работающей установке, но обе все равно требуют подтверждения. Команда загрузки 1:
boot_command = ["<enter><wait2><enter><wait><f6><esc><wait>", "autoinstall<wait2> ds=nocloud;", "<wait><enter>"]
Команда загрузки 2:
"boot_command": [
"<enter><wait2><enter><wait><f6><esc><wait>",
"linux /casper/vmlinuz autoinstall ds=nocloud;",
"<wait><enter>",
"initrd /casper/initrd",
"<wait><enter>",
"boot"
],
Полная конфигурация:
./ubuntu2004.pkr.hcl:
source "virtualbox-iso" "autogenerated_1" {
boot_command = ["<enter><wait2><enter><wait><f6><esc><wait>", "autoinstall<wait2> ds=nocloud;", "<wait><enter>"]
boot_wait = "2s"
cd_files = ["./http/user-data", "./http/meta-data"]
cd_label = "cidata"
disk_size = 8192
guest_additions_path = "VBoxGuestAdditions_{{ .Version }}.iso"
guest_os_type = "Ubuntu_64"
headless = false
http_directory = "http"
iso_checksum = "sha256:f8e3086f3cea0fb3fefb29937ab5ed9d19e767079633960ccb50e76153effc98"
iso_urls = ["https://releases.ubuntu.com/focal/ubuntu-20.04.3-live-server-amd64.iso"]
shutdown_command = "echo 'ubuntu'|sudo -S shutdown -P now"
ssh_agent_auth = true
ssh_handshake_attempts = "200"
ssh_private_key_file = "/home/asdf/.ssh/virtual_id_ed25519"
ssh_username = "vagrant"
ssh_wait_timeout = "10000s"
vboxmanage = [["modifyvm", "{{ .Name }}", "--memory", "1024"], ["modifyvm", "{{ .Name }}", "--cpus", "1"]]
virtualbox_version_file = ".vbox_version"
vm_name = "packer-ubuntu-20.04-amd64"
}
build {
sources = ["source.virtualbox-iso.autogenerated_1"]
provisioner "shell" {
scripts = ["scripts/init.sh"]
}
provisioner "shell" {
scripts = ["scripts/cleanup.sh"]
}
post-processor "vagrant" {
compression_level = "8"
output = "ubuntu-20.04-test.box"
}
}
./http/user-data:
#cloud-config
autoinstall:
version: 1
locale: en_US
keyboard:
layout: en
variant: us
network:
network:
version: 2
ethernets:
enp0s3:
dhcp4: true
storage:
layout:
name: lvm
ssh:
install-server: yes
user-data:
users:
- name: vagrant
ssh_authorized_keys:
- ssh-ed25519 REDACTED
sudo: ALL=(ALL) NOPASSWD:ALL
groups: [adm, sudo]
lock_passwd: true
shell: /bin/bash
packages:
- openssh-server
- build-essential
late-commands:
- echo 'vagrant ALL=(ALL) NOPASSWD:ALL' > /target/etc/sudoers.d/vagrant
У меня была такая же проблема, и я заметил на консоли, что Packer вводил ‘yes’ до того, как установщик был готов (установщик приостановился после 200 секунд, но boot_wait был установлен на 180). Я увеличил значение ‘boot_wait’, чтобы исправить проблему (см. ниже). Также показаны два дополнительных параметра времени ожидания, которые могут (или не могут) потребовать корректировки с вашей стороны:
-
boot_wait = “300s”
-
ip_wait_timeout = “20m”
-
ssh_timeout = “30m”
Ответ или решение
Чтобы решить проблему, когда установка Ubuntu Server 20.04 с использованием Packer запрашивает подтверждение, несмотря на то что вы указали autoinstall
в boot_command
, нужно учесть несколько аспектов, связанных с таймингами и последовательностью выполнения команд.
Во-первых, отладка проблемы заключается в том, что Packer может пытаться вводить "yes" слишком рано, прежде чем установщик успевает перейти к следующему этапу. Чтобы предотвратить это, необходимо увеличить значение boot_wait
. Рассмотрите возможность изменения его следующими значениями:
boot_wait = "300s"
Увеличение boot_wait
до 300 секунд позволит убедиться, что Packer ожидает достаточно долго, прежде чем начать вводить команды установки.
Во-вторых, можно также рассмотреть возможность изменения других таймаутов, чтобы мероприятие работало более плавно:
ip_wait_timeout = "20m"
ssh_timeout = "30m"
Таймауты для выполнения SSH-запросов и ожидания IP-адреса могут быть увеличены, особенно если ваша сеть медленная или настройка занимает больше времени.
Таким образом, ваш полный конфиг будет выглядеть так:
source "virtualbox-iso" "autogenerated_1" {
boot_command = [
"<enter><wait2><enter><wait><f6><esc><wait>",
"autoinstall<wait2> ds=nocloud;",
"<wait><enter>"
]
boot_wait = "300s" # Увеличено
cd_files = ["./http/user-data", "./http/meta-data"]
cd_label = "cidata"
disk_size = 8192
guest_additions_path = "VBoxGuestAdditions_{{ .Version }}.iso"
guest_os_type = "Ubuntu_64"
headless = false
http_directory = "http"
iso_checksum = "sha256:f8e3086f3cea0fb3fefb29937ab5ed9d19e767079633960ccb50e76153effc98"
iso_urls = ["https://releases.ubuntu.com/focal/ubuntu-20.04.3-live-server-amd64.iso"]
shutdown_command = "echo 'ubuntu'|sudo -S shutdown -P now"
ssh_agent_auth = true
ssh_handshake_attempts = "200"
ssh_private_key_file = "/home/asdf/.ssh/virtual_id_ed25519"
ssh_username = "vagrant"
ssh_wait_timeout = "10000s"
vboxmanage = [["modifyvm", "{{ .Name }}", "--memory", "1024"], ["modifyvm", "{{ .Name }}", "--cpus", "1"]]
virtualbox_version_file = ".vbox_version"
vm_name = "packer-ubuntu-20.04-amd64"
}
build {
sources = ["source.virtualbox-iso.autogenerated_1"]
provisioner "shell" {
scripts = ["scripts/init.sh"]
}
provisioner "shell" {
scripts = ["scripts/cleanup.sh"]
}
post-processor "vagrant" {
compression_level = "8"
output = "ubuntu-20.04-test.box"
}
}
Эти изменения должны устранить необходимость вводить "yes" вручную во время автоматической установки. Убедитесь также, что файл user-data
корректно настроен и содержит все необходимые параметры для обработки автоматической установки.