Делаем аварийный загрузочный образ WinPE на базе Windows 7. (с возможностью установки Win7/8/10)

Преамбула

В прошлых заметках я рассказывал о том, как загрузить WinPE XP по сети и установить из нее Windows XP. Теперь делаю WinPE на базе Windows 7

Необходимые инструменты и утилиты

— Компьютер, с установленной Windows 7 🙂
— Достаточное место на HDD, со всеми потрохами этот процесс сожрал ~50Гб на диске.
— Образ Windows Automated Installation Kit (WAIK)
— WinBuilder — небольшая утилита, позволяющая автоматизировать процесс создания образа. О ней ниже.
Чистый (!) образ установщика какой-нибудь одной версии Windows 7, сборки разной степени колхозности, а так же образы дисков все-в-одном (AIO) не подойдут. Скорее всего WinBuilder прекратит работу с какими-нибудь неудобоваримыми глюками. Поскольку я собрался делать образ x86 (32-разрядный), то и скачал Windows 7 Ultimate x86 с рутрекера.
— Универсальные наборы драйверов для сети, чипсетов и устройств хранения данных. О них ниже.
— Какая-нибудь виртуальная машина для тестирования полученного образа. У WinBuilder в комплекте есть QEMU, но желательно поставить VMWare, в нужный момент WinBuilder ее «подхватит», создаст свою виртуалку и запустит на ней образ
-cdrkit в Linux, для создания ISO-образа.

WinBuilder

Перед установкой WinBuilder’а устанавливаем WAIK и распаковываем в отдельный каталог чистый образ установщика винды.


Какого-то лешего родной сайт WinBuilder’а winbuilder.org лежит, потому я взял версию WinBuilder от этих вот товарищей здесь, однако и тут без бага не обошлось. WinBuilder в этом архиве при первой сборке чем-то подавился, и молча «отработал», так ничего и не создав, и не выдав ошибок. Благо, лечение этого дела оказалось простым, надо из папки, куда распакован архив (Например, C:\PE) удалить все, кроме файлов
BuilderSE.exe, BuilderSE.ini, winbuilder.chm, WinBuilderN.chm, перезапустить программу, а потом в открывшемся окне Download Center выбрать «Complete», снять и поставить галочку напротив Win7PE_SE (чтобы выделились все компоненты) и загрузить скрипты из репозиториев.

В отличие от описанного в статье оригинального WinBuilder’а, WinBuilder от TheOven умеет «подхватывать» пути к инструментам WAIK сам, поэтому дополнительные утилиты из WAIK в недра WinBuilder’а не надо.

Глюк с плагином Wallpaper

Забавно, что когда я все это проделывал первый раз, глюка в плагине, который позволяет сменить обои на десктопе WinPE не было. А пока писал заметку, и поставил для повторного эксперимента чистый WinBuilder и перезалил плагины — он появился. Видимо, создатели что-то подправляли, и таки недоподправили 🙂 Так что если плагин падает с ошибкой Index of bounds (2) Set,%WallPaperFileName%=img0.%SB_PicFormatV%, то надо открыть файл Projects\Win7PESE\Tweaks\1-wallpaper.script Notepad++ или редактором Far и в строке 84 заменить = (равно) на , (запятую).

Начало сборки

Сначала в дереве слева выбираем Config source, рядом с полем Select Source жмем кнопочку с иконкой папки, выбираем каталог с распакованным образом инсталлятора Win7 и жмем Set Source.

Далее нажимаем кнопку Interface SE —> и в появившемся окне выбираем, какую сборку делаем, x86 или x64, остальное не трогаем, пусть указания на всякие десятки вас не смущает.

Далее можно, например, в разделе Main configuration подправить разрешение. Не советую сильно задирать, лучше наоборот поставить 800×600, все равно в WinPE будет встроена утилита, динамически меняющая разрешение.

Далее обязательно(!) заходим в Apps—>File Tasks —> File Find и снимаем галочку с этого пункта. Там скрипт для внедрения в образ утилиты Super Finder XT, но скрипт кривой, саму утилиту не скачивает, потому в процесс сборки вылетит с ошибкой о ненайденном файле.

Драйвера

Заходим в пункт Drivers, снимаем галку Audio (для экономии, нафиг нам в PE звук), зато ставим USB 3.0 Support (эта штука наоборот, часто встречается).

Качаем необходимые наборы драйверов отсюда. На сайте выбираем ОС и качаем те, что посвежее. Обычно нужны LAN, Chipset и Mass Storage.

Далее заходим в Drivers —> Driver Package Installer, ставим напротив него галку, жмем кнопку Explore в зависимости от типа сборки, и кладем пакеты в открывшуюся папку. Можно поставить галку Load drivers at startup, чтоб потом не пришлось вручную подгружать драйвера из загруженной WinPE, однако это может вызвать тормоза при загрузке.

Предварительное тестирование

Для предварительного тестирования все готово, проверяем, что стоит галка в пункте VirtualTest —> Best Emulation

Нажимаем кнопку Play в правом верхнем углу, и ждем. Первый раз может быть о-о-о-очень долго, дело в том, что программа попытается целиком распаковать образы WIM (7-zip’ом) из инсталлятора во временную папку, даже не на самой слабой машине это дело заняло минут 30. Правда, программа предусмотрительная, папку она за собой не чистит, так что при последующих сборках дело пойдет быстрее. Но не забудьте после того, как окончательно все настроили, сами почистить временные файлы, там их скопится ~20 Гб

Вот как раз момент, когда программа дошла до этой стадии, не смогла загрузить драйвер WOF (Windows Overlay File System Filter Driver), т.к. его в семерке и нет, и предложила распаковаться стандартным способом (7zip), но даже если и 7zip не возьмет WIM (а некоторые он не берет), то программа будет подключать WIM’ы с помощью DISM, хотя это будет и медленнее.

В моем случае, все удачно распаковывается.

В общем, идем есть печеньки, которые в радость, и/или смотреть АнтиЗомби (которая в сладость).

Ну вот, все получилось. Даже сеть поднялась, весело мигает огонечками утилита, и IP получен.

Теперь можно более тонко настроить образ под себя, тут уж все на ваше усмотрение — ходите по дереву проекта и выбирайте, что нужно, добавляйте и удаляйте компоненты, например .NET Framework, библиотеки Visual C++, программы. Можно как сократить размер образа, так и неимоверно его раздуть. 🙂

Добавляем свое приложение в сборку

Для этих целей лучше всего подойдут портабельные версии программ, обычные могут напихать свои библиотеки и компоненты в разные места, задолбаешься в кучу собирать. И в Реестр тоже могут понаписать лишнего. Посему, приложения подойдут не все, а я для примера выберу Far, которого мне в таких сборках очень не хватает. Пусть он и не совсем «портабельный», но работать будет вполне неплохо.

Вообще способов три. Первый — это поискать нужный скрипт от WinBuilder’а, добавить его в проект, отметить нужные опции и пересобрать WinPE. Второй — примонитровать WIM-образ с помощью DISM и вручную добавить туда все нужное. Я же воспользуюсь скриптом, входящим в состав WinBuilder’а.

1. Скачиваем и ставим Far.
2. Копируем в отдельный каталог содержимое директории, куда он поставился.

Тут я скажу, что новый Far со всеми плагинами весит аж 30 с гаком Мб, потому я взял Far постарше, он весил всего 8, а повыкидывав все лишнее, можно ужать его до 3.

3. Архивируем содержимое каталога в архив 7zip.
4. Теперь идем в дереве Win7PE SE —> Utils —> PC Packed

Здесь указываем расположение нашего 7zip-архива, имя экзешника, по нажатию кнопки Options будут доступны еще ряд настроек будущего плагина.

Когда все готово, жмем кнопку Goooo.

После того, как плагин отработает, в дереве проекта должна появиться новая папка AppsMy, а внутри плагин, который добавит приложение к сборке WinPE. Если все сделано правильно, то появятся опции, откуда загружать программу, из образа WIM или с CD-диска (в выпадающем списке), возможность создать ярлык в автозагрузке, ярлык запуска от имени администратора и т.д.

Я случайно добавил кнопку Download. 🙂 Но при желании можно прописать в плагине вручную необходимые адреса, и пользователи смогут скачивать необходимые файлы прямо из WinBuilder’а.

Пересобираем WinPE и смотрим, что получилось.

И Far запустился

В меню, правда, получилось не очень симпатично, но это довольно легко исправить — надо просто закрыть WinBuilder, найти свой плагин, и перенести его в удобную директорию, например в Apps — File Tasks. Кстати, нажав на кнопку с гаечным ключом, можно попасть в редактор плагинов, где можно подправить интерфейс в визуальном редакторе, изменить настройки или код плагина.



Минус — дистрибутив WinPE получается довольно объемный, 250 — 300 Мб, зато без бубна внедряются дрова и софт.

Готовим дистрибутив винды к установке по сети.

1. Создаем сетевую шару. В /etc/samba/smb.conf прописываем:

[win7]
        path=/home/pxe/tftp/distrib/windows/win7
        public=yes
        browsable=yes
        read only=yes
        guest ok=yes

Рестартируем samba-сервер

2. Распаковываем ISO с дистрибутивом, копируем файлы в /home/pxe/tftp/distrib/windows/win7 и устанавливаем права на все файлы дистрибутива в 755:

cd /home/pxe/tftp/distrib/windows/win7
chmod -R 755 *

3. Пишем батник, запускающий установку винды.

@echo off
echo Set variables...
SET NETADDR=\\PXE\win7
SET NETDRIVE=Z

echo Checking setup.exe...
if exist %NETDRIVE%:\sources\setup.exe goto INSTALL

echo Mount share...
net use %NETDRIVE%: %NETADDR%
sleep 5

:INSTALL
echo Launch setup...
sleep 3
%NETDRIVE%:
cd \sources
setup.exe

4. Внедряем его в WinPE, аналогично Far Manager’у и пересобираем WinPE.

Батник на PasteBin
Утилита sleep.exe

Загрузка образа WinPE по сети.

Почему-то стандартным способом у меня не получилось, что я только не перепробовал, загрузчик PXE винды падал с ошибкой BCD

Впрочем, все вполне получилось способом нестандартным, хотя он, теоретически, более требовательный к памяти.
Как с WinPE из Hiren’s Boot CD (на базе XP) сделать тоже не получится, если загрузить эту WinPE из образа HDD, то будет ругаться инсталлятор винды, он не сможет поставить винду на жесткий диск, будет мешать «первый» виртуальный HDD, хоть даже его не будет видно после загрузки. Но этот WinPE без глюков грузится из ISO-образа.
Нам потребуется загрузчик Grub4DOS, точнее файл grldr из комплекта Grub4DOS.

1. Создаем где-нибудь на машине с Linux каталог iso_root, кладем туда grldr.
2. Распаковываем ISO-образ ранее собранного WinPE
3. Копируем из распакованного образа в iso_root каталоги Boot, sources и файл BOOTMGR.
5. В каталоге iso_root создаем файл boot.disk, можно пустой, можно написать туда пояснение, это не важно, он будет использоваться Grub4DOS, чтобы найти загрузочный диск. Если использовать BOOTMGR для поиска загрузочного устройства, то компьютер ВНЕЗАПНО может начать грузиться с HDD, от того, что BOOTMGR, расположенный на жестком диске будет найден первее, чем нужный.
4. Создаем файл menu.lst

Внимание! grldr чувствителен к регистру имен файлов!

Так что menu.lst обязательно надо назвать строчными буквами, а BOOTMGR в menu.lst должен быть прописан заглавными!

5. В каталоге уровнем выше iso_root создаем скрипт для создания образа диска:

#!/bin/bash

if [ -z "$1" ]; then
    LABEL="bootable"
else
    LABEL=$1
fi

echo "Create ISO..."

mkisofs -o disk.iso -b grldr -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -J -R -V $LABEL iso_root

и запускаем его:

./createiso-gfd WIN7PE

Скрипт createiso-gfd на PasteBin

6. Копируем готовый образ в нужный каталог на PXE-сервере и создаем соответствующий пункт в меню загрузки PXE.

LABEL win7pe
    menu label Windows 7 PE
    kernel modules/memdisk
    initrd distrib/windows/winpe7/win7pe.iso
    append iso raw

Меню Grub4DOS

8. Ну вот, все загрузилось.

И даже винды ставятся

Минус — способ требователен к памяти, понадобится хотя бы 1 Гб RAM

Скачать

Плагины и другие мелочи

Скрипт createiso-gfd на PasteBin
Урезанный Far
Плагин для установки Far в сборку
BAT-файл для установки Windows 7
Скрипт для установки файла в сборку
Исправление для плагина Wallpaper
Загрузчик и menu.lst

WinBuilder

WinBuilder SE (чистый, без плагинов)
Полная версия

Готовый образ Win7 PE SE

Образ Win 7 PE SE

3 Responses to Делаем аварийный загрузочный образ WinPE на базе Windows 7. (с возможностью установки Win7/8/10)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *