PXE – Загрузка по сети: сетевая загрузочная флешка

0
365

Загрузочная флешка с набором нужного софта — замечательный инструмент системного администратора. Казалось бы, что может быть лучше? А лучше может быть загрузочный сервер!

Представьте, вы выбрали в 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 сервера

Настройка сетевого загрузчика PXE на Syslinux

На самом деле, загрузчик SYSLINUX — это целый комплекс загрузчиков, на все случаи жизни, здесь есть и сетевой — PXELINUX, и загрузчик для ISO-образов ISOLINUX и просто загрузчик ОС с жесткого диска. Пока нам потребуется только сетевой. SYSLINUX представляет собой операционную систему в миниатюре, загрузчик с помощью специальных команд, прописываемых в загрузочном меню, может выполнять специальные функции, сохраняемые в исполняемых файлах особого формата — модулях загрузчика. Обычно они имеют расширение *.c32, и плюс некоторые специальные файлы, например модуль memdisk, загружающий в память ISO-, Floppy- или HDD-образы.

к содержанию ↑

Получение загрузчика:

Проще всего его получить с официального сайта, скачав специальным скриптом. Скрипт разберет полученный архив на части, отдельно найдет в скачанном архиве модули *.32memdisk и сетевой загрузчик 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 — переключает на следующий загрузчик (grldrntldr или просто на загрузчик, установленный на разделе 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 menu sevo44

к содержанию ↑

Создание подменю для 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 сервера.

Оставьте свой ответ