Интеграция обновлений в дистрибутив ОС 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, поставляемый с операционной системой нет необходимости.
Установленный вручную DISM можно найти в меню “Пуск” / Windows Kits / Среда средств развертывания и работы с образами.
Интеграция обновлений
Обновления можно скачивать с сайта-каталога 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
может содержать несколько редакций ОС. Каждая редакция ОС имеет свой индекс. Для того, чтобы увидеть эти индексы, нужно ввести команду:
Где:
/Get-ImageInfo
- получить информацию о версиях операционной системы, находящихся в WIM-образ./ImageFile
- путь к WIM-образу.
Введённая команда предоставит примерно такой выхлоп:
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
:
Где:
/Mount-Image
- команда на монтирование WIM-образа./MountDir
- путь к директории, в которую необходимо поместить содержимое монтируемого WIM-образа./index:5
- номер версии дистрибутива ОС. Номер можно узнать командой/Get-ImageInfo
.
Если что-то пошло не так, размонтировать образ без сохранения можно следующей командой:
Проверить список примонтированных образов можно следующей командой:
Если после размонтирования образ всё ещё остаётся подключённым к системе и является повреждённым, следующая команда можешь помочь:
Она удалит все ресурсы, связанные с повреждённым образом и очистит систему от “зависших” точек монтирования.
Интеграция обновлений в WIM-образ
После монтирования редакции ОС с конкретным индексом, можно начинать процесс интеграции обновлений:
Где:
/Image
- путь к директории, в которой находится содержимое примонтированного WIM-образа./Add-Package
- команда на добавление пакетов (обновлений) в WIM-образ./PackagePath
- путь к директории, в которой находятся пакеты (обновления) для интеграции в WIM-образ.
Проверка корректности интеграции обновлений (опционально)
По окончании процесса интеграции, можно проверить корректность выполненной задачи. Команда ниже покажет список пакетов, установленных в примонтированной редакции ОС. В этом списке пакетов будут интегрированные обновления.
Где:
/Image
- путь к директории, в которой находится содержимое примонтированного WIM-образа./Get-Packages
- команда для получения информации о интегрированных пакетах примонтированного WIM-образа.
Очистка хранилища компонентов WIM-образ (опционально)
Для уменьшения размера дистрибутива можно запустить процедуру удаления предыдущих версий компонентов, которые были изменены (заменены) установленными обновлениями:
Где:
/Image
- путь к директории, в которой находится содержимое примонтированного WIM-образа./Cleanup-Image
- очистка и восстановление образа./StartComponentCleanup
- удаляет заменённые компоненты и уменьшает размер хранилища компонентов./ResetBase
- сброс базы заменяемых компонентов.
Проверка хранилища компонентов WIM-образа (опционально)
Опциональный шаг перед заключительным этапом - проверить системные компоненты и файлы на повреждения:
Где:
/Image
- путь к директории, в которой находится содержимое примонтированного WIM-образа./Cleanup-Image
- очистка и восстановление образа./ScanHealth
- сканирование образа на наличие повреждений хранилища компонентов.
Сохранение изменений в WIM-образе
После выполнения всех действий, необходимо отмонтировать редакцию ОС с сохранением изменений. Делается это командой:
Где:
/Unmount-Image
- команда для отмонтирования WIM-образа./MountDir
- путь к директории, в которой находится содержимое примонтированного WIM-образа./Commit
- сохранение совершённых изменений в WIM-образе.
Всё. Мы получили файл install.wim
с интегрированными обновлениями. Теперь этот файл install.wim
необходимо обратно упаковать в образ ISO с заменой старого.
Автоматизация
Я люблю автоматизировать всё по максимуму. И здесь я не упустил шанс написать небольшой скрипт с деревянной логикой, который сделает все шаги по интеграции обновлений за человека. Только вот, извлечь файл install.wim
из ISO-образа придётся самому.
:: Automatic integration of updates into DISM.
::
:: @package CMD
:: @author Kitsune Solar <mail@kitsune.solar>
:: @copyright 2023 Library Online
:: @license MIT
:: @version 0.1.0
:: @link https://lib.onl/ru/articles/2022/05/862226e6-cbb1-58f8-bc8e-0cfef747f475/
:: ------------------------------------------------------------------------------------------------------------------ ::
@echo off
set d_mnt="%~dp0MNT"
set d_upd="%~dp0UPD"
set d_wim="%~dp0WIM"
set f_wim="%d_wim%\install.wim"
:: 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%"
:: 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. Если же возникнут какие-либо проблемы, ниже есть небольшой скрипт, который размонтирует образ и очистит систему от точек монтирования.
:: Automatic unmounting WIM images into DISM.
::
:: @package CMD
:: @author Kitsune Solar <mail@kitsune.solar>
:: @copyright 2023 Library Online
:: @license MIT
:: @version 0.1.0
:: @link https://lib.onl/ru/articles/2022/05/862226e6-cbb1-58f8-bc8e-0cfef747f475/
:: ------------------------------------------------------------------------------------------------------------------ ::
@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
- Добавлен раздел “Автоматизация”.
- Добавлены скрипты по автоматизации процессов.
Категории
Смотрите также
Похожие записи не найдены.