Мы хотим не только пиарить себя и свои услуги здесь, но и поделиться опытом и знаниями, полученными в ходе администрирования огромного количества проектов, и в конечном итоге сделать достойный и полезный блог. Для этого мы попросили наших инженеров поучаствовать в этом. А на будущее хотим понять: будет это интересно хабровчанам? И если да — то в какой форме?
Под катом в этот раз пойдет речь об установке 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
Когда нужная ОС установлена и пакет инсталирован.
![](http://habrastorage.org/getpro/habr/post_images/ab2/d9b/09a/ab2d9b09a46585e1f7192840f6427b98.png)
Монтируем образ 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
Отредактируем его для добавления меню, как на скриншоте выше.
@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 не активируется.
<?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
![](http://habrastorage.org/getpro/habr/post_images/c4f/8f6/06a/c4f8f606a72a9130985bf2186a147b4b.png)
![](http://habrastorage.org/getpro/habr/post_images/37b/3a6/c7c/37b3a6c7cf073a47ac0d1f346b529db0.png)
Конфигурационные файлы tftp.
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
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
Автор статьи и по совместительству инженер ServerClub — FessAectan
ссылка на оригинал статьи http://habrahabr.ru/company/serverclub/blog/213007/
Добавить комментарий