Сетевая загрузка PXE на основе TFTPD32

 

Описание настройки собственного PXE сервера на основе TFTPD32 для загрузки WinPE или BartPE.

PXE и процесс загрузки по сети

        Стандарт PXE (Preboot Execution Environment) позволяет превратить сетевую карту в одно из устройств, с которого может загрузиться компьютер. Разработку данного стандарта начала компания Intel, еще 1999 году, а потом к разработке присоединились такие гиганты компьютерной индустрии, как 3Com, HP, Dell, Compaq. Стандарт прижился. И сейчас, пожалуй, не возможно, найти современной сетевой платы без поддержки PXE.
Конечно для того, чтобы компьютер смог загрузиться по сети одного PXE не достаточно. Нужно еще наличие в сети серверов TFTP и DHCP.

        Процесс загрузки по сети можно упрощенно описать примерно так.

При включении компьютера, начинает работать PXE загрузчик, который находится в памяти (boot ROM) сетевого адаптера. Сетевая карта отправляет запрос к серверу DHCP для получения IP адреса. Получив запрос, DHCP сообщает сетевой плате IP адрес, маску сети, адрес TFTP сервера и имя загрузочного файла. После обработке полученных данных PXE обращается к серверу TFTP и загружает файл. Получив файл, PXE прекращает свою работу и передает управление загруженной программе.

Подготовка файлов

        Создадим каталог для сетевой установки C:\PXE. Внутри создадим каталог, например WinPE.
        Сетевая загрузка WinPE делится на два этапа. На первом этапе происходит загрузка файлов по протоколу TFTP. А на втором этапе файлы загружаются по протоколу CIFS (старое название SMB). Протокол CIFS более известен, как общий доступ к файлам и принтерам сети.
Поэтому для второго этапа загрузки нужно:

  • Сделать каталог C:\PXE доступным по сети (расшарить) для группы "Everyone (Все)" с правами только чтения.
  • Также необходимо убедиться, что учетная запись "Guest (Гость)" активирована.

Для этого нажимаем, правую клавишу мыши на "My Computer (Мой компьютер)" и выбираем "Manage (Управление)". Раскрываем "System Tools (Служебные программы)", "Local Users and Groups (Локальные пользователи и группы)". Выбираем "Users (Пользователи)". В правой части экрана нажимаем правую клавишу мыши на "Guest (Гость)" и выбираем "Properties (Свойства)". В появившемся окне убираем флажок с "Account is disabled (Отключить учетную запись)" и нажимаем кнопку OK

  • Если директория C:\PXE\WinPE находится на разделе с файловой системой NTFS, то необходимо в свойствах этого каталога в "Security (Безопасность)" также добавить группу "Everyone (Все)". Этой группе необходимо разрешить чтение.
  • Также следует убедиться, что не запрещен доступ пользователя "Guest (Гость)" по сети в групповой политике.

Для этого нажимаем "Start (Пуск)", выбираем "Control Panel (Панель управление)", "Administrative Tools (Администрирование)". В появившемся окне выбираем "Local Security Policy (Локальная политика безопасности)". После загрузки оснастки "Local Security Settings (Локальные параметры безопасности)", разворачиваем "Local Policies (Локальные политики)" и выбираем "User Rights Assignments (Назначение прав пользователя)". В правой части нажимаем дважды левую клавишу мыши на "Deny access to this computer from the network (Отказ в доступе к компьютеру по сети)". В появившемся списке отмечаем "Guest (Гость)" и нажимаем кнопку "Remove (Удалить)". Для подтверждения изменений нажимаем кнопку удалить.

Подготовка сборки WinPE для загрузки по сети

         Копируем содержимое сборки(каталоги I386 и Programs) в каталог C:\PXE\WinPE
         Копируем из каталога C:\PXE\WinPE\I386 файл ntdetect.com в каталог C:\PXE
         Разархивируем файлы (из дистрибутива Windows XP/Windows 2003) setupldr.ex_ и startrom.n1_ в каталог C:\PXE. Сделать это можно с помощью архиватора 7-zip или команд:
expand D:\WINXP\I386\setupldr.ex_ С:\PXE\WinPE\ntldr
expand D:\WINXP\I386\startrom.n1_ С:\PXE\WinPE\startrom.n12
Следует переименовать startrom.n12 в startrom.0
При работе с локализированной сборкой рекомендуется копировать файл bootfont.bin из каталога C:\PXE\WinPE в C:\PXE.
Распаковываем каталоги tftpd32, infparser и файл binlsrv.exe в C:\PXE

Настройка TFTP сервера (TFTPD32)

          Сначала для удобства следует отключить не нужные сервисы, оставив только "TFTP Server" и "DHCP Server". Затем следует указать каталог, в котором TFTP сервер будет искать файлы. За это отвечает параметр "Base Directory". В нашем случае это C:\PXE. Также следует включить "Option negotiation", "Allow '\' As virtual root" и "Translate Unix file names". Остальные опции выключены.

Настройке DHCP сервера (TFTPD32)

          Для загрузки по сети DHCP должен присвоить IP адрес и указать имя загружаемого файла.
Предположим на компьютере, который выступает в роли PXE сервера, присвоен IP адрес 192.168.0.1 с маской сети 255.255.255.0. Параметр "IP Pool starting address" указывает начальный IP адрес, с которого DHCP будет начинаться выдавать адреса. Установим значение в 192.168.0.10. Параметр "Size of pool" указывает, сколько компьютеров могут получить IP адреса от TFTPD32. Установим значение в 10. Параметр "Boot File" указывает, какой файл необходимо загрузить. В нашем случае это startrom.0. Если на компьютере несколько сетевых подключений, тогда рекомендуется включить опцию "Bind DHCP to this address" и указать наш IP 192.168.0.1.

Настройка программы RIS-LINUX от Sherpya

         Во время загрузки WinPE должна получить информацию, какой драйвер для сетевой платы она должна использовать. Эту информация предоставляет служба BINL. В качестве службы BINL будет использоватся программа ris-linux. Эта программа написана на языке Python, но мы будем использовать портированную под Windows версию.
Для работы BINL требуется создать базу данных сетевых драйверов следующей командой:
C:\PXE\infparser\infparser.exe C:\PXE\WinPE\I386\inf

Подготовка файла winnt.sif

         Для загрузки WinPE также потребуется файл C:\PXE\winnt.sif такого содержимого:

[SetupData]
OsLoadOptions = "/noguiboot /fastdetect /minint"
SetupSourceDevice = "\Device\LanmanRedirector\192.168.0.1\PXE\WinPE"
[UserData]
ComputerName = *

Завершение

         Чтобы наконец заработал наш PXE сервер, достаточно запустить binlsrv.exe и перезапустить tftpd32.

В ходе написание статьи были использованы материалы с сайта ]]>http://unattendedxp.com/]]>, а также собственные наработки. Вроде ничего не забыл. Сильно не пинайте.

Сетевая загрузка PXE на основе TFTPD32 (WIM)

Описание настройки собственного PXE сервера на основе TFTPD32 для загрузки WinPE или BartPE.(WIM Загрузка)

Это продолжение статьи "]]>Сетевая загрузка PXE на основе TFTPD32]]>", поэтому я не буду описывать краткое изложение предыдущей части, а напишу ключевые особенности загрузки WIM сборок по сети.

Подготовка файлов

        Создадим каталог для сетевой установки C:\PXE. Внутри создадим каталог, например WinPE.
        При сетевой загрузке WinPE WIM будет происходить передача файлов только по протоколу TFTP. А не в два этапа как в предыдущей статье.

Подготовка сборки WinPE для загрузки по сети

         Копируем WIM файл сборки(BootSDI.wim или WinPE.wim) в каталог C:\PXE\WinPE
         Копируем из сборки файл ntdetect.com (если он присутствует) в каталог C:\PXE
         Разархивируем файл (из дистрибутива Windows XP/Windows 2003) startrom.n1_ в каталог C:\PXE. Сделать это можно с помощью архиватора 7-zip или команды:
expand D:\WINXP\I386\startrom.n1_ С:\PXE\WinPE\startrom.n12
Следует переименовать startrom.n12 в startrom.0
Также потребуется специальный загрузчик PXELDR-WIM-291 или PXELDR-WIM-337, последний отличается встроенный ntdetect.com. Поэтому не расстраивайтесь если не найдете его в сборке. Загрузчик следует переименовать в NTLDR и положить в каталог C:\PXE
При работе с локализированной сборкой рекомендуется копировать файл bootfont.bin из сборки в каталог C:\PXE.
Распаковываем каталог tftpd32 в C:\PXE

Настройка TFTP сервера (TFTPD32)

          Сначала для удобства следует отключить не нужные сервисы, оставив только "TFTP Server" и "DHCP Server". Затем следует указать каталог, в котором TFTP сервер будет искать файлы. За это отвечает параметр "Base Directory". В нашем случае это C:\PXE. Также следует включить "Option negotiation", "Allow '\' As virtual root" и "Translate Unix file names". Остальные опции выключены.

Настройке DHCP сервера (TFTPD32)

          Для загрузки по сети DHCP должен присвоить IP адрес и указать имя загружаемого файла.
Предположим на компьютере, который выступает в роли PXE сервера, присвоен IP адрес 192.168.0.1 с маской сети 255.255.255.0. Параметр "IP Pool starting address" указывает начальный IP адрес, с которого DHCP будет начинаться выдавать адреса. Установим значение в 192.168.0.10. Параметр "Size of pool" указывает, сколько компьютеров могут получить IP адреса от TFTPD32. Установим значение в 10. Параметр "Boot File" указывает, какой файл необходимо загрузить. В нашем случае это startrom.0. Если на компьютере несколько сетевых подключений, тогда рекомендуется включить опцию "Bind DHCP to this address" и указать наш IP 192.168.0.1.

Подготовка файла winnt.sif

         Для загрузки WinPE также потребуется файл C:\PXE\winnt.sif который можно взять или из сборки или написать самостоятельно с таки содержимым:

[SetupData]
BootDevice="ramdisk(0)"
BootPath="\i386\System32\"
OsLoadOptions="/fastdetect /minint /noguiboot /rdimageoffset=8192 /rdimagelength=3161088 /rdpath=WinPE\winpe.wim"

[UserData]
ComputerName = *

Заключение

         В этой части я опишу особенности с которыми Вы можете столкнутся при создании сетевой загрузки.
Дело в том что многие авторы используют нестандартные имена каталогов и это может стать настоящей проблемой.
Итак, файл:
startrom.0 имеет ссылку на файл NTLDR, и если у вас файлов несколько или файл NTLDR имеет другое имя это нужно учесть.(Имеет значение только при мультизагрузке)
NTLDR содержит I386, ntdetect.com и winnt.sif (при загрузке россыпи имеет значение только I386, при мультизагрузке ntdetect.com и winnt.sif, при WIM загузке ничего менять не нужно)

Чтобы произвести нужные модификации нужно иметь HEX редактор или следующие утилиты:
rep.vbs:   cscript rep.vbs c:\pxe\startrom.0 ntldr c:\pxe\startrom.0 ntldm /force (замена ntldr на ntldm в файле startrom.0)
gsar:     gsar -o "-sI386" "-rY386" "C:\pxe\NTLDR" (Утилита регистрочувствительна, поэтому требует замену дважды, один раз в верхенм регистре и один раз в нижнем)
               gsar -o "-si386" "-ry386" "C:\pxe\NTLDR"

Обе утилиты, два загрузчика PXELDR-WIM, также TFTPD32 Вы сможете найти во вложении ниже.