В процессе работы систематически приходится пополнять парк тонких клиентов и каждый раз клиенты могут отличаться по конфигурации от предыдущих и у одного производителя. Хорошо, если отличия небольшие и клиент работает на предыдущей сборке 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 для получения параметров клиента.

Комментарии (12)


  1. lolipop
    15.10.2015 18:07
    -1

    А еще можно было внимательно посмотреть, какие файлы запрашивает pxelinux по tftp(или почитать документацию) и сделать просто директорию с куском мака без таких монструозных конструкций:

    (binary-to-ascii (16,8,":",substring(hardware, 0, 4)) = «1:38:60:77»)


    1. lolipop
      15.10.2015 18:30
      -1

      хотя, лично для себя, я делал скрипты для ipxe(и заливал ipxe потом в бутром биоса), что мне показалось более гибким.


    1. shweew
      15.10.2015 19:01
      +1

      Как бы помягче то…
      Вы сами разбирались что pxelinux запрашивает? А запрашивается полный МАС, и потом IP с уменьшением знаков, в хексе. Что это нам даст? Прописывать под каждого клиента папку по маку или ip? Уж увольте…

      А уж лить ipxe в каждого клиента секс ещё тот, и по поводу гарантии нужно уточнять, наверное слететь можно.


      1. lolipop
        15.10.2015 19:21

        у меня был сервис, который должен работать 24/7(кодирование видео на видюхах), поэтому там нужен был ipxe чтобы исключить места, где загрузка может зависнуть, а так же для реализации более сложной последовательности загрузки, чем даёт pxelinux. кроме того, в биос вливались одинаковые настройки. и всё это делалось автоматом через pxe, да.

        что касается mac/ip у pxelinux, да, тут я ошибся, перепутал с тем, что я делал на ipxe, за давностью лет.


        1. shweew
          15.10.2015 19:55
          +1

          Ну в принципе и ipxe, в случае когда 200+ клиентов нескольких конфигураций, проблемы не решает, всё равно нужны настройки на стороне клиента, я же предлагаю простое решение на стороне сервера.


  1. TokminD
    16.10.2015 08:46

    Интересно, а в Windows Server DHCP можно так же по условиям раздать разные настройки? Пусть и не актуально еще, но повод задуматься


    1. shweew
      16.10.2015 09:12

      Да вроде тоже есть какие-то политики, надо смотреть, я не юзал.


    1. 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)


    1. shweew
      16.10.2015 10:36

      Вот вроде похоже
      Но опять же — не юзал…


      1. TokminD
        19.10.2015 11:08

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


        1. shweew
          19.10.2015 12:10

          А смысл? Я обычно просто статику сетевым принтерам выдаю.


  1. shweew
    19.10.2015 12:09

    Del