Магазин / аукцион / FPR / donate / услуги / RSS / распечатать / вход 
Мой мир
Вконтакте
Одноклассники
Google+

[28 июня 2017 | 13 июля 2017 | 9 августа 2017]

PXE Boot и WinPE для установки по сети Windows 10 / Server 2016

Порывшись в сети нашел массу инструкций по аналогичной теме. Вроде всё разжевано и инструкции чёткие, но при их выполнении происходят какие-то не очевидные вещи и пока разбираешься в том, что надо сделать приходится параллельно искать информацию о появляющихся ошибках. Получив опыт и имея готовую систему я пришел к выводу, что всё можно было сделать другими инструментами, не устанавливая массу стороннего софта и не заморачиваясь со сложным редактированием образов. Материал касающийся нашей темы косвенно я опишу лишь поверхностно, чтобы не скатываться в занудную статью о настройке серии роутеров на раздачу DHCP. То, что касается непосредственно создания аналога сервера развёртывания конфигураций я опишу подробно и с картинками. Не скриншотами командных файлов, а нормальным текстом, который можно скопировать и запустить на своём компьютере.

Если вы сталкивались с инструкциями в которых необходимо «поднимать» активдиректори и доменкотроллер, монтировать диски через определённые утилиты и долго шаманить над созданием текстовых файлов, перепечатывая текст с монитора, то представляю вам более простой вариант реализации. Тот кто пользовался этой инструкцией дали пару рекомендаций о подаче информации и думаю, что теперь она вылизана как никогда чётко и красиво.

Есть масса методов установки операционных систем по сети. Данный вариант предназначен для маленьких сетей в которых нет возможности установить сервер с операционной системой Windows Server. Например, если компания не хочет нарушать лицензионную чистоту, а администратор сети не умеет администрировать Linux-сервера. Единственная сложность с которой придётся столкнуться заключается в поиске оригинального файла winpe.wim.

Хочу обратить особое внимание на то, что для сетевой установки желательно использовать Windows Deployment Services (WDS), а не самопальные системы. Там больше инструментов и они более гибкие.

Вот последовательность которую будем проводить для настройки нашей системы.

Думаю стоит немного уточнить, что для чего нужно.

Настройка DHCP-сервера

Исходя из того, что сеть небольшая и в ней нет ни Линуксового, ни виндового сервера, то можно предположить, что в качестве DHCP-сервера выступает роутер компании. Настройка каждого конкретного роутера уникальна и по этому администратор должен самостоятельно решить вопрос о добавлении необходимых настроек. В качестве примера могу привести настройку роутеров Cisco.

conf t
 ip dhcp pool {ИМЯ}
  bootfile pxelinux.0
  next-server {IP-адрес вашего TFTP-сервера}

В настройках роутера необходимо указать два параметра. Первый — это имя файла для первоначальной загрузки PXE. Второй — это адрес TFTP-сервера. Настроив эти данные на своём DHCP-сервере мы можем приступить к следующему шагу. Если у роутера нет возможности манипулировать настройками его DHCP, то нужно искать выход. Например, можно отключить автоматический DHCP на роутере и установить DHCP-сервер на компьютере выделенном для сетевой установки операционных систем. В качестве универсального решения могу предложить использовать Tftpd64, который выступает в роли как TFTP-сервера, так и DHCP-сервера.

Настройка TFTP-сервера

Следующим шагом мы настраиваем TFTP-сервер. Хотя, что там настраивать? Устанавливаем программу Tftpd64 и в ней указываем каталог в котором располагаются файлы для нашего проекта. Допустим, что корень TFTP-сервера расположен по адресу D:\TFTP\. Для усиления системы безопасности я не рекомендую располагать данные публичного характера на системном диске.

Tftpd64 настройка сервера.

Подготовка PXElinux

Далее ищем самый свежий архив на сайте www.kernel.org. Скачиваем на компьютер и распаковываем в отдельный каталог. Нам необходимо несколько файлов из этого архива. Сначала я думал сделать свой архив, чтобы люди не выискивали нужное из архива, но потом передумал, ведь через несколько месяцев или лет выйдет новая версия, а моя безнадёжно устареет. После копирования файлов нужно будет создать каталог pxelinux.cfg и в нём два пустых файла: default и graphics.conf. В результате получится вот такая структура.

Создаём главное меню с выбором действия. Меню состоит всего из двух пунктов. Первый отвечает за загрузку операционной системы с первого раздела жесткого диска. Второй же отвечает за загрузку установщика операционных систем который мы подготовим чуть позже. Загрузка с локального диска срабатывает через десять секунд бездействия. Это сделано для компьютеров у которых забыли убрать загрузку по сети и за ними работают пользователи.

Файл default:

DEFAULT vesamenu.c32
PROMPT 0
MENU INCLUDE pxelinux.cfg/graphics.conf
TIMEOUT 100

MENU TITLE WWW.ORCINUS.RU PXE Boot menu

LABEL bootlocal
menu label Boot Local HDD
menu default
localboot 0x80

LABEL wininstall64
menu label Установка MS Windows OS (x64)
kernel pxeboot.0

Второй файл содержит информацию о настройке графического режима. Так сложилось исторически из-за того, что у меня на «боевом» сервере используется разветвлённое меню загрузчика и это вполне оправдано. В маленьких проектах нет необходимости во вложенных меню, но если вы следили за моими статьями, то читали статью о PXE загрузке компьютеров. Возможно для вас подобный подход станет необходимым и каждодневным инструментом.

Файл graphics.conf:

MENU MARGIN 10
MENU ROWS 16
MENU TABMSGROW 21
MENU TIMEOUTROW 26
MENU COLOR BORDER 30;44 #00000000 #00000000 none
MENU COLOR SCROLLBAR 30;44 #00000000 #00000000 none
MENU COLOR TITLE 0 #ffffffff #00000000 none
MENU COLOR SEL 30;47 #40000000 #20ffffff
MENU BACKGROUND background.png
NOESCAPE 0
ALLOWOPTIONS 0

На этом основа проекта уже создана. PXE грузится, можно даже сделать меню, скопировать пару утилит и пользоваться благами удалённой загрузки. Но наша цель — это установка операционных систем Windows по сети. И тут кроется очень интересная система подводных камней. В PXElinux можно подключить образ диска и загрузиться с него. Например, я таким образом загружаю диски восстановления и LiveCD с антивирусными программами. Но у протокола TFTP есть огромная проблема с передачей больших файлов. Дополнительно всё усугубляется тем, что перед запуском образа весь файл образа копируется в оперативную память. Ради эксперимента я запустил на нескольких компьютерах запуск установки Windows 10 используя стандартный метод. На одном компьютере загрузка продлилась около трёх часов, а на остальных происходил сбой приблизительно через час. И это только копирование образа в память. Так же на компьютере должно быть установлено памяти больше чем занимает образ. Если вы попробуете загрузить образ размером пять гигабайт, то памяти необходимо около шести. А в офисных компьютерах редко встретишь больше четырёх гигабайт. Естественно, что это совершенно не рабочий вариант.

Расшариваем папку с образами операционных систем

Тут вообще всё очень просто. Создаём каталог на сервере и создаём не привилегированного пользователя с доступом к этому каталогу с правами чтения и исполнения.

Права пользователя.

Допустим мы создали каталог D:\SETUP\ и дали к нему доступ. Так же надо сделать его сетевым. Это тоже просто. Но для того, чтобы у пользователей не возник праздный интерес воспользоваться публичным ресурсом я его сделал скрытым. Конечно, есть масса программ которые позволяют увидеть скрытые каталоги на сервере, но сокрытие ресурсов не бывает лишним.

Подготовка Windows PE

Но существует обходной путь. Мы воспользуемся небольшой операционной системой WindowsPE, которая будет служить оболочкой для запуска установочной программы. WindowsPE является полнофункциональной системой. В ней доступно подключение по сети к SMB-ресурсам, есть графический интерфейс и возможность писать командные файлы, под ней можно запускать программы написанные для ОС Windows. Больше всего меня интересует возможность работать с SMB, так как это нас раскрепощает по скорости скачивания и уменьшает объём скачиваемой информации. Уменьшение объёма произойдёт из-за того, что мы будем использовать лишь несколько реально необходимых файлов из распакованного образа, а не огромный файл.

Продолжаем. Для дальнейшей работы нам необходимо найти чистый образ Winpe.wim. Лучше его не скачивать со сторонних сайтов. Мало ли, кто туда заразу подсунет. Надо идти проторённым и официальным путём. Заходим на сайт Майкрософта и скачиваем образ Windows AIK. Он распространяется в виде ISO-образа, который необходимо смонтировать в систему. У Windows 10 ISO-образы монтируются прямо средствами операционной системы. Находим внутри архив winpe.cab.

Windows AIK disk.

Внутри winpe.cab находится два файла: F1_WINPE.WIM и F3_WINPE.WIM.

Windows PE.

С этого момента необходимо определиться с разрядностью операционной системы. В F1_WINPE.WIM расположена 32-разрядная система, а в F3_WINPE.WIM — 64-разрядная система. Так как подавляющее большинство офисных компьютеров оснащается четырьмя гигабатами оперативной памяти, а процессоры поддерживают 64-бита с незапамятных времён, то рекомендую остановиться именно на 64-битной системе.

Создадим каталог Boot в корневой папке вашего TFTP-сервера. Скопируем туда понравившийся файл и переименуем его в winpe.wim.

Теперь из winpe.wim нужно извлечь несколько файлов и положить их в определённые каталоги. Для доступа к внутренностям этого файла можно использовать архиватор 7-zip или Far manager. Лично я пользуюсь Far и не замечаю разницы между файловой системой и внутренностями архива. Чтобы открыть wim-архив необходимо выделить его курсором и нажать Crtl+PageDown.

Windows PE.

Приведу таблицу размещения файлов для правильного копирования. В левой табличке каталог вашего TFTP-сервера и название файла, а в правой файл из архива winpe.wim. Обратите внимание на то, что файл pxeboot.n12 придётся переименовать, так как это одна из особенностей загрузки файлов с использованием PXElinux.

TFTP файл WIM файлы
\pxeboot.0 Windows\Boot\PXE\pxeboot.n12
\bootmgr.exe Windows\Boot\PXE\bootmgr.exe
\Boot\Fonts\wgl4_boot.ttf Windows\Boot\Fonts\wgl4_boot.ttf
\boot.ini Создать пустой файл.
\Boot\winpe.wim Скопировать сам архив winpe.wim.

Но этого не достаточно для работы. Нужно еще сформировать BCD-файл, который является заменой boot.ini в операционных системах Windows Vista и выше. Для его формирования необходимо выполнить несколько команд с правами администратора.

Чтобы долго не печатать, создайте командный файл createbcd.cmd и скопируйте в него следующий текст.

bcdedit -createstore %1\BCD
bcdedit -store %1\BCD -create {ramdiskoptions} /d "Ramdisk options"
bcdedit -store %1\BCD -set {ramdiskoptions} ramdisksdidevice boot
bcdedit -store %1\BCD -set {ramdiskoptions} ramdisksdipath \boot\boot.sdi
for /F "tokens=2 delims={}" %%i in ('bcdedit -store %1\BCD -create /d "WWW.ORCINUS.RU Boot Image" /application osloader') do set guid={%%i}
bcdedit -store %1\BCD -set %guid% systemroot \Windows
bcdedit -store %1\BCD -set %guid% detecthal Yes
bcdedit -store %1\BCD -set %guid% winpe Yes
bcdedit -store %1\BCD -set %guid% osdevice ramdisk=[boot]\Boot\winpe.wim,{ramdiskoptions}
bcdedit -store %1\BCD -set %guid% device ramdisk=[boot]\Boot\winpe.wim,{ramdiskoptions}
bcdedit -store %1\BCD -create {bootmgr} /d "Windows BootManager"
bcdedit -store %1\BCD -set {bootmgr} timeout 1
bcdedit -store %1\BCD -set {bootmgr} displayorder %guid%

Так как при создании BCD будет несколько файлов, то создайте каталог, например, C:\pxe\. Скопируйте туда createbcd.cmd. Запустите командную строку от имени администратора и дайте команду.

C:\pxe\createbcd.cmd c:\pxe

Из сгенерированных файлов нам понадобится только два: BCD и boot.sdi. Оба файла необходимо скопировать на наш TFTP-сервер в каталог \Boot\.

На этом моменте всё готово для запуска нашей сетевой операционной системы. Но это лишь запуск Windows PE. А как на счёт запуска установки операционных систем? Для этого придётся откорректировать образ winpe.wim.

Доработка Windows PE

В образе winpe.wim есть файл отвечающий за первоначальное иницирование. Используя Far Manager можно открыть и отредактировать этот файл состоящий всего из одной команды. Адрес файла:

\Windows\System32\startnet.cmd

Чаще всего встречается инструция в которой этот файл содержит подключение сетевого диска с распакованными образами и меню для установки. Но во время использования меня это не устроило. Да, в этом случае у нас получается удобное загрузочное меню, а все настройки лежат в одном файле. Но лично меня это не устраивает из-за того, что я люблю экспериментировать и мне нужна универсальная система. По этой причине я разделил задачу на две подзадачи. В startnet.cmd будет простенький скрипт подключающий сетевой диск и запускающий с этого сетевого диска командный файл autostart.cmd.

Почему именно такой подход? Дело в том, что получить доступ к командному файлу на SMB-шаре на порядок проще чем вспоминать адрес и имя файла в wim-образе операционной системы. Тем более, манипулируя файлами и каталогами с программами установки операционных систем, вы всё равно будете рядом с этим файлом и сможете оперативно вносить изменения.

Но никто не мешает вам объединить оба файла в один.

Содержимое startnet.cmd:

@echo off
cls
echo.
echo Подготовка к запуску.
echo Подождите немного...
echo.

wpeinit

echo Подключение сетевого диска.
echo.
@net use Z: \\192.168.0.1\setup$ pa$$W0rd /USER:server\guest

Z:
z:\autostart.cmd
exit /b

Не забудьте указать пароль и имя пользователя для подключения к SMB-ресурсу. Так же не забудьте ограничить права этого пользователя лишь чтением и исполнением. Дело в том, что злоумышленник (даже внутри своей конторы могут быть нежелательные личности и шутники) может воспользоваться возможностью записи и редактирования файлов в своих целях. Не забывайте о безопасности никогда.

И так, что ж мы тут имеем? В файле запускается команда wpeinit которая отвечает за запуск сетевых сервисов и прочих настроечных приблуд. Далее идёт наш код. Я поместил строку подключения к сетевом ресурсу в невидимую для ползователя область так, что он увидит факт подключения сетевого ресурса, но не увидит логин и пароль пользователя для подключения. В какой-то степени защита от дурака, но у простого пользователя не возникнет праздный интерес воспользоваться полученной информацией. Далее будет произведен запуск командного файла с сетевого ресурса.

Как мы знаем, с SMB работа происходит значительно быстрее и не будет лишних проблем с попыткой скачать весь образ установочного диска. Установщих Windows воспользуется только реально необходимыми ему файлами.

Содержимое z:\autostart.cmd, расположенного в корневой директории нашего ресурса:

@echo off
:beginsetup
cls
echo Выберите интересующий вас пункт:
echo.
echo    1) Запуск Far manager
echo.
echo    2) Установка Windows 10 Professional 
echo.
echo    3) Установка Windows 7 Professional
echo.
echo    4) Установка Windows Server 2016 Standard
echo.
echo    5) Установка Windows Server 2016 Hyper-V
echo.
echo Введите номер и нажмите Enter. 
set /p ID=
echo.

if %ID%==1 goto :farman
if %ID%==2 goto :win10pro
if %ID%==3 goto :win07pro
if %ID%==4 goto :winsrv2016
if %ID%==5 goto :winsrv2016h
if %ID% GTR 3 goto :failure
if %ID% LSS 3 goto :failure
exit /b

:farman
echo.
echo Запуск установки.
z:\Far\far.exe
goto :beginsetup


:win10pro
echo.
echo Запуск установки.
z:\Windows_10_professional\setup.exe
exit /b

:win07pro
echo.
echo Запуск установки.
z:\Windows_07_professional\setup.exe
exit /b

:winsrv2016
echo.
echo Запуск установки.
z:\Windows_Server_2016\setup.exe
exit /b

:winsrv2016h
echo.
echo Запуск установки.
z:\Windows_Server_2016_hyperv\setup.exe
exit /b

:failure
cls
echo.
echo Доступных пунктов не выбрано. 
echo Вернитесь в предыдущее меню и выберите нужный пункт.
echo.
pause

goto :beginsetup

Осталось распаковать имеющиеся у вас образы операционных систем и откорректировать файл для запуска установки. Помимо запуска установки операционных систем можно запускать практически любое программное обеспечение. На основе этого меню вы можете сделать запуск антивирусов, диагностических программ и собственных сетевых приложений.

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

• Перейти в архив


Комментарии

Включите JavaScript для комментирования.


Сообщайте нам о замеченных ошибках на: web@orcinus.ru. Все пожелания и советы будут учтены при дальнейшем проектировании сайта... Мы готовы сотрудничать со всеми желающими. Мнение авторов может не совпадать с точкой зрения редакции сайта www.orcinus.ru. В некоторых случаях, мнение автора может не совпадать с мнением автора! Phone: +7-902-924-70-49.

Рейтинг@Mail.ru LiveInternet Rambler's Top100 Яндекс.Метрика