Вопрос или проблема
У меня есть функциональный DHCP, ftp и tftp сервер с директорией tftpboot, в которой машины, настроенные на PXEboot, загружают syslinux без проблем по сети.
Я пытаюсь установить ubuntu 22.04 через PXE с помощью SYSLINUX.
Я следовал этому посту для достижения этой цели.
В этом посте говорится, что нужно извлечь файлы ядра vmlinuz и initrd из ISO установщика ubuntu 22.04, положить их в директорию tftpboot. Затем загрузить ISO из конфигурационного файла под названием default, находящегося в директории pxelinux.cfg. Ниже представлено не исчерпывающее схематичное представление директории tftpboot, относящейся к jammy (пропуская остальные файлы, традиционно используемые syslinux)
└── tftpboot
├── pxelinux.0
├── jammy
│ ├── initrd
│ └── vmlinuz
├── pxelinux.cfg
│ └── default
└── syslinux (Все файлы загрузки Syslinux)
└── bios
├── ldlinux.c32
├── libutil.c32
└── menu.c32
Вот FTP директория, которая у меня есть
└── ftp
└── Ubuntu-22.04
├── ubuntu-22.04.1-live-server-amd64.iso
└── Kickstart
├── user-data
└── meta-data
Вот файл user-data, который я взял, чтобы сначала попробовать минимальную установку. Meta-data может быть пустым:
#cloud-config
autoinstall:
identity:
hostname: jammy-minimal
password: $6$gnqbMUzHhQzpDEw.$.cCNVVDsDfj5Feebh.5O4VbOmib7tyjmeI2ZsFP7VK2kWwgJFbfjvXo3chpeAqCgXWVIW9oNQ/Ag85PR0IsKD/
username: ubuntu
version: 1
Вот конфигурационный файл по умолчанию, который я настроил.
default menu.c32
menu title Установщик Ubuntu
LABEL ubuntu
MENU LABEL Установить сервер Ubuntu Jammy
MENU DEFAULT
KERNEL jammy/vmlinuz
IPAPPEND 1
APPEND initrd=jammy/initrd ip=dhcp url=ftp://172.16.0.4/Ubuntu-22.04/ubuntu-22.04.1-live-server-amd64.iso autoinstall ds=nocloud-net;s=ftp://172.16.0.4/Ubuntu-22.04/Kickstart
Наконец, чтобы добавить файлы user-data (cloud-config) и meta-data, в ftp, который будет использоваться файлом по умолчанию для загрузки своей конфигурации для начала автоматической установки, user-data содержат все шаги, которые мы выберем вручную ранее, для выполнения установки без ручного вмешательства (язык, форматирование и т.д.)
Ядро и ISO загружаются корректно и начинают процесс установки до меню установки, но проблема возникает, когда необходимо загрузить файл cloud-config (user-data), чтобы начать автоматическую установку. Он не может его найти, даже несмотря на то, что я указал его в файле по умолчанию. Вот что происходит на изображении ниже.
Загрузка ISO
Ждёт навсегда cloud-init
Затем запускает меню в конечном итоге
Похоже, что файл user-data игнорируется, если я загружаю его из файла syslinux по умолчанию. Как это возможно? Мне нужно загружать его из другого места, кроме файла по умолчанию?
Я уже думал попробовать загрузить его из модифицированного ISO. Будет ли это хорошей альтернативой? Спасибо
Ждёт навсегда cloud-init
Вы проверили логи cloud-init? Что вы там увидели?
Я подозреваю, что причина, по которой cloud-init ждёт вечно, заключается в том, что вы не предоставляете действительную строку NoCloudNet. Datasource NoCloud cloud-init не поддерживает ftp
. Из документации:
С ds=nocloud значение seedfrom должно начинаться с / или file://. С ds=nocloud-net значение seedfrom должно начинаться с http:// или https:// и заканчиваться слэшом.
Если вы посмотрите ваши логи cloud-init, я уверен, вы увидите это предупреждение.
Обновление: В релизе 24.2 FTP будет добавлен в datasource NoCloud cloud-init.
Ответ или решение
Развертывание Ubuntu 22.04 с использованием PXE и SYSLINUX
Введение
Постановка задачи: вы пытаетесь развернуть Ubuntu 22.04 с использованием PXE-бут и SYSLINUX, однако у вас возникают трудности при загрузке файла cloud-config (user-data) для автоматической установки. В данном руководстве мы подробно разберем процесс настройки PXE для Ubuntu 22.04 с использованием SYSLINUX и поможем вам устранить возникшие проблемы.
Условия для успешной установки
У вас уже имеется рабочий сервер DHCP, FTP и TFTP, а также правильно настроенная директория tftpboot, где находятся необходимые файлы. Исходя из вашей структуры директорий, всё выглядит корректно, однако необходимо уделить особое внимание загрузке конфигурационных файлов для cloud-init.
Настройка TFTP и SYSLINUX
- Подготовка файлов: Извлеките из ISO-образа Ubuntu 22.04 файлы
vmlinuz
иinitrd
и поместите их в директориюtftpboot/jammy/
. - Настройка конфигурационного файла: В файле по умолчанию
tftpboot/pxelinux.cfg/default
убедитесь, что вы правильно указали параметры, особенно в секции, отвечающей за загрузку cloud-config:
default menu.c32
menu title Ubuntu installer
LABEL ubuntu
MENU LABEL Install Ubuntu Jammy Server
MENU DEFAULT
KERNEL jammy/vmlinuz
IPAPPEND 1
APPEND initrd=jammy/initrd ip=dhcp url=http://172.16.0.4/Ubuntu-22.04/ubuntu-22.04.1-live-server-amd64.iso autoinstall ds=nocloud-net;s=http://172.16.0.4/Ubuntu-22.04/Kickstart/
Основные моменты, требующие внимания
-
Протокол для загрузки cloud-config: Как указано в документации cloud-init, вы не можете использовать
ftp://
сds=nocloud-net
. Вместо этого вам необходимо использоватьhttp://
. Вам нужно установить HTTP-сервер (например, Nginx или Apache) на том же сервере, где находится ваш FTP-сервер, чтобы он мог обслуживать файлы. Обратите внимание на добавление завершающего слэша (/) в конце URL. -
Проверка конфигураций: Убедитесь, что файл
user-data
доступен по указанному пути в вашем HTTP-сервере. Проверить доступность можно, попытавшись загрузить файл через браузер или используяcurl
:
curl http://172.16.0.4/Ubuntu-22.04/Kickstart/user-data
- Логи cloud-init: В случае возникших проблем обязательно изучите логи cloud-init. Они помогут диагностировать, что именно происходит при попытке загрузки конфигурационных файлов. Логи можно найти в
/var/log/cloud-init.log
и/var/log/cloud-init-output.log
.
Перехождение к успешной установке
Если после всех предложенных изменений проблем не устранено, рассмотрите возможность создания модифицированного ISO-образа, включающего ваши конфигурационные файлы. Это может быть более сложным путем, но он может обеспечить более стабильную и надежную установку.
Заключение
Выбор правильного подхода к автоматизации установки Ubuntu с использованием PXE и SYSLINUX может значительно повысить эффективность вашего развертывания серверов. Убедитесь, что вы соблюдаете все рекомендации и внимательно отслеживаете логи для быстрого решения возможных проблем. Если возникают дополнительные вопросы, не стесняйтесь обращаться за помощью в профессиональное сообщество.