Offline интеграция Service Pack в Windows 7 и Windows 2008 R2
Ситуация
Мы живем в месте где условия подключения к сети интернет не позволяют закачивать 100500 дистрибутивов со свежим пакетом обновлений (Service Pack) и желая сделать это наиболее эффективно, мы решаем скачать только сам Service Pack и интегрировать его уже в имеющиеся дистрибутивы Windows. Есть 2 способа решения данной задачи online и offline интеграция Service Pack, официально Microsoft поддерживается только online интеграция, в статье же пойдет о втором (offline) методе интеграции пакета обновлений.
Инструментарий Утилита для создания загрузочного .iso образа: oscdimg (является частью пакета WAIK)
Архиватор для распаковки: 7-Zip 9.20 x86 | 7-Zip 9.20 x64 (другие версии доступны на 7-zip.org)
SP1: Пакет обновления 1 (SP1) для Windows 7 и Windows Server 2008 R2 (KB976932)
Последовательность действий
- Устанавливаем 7-Zip 9.20 x86 или 7-Zip 9.20 x64
- Распаковываем наш ISO образ c OS в папку Win7
- Запускаем командную строку с правами администратора.
- dism /Get-WimInfo /WimFile:e:\os\Win7\sources\install.wim - cмотрим, какие версии содержаться в образе install.wim
- md e:\os\WinSP - cоздаём каталог для монтирования
- dism /Mount-Wim /WimFile:e:\os\Win7\sources\install.wim /index:4 /MountDir:e:\os\WinSP - монтируем образ с указанием номера индекса, т.е. той версии, которую хотим проапгрейдить пакетом обновлений (мы узнали номера версий на шаге 4)
- e:\os\SP1\windows6.1-KB976932-X64 /X:e:\os\SP1 - распаковываем наш Service Pack 1 для получения .cab файла из .exe
Внимание! Тут я должен сделать лирическое отступление, если мы попробуем выполнить offline интеграцию SP1 командой dism /Image:e:\os\WinSP /Add-Package /PackagePath:e:\os\SP1\windows6.1-KB976932-X64.cab – нас ждет боль и разочарование от осознания того, что offline интеграция пакета обновления не поддерживается, о чем нам радостно сообщат ошибкой:
Deployment Image Servicing and Management tool
Version: 6.1.7600.16385
Image Version: 6.1.7600.16385
Processing 1 of 1 - Package_for_KB976932: The specified package cannot be added to an offline image.
Add this package to a running operating system using the /Online option.
Error: 0x800f082e
Error: 0x800f082e
DISM failed. No operation was performed.
For more information, review the log file.
The DISM log file can be found at C:\windows\Logs\DISM\dism.log - Т.к. мы упорные, улыбаемся и продолжаем интеграцию, убеждая систему, что для нас нет невозможного. Распаковываем нашу матрешку windows6.1-KB976932-X64.cab в e:\os\sp1\cab\
- Заходим в e:\os\sp1\cab\ и распаковываем в каталог e:\os\sp1\cab\ (т.е. просто жмакаем “Распаковать здесь”) NestedMPPContent.cab после распаковки, удаляем исходный cab файл
- Распаковываем языковые файлы KB976933-LangsCab0.cab, KB976933-LangsCab1.cab, KB976933-LangsCab2.cab, KB976933-LangsCab3.cab, KB976933-LangsCab4.cab, KB976933-LangsCab5.cab, KB976933-LangsCab6.cab в каталог e:\os\sp1\cab\ , при запросе перезаписи, милосердно соглашаемся, в конце также удаляем исходные архивы.
- Пытаемся обмануть систему, и сделать из “нельзя” – “можно”, отредактировав следующие файлы, собственно то, ради чего мы и распаковывали наши архивы:
- Правим файл e:\os\SP1\cab\update.ses находим раздел <Tasks operationMode="OfflineInstall"> и меняем параметр targetState="Absent" на targetState="Installed"
- Правим файл e:\os\SP1\cab\update.mum находим параметр (находится в конце файла) allowedOffline="false" и меняем его на allowedOffline="true"
- Повторяем процедуру для файла e:\os\SP1\cab\Windows7SP1-KB976933~31bf3856ad364e35~amd64~~6.1.1.17514.mum (обращаем внимание, что в x86 версии SP1 файл будет называться по-другому в части ~amd64~) находим параметр (находится в конце файла) allowedOffline="false" и меняем его на allowedOffline="true"
- Наконец мы подошли к долгожданному этапу offline интеграции, выполняем команду:
dism /Image:e:\os\WinSP /Add-Package /PackagePath:e:\os\SP1\cab
видим, что дело сдвинулось с мертвой точки, и оно “что-то там” делает, процедура заняла у меня 36 минут. - dism /UnMount-Wim /MountDir:e:\os\WinSP /commit - применяем изменения к образу install.wim и отмонтируем его, это еще минут 10
- Повторяем шаги 6, 15, 16 для каждой редакции в нашем образе, а именно:
Монтируем (изменяя цифру в параметре index: в зависимости от редакции)
dism /Mount-Wim /WimFile:e:\os\Win7\sources\install.wim /index:4 /MountDir:e:\os\WinSPИнтегрируем: dism /Image:e:\os\WinSP /Add-Package /PackagePath:e:\os\SP1\cabДемонтируем: dism /UnMount-Wim /MountDir:e:\os\WinSP /commit - Создаем загрузочный .iso образ (утилиту мы предварительно скопировали в папку e:\os. Если удалить файл e:\os\Win7\ei.cfg, все версии перечисленные на шаге 5 станут доступны в меню установки):
oscdimg.exe -n -m -o -be:\os\Win7\boot\etfsboot.com e:\os\Win7 e:\os\Win7SP1.isoпараметры применяемые в этой команде:
-n Включает поддержку длинных имен файлов -m Игнорирует ограничение максимального размера образа -o Оптимизирует хранение путем однократного кодирования дублирующих файлов путем применения алгоритма хеширования MD5 для сравнения файлов. -bЗадает размещение загрузочного файла формата El Torito. Пробелы не допускаются - Пришло время проверить, из какого места у нас растут руки и попробовать поставить нашу систему, дабы убедиться в наличии SP1, как видим, всё отлично установилось и версия именна та, которая должна быть.
- Для полноты картины, можем записать образ на флэшку при помощи Windows 7 USB/DVD Download Tool