понедельник, 14 июня 2010 г.

Установка windows 7 через pxe...

Начну я чуток издалека. На самом деле я ставлю весь свой софт в лабе через pxe. И делаю это очень успешно уже как года 4. Давно хотел заняться windows 7, но всё как-то руки не доходили. А тут, в общем-то выдалось время, да и стало самому интересно - дай думаю попробую. Из-за того, что виста оказалась довольно провальной системой, то я даже не заморачивался таким вопросом как установка через pxe. Лишь года 3 назад создал для себя pxe загружаемый winpe (WINdows Pre-installation Environment disk) для тестов той самой висты. Ну, как оказалось, чекдиск у висты хорошый, в разы лучше чем встроенный в хрюшу, вот и пользовался на славу, а вот до установки висты так и не добрался и это было правильно, как показало будущее. Но не в этом дело, уже как больше года я использую windows 7 везде где только можно и бетта и rc1, сейчас релиз. И в общем-то, уже давно понял, что это будет ось будущего, ну по-крайней мере ось на следующую пятилетку. А потому, почесав репу, решился взяться за ум, и накатать свои инсталяшки.

Так вот, первым делом конечно я пошёл в гугл и набрал "install window 7 via pxelinux". И получил как результат первым линком интересную статейку - Preboot Execution Environment (базовая статья) - в общем-то довольно доходчивое пошаговое упражнение - как бы нам такое чего сотворить. Довольно интересно конечно, и даже поучительно и даже заскриптованно, что в общем-то говорит о многом в пользу чела, который эту статью ваял, но как-то не законченно и оставляет за собой много вопросов. Вот, к примеру, один из них: скрипт затачивается под определённую архитектуру - в данном случае автор затачивает скрипт под амд64 - т.е. 64-битную ось. И ведь нет никакой проблемы сделать 32-битную составляющую, но автор не оговаривает один очень интересный момент из всего этого чуда - что организация загрузчика winpe приложений может быть одна и только одна. Т.е. загрузочный модуль bcd, как и директория boot может быть лишь только одна на pxe сервере. А потому, приходится так сказать изгаляться - то есть мутить что-то типа такого скрипта:

set BCD-File=D:\Netboot\boot\BCD
del %BCD-File%
Bcdedit /createstore %BCD-File%
rem >>> на очень большом количестве ресурсов идёт эта ошибка. <<<
Bcdedit /store %BCD-File% /create {ramdiskoptions}
rem ------------------------------------------------------------------------------
Bcdedit /store %BCD-File% /set {ramdiskoptions} ramdisksdidevice boot
Bcdedit /store %BCD-File% /set {ramdiskoptions} ramdisksdipath \boot\boot.sdi

for /f "tokens=1-3" %%a in ('Bcdedit /store %BCD-File% /create /d "Windows 7 x32 bit" /application osloader') do set guid1=%%c
Bcdedit /store %BCD-File% /set %guid1% systemroot \Windows
Bcdedit /store %BCD-File% /set %guid1% detecthal Yes
Bcdedit /store %BCD-File% /set %guid1% winpe Yes
Bcdedit /store %BCD-File% /set %guid1% osdevice ramdisk=[boot]\Boot\boot32.wim,{ramdiskoptions}
Bcdedit /store %BCD-File% /set %guid1% device ramdisk=[boot]\Boot\boot32.wim,{ramdiskoptions}

for /f "tokens=1-3" %%a in ('Bcdedit /store %BCD-File% /create /d "Windows 7 x64 bit" /application osloader') do set guid2=%%c
Bcdedit /store %BCD-File% /set %guid2% systemroot \Windows
Bcdedit /store %BCD-File% /set %guid2% detecthal Yes
Bcdedit /store %BCD-File% /set %guid2% winpe Yes
Bcdedit /store %BCD-File% /set %guid2% osdevice ramdisk=[boot]\Boot\boot64.wim,{ramdiskoptions}
Bcdedit /store %BCD-File% /set %guid2% device ramdisk=[boot]\Boot\boot64.wim,{ramdiskoptions}

for /f "tokens=1-3" %%a in ('Bcdedit /store %BCD-File% /create /d "Vista PE" /application osloader') do set guid3=%%c
Bcdedit /store %BCD-File% /set %guid3% systemroot \Windows
Bcdedit /store %BCD-File% /set %guid3% detecthal Yes
Bcdedit /store %BCD-File% /set %guid3% winpe Yes
Bcdedit /store %BCD-File% /set %guid3% osdevice ramdisk=[boot]\Boot\winpe.wim,{ramdiskoptions}
Bcdedit /store %BCD-File% /set %guid3% device ramdisk=[boot]\Boot\winpe.wim,{ramdiskoptions}

Bcdedit /store %BCD-File% /create {bootmgr} /d "Windows Seven LOAD MANAGER"
Bcdedit /store %BCD-File% /set {bootmgr} timeout 60
Bcdedit /store %BCD-File% /set {bootmgr} displayorder %guid1% %guid2% %guid3%

Bcdedit /store %BCD-File% /enum all


скрипт в конечном итоге создаст нужный мне bcd-загрузчик, который в свою очередь при запуске выведет очень простое меню, то бишь, а в какие биты мы будем грузиться. 32 или 64, а может вообще в winpe vista. Но так как я довольно ленивый человек, и люблю вначале поработать, а потом долго-долго пользоваться плодами своего труда, то конечно же я этим всем не ограничился. К примеру, довольно интересное примечанием может быть вот эта статья - как бы нам добавить дрова в наш winpe? Или ещё одним примечанием к базовой статье я мог бы назвать то, что базовая статья относиться к linux pxe-серверам. Я же в силу многих хороших или плохих причин имею в своём распоряжении windows 2003 сервер. А потому, сталкиваюсь с некоторыми нестыковками, которые приходится решать на месте. Например, я оставлю позади тот факт, что даже не было упомянуто что для запуска скрипта мне понадобятся подходящие утилиты choice как для 32 бит, так и для 64 бит, ну да ладно это было просто, но вот, то что вообще зайти на сервак мне нужно будет с акредитивами какого-нибудь пользователя этого сервера, я в общем-то имел мало представления. Ну net use x: все мы давно знаем, а потому методом тыка меня прояснило довольно быстро. В итоге базовый скрипт, получил такое содержание:

wpeinit
ping -n 1 192.168.1.1
net use y: \\192.168.1.1\netboot /user:vasya 123456 /p:n
if exist y:\install64.bat (
y:\install64.bat
)
где vasya 123456 соответвенно имя пользователя и пароль через пробел. Так сказать читайте хелпы.

Далее, было ещё интереснее, я задался ещё одной довольно интересной задачкой, в силу того что я живу в многоязычной среде, то для меня самым актуальным решением было бы сделать мультиязычные wim образы. И вот на помощь мне пришла вот эта статья - HowTo: create a multi language Windows 7 or Windows 2008 R2 server DVD installer. Статье, конечно, же предшествовала довольно интересная история, то как я убил windows home premium с помощью утилиты под названием vistalizator. Итогом моих скитаний явился однозначный вывод - утилита хорошая, но всё равно фтоппку!!! Пришлось отформатировать компьютер - если подробнее, то утилита с windows 7 работает корректрно лишь только в одном конкретном случае - когда операционная система была локализированна еще на базисном уровне - "internal mode", иначе же vistalizator предлагает сгрузить и установить языковой пакет в экспресс режиме, который с одной стороны вроде бы работает довольно чисто и "кошерно", а через день показывает, как та свинья, свою подноготную некошерную суть, то бишь утилитка как-то портачит систему активизации windows 7. В итоге, хоть каждый день активируй систему. В общем, жопа. :о)

Для тех же, кто хочет пойти ещё дальше, можно также объеденить битность - Windows x86 and x64 AIO, full instructions (This one can repair and upgrade x64). Есть также статья по-проще - Create Windows 7 AIO (All-In-One) DVD or Merge all editions of Windows 7 in single DVD, но которая даёт лучше представление о том, что нужно делать и как.

Итог всей истории прост - развёртывание мультиязычных версий windows 7 с помощью pxe сервера возможено. Конечно, ещё придётся сделать немало для того, чтобы оформить пару тройку unattended, то бишь полностью автоматизированных скриптов. И сделать так, чтобы инсталляция шла что-называется в одно касание.

Что было интересно узнать в процессе работы - это пару проектов на эту тему, среди которых выделяется - FOG Думаю в ближайшем будущем опробую эту штукенцию. Больше всего хочется посмотреть как это работает в деле. Доброй ночи и удачи!!!


1 комментарий:

Pavel комментирует...

С Вистализатором дела всегда обстояли хорошо, единственное требывание было всегда чтобы изначально система была по английски иначе глюков и частичного не до перевода не избежать. И ещё одно, когда вы запускаете в первый раз Вистализатор он указывает точные данные системы руководствуясь которыми лучше всего скачать языковой пакет напрямую с сайта, и установить вручную. На моей памяти работает по меньшей мере у сотни клиентов с которыми доводилось пересекаться.