Автоматическая установка Windows: мифы и легенды

Часть 2. Пакетирование

Уважаемые читатели, я рад, что прошлая статья вызвала поток писем с вопросами и дополнениями. Тот факт, что было прислано более полутора сотен отзывов, свидетельствует, что тема оказалась актуальной и злободневной. Несколько писем в стиле КГ/АМ только подчеркивают, что большая масса читателей заинтересованы в доскональном разборе и полном описании материала, а также большей доле практически применимых советов. Поэтому сегодня мы с вами поговорим более конкретно о наболевших вопросах.

Всех, кто владеет языком Шекспира и Чосера, сразу отсылаю на праматерь нашего цикла статей - интернет-сайт The Microsoft Foundation Network msfn.org. Здесь вы найдете формы и FAQ со ссылками на нужные материалы, что называется, "из первых рук". Нет, программисты из Microsoft сюда не заглядывают. На этом сайте собрались те энтузиасты, которые, не покладая рук, трудятся над облегчением труда системных администраторов по приведению мелкомягких продуктов в удобоваримый вид. Отлов "багов" и предложения по созданию самоинсталлирующихся дистрибутивов (так называемых "слипстримов") - это их конек. Кстати, неприятно слышать, что такой низкопробный и глючный продукт, как nLite, собирают тоже здесь (nuhi.msfn.org).

Во-вторых, всем рекомендую посмотреть сайт аналогичной тематики на русском языке updates.ya1.ru, на котором системные администраторы из Якутии собирают по крупицам нужные сведения обо всех вещах, в курсе которых должен быть сисадмин. Оба вышеупомянутых сайта постоянно обновляются и совершенствуются.

Итак, способы автоматического наложения патчей на инсталлируемую Windows или ее дистрибутив. Сегодня продолжим разбор технологий, которые Microsoft использует для создания патчей.

Что же представляет собой патч изнутри? Это набор файлов, устанавливаемых в ОС взамен существующих или дополнительно к ним, ключи реестра, а также программу наложения. Microsoft использует следующие программы наложения:

  • Windows Installer
  • IExpress
  • update.exe
  • hotfix.exe

Работу с WI (отличительный признак хотфикса - наличие внутри MSP-файла) мы с вами уже рассматривали на примере наложения обновлений MS Office. Для своей работы WI требует уже установленной Windows, поэтому глубокое знакомство с этой технологией пока отложим, ограничимся упоминанием об ее существовании.

Технология IExpress относительно молода. Она предназначена для упаковки в единый командный файл обновлений, накладываемых при помощи других технологий. Однако необходимо рассмотреть важные особенности IExpress, которые нам впоследствии пригодятся.

Во-первых, IExpress может работать исключительно с файлами, сложенными в один каталог, и не может работать с файлами, вложенными в подкаталоги. Эта особенность называется FLAT (плоская, то есть) инсталляция и попортит нам массу нервов. Во-вторых, движок IExpress не проверяет Pending-очередь на переполнение. Давайте рассмотрим работу IExpress на практическом примере. Тех, кто пропустил статью "Лемма Икс", отсылаю к номеру 26 "КВ" за 2005 год.

В начале июля Microsoft порадовала своих пользователей новым REDIST-пакетом MS DirectX 9.0c, в который включены все самые последние заплатки на безопасность "иксов". Данный дистрибутив объявлен критически важным в установке всех версий Windows, в том числе и MS Windows XP SP2. Помимо стандартных файлов, внутри себя он содержит несколько патчей, упакованных в соответствующие CAB-файлы, а также библиотеку установщика для 64-битных версий Windows. Если вы не планируете с этого дистрибутива в дальнейшем устанавливать слипстрим-х64-битную "винду", спокойно удаляйте указанную библиотеку из распакованного дистрибутива.

После распаковки редистрибута сделайте слипстрим так, как описано в вышеупомянутой статье. К сожалению, в ней я сам сделал ошибку. Начиная с версии 9.0b, ключ /install является лишним, так как опция деинсталляции убрана навсегда. Так что для DirectX 9.0c обязательным остается только ключ /silent.

Следующим этапом нашего практикума будет создание автоустанавливающегося дистрибутива MS Internet Explorer 6 SP1. Пользователей MS Windows XP SP2, в которую интегрирован MS IE 6 SP2, убедительно прошу не прерывать чтение, так как будут описаны важные для всех моменты.

Итак, начнем разбор механизма исполнения IExpress. После распаковки файлов он передает управление команде, прописанной в инсталляторе (что вы делали сами, указывая в явном виде dxsetup.exe /silent). Тем не менее, есть способ заставить инсталлятор исполнить другую команду. Для этого его надо запустить с ключом командной строки /c:"какая_нибудь_команда". Обращаю ваше внимание, что используются двойные кавычки, чтобы обрамить команду, так как она может содержать пробелы. Если внутри заменяемой команды есть двойные кавычки, каждая из них удваивается.

Microsoft распространяет Internet Explorer 6 в виде ie6setup.exe файла, который является загрузчиком из интернета остальных компонентов по выбору пользователя. Так, файл размера 500 Кб может раздуть папку инсталлятора до 55 Мб. Сообразуясь с этим, очистите место на диске и приготовьтесь к долгой выкачке данных из интернета.

Для начала загрузки запустите из командной строки следующего вида конструкцию:

ie6setup.exe /c:"ie6wzd.exe /d /s:""#e", где:

ie6wzd.exe - полное имя Install Wizard, который проводит все действия

/d запускает "только скачивание дистрибутива"

/s:""#e" записывает результат в ту же папку, что и инсталлятор.

По окончании "инсталляции" у вас в папке будет сложен полный FLAT-дистрибутив MS IE 6 SP1. Это очень важно, так как если бы вы списывали IE 6 без SP1 откуда-нибудь с ждановичского компакт-диска, вам пришлось бы файлы SP1 добывать путем ручной рассортировки некоторых дистрибутивов Microsoft (скажу вам, занятие не из приятных). Теперь настало время создать при помощи IExpress слипстрим MS IE 6 SP1 стандартным образом. Команда инсталлятору звучит так:

ie6setup /q:a /c:"ie6wzd.exe /s:""#e"" /q /r:n", где

/q приводит к запуску инсталлятора в одном из "тихих" режимов;

а выбирает "административный" (полностью "тихий", но журналирующий ошибки) режим;

ie6wzd.exe - полное имя Install Wizard, который проводит все действия;

#e заставляет инсталлятор устанавливать ВСЕ компоненты, найденные в папке;

/q без ключей включает абсолютно тихий режим, даже не ведущий журнала;

/r:n отключает требование перезагрузки по завершению скачивания.

Вы имеете два слипстрим компонента Windows от Microsoft. Настало время проверить, как они будут работать в связке. Если первым запустить IE, то все пройдет как по маслу. Но если первым запустить DX, то инсталлятор IE "вылетит" с ошибкой "pending-очередь не пуста! Перезагрузитесь для начала инсталляции". Из-за того, что IExpress не проверяет очередь инсталляций, головной болью слипстримера становится желание поставить MSIE-дистрибутив в очередь инсталляций раньше MSDX. Но, как общеизвестно, корректно инсталляция MSIE заканчивается только после перезагрузки компьютера. Следовательно, если вы наложите на дистрибутив на уровне файловой системы все hotfix для MS IE 6 SP1, они не будут корректно распознаны, так как на момент инсталляции компонентов IE распознается как 5.0.

Говоря вообще о создании дистрибутивов с наложенными на сервиспак хотфиксами, следует упомянуть о двух, на мой взгляд, самых удачных проектах. Их авторы, RyanVM и TommyP, постоянно проживают на MSFN.ORG, имеют там персональные разделы форума и постоянно улучшают свои программные продукты. Несмотря на это, не могу рекомендовать ни один из них, и вот по каким причинам.

Товарищ RyanVM (ryanvm.msfn.org) сделал 60 Мб пакет, включающий все на сегодня обновления для Windows XP SP2. Кроме обновлений самого ядра операционной системы, внедрены обновления MS DirectX, MS Internet Explorer, MS .NET Framework, MSN Messenger. Однако пакет существует исключительно для англоязычной версии Windows и будет поэтому малополезен домашним пользователям в Беларуси. Если же учесть, что:

а) 90% пользователей Windows XP до сих пор не модернизировались с русской SP1 на SP2 по причине некорректной работы RESET5-сервиса, а

б) оставшиеся 10% пользуются английской Windows XP SP2 Corporate Edition (не требующей активации) с установленным русским MUI, в которой пакет Райана ведет себя чрезвычайно некорректно,

то удовольствие от скачивания 60 Мб из интернета каждую неделю может получить только мазохист.

Я сам пробовал сделать русифицированную версию пакета RyanVM Pack методом замены сжатых файлов внутри CAB русскоязычными версиями, но пакет "глючит" сегодня точно так же, как и четыре месяца назад.

Немногим лучше дела обстоят с Windows 2000. Товарищ TommyP создал 70 Кб архив www.vorck.com/data/hfslip.zip, который пользователь сам должен наполнить дистрибутивами. Можно в Windows 2000 SP4 интегрировать MS IE6, все хотфиксы с момента создания, некоторые другие узкоспецифические пакеты, а также произвольное количество слипстримов. По понятным, надеюсь, причинам хотфиксы для MS IE 5 внедрять нет смысла, а по разобранным выше - хотфиксы для MS IE 6 невозможно, даже если слипстрим MS IE внедрить. Сама интеграция хотфиксов имеет смысл исключительно для тех, кто собирает дистрибутив для одиноко стоящего компьютера, ведь интегрированные в дистрибутив хотфиксы не прописываются как положено в реестр и заново будут скачаны с Microsoft Update / MS SUS.

Единственным, для чего можно порекомендовать рассмотренные пакеты, является внедрение в создаваемый дистрибутив драйверов без цифровой подписи WHQL. Если вы еще не знаете, что это, то рекомендую прочитать, что написано в окне Свойства Системы - Оборудование - Подписывание драйверов.

Итак, для отключения проверки Windows устанавливаемого драйвера на WHQL-сертифицированность первым делом внедрите в слипстрим команду импорта в реестр reg-файла следующего содержания:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
"SFCDisable"=dword:FFFFFF9D

Политика защиты системных файлов будет сброшена в значение, защищающее самые важные файлы, но разрешающее установку не-WHQL-подписанных драйверов. Вторым делом в файл автоматической установки в секцию [unattended] внесите строку DriverSigningPolicy=Ignore. Третьим делом подмените отвечающую за SFP библиотеку в дистрибутиве Windows (для Windows 2000 это SFC.DL_, для Windows XP это SFC_OS.DL_) на библиотеку, которую вы скачали с сайта производителя (RyanVM или TommyP).

Также (и это его единственное полезное свойство) nLite может из дистрибутивной DL_ сделать "взломанную" DLL-ку прямо в дистрибутиве. Обратите внимание, недоделка nLite состоит в том, что он не архивирует при помощи makecab.exe эту библиотеку, а DLL складывает прямо в папку дистрибутива, забыв поправить в инсталляционном файле местонахождение ЗАЛОМАННОГО файла. Если вы будете использовать сделанный nLite дистрибутив (выражаю соболезнование вашим нервам), то будьте готовы к тому, что попытка установить не сертифицированный драйвер потерпит фиаско. Вручную удалите старую DL_, ужмите makecab.exe sfc_oc.dll и только после этого пишите дистрибутив на болванку.

Вот теперь ваш дистрибутив более-менее готов к наполнению драйверами и слипстримами. Поскольку мы преследуем цель создать ПОЛНОСТЬЮ самоустанавливающийся дистрибутив Windows, поясним несколько соглашений Microsoft.

В корневом каталоге дистрибутивного диска должна находиться папка I386, на одном уровне с ней - папка $OEM$, в которую складывают слипстримы OEM-поставщики компьютеров с предустановленной Windows. Внутри I386 создается папка SVCPACK, в которую мы будем складывать хотфиксы. После этого в файле автоустановки вносятся следующие строки:

[Version]
Signature="$WindowsNT$"
MajorVersion=5
MinorVersion=0 или 1 (Win2000 или WinXP)
BuildNumber=2195 или 2600 (Win2000 или WinXP)

[SetupData]
CatalogSubDir="\i386\svcpack"

[ProductCatalogsToInstall]
KB111111.cat
KB222222.cat
KB333333.cat

[SetupHotfixesToRun]
KB111111.exe /опции
KB222222.exe /опции
KB333333.exe /опции
qchain.exe

[ProductCatalogsToInstall]
KB111111.cat
KB222222.cat
KB333333.cat

В первой секции мы описали параметры устанавливаемой системы, чтобы хотфиксы корректно распознавали, на соответствующую ли версию устанавливаются.

Условно 111111, 222222 и 333333 - это накладываемые нами хотфиксы, а опции у каждого свои (см. первую статью цикла).

При помощи команды KB111111.exe -x распакуйте каждое накладываемое обновление в отдельную папку. При помощи команды expand -r *.in_ внутри каждой полученной папки распакуйте все INF файлы и сложите кучкой в SVCPACK.

Затем, начиная с обновлений за октябрь 2003 года или за ноябрь 2004 для Windows 2000 и Windows XP, соответственно, скопируйте все файлы из папки обновления в основной I386. Пустая трата времени - копирование движка обновителя (файлы, совпадающие в однотипных обновлениях). Удалите сжатые версии заменяемых файлов (например, DL_ или EX_) и описанной выше командой makecab.exe ужмите новые версии.

Обратите внимание, вам все же придется скачать с support.microsoft.com/default.aspx?scid=kb;en-us;q296861 файл qchain.exe и поместить его в папку SVCPACK.

Последняя описанная секция - это секция каталогов. Необходимо указать все каталоги дополнений и скопировать их из развернутых каталогов дополнений в I368.

В папку $OEM$ рекомендую сложить сделанные нами слипстримы MS DirectX и MS IE. Рекомендую поступить как настоящий OEM-производитель: скачать Microsoft Internet Explorer Administrator Kit (MS IEAK) и с его помощью создать файл параметров INS для FLAT-инсталлятора IE. В нем будет храниться нужная информация по настройке работы браузера в Сети (используемые proxy-серверы, адреса стартовой и поисковой страниц, опции профилей пользователя типа отключения сохранения паролей и автозаполнения адресов). Если есть желание, сюда можно поместить ваши логотипы в графических файлах (описание без труда находится в интернете) для организации "Стартового стола", "Рабочего стола" и меню Автозагрузки. Полученный файл скопируйте во FLAT-инсталлятор IE и пережмите слипстрим.

В этой же папке $OEM$ создайте папку $1, в ней - папку DRIVERS. Она будет автоматически по окончании первой текстовой фазы инсталляции скопирована в корень хост-диска Windows и из нее "посыплются" во вторую фазу обновленные драйверы. Каждый драйвер должен быть FLAT-модели, т.е. не содержать системных файлов в подпапках. Например, nVidia Forceware 7-й серии этому удовлетворяют, а с CMedia придется поработать, скинув драйвер целиком (на всякий пожарный случай), а в файле автоустановки указав путь к подпапке CMedia\Win2000.

Пути, по которым инсталлятор Windows ищет драйверы для обнаруженных устройств, прописываются в секции [Unattended] файла автоустановки одной строкой:

OemPnPDriversPath="Drivers\111; Drivers\222;Drivers\333"

где 111, 222 и 333 - имена каталогов, содержащих и INF-файлы, и сам драйвер.

Файл unattended.txt может быть создан как вручную в блокноте, так и при помощи стандартных утилит. И в том, и в другом случае вам просто необходимо скачать Microsoft ServicePack Deployment Tools для соответствующего сервиспака. Для тех, кто будет писать вручную, есть REF.CHM (или deptool.chm) - полный хелп по командам, а для второй категории пользователей - программа SETUPMGR.EXE.

В добрый путь, и да хранит вас Святой Коннектий!

Ваш дядюшка хардовик,
Mexicanetz Express,
crowngold.narod.ru

Версия для печатиВерсия для печати

Номер: 

33 за 2005 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!

Комментарии

Аватар пользователя Alex
Статья весьма неплоха, для начинающих "мододелов" к ХР, однако возмутило пренебрежительное отношение к nLite. Такое ощущение, что автор пользовался (пользуется) версией 0.0...а. :), либо плохо знает предмет.

Могу поспорить, что мой дистрибутив с интегрированными драйверами, программами (автоустановками) и сервисами не сравнится с тем, что предлагается в этой статье. Без обид, я лично прошел и через unattented установку WinXP и т.д. и пришел к выводу, что лучше этой проги нет, для создания СВОЕГО дистрибутива.

Маленькое примечание: тот способ который автор предлагает использовать для дров работает в одном случае из трех, и то не для всех драйверов :( (возникнут вопросы - вышлю мой "черный" список). А по поводу автоустановки Винды и создания своего дистрибутива я думаю, что надо писать и пишите (спасибо автору)! Только КВ как-то раслабилась, погрязла в хардваре... :) (имхо). Иногда смешно читать в КВ, то что прочитал в разных газетах месяц, а то и два назад. В общем удачи всем, кто хочет научить компьютер обращаться к нему на Вы!

Аватар пользователя dandr
Статью не читал, пока.. могу ошибаться, но основная задача unattended в быстром развертывании системы на большом количестве машин, на предприятии, предустановка при продаже компьютеров и т.п. Для использования дома, создание "своего" дистрибутива для меня не аргументировано в вашем замечании по установке WinXP; как часто приходится переустанавливать систему? Для таких целей подходят программы резервирования. nLite не нужен.
Аватар пользователя Mexicanetz Express
Уважаемый Дандр! Задача UNATTENDED инсталляций - в том, чтобы минимизировать количество затрачиваемое времени инсталлирующего систему, будь то админ локальной сети предприятия или частный пользователь. Например, около 20% частных пользователей в такой инсталляции не заинтересованы, ибо не меняют конфигурЭ своего компа, и могут переинсталлироваться с ОБРАЗА диска (PQDI/NGhost). При сборке компа на фирмах UNATTENDED тоже не проходит. Для инсталляции используется тоже образ, который клонируется с системного винчестера фирмы на будущий винчестер пользователя (кроме самых мелких продавцов).
Аватар пользователя Mexicanetz Express
Уважаемый Алекс! Имею 16 различных дистрибутивов Windows 2000, которые работают на 80 различных десктопах, от P2-400/iBX/128SDRAM до P4-3200/i915/1024DDRSDRAM. Программу nLite пытаюсь приручить уже 3 года. За выходом обновлений слежу на официальном сайте, скачиваю с основного зеркала. Скажу, что глюки меняются, но УСТОЙЧИВО работающего дистрибутива при помощи nLite так и не удалось получить. Понимаете ли, я принимаю только УСТОЙЧИВЫЙ дистрибутив, и никакой иной. Так что первый же глюк заставляет меня дистриб выбрасывать в мусорку. У меня НЕТ ВРЕМЕНИ копаться и выяснять, что не так с nLite - это ИХ проблемы, а не мои. Почему с другими программами мой Directhands.dll совместим, а с nLite -- нет?

Высылайте ваш черный список драйверов, будем разбираться вместе. Ася в статье.