...

вторник, 18 февраля 2014 г.

Установка Windows Server 2008 по сети с Linux PXE сервера. Кастомизация образа WinPE

Друзья! Всем доброго дня!

Мы хотим не только пиарить себя и свои услуги здесь, но и поделиться опытом и знаниями, полученными в ходе администрирования огромного количества проектов, и в конечном итоге сделать достойный и полезный блог. Для этого мы попросили наших инженеров поучаствовать в этом. А на будущее хотим понять: будет это интересно хабровчанам? И если да — то в какой форме?


Под катом в этот раз пойдет речь об установке Windows Server 2008 по сети с Linux PXE сервера.


Меню загруженного WinPE.


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

Пишутся скрипты, файлы ответов для различных визардов, настраиваются системы мониторинга и оповещения, системы управления конфигурациям…

Ничто не должно отвлекать на пути к просветлению.


В этой статье я опишу как подготовить образ среды предустановки Windows® WinPE для загрузки с Linux PXE сервера.

У нас он призван решать следующие задачи:



  • Выполнение каких-либо административных действий(обновление прошивки RAID контроллера например)

  • Установка Windows Server 2008 в «ручном» режиме.

  • Полностью автоматическая установка Windows Server 2008




Настройку серверной части PXE я опущу, т.к. тема достаточна хорошо описана в Internet(например здесь).

По ходу повествования остановлюсь лишь на тех моментах, которые неообходимы в рамках данной статьи.
Этап № 1. Windows



Для подготовки образа WinPE потребуется компьютер с Windows 7 либо Windows Server 2008, а так же установленный пакет Windows AIK

Когда нужная ОС установлена и пакет инсталирован.


запускаем Windows PE Tools Command Prompt от имени Администратора





Монтируем образ winpe.wim для внесения изменений, а так же подготовим загрузчик.

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

copype.cmd amd64 c:\winpe
mkdir c:\netboot\win\boot
imagex /mountrw winpe.wim 1 mount
xcopy c:\winpe\mount\windows\boot\pxe\pxeboot.n12 c:\netboot\win
xcopy c:\winpe\mount\windows\boot\pxe\bootmgr.exe c:\netboot\win
xcopy c:\winpe\iso\boot\boot.sdi c:\netboot\win\boot




Запуск оболочки WinPE осуществляет файл startnet.cmd

Так как меню у нас на русском языке, нужен редактор позволяющий менять кодировку текста(CP866 в нашем случае).

Я использую Notepad++

Путь к файлу: C:\winpe\mount\Windows\System32\startnet.cmd

Отредактируем его для добавления меню, как на скриншоте выше.

код скрипта startnet.cmd


@echo off
echo.
echo Запускаю wpeinit.
echo Подожди немного...
echo.
wpeinit

echo На выбор доступно три режима работы WinPE:
echo 1) Просто монтируется шара
echo и командная строка ждет дальнейших действий.
echo.
echo 2) Монтируется smb шара и запускается установщик
echo Windows 2008 R2.
echo.
echo 3) Монтируется smb шара и запускается автоматическая
echo установка Windows 2008 R2 Standart Full
echo.
echo Для выбора пункта меню введи соответсвующую ему цифру,
echo а затем нажми клавишу Enter(ошибочный ввод = 1 пункт).
set /p ID=
echo.

if %ID%==1 goto :first
if %ID%==2 goto :second
if %ID%==3 goto :third
if %ID% GTR 3 goto :failure
if %ID% LSS 3 goto :failure
exit /b

:second
echo Ты выбрал пункт меню под номером 2
echo.
echo Монтирую smb шару.
net use j: \\1.2.3.4\public
echo Запускаю j:\win2008s_x64\setup.exe
j:\win2008s_x64\setup.exe
exit /b

:third
echo Ты выбрал пункт меню под номером 3
echo.
echo Монтирую smb шару.
net use j: \\1.2.3.4\public
echo Запускаю автоматическую установку: j:\win2008s_x64\setup.exe /unattend:j:\autounattend.xml
j:\win2008s_x64\setup.exe /unattend:j:\autounattend.xml
exit /b

:first
echo Ты выбрал пункт меню под номером 1
echo.
:failure
echo.
echo Монтирую smb шару.
net use j: \\1.2.3.4\public
exit /b







Сохраняем изменения в startnet.cmd.

Отмонтируем winpe.wim закомитив изменения и скопируем полученный образ к остальным файлам.

imagex.exe /unmount /commit mount
xcopy c:\winpe\winpe.wim c:\netboot\win\boot




Теперь займемся настройкой Данных Конфигурации Загрузки (BCD)


Что такое хранилище данных конфигурации загрузки?

Хранилище данных конфигурации загрузки содержит параметры конфигурации загрузки и контролирует запуск операционных систем Microsoft® Windows Vista® и Microsoft® Windows Server® 2008. Эти параметры ранее хранились в файле Boot.ini (для операционных систем на базе BIOS) либо в памяти NVRAM (для операционных систем на базе EFI (Extensible Firmware Interface)). Для изменения кода Windows®, который запускается перед загрузкой операционной системы, можно воспользоваться программой командной строки Bcdedit.exe, с помощью которой можно добавлять, удалять, изменять и дополнять записи в хранилище данных конфигурации загрузки.





Создадим новый скрипт createbcd.cmd. Он обеспечит генерацию нужной BCD.

Вновь открываем текстовый редактор и вставляем туда следующий код:

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 "MyWinPE 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 30
bcdedit -store %1\BCD -set {bootmgr} displayorder %guid%




Запускаем скрипт.

createbcd.cmd c:\netboot\win\boot




Приготовим файл ответов autounattend.xml для автоматической установки Windows Server 2008.

На первом диске сервера создается один раздел, занимающий все пространство диска. ОС ставится в этот раздел, устанавливается пароль для учетной записи Administrator, вводится ключ, но Windows не активируется.

autounattend.xml


<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
<settings pass="windowsPE">
<component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://ift.tt/1gZfvUg" xmlns:xsi="http://ift.tt/ra1lAU">
<ComplianceCheck>
<DisplayReport>Never</DisplayReport>
</ComplianceCheck>
<DiskConfiguration>
<WillShowUI>OnError</WillShowUI>
<Disk>
<DiskID>0</DiskID>
<WillWipeDisk>true</WillWipeDisk>
<CreatePartitions>
<CreatePartition>
<Order>1</Order>
<Type>Primary</Type>
<Extend>true</Extend>
</CreatePartition>
</CreatePartitions>
<ModifyPartitions>
<!-- Modify the system partition-->
<ModifyPartition>
<Order>1</Order>
<PartitionID>1</PartitionID>
<Format>NTFS</Format>
<Label>System</Label>
</ModifyPartition>
</ModifyPartitions>
</Disk>
</DiskConfiguration>
<ImageInstall>
<OSImage>
<InstallFrom>
<MetaData wcm:action="add">
<Key>/IMAGE/NAME</Key>
<Value>Windows Server 2008 R2 SERVERSTANDARD</Value>
</MetaData>
</InstallFrom>
<InstallToAvailablePartition>false</InstallToAvailablePartition>
<WillShowUI>OnError</WillShowUI>
<InstallTo>
<DiskID>0</DiskID>
<PartitionID>1</PartitionID>
</InstallTo>
</OSImage>
</ImageInstall>
<UpgradeData>
<WillShowUI>OnError</WillShowUI>
<Upgrade>false</Upgrade>
</UpgradeData>
<UserData>
<ProductKey>
<Key></Key>
<WillShowUI>OnError</WillShowUI>
</ProductKey>
<AcceptEula>true</AcceptEula>
<FullName>serverclub</FullName>
<Organization>serverclub</Organization>
</UserData>
</component>
<component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://ift.tt/1gZfvUg" xmlns:xsi="http://ift.tt/ra1lAU">
<SetupUILanguage>
<UILanguage>en-US</UILanguage>
<WillShowUI>OnError</WillShowUI>
</SetupUILanguage>
<UserLocale>en-US</UserLocale>
<SystemLocale>en-US</SystemLocale>
<UILanguage>en-US</UILanguage>
<UILanguageFallback>en-US</UILanguageFallback>
<InputLocale>en-US</InputLocale>
</component>
</settings>
<settings pass="specialize">
<component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://ift.tt/1gZfvUg" xmlns:xsi="http://ift.tt/ra1lAU">
<InputLocale>en-US</InputLocale>
<UILanguage>en-US</UILanguage>
<UILanguageFallback>en-US</UILanguageFallback>
</component>
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://ift.tt/1gZfvUg" xmlns:xsi="http://ift.tt/ra1lAU">
<ComputerName>CHANGE-ME</ComputerName>
<ProductKey>XXX-ZZZ-YYY-RRR-QQQ</ProductKey>
<RegisteredOrganization>serverclub</RegisteredOrganization>
<RegisteredOwner>serverclub</RegisteredOwner>
<DoNotCleanTaskBar>true</DoNotCleanTaskBar>
<TimeZone>UTC</TimeZone>
<DisableAutoDaylightTimeSet>false</DisableAutoDaylightTimeSet>
</component>
</settings>
<settings pass="oobeSystem">
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://ift.tt/1gZfvUg" xmlns:xsi="http://ift.tt/ra1lAU">
<UserAccounts>
<AdministratorPassword>
<Value>ServerMegaSecurePassword111</Value>
<PlainText>true</PlainText>
</AdministratorPassword>
</UserAccounts>
</component>
</settings>
<settings pass="offlineServicing">
<component name="Microsoft-Windows-PnpCustomizationsNonWinPE" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://ift.tt/1gZfvUg" xmlns:xsi="http://ift.tt/ra1lAU">
<DriverPaths>
<PathAndCredentials wcm:keyValue="1" wcm:action="add">
<Path>j:\</Path>
</PathAndCredentials>
</DriverPaths>
</component>
</settings>
<cpi:offlineImage cpi:source="wim:j:/win2008s_x64/sources/install.wim#Windows Server 2008 R2 SERVERSTANDARD" xmlns:cpi="urn:schemas-microsoft-com:cpi" />
</unattend>







Файл нужно скопировать в корень smb шары, которая монтируется скриптом startnet.cmd.

Подготовительный этап в Windows близится к завершению, остается скопировать папку c:\netboot\win в корень tftp сервера, а так же разместить в папке доступной для монтирования по протоколу sbm файлы с установочного диска/образа Windows Server 2008.
Этап № 2. Linux



Структура нашего меню.







Конфигурационные файлы tftp.

/tftpboot/pxelinux.cfg/default
PROMPT 0

UI vesamenu.c32

MENU BACKGROUND http://ift.tt/1gduBQZ

MENU TITLE ServerClub PXE Boot Menu

MENU TIMEOUT 50

MENU COLOR TITLE 0 #ffffffff #00000000

MENU COLOR SEL 7 #ffffffff #ff000000

LABEL CentOS ->

KERNEL vesamenu.c32

APPEND pxelinux.cfg/centos


LABEL Debian ->

KERNEL vesamenu.c32

APPEND pxelinux.cfg/debian


LABEL Ubuntu ->

KERNEL vesamenu.c32

APPEND pxelinux.cfg/ubuntu


LABEL BSD ->

KERNEL vesamenu.c32

APPEND pxelinux.cfg/bsd


LABEL ArchLinux ->

KERNEL vesamenu.c32

APPEND pxelinux.cfg/arch


LABEL Windows ->

KERNEL vesamenu.c32

APPEND pxelinux.cfg/windows


LABEL VmWare ->

KERNEL vesamenu.c32

APPEND pxelinux.cfg/vmware


LABEL LiveCD`s ->

KERNEL vesamenu.c32

APPEND pxelinux.cfg/live


LABEL Utilities ->

KERNEL vesamenu.c32

APPEND pxelinux.cfg/utils






/tftpboot/pxelinux.cfg/windows
PROMPT 0

UI vesavesamenu.c32

MENU BACKGROUND http://ift.tt/1gduBQZ

MENU TITLE Windows

MENU TIMEOUT 50

MENU COLOR TITLE 0 #ffffffff #00000000

MENU COLOR SEL 7 #ffffffff #ff000000

LABEL < — Main Menu

KERNEL vesamenu.c32

APPEND pxelinux.cfg/default


LABEL Windows2003_x64

kernel w2k3.0


LABEL Windows2008_x64_R2(menu inside)

kernel Boot/pxeboot.n12


LABEL < — Main Menu

KERNEL vesamenu.c32

APPEND pxelinux.cfg/default




Небольшая демонстрация =)



Фрагмент начала установки


На этом все.

Благодарю за внимание!


При подготовке статьи использовались следующие источники:



1. http://ift.tt/1ckHvNW

2. http://ift.tt/1gduBR1

3. http://ift.tt/1ckHw4g

Автор статьи и по совместительству инженер ServerClubFessAectan


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий