Предыдущие части статьи:
Работа с образами Windows. Часть 1. Собираем Windows PE.
В предыдущей части мы собирали образ WinPE с добавлением нужных пакетов и драйверов. Напомню, что с точки зрения Microsoft, правильным способом массового развертывания Windows является Windows Deployment Services, но мы делаем простое и удобное решение для небольших организаций.
Для загрузки по сети будем использовать штатный для FreeBSD и большинства дистрибутивов Linux сервер DHCP - ISC DHCP, сервер TFTP и загрузчик pxelinux. Конечно, ничто не мешает использовать DHCP и TFTP серверы из Windows, а WinPE грузить напрямую, без дополнительных загрузчиков.
Начнем с подготовки WinPE для загрузки по сети. Нам нужно будет подготовить файл данных конфигурации загрузки (BCD) и неплохо бы добавить в автозапуск скрипт для вывода меню со списком ОС для развертывания. Скрипт для запуска меню удобнее всего запускать, добавив строчку в штатный
Следующий этап - конфигурация Pxelinux. Pxelinux является частью проекта Syslinux и последнюю версию можно найти на kernel.org. Syslinux и Pxelinux хорошо задокументированы в собственной Вики. Из дистрибутива Syslinux нужны будут следующие файлы: chain.c32, ldlinux.c32, libcom32.c32, libutil.c32, memdisk, pxelinux.0, vesamenu.c32. Грузить нужно файл pxelinux.0, т.е. в dhcpd.conf указываем:
Конфигурация pxelinux (файл
Подготовить образы HDD с DOS для вышеупомянутой прошивки контроллеров и платы проще простого. Создается пустой образ достаточного размера (например, 32МБ, чтобы влезли большие BIOSы для последних плат Supermicro X9):
Работа с образами Windows. Часть 1. Собираем Windows PE.
В предыдущей части мы собирали образ WinPE с добавлением нужных пакетов и драйверов. Напомню, что с точки зрения Microsoft, правильным способом массового развертывания Windows является Windows Deployment Services, но мы делаем простое и удобное решение для небольших организаций.
Для загрузки по сети будем использовать штатный для FreeBSD и большинства дистрибутивов Linux сервер DHCP - ISC DHCP, сервер TFTP и загрузчик pxelinux. Конечно, ничто не мешает использовать DHCP и TFTP серверы из Windows, а WinPE грузить напрямую, без дополнительных загрузчиков.
Начнем с подготовки WinPE для загрузки по сети. Нам нужно будет подготовить файл данных конфигурации загрузки (BCD) и неплохо бы добавить в автозапуск скрипт для вывода меню со списком ОС для развертывания. Скрипт для запуска меню удобнее всего запускать, добавив строчку в штатный
startnet.cmd
:
wpeinit call menu1.cmdВот и само меню (
menu1.cmd
). Для публикации я его несколько сократил, сделав его одноуровневым (уж очень большой у нас список дистрибутивов для развертывания), но смысл будет понятен: монтируем SMB ресурс, на котором лежат образы и скрипты развертывания (работа которых будет описана позже, мы еще даже захват образов не изучали), выводим меню со списком ОС и ждем ввода от пользователя:
@echo off set target_disk=0 Set nw_share=\\192.168.0.200\share_name Set nw_share_user=DOMAIN_NAME\user_name Set nw_share_pwd=password ::___________________________________________________________________ :_menu cls echo Main menu echo Target disk is %target_disk% echo Select task: echo. echo 1] List disks echo 2] List volumes echo 3] Apply Win Srv 2008 R2 Ent Eval to disk %target_disk% echo 4] Apply Win Srv 2008 R2 Ent RUS Corporate to disk %target_disk% echo 5] Apply Win Srv 2012 Std Eval to disk %target_disk% echo 6] Reboot echo 7] Shutdown echo 8] Exit set choice= set /p choice=Type option [1 to 8] and press ENTER : if '%choice%'=='1' goto dp_list_disk if '%choice%'=='2' goto dp_list_volumes if '%choice%'=='3' goto nw_deploy_1_1 if '%choice%'=='4' goto nw_deploy_1_2 if '%choice%'=='5' goto nw_deploy_2 if '%choice%'=='6' wpeutil reboot if '%choice%'=='7' wpeutil shutdown if '%choice%'=='8' goto _end goto _menu ::___________________________________________________________________ :dp_list_disk diskpart /s listdisk.txt pause goto _menu ::___________________________________________________________________ :dp_list_volumes diskpart /s listvolumes.txt pause goto _menu ::___________________________________________________________________ :nw_deploy_1_1 net use y: %nw_share% %nw_share_pwd% /user:%nw_share_user% y: call deploy.cmd winsrv2008r2.wim 1 pause goto _menu ::___________________________________________________________________ :nw_deploy_1_2 net use y: %nw_share% %nw_share_pwd% /user:%nw_share_user% y: call deploy.cmd winsrv2008r2.wim 2 pause goto _menu ::___________________________________________________________________ :nw_deploy_2 net use y: %nw_share% %nw_share_pwd% /user:%nw_share_user% y: call deploy.cmd winsrv2012.wim 1 pause goto _menu ::___________________________________________________________________ :_end cls ECHO. ECHO ENDING SCRIPT... echo. echo. echo. pause endlocalФайлы listdisk.txt и listvolumes.txt - это простые скрипты для diskpart, выводящие список физических дисков и список томов соответственно:
list disk exit
list vol exitВот скрипт для генерации сетевого дистрибутива WinPE:
@echo off REM где хранить PXE-дистрибутив Set pxe_root=G:\opk\pxe REM где лежит собранный WinPE Set winpe_root=G:\opk\winpe_build REM путь установки ADK Set adk_path=%programfiles(x86)%\Windows Kits\8.1\Assessment and Deployment Kit REM путь к дополнительным скриптам для интеграции в WinPE Set scripts_path=G:\opk\winpe\scripts REM вызов скрипта из состава ADK для установки переменных call "%adk_path%\Deployment Tools\DandISetEnv.bat" REM очистка каталога с PXE-дистрибутивом if exist %pxe_root% rd /q /s %pxe_root% REM создаем каталоги для PXE-дистрибутива mkdir %pxe_root% mkdir %pxe_root%\Boot REM копируем wim образ, монтируем его, копируем нужные файлы из него copy %winpe_root%\media\sources\boot.wim %pxe_root%\Boot\winpe.wim Dism /Mount-Wim /WimFile:%pxe_root%\Boot\winpe.wim /index:1 /MountDir:%winpe_root%\mount copy %winpe_root%\mount\Windows\Boot\PXE\*.* %pxe_root%\Boot\ copy %winpe_root%\media\boot\boot.sdi %pxe_root%\Boot\boot.sdi copy %winpe_root%\mount\Windows\System32\bcdedit.exe %pxe_root%\Boot\bcdedit.exe REM помещаем скрипты copy /Y %scripts_path%\*.* %winpe_root%\mount\Windows\System32\ REM размонтируем образ Dism /Unmount-Wim /MountDir:%winpe_root%\mount\ /Commit REM генерация загрузчика %pxe_root%\Boot\bcdedit.exe -createstore %pxe_root%\Boot\BCD set BCDEDIT=%pxe_root%\Boot\bcdedit.exe -store %pxe_root%\Boot\BCD %BCDEDIT% -create {ramdiskoptions} /d "Ramdisk options" %BCDEDIT% -set {ramdiskoptions} ramdisksdidevice boot %BCDEDIT% -set {ramdiskoptions} ramdisksdipath \Boot\boot.sdi REM ищем GUID for /f "tokens=3 delims={} " %%a in ('%BCDEDIT% -create -d "Windows PE" -application osloader') do set guid=%%a REM прописываем winpe в меню загрузки %BCDEDIT% -set {%guid%} systemroot \Windows %BCDEDIT% -set {%guid%} detecthal Yes %BCDEDIT% -set {%guid%} winpe Yes %BCDEDIT% -set {%guid%} osdevice ramdisk=[boot]\Boot\winpe.wim,{ramdiskoptions} %BCDEDIT% -set {%guid%} device ramdisk=[boot]\Boot\winpe.wim,{ramdiskoptions} %BCDEDIT% -create {bootmgr} /d "Windows BootManager" %BCDEDIT% -set {bootmgr} timeout 30 %BCDEDIT% -displayorder {%guid%} REM удаляем ненужный bcdedit del /Q %pxe_root%\Boot\bcdedit.exeМы уже можем грузить WinPE при помощи файла
pxeboot.n12
, но будет удобнее делать это через дополнительный загрузчик. Ведь помимо развертывания Windows есть и масса других задач, например запуск memtest86 и прошивка материнских плат и контроллеров из DOS.
Следующий этап - конфигурация Pxelinux. Pxelinux является частью проекта Syslinux и последнюю версию можно найти на kernel.org. Syslinux и Pxelinux хорошо задокументированы в собственной Вики. Из дистрибутива Syslinux нужны будут следующие файлы: chain.c32, ldlinux.c32, libcom32.c32, libutil.c32, memdisk, pxelinux.0, vesamenu.c32. Грузить нужно файл pxelinux.0, т.е. в dhcpd.conf указываем:
next-serverВ tftpd.rules нужно добавить; filename "/tftpboot/pxelinux.0";
rg \\ /
для правильной работы со прямыми и обратными слэшами в путях.
Конфигурация pxelinux (файл
pxelinux.cfg/default
с vesa-меню, обоями, запуском двух версий memtest86 и примерами загрузки образов дисков с DOS и прошивками для материнских плат:
DEFAULT vesamenu.c32 ALLOWOPTIONS 0 PROMPT 0 FONT cp866-8x16.psf TIMEOUT 300 ONTIMEOUT local MENU TITLE PXE boot menu #splash.png - картинка с темным фоном в 640x480 MENU BACKGROUND splash.png #цвета для рамки и пунктов меню MENU COLOR border 30;44 #00000000 #00000000 none MENU COLOR unsel 37;44 #90ffffff #00000000 std MENU COLOR sel 7;37;40 #70ffffff #20ff8000 all MENU COLOR hotsel 1;7;37;40 #e0ffffff #20ff8000 all #первое меню - загрузка WinPE MENU BEGIN winpe MENU TITLE Microsoft Windows Setup LABEL MAINMENU MENU LABEL ^back MENU EXIT LABEL winpe MENU LABEL WinPE kernel /Boot/pxeboot.0 MENU END #второе меню - тесты MENU BEGIN tests MENU TITLE Tests LABEL MAINMENU MENU LABEL ^back MENU EXIT LABEL memtestplus MENU LABEL Memtest86+ 4.20 kernel /fd/memtpl LABEL memtest MENU LABEL Memtest86 4.0 kernel /fd/memtest MENU END #меню с прошивками для плат. Через memdisk загружаются сжатые 8-16МБ образы HDD с DOS и необходимыми для прошивки файлами. MENU BEGIN smc_bios MENU TITLE Supermicro BIOS Updates LABEL MAINMENU MENU LABEL ^back MENU EXIT MENU BEGIN x8d MENU TITLE X8Dxx LABEL MAINMENU MENU LABEL ^back MENU EXIT LABEL x8da3 MENU LABEL X8DA3, X8DAi(-F) v 2.1a LINUX memdisk INITRD /fd/sm/x8d/x8da3.img.gz LABEL x8da6 MENU LABEL X8DA6, X8DAE(-F) v 2.0c LINUX memdisk INITRD /fd/sm/x8d/x8da6.img.gz MENU END MENU END #загрузка с HDD LABEL local MENU LABEL Boot from HDD #LOCALBOOT 0 KERNEL chain.c32 APPEND hd0 0Копируем все в корень tftp сервера, включая каталог
Boot
с сетевым дистрибутивом WinPE. Если все сделали правильно, то при загрузке через PXE мы должны увидеть меню Pxelinux:
При выборе загрузки WinPE мы должны увидеть его загрузку и запуск:
При возникновении проблем на этом этапе возможно потребуется скопировать файл Boot\pxeboot.n12
в Boot\pxeboot.0
.Подготовить образы HDD с DOS для вышеупомянутой прошивки контроллеров и платы проще простого. Создается пустой образ достаточного размера (например, 32МБ, чтобы влезли большие BIOSы для последних плат Supermicro X9):
dd if=/dev/zero of=test.img bs=1024 count=0 seek=$[1024*32]
. Делать несколько заготовок с меньшим размером смысла нет, так как будем грузить сжатые gzip'ом образы. Далее ставим туда DOS (MS-DOS 6.22 или 7, с FreeDOS с некоторыми прошивальщиками возможны проблемы). После этого готовим в Linux множество отдельных образов под каждую прошивку: копируем образ с чистым DOS и монтируем, копируем файлы, отмонтируем, сжимаем gzip'ом.
Комментариев нет:
Отправить комментарий