В процессе работы систематически приходится пополнять парк тонких клиентов и каждый раз клиенты могут отличаться по конфигурации от предыдущих и у одного производителя. Хорошо, если отличия небольшие и клиент работает на предыдущей сборке 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:
Здесь прописываются начальные, одинаковые для определённого производителя, значения MAC-адреса и если условие совпадает с началом мака клиента — то ему назначается определённый в условии файл начальной загрузки из соответствующей папки TFTP сервера.
Важно отметить, что в «переменной» hardware для сетевых карт идет лидирующий блок: «01:», так что приходится его учитывать. Также важно, что, если часть MAC-адреса начинается с нуля, то он при переводе отбрасывается. Таким образом, MAC-адрес с началом «00:1E:0B» преобразуется в «1:0:1E:B».
С dnsmasq как всегда ещё проще:
Пояснять особо нечего, назначаем идентификатор по мас и отдаём загрузчик по идентификатору, если ничего не совпало — отдаём «дефолтный» образ, у меня он в варианте сборки с опцией --allmodules для получения параметров клиента.
Само-собой первая мысль — собрать универсальный образ загрузки, но не всегда это получается — либо образ очень большой, либо модули или пакеты несовместимы. Выход — собрать несколько образов и отдавать их нужным клиентам при загрузке. Способов несколько, здесь опишу мой любимый.
Для примера у меня два разных вида тонких клиентов: давнишняя партия 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 для получения параметров клиента.
Комментарии (12)
TokminD
16.10.2015 08:46Интересно, а в Windows Server DHCP можно так же по условиям раздать разные настройки? Пусть и не актуально еще, но повод задуматься
shweew
16.10.2015 09:46Да, вот опции есть, как сделать — надо в панель управления лезть, у меня виндового DHCP сервера нет.
043 Vendor Specific Info Standard 01 04 00 00 00 00 ff
060 ClassID Standard PXEClient
066 Boot Server Host Name Standard Server IP address
067 Bootfile Name Standard bzImage (boot file name)
lolipop
А еще можно было внимательно посмотреть, какие файлы запрашивает pxelinux по tftp(или почитать документацию) и сделать просто директорию с куском мака без таких монструозных конструкций:
lolipop
хотя, лично для себя, я делал скрипты для ipxe(и заливал ipxe потом в бутром биоса), что мне показалось более гибким.
shweew
Как бы помягче то…
Вы сами разбирались что pxelinux запрашивает? А запрашивается полный МАС, и потом IP с уменьшением знаков, в хексе. Что это нам даст? Прописывать под каждого клиента папку по маку или ip? Уж увольте…
А уж лить ipxe в каждого клиента секс ещё тот, и по поводу гарантии нужно уточнять, наверное слететь можно.
lolipop
у меня был сервис, который должен работать 24/7(кодирование видео на видюхах), поэтому там нужен был ipxe чтобы исключить места, где загрузка может зависнуть, а так же для реализации более сложной последовательности загрузки, чем даёт pxelinux. кроме того, в биос вливались одинаковые настройки. и всё это делалось автоматом через pxe, да.
что касается mac/ip у pxelinux, да, тут я ошибся, перепутал с тем, что я делал на ipxe, за давностью лет.
shweew
Ну в принципе и ipxe, в случае когда 200+ клиентов нескольких конфигураций, проблемы не решает, всё равно нужны настройки на стороне клиента, я же предлагаю простое решение на стороне сервера.