четверг, 14 июля 2016 г.

Создание собственного образа Windows PE 3.1

Перед системными администраторами стоит задача эффективно обслуживать парк вычислительной техники, поэтому каждый системный администратор должен стремиться автоматизировать свою работу и рутинные задачи. Сейчас я хочу начать цикл статей по автоматизации развёртывания ПО в гетерогенной среде, где рабочие станции пользователей работают по понятным причинам под управлением ОС Windows, а часть серверов под различными свободными системами типа Linux или FreeBSD. За основу образа взята Windows PE версия 3.1, что соответствует Windows 7 или Windows Server 2008 R2, т.к. Windows 7 - это наиболее ходовая ОС на рабочих станциях.

Все эксперименты по сборке и проверки работоспособности образов я буду проводить на виртуальных машинах VirtualBox и QUEMU/KVM.

В цикл статей будут входить следующие материалы:

Создание образа Windows PE

Windows Preinstallation Environment (Windows PE), это такая усечённая версия Windows, предназначенная для установки полноценной ОС Windows. Windows PE нельзя рассматривать как полноценную ОС, т.к. на неё наложен ряд  ограничений, в т.ч. и автоматическая перезагрузка через 72 часа работы, но как среда для резервного копирования, восстановление данных и подготовки ПК к переустановки системы она подходит как нельзя лучше. Поэтому прдлагаю снабдить нашу Windows PE некоторым набором утилит, которые нам очень помогут для спасения данных и повысят удобство работы.

Для начала нам портебутеся установить на машине администратора Windows Automated Installation Kit (AIK). Машина администратора будет задйствованна только для подготовки образов системы.
В остальном нам хватит стандартных средств ОС Windows, так же позаботьтесь о подготовке драйверов для систем, которые вы будете развёртывать. Поскольку я буду тестировать сборки на виртуальных машинах VirtualBox и QUEMU/KVM, то необходимо подготовить и драйверы к ним.

Драйвер для VirtualBox

Копируем файлы VBoxWindowsAdditions-x86.exe или VBoxWindowsAdditions-amd64.exe в зависимости от вашйе системы со стандартного образа средств интеграции VirtualBox - VBoxGuestAdditions.iso.
VBoxWindowsAdditions-x86.exe /extract /D=C:\Drivers\VBox-x86
VBoxWindowsAdditions-amd64.exe /extract /D=C:\Drivers\VBox-amd64

Драйвер для QEMU/KVM

Качаем стабильный образ драйверов под нашу архитектуру:
https://fedoraproject.org/wiki/Windows_Virtio_Drivers
или
https://launchpad.net/kvm-guest-drivers-windows/+download

Распаковываем их в:
C:\Drivers\KVM-x86
C:\Drivers\KVM-amd64
При этом необходимо удалить все драйверы не связанные с нашей ОС. Аналогично вы можете подготовить и необходимые вам драйверы для интеграции в дистрибутив.

Сборка образа

Устанавливаем Windows AIK, и запускаем от имени администратора "Пуск" -> "Все программы" -> "Microsoft Windows AIK" -> "Командная строка средств развертывания".

Собирать будем образ x86, т.к. с образом amd64 всё происходит по аналогии, но по скольку Windows PE это усечённая версия Windows, x86 приложения работать в ней не будут, и такой образ будет годиться лишь для создания прединсталляционной среды.

Копируем загрузочный образ:
copype x86 C:\WinPE\x86\
Для того, чтобы в будующем снять образ с системного диска, нам понадобится утилита imagex, копируем её:
xcopy "%ProgramFiles%\Windows AIK\Tools\x86\imagex.exe" C:\WinPE\x86\iso\
И создаём для неё список исключений (файлов, которые она не будет захватывать при копировании):
notepad C:\WinPE\x86\iso\wimscript.ini
Со следующим содержимым:
[ExclusionList]
\$ntfs.log
\$RECYCLE.BIN
\hiberfil.sys
\pagefile.sys
"\System Volume Information"
\RECYCLER
\Windows\CSC

[CompressionExclusionList]
*.mp3
*.zip
*.cab
\WINDOWS\inf\*.pnf
Добавляем диспетчер пакетов:
xcopy "%ProgramFiles%\Windows AIK\Tools\x86\Servicing" C:\WinPE\x86\iso\Servicing /s
xcopy %windir%\system32\msxml6*.dll C:\WinPE\x86\iso\Servicing

Внесение изменений в образ Windows PE

Теперь отредактируем сам наш образ Windows PE, полный образ файловой системы, которая загружается в память находится в файле winpe.wim, который в готовом образе и установочном дистрибутиве находится перемещается в sources\boot.wim. Для его подключением воспользуемся утилитой dism

Подключаем образ Windows PE
dism /mount-wim /wimfile:C:\WinPE\x86\winpe.wim /index:1 /mountdir:C:\WinPE\x86\mount
Установка драйверов в Windows PE:
dism /image:C:\WinPE\x86\mount /add-driver /driver:"C:\Drivers\KVM-x86" /recurse /forceunsigned
dism /image:C:\WinPE\x86\mount /add-driver /driver:"C:\Drivers\VBox-x86" /recurse /forceunsigned
Параметр /recurse используется, чтобы установить драйвера из вложенных каталогов, а /forceunsigned для установки не подписанных драйверов.

Теперь копируем необходимый софт:
xcopy "%ProgramFiles(x86)%\Total Commander" "C:\WinPE\x86\mount\Program Files\Total Commander"
xcopy "%ProgramFiles(x86)%\12noon Display Changer" "C:\WinPE\x86\mount\Program Files\Display Changer"
xcopy "%ProgramFiles(x86)%\PuTTY" "C:\WinPE\x86\mount\Program Files\PuTTY"

Оформление

Копируем понравившуюся нам картинку рабочего стола:
xcopy %homepath%\Pictures\winpe_wp_800x600.bmp C:\WinPE\x86\mount\Windows\winpe_wp_800x600.bmp
Теперь для того, чтобы Total Commander, Display Changer и PuTTY можно было вызывать командами "totalcmd", "dc" и "putty", а не обращаться к файлам по полному пути, добавим пути в переменную "%Path%". Для этого нам понадобится ветка реестра System из системы Windows PE.

Можно открыть редактор реестра, в нём выбрать "Файл", "загрузить куст" и выбрать SYSTEM в C:\WinPE\x86\mount\Windows\System32\config\SYSTEM, а можно это сделать командой:
REG LOAD "HKLM\WinPE_SYSTEM" "C:\WinPE\x86\mount\Windows\System32\config\SYSTEM"
Далее идём в:
HKEY_LOCAL_MACHINE\WinPE_SYSTEM\ControlSet001\Control\Session Manager\Environment
и в праметр Path добавляем следующие строки:
%SystemRoot%\system32;%SystemRoot%;%PROGRAMFILES%\Sysinternals\;%PROGRAMFILES%\Total Commander\;%PROGRAMFILES%\Display Changer\;%PROGRAMFILES%\PuTTY;
Выгружаем ветку реестра WinPE_SYSTEM:
REG UNLOAD "HKLM\WinPE_SYSTEM"
Аналогично устанавливаем наши обои:
REG LOAD "HKLM\WinPE_DEFAULT" "C:\WinPE\x86\mount\Windows\System32\config\default"
REG ADD "HKLM\WinPE_DEFAULT\Control Panel\Desktop" изменяем параметр "Wallpaper" на путь к нашему файлу "%systemroot%\winpe_wp_800x600.bmp"
И выгружаем WinPE_DEFAULT
REG UNLOAD "HKLM\WinPE_DEFAULT"
Пользовательский реестр находится в NTUSER.DAT:
c:\WinPE\x86\mount\Users\Default\NTUSER.DAT

После внесения всех необходимых изменений, отключаем образ и сохраняем в нём изменения командой:
dism /unmount-wim /mountdir:C:\WinPE\x86\mount /commit
Если вы допустили где-то ошибку, то можно отключить образ без сохранения изменений, в таком случае замените команду /commit на /discard.

Создание ISO-образа Windows PE

Теперь настало время собрать загрузочный образ системы Windows PE. Копируем winpe.wim в директорию нашего будующего образа системы в качестве загрузочного образа:
copy C:\WinPE\x86\winpe.wim C:\WinPE\x86\ISO\sources\boot.wim
Создаём ISO-образ:
oscdimg -n -lWinPEx86ru -bC:\WinPE\x86\etfsboot.com C:\WinPE\x86\ISO C:\WinPE\x86\WinPE_x86.iso
После этого загружаемся и проверим, что у нас получилось, вставив полученный iso-файл в виртуальный привод виртуальной машины.

Работа в среде Windows PE

После выполнения команды wpeinit, система должна опознать все устройства, и в случае, если у вас установлены драйверы на сеть и у вас работает DHCP, то сеть должна заработать автоматически.

Windows PE runing in VirtualBox
Установить максимальное или необходимое разрешение можно с помощью Display Changer:
dc -width=max -height=max -depth=max
Команда dc, totalcmd и putty будут работать только, если вы внесли пути к Display Changer, Total Commander и PuTTY в переменную %Path% при сборке образа. Если вы забыли это сделать или сделали не корректно, то можно обращаться по полному пути:
"c:\Program Files\Display Changer\dc.exe" -width=max -height=max -depth=max
Посмотреть информацию о сетевых интерфесах можно командой:
netsh interface ip show config
Если нужно установить IP-адрес в ручную, то это можно сделать командой:
netsh interface ip set address name="Local Area Connection" static 192.168.1.25 255.255.255.0 192.168.1.1 1
netsh interface ip set dns name="Local Area Connection" static 192.168.1.100
netsh interface ip add dns name="Local Area Connection" 192.168.1.200 index=2
Для использования DHCP:
netsh interface ip set address name="Local Area Connection" dhcp
netsh interface ip set dnsservers name="Local Area Connection" source=dhcp
Так же можно подключить сетвые ресурсы:
net use * \\server\share /user:DOMAIN\USER
Для автоматизации и упрощения настроек оболочки Windows PE, можно сделать меню на bat-файлах. После запуска командной строки в Windows PE выполняется файл c:\Windows\System32\startnet.cmd, именно в нём можно разместить меню. Либо можно напрямую запускать приложения, описав их в файле c:\Windows\System32\winpeshl.ini (его необходимо создать), командная строка при этом запускаться не будет, а файл startnet.cmd будет игнорироваться.

Если вы хотите, чтобы при запуске Windows PE не предлагалось нажать любую клавишу для загрузки, просто удалите файл bootfix.bin из папки ISO\boot перед созданием ISO-образа.

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

Отправить комментарий