PXE — Загрузка по сети: сетевая загрузочная флешка
- Что такое PXE?
- Загрузка Linux-системы с использованием PXE
- Подготовка системы для работы PXE сервера
- Настройка DHCP сервера на Linux
- Настройка DHCP сервера на MikroTik
- Настройка DHCP на Cisco
- Настройка TFTP сервера
- Настройка сетевого загрузчика PXE на Syslinux
- Получение загрузчика:
- Описание некоторых модулей SYSLINUX
- Создание главного меню PXE сервера
- Описание синтаксиса файла меню.
- Создание подменю для PXE сервера
- Видео
Загрузочная флешка с набором нужного софта — замечательный инструмент системного администратора. Казалось бы, что может быть лучше? А лучше может быть загрузочный сервер!
Представьте, вы выбрали в BIOS загрузку по сети и можете установить ОС/вылечить компьютер от вирусов/реанимировать диски/протестировать ОЗУ/etc с PXE Boot сервера, ведь это куда удобнее, нежели бегать с флешкой от машины к машине.
А в случае большого компьютерного парка, такой инструмент и вовсе незаменим.
На данной странице детально описывается процесс загрузки бездисковых Linux-станций с помощью PXE, а также рассказывается как с помощью программ проекта LTSP подготовить Linux-систему для использования в качестве сервера загрузки таких станций. Рассматривается процесс настройки всех необходимых компонентов (TFTP, DHCP, NFS-серверов), а также приводятся примеры их конфигурационных файлов.
к содержанию ↑Что такое PXE?
PXE (англ. Preboot Execution Environment, произносится пикси) — среда для загрузки компьютеров с помощью сетевой карты без использования жёстких дисков, компакт-дисков и других устройств, применяемых при загрузке операционной системы. Для организации загрузки системы в PXE используются протоколы IP, UDP, DHCP и TFTP. PXE-код, прописанный в сетевой карте, получает загрузчик из сети, после чего передаёт ему управление.
к содержанию ↑Загрузка Linux-системы с использованием PXE
Загрузку Linux-системы с помощью PXE можно выполнить с помощью загрузчика PXELINUX, созданного на базе SYSLINUX. PXELINUX загружается с помощью PXE-кода в сетевой карте, а затем ему передаётся управление. Код PXELINUX не нужно прописывать в чип на сетевой карте (если нужно именно это, см. проект etherboot).
- pxe — Загрузка PXE-загрузчика. Прошивкой PXE, встроенной в сетевую карту, выполняется загрузка загрузчика pxelinux.
- dhcp1 — Получение IP-адреса и адреса TFTP-сервера. Загрузчик pxelinux делает DHCP-запрос и с его помощью получает IP-адрес и адрес TFTP-сервера. По умолчанию адрес TFTP-сервера равен адресу DHCP-сервера.
- tftp — Обращение к TFTP-серверу для получения ядра Linux. Загрузчик pxelinux обращается к TFTP-серверу и запрашивает у него ядро Linux (и, при необходимости, образ initrd).
- kernel — Запуск ядра Linux. После того как ядро Linux загружено, управление передаётся ему.
- dhcp2 — Получение IP-адреса DHCP. Ядро Linux делает запрос DHCP, с помощью которого получает свой IP-адрес, адрес NFS-сервера, на котором находится корневая файловая система, а также путь к местоположению этой файловой системы на диске.
- nfs — Монтирование корневой файловой системы. Корневая файловая система монтируется.
- init — Вызов процесса init. На корневой файловой системе находится файл /sbin/init, которому передаётся управление.
Подготовка системы для работы PXE сервера
Для загрузки по PXE в Bios подключаемого компьютера должна быть включена и настроена данная функция.
Установим необходимые пакеты без вопросов:
yum -y install dhcp xinetd tftp tftp-server nfs-utils syslinux
Настройка DHCP сервера на Linux
В локальной сети должен работать только один сервер DHCP.
Загрузка по сети устроена так, что BIOS (или EFI) целевой машины передает управление специальной микропрограмме-загрузчику, встроенному в микросхему сетевой карты. Тот пытается получить IP по DHCP, а потом подгрузить с машины, выдавшей IP, основной сетевой загрузчик. В некоторых случаях, если в сети уже есть другой DHCP это может вызвать глюки при загрузке.
Итак, DHCP надо настроить.
Приведем конфигурационный файл DHCP сервера к следующему виду:
к содержанию ↑# mv /etc/dhcp/dhcpd.conf{,_orig}
# cat > /etc/dhcp/dhcpd.conf
option domain-name-servers 8.8.8.8, 8.8.4.4;
option ip-forwarding on;
default-lease-time 60;
min-lease-time 120;
max-lease-time 300;
authoritative;
ddns-update-style interim;
log-facility local7;
shared-network PXE-Netwotk {
subnet 10.0.10.0 netmask 255.255.255.0 {
range 10.0.10.10 10.0.10.254;
option routers 10.0.10.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 8.8.8.8, 8.8.4.4;
filename "pxelinux.0";
next-server 10.0.10.1;
option root-path "10.0.10.1:/srv/tftp/";
}
}
# service isc-dhcp-server restart
Настройка DHCP сервера на MikroTik
address=10.0.10.0/24 gateway=10.0.10.1 dns-server=8.8.8.8, 8.8.4.4 wins-server="" ntp-server=212.20.50.208 caps-manager="" domain="domain.local" next-server=10.0.10.1 boot-file-name="pxelinux.0" dhcp-option=""
Настройка DHCP на Cisco
network <ip сети> <маска>
ip dhcp pool <Имя пула>
bootfile pxelinux.0
next-server <IP сервера tftp>
default-router <Шлюз>
option 66 ascii «Имя сервера»
dns-server <DNS сервера>
option 150 <IP сервера tftp>
domain-name <доменное имя>
Настройка TFTP сервера
Более подробно можно прочитать в статье установка TFTP-hpa сервера или настройка Настройка TFTP сервера на Mikrotik RouterOS
Настройка сетевого загрузчика PXE на Syslinux
На самом деле, загрузчик SYSLINUX — это целый комплекс загрузчиков, на все случаи жизни, здесь есть и сетевой — PXELINUX, и загрузчик для ISO-образов ISOLINUX и просто загрузчик ОС с жесткого диска. Пока нам потребуется только сетевой. SYSLINUX представляет собой операционную систему в миниатюре, загрузчик с помощью специальных команд, прописываемых в загрузочном меню, может выполнять специальные функции, сохраняемые в исполняемых файлах особого формата — модулях загрузчика. Обычно они имеют расширение *.c32
, и плюс некоторые специальные файлы, например модуль memdisk
, загружающий в память ISO-, Floppy- или HDD-образы.
Получение загрузчика:
Проще всего его получить с официального сайта, скачав специальным скриптом. Скрипт разберет полученный архив на части, отдельно найдет в скачанном архиве модули
*.32
,memdisk
и сетевой загрузчикpxelinux.0
.
Скачиваем и заливаем в корень TFTP сервера все необходимое
# cd /tmp
# wget https://www.kernel.org/pub/linux/utils/boot/syslinux/4.xx/syslinux-4.02.tar.gz #только с этой версией удалось подружить инсталлятор ESXi
# tar -xf syslinux-4.02.tar.gz
# cd syslinux-4.02/
# find ./ -name "memdisk" -type f|xargs -I {} cp '{}' /srv/tftp/
# find ./ -name "pxelinux.0"|xargs -I {} cp '{}' /srv/tftp/
# find ./ -name "*.c32"|xargs -I {} cp '{}' /srv/tftp/
к содержанию ↑
Описание некоторых модулей SYSLINUX
chain.c32
— переключает на следующий загрузчик (grldr
, ntldr
или просто на загрузчик, установленный на разделе HDD)
reboot.c32
— перезагрузка компьютера
menu.c32
— при использовании в меню, может загружать дополнительные меню (подменю), или производить переход назад/между меню. Пример использования:
Перейдем к настройке
# cd /srv/tftp/
# mkdir pxelinux.cfg
# cd pxelinux.cfg
Создадим конфиг основного меню и внесем начальные настройки
# cat > default
ui vesamenu.c32
PROMPT 0
menu background background.jpg
menu title ServerClub PXE boot menu
LABEL bootlocal
menu label Boot from first HDD
kernel chain.c32
append hd0 0
timeout 120
TEXT HELP
The system will boot after the time is up
ENDTEXT
к содержанию ↑
Создание главного меню PXE сервера
В главном меню мы будем использовать варианты загрузки системы и переход на подменю с утилитами по паролю.
Описание синтаксиса файла меню.
- UI — Активирует программу отображения меню. Если прописано UI pxelinux.cfg/menu.c32 будет использоваться текстовое меню, если прописать UI pxelinux.cfg/vesamenu.c32 будет использоваться графическое меню.
- ALLOWOPTIONS — Блокирует указание дополнительных параметров для загрузчика с помощью клавиши Tab и клавиши ESC для перехода в командный режим.
- PROMPT — Скрывает отображение строки “boot:” для ввода параметров.
- FONT — Загружает шрифт cyr_a8x16.psf для отображения русских букв.
- MENU COLOR — Переопределяет цвета заданные по умолчанию для интерфейса.
- MENU BACKGROUND — Указывает, какой графический файл использовать в виде фона. Я использую файл back.jpg, который находится в с:\netboot\pxelinux.cfg\back.jpg. Внимание! Картинка должна быть в формате jpg или png. Разрешение картинки обязательно должно быть 640×480
- LABEL — Задает идентификаторы меню. Значения этого параметра не должны повторяться внутри файла.
- MENU LABEL — Задает подпись для идентификатора определенного в LABEL.
- Параметр KERNEL — Указывает, какой загрузчик использовать в случае выбора этого пункта меню.
Создадим файл главного меню:
mcedit /var/lib/tftpboot/pxelinux.cfg/default
= необходимые параметры с комментариями = default vesamenu.c32 # Фон для меню menu background backgrounds/fon.png prompt 0 # Время через которое стартует первый пункт меню timeout 100 menu title ##### PXE BOOT MENU: ##### Label 10 menu label Calculate 17 KDE & SEVO44 kernel live/calculate/cld17kde/boot/vmlinuz append initrd=live/calculate/cld17kde/boot/initrd root=nfs:192.168.1.1:/var/lib/tftpboot/live/calculate/cld17kde calculate=lang:ru_RU,keymap:ru_RU,timezone:Europe/Moscow rw selinux=0 LABEL # ADMIN SETTINGS LABEL 20 # Пароль для запуска menu passwd 777 MENU LABEL Utilits KERNEL vesamenu.c32 APPEND pxelinux.cfg/utilits Label # BOOT LOCAL label 30 menu label Boot from local drive localboot 0
Файл фонового изображения меню должен быть размером 640х480 пикселей, в формате PNG или JPEG.
Создадим папку для фоновых изображений и папку для загрузочных live образов систем:
mkdir /var/lib/tftpboot/live
mkdir /var/lib/tftpboot/backgrounds
Загружаем необходимый iso образ любыми удобными вам способами и копируем содержимое в нужную папку.
При использовании образа с графической оболочкой KDE для стабильной работы необходимо использовать 4 G оперативной памяти!
Приведу лишь команды которые необходимы для монтирования и размонтирования образа iso:
mount -o loop /root/calculate_kde_sevo44.iso /mnt/iso
umount /mnt/iso
Настройки параметров для загрузки разных операционных систем различаются.
В данной настройке по умолчанию грузится live образ. В случае если вам необходима по умолчанию загрузка с жесткого диска, то разместите необходимый пункт первым в меню.
Моё главное меню:
к содержанию ↑Создание подменю для PXE сервера
Все утилиты я намеренно вывел в отдельное подменю и закрыл паролем. Так мне спокойней и пользователи не полезут туда куда им не надо.
Мой файл подменю для utilits выглядит так:
mcedit /var/lib/tftpboot/pxelinux.cfg/utilits
= вывод команды с пояснениями =
default vesamenu.c32
menu background backgrounds/fon.png
menu title ##### Utilits: #####
label # TEST
LABEL 10
MENU LABEL Memtest86+
KERNEL utilits/memtest86
LABEL 11
MENU LABEL MHDD
kernel memdisk
initrd utilits/mhdd32ver4.6.iso
append iso raw
LABEL 12
MENU LABEL Victoria 3.5 HDD
kernel memdisk
initrd utilits/v35.iso
append iso raw
label # Backup/Recovery
LABEL 20
MENU LABEL Clonezilla Live 2.5.2-17
KERNEL utilits/zilla/live/vmlinuz
APPEND initrd=utilits/zilla/live/initrd.img boot=live username=user union=overlay config components quiet noswap edd=on nomodeset nodmraid locales=ru_RU.UTF-8 keyboard-layouts=NONE ocs_live_run="ocs-live-general" ocs_live_extra_param="" video=uvesafb:mode_option=1024x768-16 ocs_live_batch=no net.ifnames=0 nosplash noprompt fetch=tftp://192.168.1.1/utilits/zilla/live/filesystem.squashfs
Label ###
LABEL 30
MENU LABEL NEXT
KERNEL vesamenu.c32
APPEND pxelinux.cfg/default
Скачать необходимый iso образ Clonezilla вы на сайт разработчика. На сайте вы можете найти всю необходимую информацию для настройки и работы с этой замечательной системой.
к содержанию ↑Видео
На видео показано как работает система Calculate Linux которую я настроил под свои нужды запускаемая с помощью PXE сервера.