Вопрос или проблема
Я пытаюсь настроить автоматизированную среду установки для Ubuntu 22.04. У нас это уже работает в производственной среде для 20.04 и предыдущих LTS-релизов в течение многих лет. Мы используем PXE/isolinux и серверы TFTP и DHCP для выполнения сетевой и CD загрузки. И некоторые хитрости, чтобы заработала UEFI.
Я не могу найти рабочие изображения vmlinuz и initrd, которые позволили бы мне начать автоматизированную установку Ubuntu 22.04, используя preseeding и установщик Debian (d-i).
Я использую следующее для установки 20.04, это не работает на 22.04:
linuxefi /path/to/2004/amd64/linux auto=true priority=critical url=http://example.com/ubuntu/2004/amd64/seed_ub_uefi.cfg console-setup/layoutcode=us interface=auto
initrdefi /path/to/2004/amd64/initrd.gz
Я пробовал извлекать образы vmlinuz и initrd.gz из ISO образов Ubuntu 22.04 CD. Однако, что бы я ни пробовал, он даже не может найти корневую файловую систему. Я предполагаю, что образы больше не имеют встроенной функциональности d-i и preseed?
Если таких образов нет, как мне создать свои собственные? Я не очень рад переходить на тот автоматизированный метод установки, который Canonical хочет навязать. Вся наша инфраструктура основана на вышеупомянутом методе, и мы устанавливаем несколько ОС аналогичным образом.
Я задал этот вопрос на serverfault, но пока не получил ответа, поэтому решил, что здесь будет более подходящее место, чтобы спросить.
Я почти настроил preseeding на 22.04 “построенной с нуля” ISO.
В ходе сборки ISO в chroot я все еще устанавливаю
ubiquity
ubiquity-casper
ubiquity-frontend-gtk
ubiquity-slideshow-ubuntu ubiquity-ubuntu-artwork
APT-пакеты и preseeding почти работает с моим preseed файлом от 20.04. По какой-то причине я должен нажимать “Продолжить” на экране “Загрузить обновления во время установки Ubuntu”, когда в 20.04 этого не требовалось.
Изменение: Мне удалось сделать его полностью автоматизированным, добавив в мой preseed файл
ubiquity ubiquity/download_updates boolean false
ubiquity ubiquity/use_nonfree boolean false
Согласно этой ссылке, Ubuntu прекратил поддержку preseed на 20.04
(Я почти уверен, что Canonical пытается поспевать за Apple с точки зрения ломания всех вещей во имя прогресса, не обращая внимания на пользователей и клиентов.)
Вот мое решение, которое мне только что удалось настроить…
-
Я создал файл preseed.cfg со всеми необходимыми настройками. В моем случае этот файл preseed.cfg создается как шаблон JINJA, чтобы подтянуть секреты из хранилища секретов.
-
Затем я создал контейнер Docker для предоставления моего файла preseed.cfg. Он выглядит примерно так:
FROM REDACTED_INTERNAL_PATH/base:latest as runtime
USER root
RUN apt-get install nginx sudo -y && \
rm /var/www/html/index.nginx-debian.html && \
rm -rf /etc/update-motd.d/* && \
echo "%service ALL=NOPASSWD: /etc/init.d/nginx" > /etc/sudoers.d/service
COPY preseed.d/entrypoint.sh /opt/
COPY preseed.d/html/*.cfg /var/www/html/
USER service
ENTRYPOINT [ "/opt/entrypoint.sh" ]
3. У меня есть makefile, который собирает и запускает этот Docker-контейнер для предоставления моего файла preseed.cfg.
4. Затем я использую что-то вроде следующего в Packer для загрузки виртуальной машины 22.04:
variable iso_url {
type = string
default = "https://releases.ubuntu.com/22.04/ubuntu-22.04-live-server-amd64.iso"
}
variable iso_checksum {
type = string
default = "84aeaf7823c8c61baa0ae862d0a06b03409394800000b3235854a6b38eb4856f"
}
variable cpus {
type = number
default = 2
}
variable memory_size {
type = number
default = 4096
}
variable disk_size {
type = number
default = 61440
}
variable ssh_username {
type = string
default = "<redacted>"
}
variable ssh_password {
type = string
default = "<redacted>"
}
packer {
required_plugins {
parallels = {
version = ">= 1.0.1"
source = "github.com/hashicorp/parallels"
}
}
}
source "parallels-iso" "ubuntu" {
boot_command = [
"<esc><esc><enter><wait>",
"/install/vmlinuz noapic ",
"preseed/url=http://{{ .HTTPIP }}:8080/preseed.cfg <wait>",
"debian-installer=en_US ",
"auto locale=en_US",
"kbd-chooser/method=us <wait>",
"hostname={{ .Name }} <wait>",
"fb=false",
"debconf/frontend=noninteractive <wait>",
"keyboard-configuration/modelcode=SKIP ",
"keyboard-configuration/layout=USA ",
"keyboard-configuration/variant=USA ",
"console-setup/ask_detect=false <wait>",
"initrd=/install/initrd.gz -- <enter><wait>",
]
boot_wait = "10s"
guest_os_type = "ubuntu"
vm_name = "ubuntu_base"
iso_checksum = var.iso_checksum
iso_url = var.iso_url
parallels_tools_flavor = "lin"
shutdown_command = "echo 'shutdown -P now' > shutdown.sh; echo 'vagrant'|sudo -S sh 'shutdown.sh'"
ssh_username = var.ssh_username
ssh_password = var.ssh_password
ssh_timeout = "30s"
ssh_wait_timeout = "10000s"
prlctl = [
["set", "{{.Name}}", "--3d-accelerate", "off"],
["set", "{{.Name}}", "--adaptive-hypervisor", "on"],
["set", "{{.Name}}", "--memsize", var.memory_size],
["set", "{{.Name}}", "--cpus", var.cpus],
["set", "{{.Name}}", "--efi-boot", "off"],
]
}
build {
sources = ["source.parallels-iso.ubuntu"]
provisioner "shell" {
scripts = [ ### REDACTED ###]
}
post-processor "vagrant" {
}
}
С Ubuntu 22 вы не можете использовать файл preseed *.cfg, следует использовать autoinstall с http/user-data
.
Ответ или решение
Использование Debian Installer (d-i) и пресидинга для автоматизации установок Ubuntu всегда было популярным методом среди системных администраторов, стремящихся упростить развертывание большого числа машин. Однако в последних версиях, начиная с Ubuntu 20.04 и далее, Canonical изменила некоторые аспекты этого процесса, введя новые инструменты автоматизации, такие как autoinstall для сеансов установленного Live Server ISO. Рассмотрим, как можно использовать эти средства для автоматизации установки Ubuntu 22.04.
Теория
Аутоматизация установки операционных систем требует понимания процессов, задействованных в установке системы и соответствия нового подхода к ее автоматизации с использованием доступных средств. Традиционный механизм пресидинга, обеспечивавшийся d-i, больше не поддерживается для серверных установок с Live Server ISO Ubuntu версии 22.04. Вместо этого используется метод autoinstall, который позволяет более гибко управлять процессом установки.
Autoinstall с Ubuntu 22.04 позволяет задавать настройки через файл user-data, который напоминает инструкции в YAML формате. Это изменение обусловлено стремлением Canonical использовать более современные и гибкие средства автоматизации и координации разворачивания серверов и рабочих станций.
Пример
Вот пример файла user-data, который можно использовать для автоматизации установки Ubuntu 22.04:
#cloud-config
autoinstall:
version: 1
identity:
hostname: my-server
username: myuser
password: "$6$rounded$examplepasswordhash"
keyboard:
layout: us
locale: en_US
network:
version: 2
ethernets:
enp0s3:
dhcp4: true
storage:
layout:
name: lvm
ssh:
install-server: true
packages:
- nginx
- docker.io
user-data:
disable_root: false
users:
- name: myuser
gecos: My User
sudo: ALL=(ALL) NOPASSWD:ALL
groups: users, admin
Этот конфигурационный файл автоматически установит сервер с предустановленным пользователем, пакетом nginx, настройками сети и локализацией.
Применение
-
Создание среды для автоматизации. Первым шагом является создание окружения для хостинга файла user-data. Это может быть простой HTTP-сервер на базе nginx или Apache, Docker-контейнер или любой HTTP-сервер, обеспечивающий доступ к файлу конфигурации.
-
Настройка сетевой загрузки PXE. Если установка производится по сети, настройте PXE-сервер для загрузки необходимого vmlinuz и initrd. Эти файлы можно достать из ISO образа, например:
mkdir ~/iso sudo mount -o loop ubuntu-22.04-live-server-amd64.iso ~/iso cp ~/iso/casper/vmlinuz ~/tftpboot/ cp ~/iso/casper/initrd ~/tftpboot/
-
Настройка параметров командной строки ядра. Вам необходимо передать параметры загрузки ядра для нахождения вашего файла user-data:
linux vmlinuz --- autoinstall ds=nocloud-net;s=http://<YOUR_SERVER_IP>/path_to_user_data/ initrd initrd
Здесь используется параметр
ds=nocloud-net
, который указывает системе о необходимости выполнить автоматическую установку, получив конфигурацию с указанного HTTP-сервера. -
Тестирование процесса установки. Важно протестировать процесс установки и убедиться, что все параметры заданы верно, пользователь создается, пакеты устанавливаются, и сервер готов к работе.
Заключение
Миграция с d-i и пресидинга на autoinstall может потребовать некоторых изменений в вашем подходе, но, освоив новый метод, вы получите более гибкий и мощный инструмент для развёртывания системы. Разделение настроек по ролям и возможность интеграции с современными системами управления конфигурациями делают autoinstall достойным преемником старого подхода.
Следует также поддерживать документацию своей инфраструктуры, чтобы избежать проблем совместимости в будущем, так как Canonical активно развивает и обновляет инструменты автоматизации.