Интеграция обновлений в дистрибутив ОС MS Windows

Интеграция обновлений в дистрибутив ОС MS Windows

Microsoft каждый месяц выпускает новые версии дистрибутивов с уже интегрированными обновлениями. Но есть редакции ОС, например LTSC, для которых Microsoft не выполняет подобные действия. Приходится делать самому…

Подготовка

Для интеграции обновлений в дистрибутив ОС, потребуется:

  • Дистрибутив операционной системы в файле .iso.
  • Доступ в интернет для скачивания необходимых инструментов и обновлений.
  • Рекомендуется #SSD. Все ниже приведённые этапы требуют активной работы с файлами. Поэтому, существенное ускорение можно получить выполняя все задачи на #SSD.

Структура директорий

Для начала необходимо создать структуру директорий, которая послужит базисом для процесса интеграции обновлений:

  • C:\BuildFarm - корневая директория для работы.
    • \MNT - директория, в которую будет монтироваться образ WIM.
    • \UPD - директория для хранения скаченных обновлений.
    • \WIM - директория для хранения образа WIM.

MS DISM

Для интеграции обновлений потребуется инструмент Deployment Image Servicing and Management (DISM) (DISM.exe), который входит в комплект Windows Assessment and Deployment Kit (Windows ADK). Обычно, DISM уже поставляется с операционной системой, но я рекомендую скачивать последнюю версию с сайта Microsoft и устанавливать вручную.

Когда Windows ADK установлен, #DISM можно найти в меню “Пуск” вместе с остальными программам. Запускать #DISM необходимо под администратором. Все команды, приведённые ниже, должны будут выполняться только через установленный вручную #DISM. Использовать #DISM, поставляемый с операционной системой нет необходимости.

Интеграция обновлений

Обновления можно скачивать с сайта-каталога Microsoft Update Catalog. Я беру так называемые “кумулятивные (накопительные) обновления” (cumulative updates), содержащие в себе сразу множество пакетов с исправлениями и обновлениями функций. Найти такие крупные обновления можно в каталоге при помощи поискового запроса cumulative update.

Скачиваемые обновления помещаются в директорию C:\BuildFarm\UPD для дальнейшей интеграции в дистрибутив ОС.

Извлечение файла WIM из дистрибутива MS Windows

Образ ОС находится в специальном файле sources\install.wim. Его необходимо извлечь при помощи программ для работы с файлами .iso (подойдёт UltraISO или PowerISO) в директорию C:\BuildFarm\WIM.

Получение информации из WIM-образа

Файл install.wim может содержать несколько редакций ОС. Каждая редакция ОС имеет свой индекс. Для того, чтобы увидеть эти индексы, нужно ввести команду:

1
Dism /Get-ImageInfo /ImageFile:"C:\BuildFarm\WIM\install.wim"

Где:

  • /Get-ImageInfo - получить информацию о версиях операционной системы, находящихся в WIM-образ.
  • /ImageFile - путь к WIM-образу.

Введённая команда предоставит примерно такой выхлоп:

Терминал
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Dism /Get-ImageInfo /ImageFile:"C:\BuildFarm\WIM\install.wim"

Details for image : C:\BuildFarm\WIM\install.wim

Index : 1
Name : Windows 10 Education
Description : Windows 10 Education
Size : 15,643,499,526 bytes

Index : 2
Name : Windows 10 Education N
Description : Windows 10 Education N
Size : 14,878,972,660 bytes

Index : 3
Name : Windows 10 Enterprise
Description : Windows 10 Enterprise
Size : 15,643,653,521 bytes

Index : 4
Name : Windows 10 Enterprise N
Description : Windows 10 Enterprise N
Size : 14,878,878,937 bytes

Index : 5
Name : Windows 10 Pro
Description : Windows 10 Pro
Size : 15,658,943,281 bytes

<...>
Extract Specific Windows Index from Windows 10 Multiple Edition ISO

Монтирование WIM-образа

Индексы получены. Теперь необходимо примонтировать редакцию ОС из конкретного индекса. Выбор индекса зависит от вас: выбираете индекс той редакции ОС, которая вам необходима. Я выбрал редакцию Windows 10 Pro с индексом 5:

1
Dism /Mount-Image /ImageFile:"C:\BuildFarm\WIM\install.wim" /MountDir:"C:\BuildFarm\MNT" /index:5

Где:

  • /Mount-Image - команда на монтирование WIM-образа.
  • /MountDir - путь к директории, в которую необходимо поместить содержимое монтируемого WIM-образа.
  • /index:5 - номер версии дистрибутива ОС. Номер можно узнать командой /Get-ImageInfo.

Интеграция обновлений в WIM-образ

После монтирования редакции ОС с конкретным индексом, можно начинать процесс интеграции обновлений:

1
Dism /Image:"C:\BuildFarm\MNT" /Add-Package /PackagePath:"C:\BuildFarm\UPD"

Где:

  • /Image - путь к директории, в которой находится содержимое примонтированного WIM-образа.
  • /Add-Package - команда на добавление пакетов (обновлений) в WIM-образ.
    • /PackagePath - путь к директории, в которой находятся пакеты (обновления) для интеграции в WIM-образ.

Проверка корректности интеграции обновлений (опционально)

По окончании процесса интеграции, можно проверить корректность выполненной задачи. Команда ниже покажет список пакетов, установленных в примонтированной редакции ОС. В этом списке пакетов будут интегрированные обновления.

1
Dism /Image:"C:\BuildFarm\MNT" /Get-Packages

Где:

  • /Image - путь к директории, в которой находится содержимое примонтированного WIM-образа.
  • /Get-Packages - команда для получения информации о интегрированных пакетах примонтированного WIM-образа.

Очистка хранилища компонентов WIM-образ (опционально)

Для уменьшения размера дистрибутива можно запустить процедуру удаления предыдущих версий компонентов, которые были изменены (заменены) установленными обновлениями:

1
Dism /Image:"C:\BuildFarm\MNT" /Cleanup-Image /StartComponentCleanup /ResetBase

Где:

  • /Image - путь к директории, в которой находится содержимое примонтированного WIM-образа.
  • /Cleanup-Image - очистка и восстановление образа.
    • /StartComponentCleanup - удаляет заменённые компоненты и уменьшает размер хранилища компонентов.
      • /ResetBase - сброс базы заменяемых компонентов.

Проверка хранилища компонентов WIM-образа (опционально)

Опциональный шаг перед заключительным этапом - проверить системные компоненты и файлы на повреждения:

1
Dism /Image:"C:\BuildFarm\MNT" /Cleanup-Image /ScanHealth

Где:

  • /Image - путь к директории, в которой находится содержимое примонтированного WIM-образа.
  • /Cleanup-Image - очистка и восстановление образа.
    • /ScanHealth - сканирование образа на наличие повреждений хранилища компонентов.

Сохранение изменений в WIM-образе

После выполнения всех действий, необходимо отмонтировать редакцию ОС с сохранением изменений. Делается это командой:

1
Dism /Unmount-Image /MountDir:"C:\BuildFarm\MNT" /Commit

Где:

  • /Unmount-Image - команда для отмонтирования WIM-образа.
  • /MountDir - путь к директории, в которой находится содержимое примонтированного WIM-образа.
  • /Commit - сохранение совершённых изменений в WIM-образе.

Всё. Мы получили файл install.wim с интегрированными обновлениями. Теперь этот файл install.wim необходимо обратно упаковать в образ ISO с заменой старого.

Автоматизация

Я люблю автоматизировать всё по максимуму. И здесь я не упустил шанс написать небольшой скрипт с деревянной логикой, который сделает все шаги по интеграции обновлений за человека. Только вот, извлечь файл install.wim из ISO-образа придётся самому.

dism.packages.bat
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
rem # Automatic integration of updates into DISM.
rem #
rem # @package   CMD
rem # @author    Kai Kimera <mail@kai.kim>
rem # @copyright 2023 Library Online
rem # @license   MIT
rem # @version   0.1.0
rem # @link      https://lib.onl/ru/2022/05/862226e6-cbb1-58f8-bc8e-0cfef747f475/
rem # ---------------------------------------------------------------------------------------------------------------- #

@echo off
set d_mnt="%~dp0MNT"
set d_upd="%~dp0UPD"
set d_wim="%~dp0WIM"
set f_wim="%d_wim%\install.wim"

rem Creating directories.
if not exist "%d_mnt%" mkdir "%d_mnt%"
if not exist "%d_upd%" mkdir "%d_upd%"
if not exist "%d_wim%" mkdir "%d_wim%"

rem Checking files.
if not exist "%f_wim%" echo Please put "install.wim" file in "WIM" directory... && pause
if not exist "%d_upd%/*.msu" echo Please put "*.msu" files in "UPD" directory... && pause

if exist "%f_wim%" (
  echo Getting Windows Image Info...
  Dism /Get-ImageInfo /ImageFile:"%f_wim%"
) else (
  echo "install.wim" not found! & echo.Failed with error #%errorlevel%.
  goto :error
)

set /p index="Enter INDEX: "

echo Mounting Windows image...
Dism /Mount-Image /ImageFile:"%f_wim%" /MountDir:"%d_mnt%" /index:%index%

echo Adding Windows packages...
Dism /Image:"%d_mnt%" /Add-Package /PackagePath:"%d_upd%"

echo Getting Windows packages...
Dism /Image:"%d_mnt%" /Get-Packages

echo Reseting Windows image...
Dism /Image:"%d_mnt%" /Cleanup-Image /StartComponentCleanup /ResetBase

echo Scaning health Windows image...
Dism /Image:"%d_mnt%" /Cleanup-Image /ScanHealth

echo Saving Windows image...
Dism /Unmount-Image /MountDir:"%d_mnt%" /Commit

exit /b 0

:error
exit /b %errorlevel%

Поместить скрипт нужно в корень директории BuildFarm и запустить из терминала #DISM. Если же возникнут какие-либо проблемы, ниже есть небольшой скрипт, который размонтирует образ и очистит систему от точек монтирования.

dism.unmount.bat
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
rem # Automatic unmounting WIM images into DISM.
rem #
rem # @package   CMD
rem # @author    Kai Kimera <mail@kai.kim>
rem # @copyright 2023 Library Online
rem # @license   MIT
rem # @version   0.1.0
rem # @link      https://lib.onl/ru/2022/05/862226e6-cbb1-58f8-bc8e-0cfef747f475/
rem # ---------------------------------------------------------------------------------------------------------------- #

@echo off
set d_mnt="%~dp0MNT"

echo Unmounting "install.wim" and discards changes that were made when image was mounted...
Dism /Unmount-Image /MountDir:"%d_mnt%" /Discard

echo Deleting all of resources associated with a mounted image that has been corrupted...
Dism /Cleanup-Mountpoints

echo Getting information about mounted image...
Dism /Get-MountedImageInfo

exit /b 0

2023-10-18

  • Добавлен раздел “Автоматизация”.
  • Добавлены скрипты по автоматизации процессов.
Авторы
Смотрите также
Мета
Лицензия
ID файла
UUID
Системный путь
Тип
Статистика
Количество слов
Время чтения
мин.