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

в 9:10, , рубрики: Без рубрики

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

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

Под катом в этот раз пойдет речь об установке 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 от имени Администратора

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

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

copype.cmd amd64 c:winpe
mkdir c:netbootwinboot
imagex /mountrw winpe.wim 1 mount
xcopy c:winpemountwindowsbootpxepxeboot.n12 c:netbootwin
xcopy c:winpemountwindowsbootpxebootmgr.exe c:netbootwin
xcopy c:winpeisobootboot.sdi c:netbootwinboot

Запуск оболочки WinPE осуществляет файл startnet.cmd
Так как меню у нас на русском языке, нужен редактор позволяющий менять кодировку текста(CP866 в нашем случае).
Я использую Notepad++
Путь к файлу: C:winpemountWindowsSystem32startnet.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.4public
echo Запускаю j:win2008s_x64setup.exe
j:win2008s_x64setup.exe
exit /b

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

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

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

imagex.exe /unmount /commit mount
xcopy c:winpewinpe.wim c:netbootwinboot

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

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

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

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

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

createbcd.cmd c:netbootwinboot

Приготовим файл ответов 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://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <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://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <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://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <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://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <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://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <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://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <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:netbootwin в корень tftp сервера, а так же разместить в папке доступной для монтирования по протоколу sbm файлы с установочного диска/образа Windows Server 2008.

Этап № 2. Linux

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

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

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

/tftpboot/pxelinux.cfg/default

PROMPT 0
UI vesamenu.c32
MENU BACKGROUND pxelinux.cfg/logo.jpg
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 pxelinux.cfg/logo.jpg
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://gnu.su/news.php?extend.1683
2. http://dice.neko-san.net/2011/02/automated-windows-server-2008r2-installation-from-a-linux-server-without-machine-imaging
3. http://technet.microsoft.com/ru-ru/library/cc749415(v=ws.10).aspx

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

Автор: ServerClub

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js