Загрузка PXE для разных платформ тонких клиентов

  • Печать

В больших организациях часто встречается зоопарк различных аппаратных платформ тонких клиентов. Даже у одного производителя система может базироваться и на VIA чипсете и на Geode и на NVidia, а собрать универсальный образ загрузки не всегда получается - либо очень большой, либо модули или пакеты несовместимы.

Короче рассмотрим варианты загрузки разных образов для разных машин, а вариантов этих я знаю пока четыре штуки:

  • Правильный, и работающий на Windiws и Linux DHCP серверах -  выбрать самый многочисленный класс одинаковых клиентов и отдать им дефолтную загрузку PXE, а остальные прописать по MAC-адресам в DHCP и назначить каждой опцию 67 равную папка/pxelinux.0 (filename "папка/pxelinux.0";), разместив эти файлы по разным папкам на TFTP сервере, в зависимости от железа или софта.
    Но это затратное по времени мероприятие - собрать маки и забить их в DHCP.
  •  Второй способ - через конфигурацию загрузки pxelinux.cfg, находящуюся на сервере TFTP.
    При получении файла конфигурации от TFTP сервера клиент ищет подходящую для себя в следующем порядке:

    pxelinux.cfg/01-88-99-aa-bb-cc-dd
    pxelinux.cfg/C0A800FE
    pxelinux.cfg/C0A800F
    pxelinux.cfg/C0A800
    pxelinux.cfg/C0A80
    pxelinux.cfg/C0A8
    pxelinux.cfg/C0A
    pxelinux.cfg/C0
    pxelinux.cfg/С
    И если ничего подходящего нет -
    pxelinux.cfg/default

    pxelinux.cfg - сама папка с файлами конфигурации, 01-88-99-aa-bb-cc-dd - файл с названием МАС-адрес клиента, в нижнем регистре, разделенный тире, с префиксом 01-.
    А дальше - это IP-адрес, который клиент получил, в шестнадцатеричном формате. Т.е. C0A800FE = 192.168.0.254. Получается, что для привязки машины к образу нам нужен MAC-адрес или IP клиента и файлы (содержание посмотреть в файле pxelinux.cfg/default, только в пути до vmlinuz и initrd дописать свою папку или переименовать их, например в  vmlinuz-depo и initrd-depo и прописать в конфиг) с именем "01-мак-ад-рес" или с именем "IPклиента" переведённом в HEX формат (здесь онлайн) или в консоли linux: echo $(printf '%02X' 192 168 0 254), и находиться они должны в папке pxelinux.cfg. В общем телодвижений ещё больше, чем в первом варианте.
  • Третий способ  - выбор образа загрузки через меню.
    Делаем меню загрузки для разных конфигураций. Для начала нужно привести файл pxelinux.cfg/default примерно к следующему виду:

default vesamenu.c32
prompt 0
menu title Меню выбора образа PXE
timeout 300
font 866_8x16.psf
label depo
menu label PXE для ДЕПО
menu default
kernel depo/vmlinuz
append initrd=depo/initrd  video=uvesafb:1024x768-32,mtrr:0,ywrap splash=silent,theme:default console=tty1 loglevel=3 LM=3
label tonk
menu label PXE для ТОНК
kernel tonk/vmlinuz
append initrd=tonk/initrd  video=uvesafb:1024x768-32,mtrr:0,ywrap splash=silent,theme:default console=tty1 loglevel=3 LM=3

Если нужны ещё пункты - добавляем их по образу и подобию.
Сразу после загрузки клиента получим вот такое меню:

Для отображения меню по русски нам нужно сохранить файл в кодировке CP-866 и положить в папку файл шрифта font 866_8x16.psf(архив в конце статьи)
А если немного настроить меню под себя - то можно получить вот такую красоту:

Недостаток такого метода в том, что придётся объяснить пользователям в какой пункт меню заходить, в зависимости от начинки клиента.

  • И наконец самый лёгкий путь, к сожалению я не знаю как его реализовать в Windows сервере, это прописать условие в конфигурационном файле Linux сервера dhcpd.conf  в описание subnet следующие настроики:

if (binary-to-ascii (16,8,":",substring(hardware, 0, 4)) = "1:0:26:73") {
filename "/depo/pxelinux.0";
}
elsif (binary-to-ascii (16,8,":",substring(hardware, 0, 4)) = "1:0:1e:90") {
filename "/tonk/pxelinux.0";
}
else {
filename "pxelinux.0";
}

Здесь прописываются начальные, одинаковые для определённого производителя, значения MAC-адреса и если условие совпадает с началом мака клиента - то ему назначается определённый в условии файл начальной загрузки из соответствующей папки на TFTP сервера.
Важно отметить, что в «переменной» hardware для сетевых карт идет лидирующий блок: «01:», так что приходится его учитывать. Также важно, что, если часть MAC-адреса начинается с нуля, то он при переводе отбрасывается. Таким образом, MAC-адрес с началом «00:03:EF» преобразуется в «1:0:3:ef».

Ещё проще в dnsmasq

dhcp-mac=depo,00:26:73:*:*:*
dhcp-boot=net:depo,depo/pxelinux.0,boothost,192.168.111.254
dhcp-mac=tonk,00:1E:29:*:*:*
dhcp-boot=net:tonk,tonk/pxelinux.0,boothost,192.168.111.254
dhcp-boot=pxelinux.0,boothost,192.168.111.254

 Выбор способа за Вами.



Обсудить на форуме (комментариев 2).