ServerClub
Компания
27,53
рейтинг
18 февраля 2014 в 13: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 от имени Администратора


Монтируем образ winpe.wim для внесения изменений, а так же подготовим загрузчик.
В открывшейся консоли последовательно вводим команды:
mkdir c:\winpe
mkdir c:\winpe\mount
cd c:\winpe
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://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:\netboot\win в корень tftp сервера, а так же разместить в папке доступной для монтирования по протоколу sbm файлы с установочного диска/образа Windows Server 2008.

Этап № 2. Linux

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



Конфигурационные файлы 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
В какой форме Вам было бы интересно увидеть развитие нашего блога?

Проголосовало 66 человек. Воздержалось 15 человек.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Автор: @ServerClub
ServerClub
рейтинг 27,53
Компания прекратила активность на сайте

Комментарии (20)

  • 0
    Если будут вопросы, то автор статьи постарается ответить на них в течение дня.
  • +1
    Занятно.
    Закономерный вопрос:
    1. Чем это лучше образа Acronis или Clonezilla?
    2. Сколько по времени занимает подготовить инфраструктуру и образ?
    • 0
      Образ получился мультизадачным.
      Позволяет ставить ОС и откинувшись
      в кресле, по сценарию из файла ответов,
      и производить какие-то специфические
      настройки по запросу клиента(разбивка дисков к примеру)

      По времени, подготовки инфраструктуры, при условии
      уже установленных Linux сервера и Windows машины
      для кастомизации образа, может занять 2-3 часа.
      Но здесь есть масса факторов способных повлиять
      на продолжительность подготовительных работ, будь то
      скорость канала в Интернет, квалификация специалиста и пр.
      • +1
        Очень интересует изложенная тема. Сам полностью перевел развертывание инфраструктуры толстых клиентов на установку по PXE, с подготовленными образами boot.wim + install.win + дрова на сеть (собственная говносборка, все остальные дрова по сети) и автоматическую установку в домене + WSUS+LUP. Однажды дошло до того, что загрузившись с PXE оставил юзеру камп на разметке диска, благо юзер продвинутый. По окончанию установки юзер заходит под доменной учеткой и долбит Центр обновления винды до «зеленого». Все. дальше отсутствие админских прав и SRP решает. Установку 10-30 толстых станций можно провести в сверх-короткие сроки.

        А акронис не рулит потому как дрова разные. В моем случае все приходит нативное, включая дрова и последний софт.
        • +1
          вы можете интегрировать в install.win обновления и драйвера. Можно подготовить install.win в режиме аудита и потом устанавливать.
          На текущий момент у меня лично в планах будет разделение жестого диска на несколько разделов и перенос на стадии установки папки users и program files на другой раздел. Создания скрытого recovery.
    • 0
      *Промахнулся немного в предыдущем комменте

      По времени.
      Подготовка инфраструктуры, при условии
      уже установленных Linux сервера и Windows машины
      для кастомизации образа, может занять 2-3 часа.
      Но здесь есть масса факторов способных повлиять
      на продолжительность подготовительных работ, будь то
      скорость канала в Интернет, квалификация специалиста и пр.
      • 0
        Тут надо заменить некоторые вещи.
        В Windows есть своя система развертования. В 2012 я уже забыл как она называется. (бывшая RIS)
        Там можно дополнительно сделать меню и указать альтернативный загрузчик для загрузки всего другого.
        Помимо AIK есть DART (только для подписчиков MSDN, или что там сейчас вместо нее.) ну и платный syscem conrol center.
        Они сильно упрощают подготовку и развертывания windows среды. Так же следует погуглить на тему аудит системы, который в простой форме может упростить развертывание.
        Я это написал для того, что наверняка будут использовать это how-to линуксоиды, что бы люди могли погуглить некоторые фичи microsoft.

        P.S. Пока это писал — вспомнил, что на хабре пролетала статья по интеграции в RIS установки linux система.
        P.P.S. Ну и я советовал бы использовать minipe от win2012r2, там появилось как минимум утилита для снятие и записи образов итд.
    • 0
      Acronis как минимум платный для фирмы. Причем ценник на текущий момент не очень адекватен.
      Clonezilla можно использовать, но это кастыль для windows.
      На текущий момент снимать образы машины можно сразу в winpe от 2012 в формат например vhd или win.
      Потом произвести его установку.
  • 0
    По поводу интересных тем, которые бы хотелось раскрыть в следующих постах можно оставлять пожелания прямо здесь.
    • +1
      вообще странная просьба, я могу сейчас такого тут пожелать :)

      Например жутко интересует samba4 как ad с общим хранилищем через ceph :)

      В общем огласите весь список!
      • 0
        Один из наших инженеров как раз заниается ceph.
        Тема интересная, но лично мое мнение — AD должна быть на Windows =)
        Касаемо списка — нам интересно писать об IT в принципе, весьма импонирует данный посыл:
        • 0
          Тогда просто про ceph. Сейчас там много изменений, в частности по настройки.
          К сожелению на самостоятельное изучение нет времени. Хотя тема для меня очень интересно, но там много тонких моментов.

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

          Ну а samba4 мы уже там прикрутим сами :)

          P.S. У меня тут свой шкурный интерес избавится от СХД, хотя я их очень и нежно люблю :)
          • 0
            Тут вспомнил, что хотел написать статью про кластер percona server, который работает хорошо — но опять нет время. Буду ждать пенсии и там писать новые мемуары :)
          • 0
            Как только выкурим ceph в должной степени, сразу поделимся.
  • НЛО прилетело и опубликовало эту надпись здесь
  • +1
    Если мне не изменяет память, то надо использовать tftpd-hpa. он умеет делать remap для windows.
    Я помнится пытался обойти это проблему, но потом уволился из компании и проект не закончил :)
  • 0
    Спасибо за статью, мы используем wimboot из iPXE.
    Гляньте wimaging — достаточно удобный toolset, может работать без foreman.
    • 0
      Рад, что статья оказалось полезной.
      Обязательно глянем, спасибо.
      • 0
        Кстати, вместо кастомизированного образа я предпочитаю минимальный, развертываю puppet. А непосредственно конфигурация происходит через foreman, который отдает все конфиги которые подхватиываются unattended установкой.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое Разное