Автоматическая установка Ubuntu и Rocky Linux на ARM-серверы: настройка PXE/iPXE, preseed и kickstart | Практическое руководство | AdminWiki
Timeweb Cloud — сервера, Kubernetes, S3, Terraform. Лучшие цены IaaS.
Попробовать

Автоматическая установка Ubuntu и Rocky Linux на ARM-серверы: настройка PXE/iPXE, preseed и kickstart | Практическое руководство

17 апреля 2026 10 мин. чтения
Содержание статьи

Введение: Почему автоматическая установка на ARM — это отдельная задача

Автоматическое развертывание операционных систем на серверах с архитектурой ARM64 (AArch64) требует особого подхода. В отличие от привычного x86_64, здесь критически важны правильная настройка UEFI, использование специфичных загрузчиков и подготовка совместимых образов. Если вы попытаетесь скопировать конфигурацию PXE-сервера для x86, загрузка на ARM-оборудовании просто не начнется.

Цель этого руководства — предоставить вам готовое, проверенное на практике решение для создания полностью автоматизированного конвейера установки Ubuntu и Rocky Linux на ARM-серверы. Вы получите не теоретический обзор, а конкретные конфигурационные файлы, команды и пошаговые инструкции, которые можно сразу внедрить в свою инфраструктуру. Это позволит вам разворачивать серверы за считанные минуты, исключая ручные ошибки и экономя десятки часов настройки.

ARM64 (AArch64) в современной инфраструктуре: от Fedora до игровых платформ

Архитектура ARM64 перестала быть нишевой. Это подтверждается тем, что ведущие дистрибутивы, такие как Fedora Workstation 43 (релиз от 28 октября 2025 года), официально предоставляют отдельные Live-образы для ARM64 (AArch64) наряду с x86_64. Более того, крупные игровые платформы, например Valve, выпускают совместимые слои, такие как Proton 11.0 (ARM64) для оборудования Steam Frame. Это означает, что экосистема ПО для ARM активно развивается, и инструменты для ее автоматизированного развертывания становятся насущной необходимостью для DevOps-инженеров и системных администраторов.

Подготовка инфраструктуры: настраиваем PXE/iPXE сервер для архитектуры ARM

Основой автоматической установки является загрузочный сервер. Мы настроим классический PXE с поддержкой UEFI для ARM, а также рассмотрим iPXE как более гибкую альтернативу для сложных сетевых сценариев.

Выбор и настройка сетевых сервисов (DHCP, TFTP, HTTP)

Начнем с развертывания базовых сервисов. В качестве DHCP-сервера можно использовать ISC DHCP или dnsmasq. Ключевой момент для ARM — правильная настройка опции filename, указывающей на загрузчик.

Пример конфигурации dnsmasq (/etc/dnsmasq.conf):

interface=eth0
dhcp-range=192.168.1.100,192.168.1.200,12h
dhcp-boot=grubaa64.efi
enable-tftp
tftp-root=/var/lib/tftpboot
dhcp-option-force=209,configs/grub.cfg
dhcp-option-force=210,/var/lib/tftpboot/

Обратите внимание на строку dhcp-boot=grubaa64.efi. Именно этот файл загрузчика (для ARM64) будет запрошен клиентом. TFTP-сервер (в данном случае встроенный в dnsmasq) будет обслуживать файлы из каталога /var/lib/tftpboot. Крупные файлы — ядро (vmlinuz) и initrd — лучше разместить на HTTP-сервере (nginx или Apache) для скорости. Настройте виртуальный хост, указывающий на каталог, например, /var/www/html/pxe/.

Особенности загрузки ARM через UEFI: загрузчики и их размещение

Цепочка загрузки на ARM-сервере с UEFI выглядит так: UEFI Firmware → GRUB2 (grubaa64.efi) → Ядро Linux (vmlinuz) → Initramfs (initrd.img).

Главное отличие от x86 — файл загрузчика. Для ARM64 это grubaa64.efi. Его можно получить несколькими способами:

  1. Установить пакет grub-efi-arm64 на сервер с архитектурой ARM64 и скопировать файл из /usr/lib/grub/arm64-efi/.
  2. Извлечь из готового установочного образа дистрибутива для ARM.

Структура каталогов на TFTP-сервере должна быть следующей:

/var/lib/tftpboot/
├── grubaa64.efi          # Загрузчик GRUB для ARM64
└── grub/                 # Каталог конфигурации GRUB
    └── grub.cfg          # Главный конфигурационный файл меню загрузки

Именно в этот каталог TFTP сервер должен иметь права на чтение. После настройки DHCP и TFTP ваш сервер готов передавать загрузчик ARM-клиентам.

Создание и настройка установочных образов для Ubuntu и Rocky Linux

Следующий шаг — подготовка образов ОС, которые будут устанавливаться без участия человека. Для этого мы используем preseed для Ubuntu/Debian и kickstart для Rocky Linux (и других дистрибутивов на основе RHEL).

Работа с preseed-файлом для автоматической установки Ubuntu

Preseed-файл содержит ответы на все вопросы установщика Debian/Ubuntu. Приведем ключевые секции рабочего шаблона.

Пример preseed-файла (ubuntu-arm64.seed):

# Локализация и раскладка
d-i debian-installer/language string ru
d-i debian-installer/country string RU
d-i debian-installer/locale string ru_RU.UTF-8

# Настройка сети (статический IP или DHCP)
d-i netcfg/choose_interface select auto
d-i netcfg/get_hostname string ubuntu-arm
d-i netcfg/get_domain string local

# Разметка диска (автоматическая, с очисткой всего диска)
d-i partman-auto/method string regular
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-md/device_remove_md boolean true
d-i partman-auto/choose_recipe select atomic
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true

# Настройка часового пояса и NTP
d-i time/zone string Europe/Moscow
d-i clock-setup/ntp boolean true

# Создание пользователя и настройка пароля (ПАРОЛЬ НУЖНО ИЗМЕНИТЬ!)
d-i passwd/root-login boolean false
d-i passwd/user-fullname string Admin User
d-i passwd/username string admin
d-i passwd/user-password-crypted password $6$rounds=656000$Wy1HkU/... # Сгенерированный хэш

# Выбор пакетов (установка серверного комплекта)
tasksel tasksel/first multiselect server

# Завершение установки
d-i finish-install/reboot_in_progress note

Важно: Пароль в конфигурации должен быть зашифрован с помощью mkpasswd -m sha-512. Никогда не храните чистые пароли в конфигах. Этот файл нужно интегрировать в initrd образ установщика или указать на него ссылку через параметры ядра.

Настройка kickstart для автоматического развертывания Rocky Linux

Для дистрибутивов семейства RHEL (Rocky Linux, AlmaLinux) используется kickstart. Установщик Anaconda, на который ссылается контекст из интернета как на стандартный для Fedora/RHEL, полностью поддерживает файлы этого формата.

Пример kickstart-файла для Rocky Linux 9 ARM64 (rocky9-arm64.ks):

# Версия и архитектура
version=9
arch=aarch64

# Источник установки
url --url="http://your-pxe-server/rocky/9/BaseOS/aarch64/os/"

# Разметка диска под UEFI (обязателен ESP раздел)
clearpart --all --initlabel
part /boot/efi --fstype="efi" --size=200 --fsoptions="umask=0077,shortname=winnt"
part /boot --fstype="xfs" --size=1024
part pv.01 --size=8192 --grow
volgroup vg_system pv.01
logvol / --fstype="xfs" --name=lv_root --vgname=vg_system --size=4096
logvol swap --fstype="swap" --name=lv_swap --vgname=vg_system --size=1024

# Настройка сети и хоста
network --bootproto=dhcp --hostname=rocky-arm
timezone Europe/Moscow --isUtc

# Настройка root-пароля (ИЗМЕНИТЕ!)
rootpw --iscrypted $6$GRl8LQ... # Сгенерированный хэш

# Отключение графического интерфейса, установка минимального набора
skipx
text
%packages --nocore
@^minimal-environment
kernel-tools
vim-enhanced
wget
%end

# Пост-установочные скрипты
%post
# Регистрация в системе управления (пример)
echo "192.168.1.10 rocky-arm" >> /etc/hosts
# Установка SSH-ключа для пользователя
mkdir -p /home/admin/.ssh
echo "ssh-ed25519 AAAAC3... admin@key" >> /home/admin/.ssh/authorized_keys
%end

reboot

Обратите внимание на раздел arch=aarch64 и создание ESP-раздела (/boot/efi) — это обязательные условия для загрузки на ARM с UEFI.

Проверка совместимости и тестирование образов

Прежде чем запускать установку на физические серверы, протестируйте весь конвейер в изолированной среде. Идеальный вариант — использование QEMU с эмуляцией ARM64.

Команда для тестирования загрузки через PXE в QEMU:

qemu-system-aarch64 -m 2048 -cpu cortex-a57 -M virt \
 -netdev user,id=net0,tftp=/var/lib/tftpboot,bootfile=grubaa64.efi \
 -device virtio-net-pci,netdev=net0 \
 -drive if=pflash,format=raw,readonly=on,file=/usr/share/AAVMF/AAVMF_CODE.fd \
 -nographic

Также обязательно проверьте, что в вашем установочном образе присутствуют все необходимые для пост-установочных скриптов утилиты. Как показывает пример из контекста с Cursor Server, отсутствие базовой утилиты вроде wget может остановить весь процесс автоматизации. Убедитесь, что она включена в список пакетов (как в примере kickstart выше).

Сборка полной цепочки: от сетевой загрузки до готовой системы

Теперь свяжем загрузочный сервер и подготовленные образы в единый рабочий процесс. Для этого нам понадобится настроить загрузочное меню GRUB.

Конфигурация загрузочного меню GRUB для PXE

Файл /var/lib/tftpboot/grub/grub.cfg определяет, какие пункты меню увидит пользователь и какие параметры будут переданы ядру.

Пример grub.cfg с пунктами для Ubuntu 22.04 и Rocky Linux 9:

set timeout=5
menuentry "Install Ubuntu 22.04 LTS (ARM64) - Automated" {
    set root=(tftp,192.168.1.10)
    linux /ubuntu/22.04/vmlinuz ip=dhcp url=http://192.168.1.10/pxe/ubuntu-arm64.seed quiet
    initrd /ubuntu/22.04/initrd.gz
}

menuentry "Install Rocky Linux 9 (ARM64) - Automated" {
    set root=(tftp,192.168.1.10)
    linux /rocky/9/vmlinuz ip=dhcp inst.repo=http://192.168.1.10/pxe/rocky/9/BaseOS/aarch64/os/ inst.ks=http://192.168.1.10/pxe/rocky9-arm64.ks inst.text quiet
    initrd /rocky/9/initrd.img
}

Ключевые параметры:

  • Для Ubuntu: url=... указывает на preseed-файл на HTTP-сервере.
  • Для Rocky Linux: inst.repo=... задает источник установки, а inst.ks=... — путь к kickstart-файлу.

Теперь полный цикл выглядит так:

  1. ARM-сервер загружается по сети, получает от DHCP IP-адрес и путь к grubaa64.efi.
  2. По TFTP загружается загрузчик GRUB для ARM64.
  3. GRUB запрашивает grub.cfg и отображает меню выбора ОС.
  4. После выбора пункта меню GRUB загружает ядро (vmlinuz) и initrd (initrd.img) с HTTP-сервера, передавая им параметры автоматической установки.
  5. Установщик (debian-installer или Anaconda) выполняет установку в соответствии с preseed/kickstart-файлом, без запросов к пользователю.
  6. После завершения система перезагружается в установленную ОС.

Интеграция с системами управления и дальнейшая автоматизация

Настроенный PXE-сервер — это мощный инструмент, но его можно интегрировать в более широкий контекст автоматизации инфраструктуры, например, с помощью Ansible. Это позволяет управлять конфигурациями как кодом и масштабировать решение.

Если вы хотите углубиться в тему автоматизации инфраструктуры, рекомендуем наше полное практическое руководство по Terraform и Ansible, где разбираются готовые модули для облаков и best practices организации CI/CD пайплайна.

Шаблонизация конфигураций с помощью Ansible и Jinja2

Вместо ручного копирования файлов для каждого нового сервера можно использовать Ansible для генерации конфигураций на лету. Например, создать роль, которая разворачивает PXE-сервер и генерирует уникальный grub.cfg или preseed-файл для каждого MAC-адреса.

Пример задачи Ansible для генерации preseed-файла из шаблона Jinja2:

- name: Generate preseed file from template
  template:
    src: "templates/ubuntu-arm64.seed.j2"
    dest: "/var/www/html/pxe/{{ inventory_hostname }}.seed"
    owner: root
    group: root
    mode: '0644'
  vars:
    hostname: "{{ inventory_hostname }}"
    static_ip: "{{ hostvars[inventory_hostname]['ansible_host'] }}"

Шаблон ubuntu-arm64.seed.j2 (фрагмент):

d-i netcfg/get_hostname string {{ hostname }}
# Если IP статический
d-i netcfg/get_ipaddress string {{ static_ip }}
d-i netcfg/get_netmask string 255.255.255.0
d-i netcfg/get_gateway string 192.168.1.1

Такой подход позволяет централизованно управлять конфигурациями сотен серверов, минимизируя ручную работу. Аналогично можно шаблонизировать и kickstart-файлы.

Решение типичных проблем и ответы на вопросы

Даже с подробным руководством на этапе внедрения могут возникнуть сложности. Вот список наиболее частых проблем и методов их диагностики.

Диагностика сетевой загрузки и анализ логов

Если ARM-клиент не начинает загрузку, действуйте по цепочке:

  1. Проверьте DHCP: Убедитесь, что клиент получает IP-адрес. Проверьте логи /var/log/syslog на сервере DHCP (dnsmasq). Ищите строки с "DHCPACK".
  2. Проверьте TFTP: Клиент должен запросить файл, указанный в dhcp-boot. В логах dnsmasq с включенным TFTP будут строки "sent /grubaa64.efi". Убедитесь в правах доступа к файлам в /var/lib/tftpboot.
  3. Проверьте загрузчик: Убедитесь, что grubaa64.efi собран для UEFI, а не для устаревшего PC-BIOS. Используйте команду file /var/lib/tftpboot/grubaa64.efi. Должно быть "GRUB2 EFI application (ARM64)".
  4. Анализ трафика: Используйте tcpdump для анализа broadcast-трафика в сети: sudo tcpdump -i eth0 -n port bootps or port bootpc.

Типичные ошибки и решения:

  • "PXE-E11: ARP timeout" / "No DHCP offers received": Проблема на уровне сети или DHCP. Проверьте, находятся ли клиент и сервер в одном VLAN/Broadcast-домене, не блокирует ли межсетевой экран порты 67/68 (DHCP) и 69 (TFTP).
  • "PXE-E32: TFTP open timeout": Клиент получил IP, но не может загрузить файл загрузчика. Проверьте путь в DHCP-опции, права на каталог TFTP и работу TFTP-сервера.
  • Установка зависает на выборе языка или диска: Скорее всего, ошибка в синтаксисе preseed/kickstart файла или он не был передан установщику. Проверьте параметры командной строки ядра в grub.cfg. В установщике Ubuntu нажмите Alt+F4 для просмотра логов.
  • Нет сети во время установки: В preseed для Ubuntu проверьте секцию netcfg. Убедитесь, что в initrd есть необходимые драйверы сетевой карты вашего ARM-оборудования. Возможно, потребуется пересобрать initrd с добавленными модулями.

Для решения сложных задач массовой настройки оборудования, таких как управление параметрами BIOS/UEFI на парке машин, может пригодиться наш гайд по автоматизации настроек виртуализации на ПК Gigabyte, где разбираются принципы работы с фирменными утилитами и скриптами.

Заключение и дальнейшие шаги

Вы создали полноценный конвейер для автоматической установки Ubuntu и Rocky Linux на ARM-серверы. В вашем распоряжении настроенный PXE/iPXE сервер, готовые preseed и kickstart-файлы, а также методология тестирования и диагностики. Это решение позволяет развертывать новые серверы за минуты, обеспечивая консистентность конфигураций и значительную экономию времени.

Для развития этой системы можно:

  1. Добавить поддержку других дистрибутивов: Например, Fedora ARM, для которой, как мы знаем из контекста, существуют официальные образы.
  2. Интегрировать с системой инвентаризации: Написать скрипт, который по MAC-адресу нового сервера автоматически генерирует и размещает его уникальный конфиг на PXE-сервере.
  3. Внедрить автоматическое тестирование прошивок BMC: Расширить пайплайн для проверки и обновления базового ПО управления сервером.

Основы работы с Linux, включая тонкости управления пакетами и сетью, которые критически важны для пост-установочной настройки, подробно разобраны в нашем практическом руководстве по Linux для IT-специалистов.

Адаптируйте предоставленные шаблоны и скрипты под специфику вашего оборудования и требований инфраструктуры. Автоматизация — это итеративный процесс, и данное руководство станет для вас надежной основой.

Поделиться:
Сохранить гайд? В закладки браузера