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

    В процессе работы систематически приходится пополнять парк тонких клиентов и каждый раз клиенты могут отличаться по конфигурации от предыдущих и у одного производителя. Хорошо, если отличия небольшие и клиент работает на предыдущей сборке 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
      А еще можно было внимательно посмотреть, какие файлы запрашивает pxelinux по tftp(или почитать документацию) и сделать просто директорию с куском мака без таких монструозных конструкций:
      (binary-to-ascii (16,8,":",substring(hardware, 0, 4)) = «1:38:60:77»)
        –1
        хотя, лично для себя, я делал скрипты для ipxe(и заливал ipxe потом в бутром биоса), что мне показалось более гибким.
          +1
          Как бы помягче то…
          Вы сами разбирались что pxelinux запрашивает? А запрашивается полный МАС, и потом IP с уменьшением знаков, в хексе. Что это нам даст? Прописывать под каждого клиента папку по маку или ip? Уж увольте…

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

            что касается mac/ip у pxelinux, да, тут я ошибся, перепутал с тем, что я делал на ipxe, за давностью лет.
              +1
              Ну в принципе и ipxe, в случае когда 200+ клиентов нескольких конфигураций, проблемы не решает, всё равно нужны настройки на стороне клиента, я же предлагаю простое решение на стороне сервера.
          0
          Интересно, а в Windows Server DHCP можно так же по условиям раздать разные настройки? Пусть и не актуально еще, но повод задуматься
            0
            Да вроде тоже есть какие-то политики, надо смотреть, я не юзал.
              0
              Да, вот опции есть, как сделать — надо в панель управления лезть, у меня виндового 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)
                0
                Вот вроде похоже
                Но опять же — не юзал…
                  0
                  Вот же, век живи — век учись. По поводу принтеров в отдельный сегмент тоже хорошая идея
                    0
                    А смысл? Я обычно просто статику сетевым принтерам выдаю.
                0
                Del

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                Самое читаемое