Сборка образа Windows PE в Linux

()

Windows PE это облегчённая версия Windows (Windows Preinstallation Environment), предназначенная для для помощи в установке и восстановлении операционных систем семейства Windows и загружающаяся с CD, USB Flash или по сети. Для создания образа Windows PE необходимо иметь официальный установочный диск с Windows.

Официальные инструменты для сборки Windows PE существуют только ОС Windows, однако при необходимости собрать образ можно и из под Linux благодаря утилитам из проекта wimlib.

Собирать образ Windows PE мы будем на основе диска с 64-битной Windows 10 из под Ubuntu 18.04. Для начала установим утилиты wimlibs командой:

sudo apt install wimtools

Дальше определим переменную окружения WINPEBUILD, указывающую на директорию сборки, создадим эту директорию и перейдём в неё:

export WINPEBUILD=$HOME/WinPEBuild
mkdir -p $WINPEBUILD
cd $WINPEBUILD

Создадим директорию, в которую смонтируем дистрибутив Windows:

mkdir -p $WINPEBUILD/WinDistr

Если дистрибутив у нас на компакт-диске то монтируем его командой:

sudo mount /dev/cdrom $WINPEBUILD/WinDistr

Если же речь идёт об образе диска то монтируем его командой:

sudo mount -o loop /путь/к/образу/windows.iso $WINPEBUILD/WinDistr

В принципе теперь можно собрать образ диска. Если нужен образ для записи на флэш-накопитель то сделать это можно командой:

mkwinpeimg --windows-dir=$WINPEBUILD/WinDistr $WINPEBUILD/WinPE.img

Дальше этот образ можно записать на накопитель командой:

sudo dd if=$WINPEBUILD/WinPE.img of=/dev/sdc bs=1M

Здесь "/dev/sdc" надо заменить на правильный файл устройства, соответствующий вашему накопителю. Если необходим образ компакт диска то надо использовать дополнительный ключ "--iso":

mkwinpeimg --iso --windows-dir=$WINPEBUILD/WinDistr $WINPEBUILD/WinPE.iso

Однако утилита mkwinpeimg позволяет не только собрать образ, но и кастомизировать его на этапе сборки. Например если мы хотим добавить файлы то необходимо использовать опцию "--overlay". Создадим директорию для дополнительных файлов:

mkdir -p $WINPEBUILD/PEAddons

Далее (для примера) скачаем Far Manager и разместим его в директории "$WINPEBUILD/PEAddons/Programs/Far". ВАЖНО: в WinPE на базе 64-битной Windows можно запускать только 64-битные приложения! Учитывайте это при формировании своих образов!

Соберём образ компакт-диска командой:

mkwinpeimg --iso --windows-dir=$WINPEBUILD/WinDistr --overlay=$WINPEBUILD/PEAddons $WINPEBUILD/WinPE.iso

После загрузки Far Manager будет доступен в директории "X:\Programs\Far". Следующим шагом настроим автоматический запуск Far Manager после загрузки WinPE. Здесь нам поможет опция "--start-script", которая должна указывать на CMD-скрипт загрузки. ВАЖНО: после завершения этого скрипта система автоматически перезагружается.

Создадим скрипт "$WINPEBUILD/startpe.cmd" следующего содержания:

@echo off

REM Run main system init tool
wpeinit

REM Start Far Manager in new Window
start %SYSTEMDRIVE%\Programs\Far\Far.exe

REM Print some manual
echo Type "exit" to reboot

REM Start cmd
cmd

После этого образ компакт-диск можно собрать командой:

mkwinpeimg --iso --windows-dir=$WINPEBUILD/WinDistr --overlay=$WINPEBUILD/PEAddons --start-script=$WINPEBUILD/startpe.cmd $WINPEBUILD/WinPE.iso

Протестировать образ компакт-диска можно в любой виртуальной машине. Например в QEmu это можно сделать командой:

qemu-system-x86_64 -cdrom $WINPEBUILD/WinPE.iso -m 1024

Образ флэш-накопителя можно протестировать в QEmu командой:

qemu-system-x86_64 -hdc $WINPEBUILD/WinPE.img -m 1024

Windows PE на базе Windows 10 в QEmu

Утилита mkwinpeimg написана на bash и является обёрткой над остальными утилитами из состава wimlib. С помощью этих утилит можно не только собирать образ Windows PE, но и работать с существующими: распаковывать, модифицировать и т.д. Подробнее можно прочитать на официальной странице проекта.

На этом всё. Приятной работы!

Ключевые слова: wimlib, wimtools, mkwinpeimg, winpe, windows pe, windows.

Подписаться на обновления: RSS-лента Telegram канал Twitter

Комментарии:

Anonymous 2018-08-17 10:10:59 (#)

Полезно. Спасибо!
HTTP referer: https://www.opennet.ru/news/grab.shtml

Anonymous 2018-08-17 14:44:39 (#)

ВАЖНО: после завершения этого скрипта система автоматически перезагружается.
Что-то не понятно. Что именно перезагрузиться? WinPE это же вроде livecd, если будет перезагрузка, то все данные потеряются.
Можно попобробней расписать.

MooSE 2018-08-17 15:27:09 (#)

Что-то не понятно. Что именно перезагрузиться? WinPE это же вроде livecd, если будет перезагрузка, то все данные потеряются.
Можно попобробней расписать.

Перезагрузится Windows PE. С потерей всех несохранённых данных, да. Потому в конец этого скрипта стоит вставлять что-то вроде "pause". Или как в примере - вызвать оболочку и пока пользователь не закроет её система не перезагрузится.
Новый комментарий

Жирный текстКурсивный текстПодчёркнутый текстЗачёркнутый текстПрограммный кодСсылкаИзображение




© 2006-2018 Вадим Калинников aka MooSE