Pull to refresh

PXE загрузка Thinstation в зависимости от железа тонкого клиента

Reading time2 min
Views17K
В процессе работы систематически приходится пополнять парк тонких клиентов и каждый раз клиенты могут отличаться по конфигурации от предыдущих и у одного производителя. Хорошо, если отличия небольшие и клиент работает на предыдущей сборке Thinstation, на практике же выходит что рабочая сборка не совместима с новыми компьютерами.

Само-собой первая мысль — собрать универсальный образ загрузки, но не всегда это получается — либо образ очень большой, либо модули или пакеты несовместимы. Выход — собрать несколько образов и отдавать их нужным клиентам при загрузке. Способов несколько, здесь опишу мой любимый.

Для примера у меня два разных вида тонких клиентов: давнишняя партия HP Compaq t5135 и партия поновее USN BQ 656, железо всё разное, пришлось сделать два образа загрузки — TS-2.2.2i и TS-5.3. О том как и на чём настраивать PXE загрузку писать не буду, а вот как отдавать нужные образы с помощью DHCP напишу.

Создаём на TFTP сервере две папки для отдаваемых по PXE образов, соответственно hp и usn и складываем в них наши загрузчики. Раздача будет осуществляться по MAC-адресам, вернее по их первой половине, т.к. у каждого вендора свой идентификатор и в одной партии обычно первая половина MAC-а совпадает.
Как и ожидалось у всех моих клиентов HP MAC начинаются с 00:1E:0B и зарезервированы за компанией Hewlett-Packard Company, а у USN — с 38:60:77 и зарезервированы за компанией PEGATRON CORPORATION.

Дописываем условия в конфигурационном файле сервера dhcpd.conf в описание subnet:

if (binary-to-ascii (16,8,":",substring(hardware, 0, 4)) = "1:0:1E:B") {
filename "/hp/pxelinux.0";
}
elsif (binary-to-ascii (16,8,":",substring(hardware, 0, 4)) = "1:38:60:77") {
filename "/usn/pxelinux.0";
}
else {
filename "pxelinux.0";
}

Здесь прописываются начальные, одинаковые для определённого производителя, значения MAC-адреса и если условие совпадает с началом мака клиента — то ему назначается определённый в условии файл начальной загрузки из соответствующей папки TFTP сервера.

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

С dnsmasq как всегда ещё проще:

dhcp-mac=hp,00:1E:0B:*:*:*
dhcp-boot=net:hp,hp/pxelinux.0,boothost,192.168.111.254

dhcp-mac=usn,38:60:77:*:*:*
dhcp-boot=net:usn,usn/pxelinux.0,boothost,192.168.111.254

dhcp-boot=pxelinux.0,boothost,192.168.111.254

Пояснять особо нечего, назначаем идентификатор по мас и отдаём загрузчик по идентификатору, если ничего не совпало — отдаём «дефолтный» образ, у меня он в варианте сборки с опцией --allmodules для получения параметров клиента.
Tags:
Hubs:
Total votes 10: ↑7 and ↓3+4
Comments12

Articles