Часть 1. Внедрение обновлений
Очень многие частные пользователи обеспокоены тем, как много сил требуется приложить, чтобы заново переустановить Windows. Часть из них идет по пути наименьшего сопротивления, обживая программы для управления образами логических дисков (Norton Ghost, Norton Drive Image, Acronis True Image) и, тем самым, ограничивая себя в случае переезда на новую платформу (как известно, при смене чипсета операционную систему требуется переставлять "с нуля"). А что же делать тем, кто не знает, какая у него завтра будет материнская плата? А если еще нужно постоянно друзьям-знакомым ставить этот самый Windows? Наблюдать в сотый раз за месяц синий экран, по разу в час нажимая на кнопку "Далее", вряд ли кому покажется увлекательным занятием.
Выходом из положения кажется создание дистрибутива Windows, который сам проделывал бы за оператора все действия. Microsoft такую возможность документировала в виде создания так называемой unattended-установки. От программиста требуется написать специальный текстовый файл согласно канонам и положить его в корневой каталог дистрибутива.
Вызов дистрибутива на автозапуск производится подачей в командную строку
winnt.exe /u:unattended.txt
Вариантом, еще более упрощающим процесс, является создание самозагружаемого компакт-диска, в корневую папку которого кладется указанный файл, именованный как winnt.sif.
Формат System Installation File описан подробно в документации для Power User-ов и администраторов, которая носит название Deployment Tools. Первым делом всем знакомящимся с созданием автоматических дистрибутивов рекомендуется скачать его с сайта Microsoft.
Автоматическая установка Windows, помимо задания всех параметров, которые инсталлятор спрашивает у оператора, позволяет в явных величинах задать еще массу дополнительных вещей. Например, внедрить в дистрибутив Windows драйверы для определенного оборудования, конвертировать разделы в NTFS, установить переменные среды пользователя, внести коррективы в его права доступа и еще массу мелких, но полезных для системного администратора "приятностей".
Об одной из них - наш разговор сегодня. Я имею в виду внедрение в дистрибутив заплаток для обеспечения безопасности операционной системы и ее компонентов.
Под словом "внедрение" подразумеваются две кардинально различающиеся вещи. Во-первых, это наложение на сам дистрибутив (на его файлы) обновлений, которые называются Service Pack, а, во-вторых, исполнение мелких ежемесячных заплаток, так называемых HotFix.
Сервиспаки - это очень тяжеловесные (сотни мегабайт) комплекты дополнений, которые замещают собой все дополнения, наложенные на дистрибутив ранее, на уровне файлов. Например, 1-й SP для Windows XP заменяет собой 47 (!) мелких заплат, выпущенных с момента выхода в свет Golden Edition (первоначального релиза) Windows XP, а второй, помимо указанных 47, еще 39. На настоящий момент (20 марта 2005 года) на сайте Microsoft найдено 49 ссылок на мелкие заплаты для безопасности Windows 2000 с наложенным Service Pack 4. Впору выпускать Service Pack 5, так как 4-й был выпущен в июле 2003 года.
Сервиспаки распаковываются сами, если указать им в командной строке ключ Х:
win2ksp4.exe -x:d:\w2ksp4
В указанном после ключа каталоге создаются промежуточные копии файлов обновления. После этой операции требуется провести непосредственное наложение с заменой файлов на уровне системы:
d:\w2ksp4\update\update.exe -s:d:\win2000distr
Результатом этих двух операций будет создание в каталоге, указанном после ключа -S, дистрибутива Windows 2000 Service Pack 4. Для Windows XP ситуация не меняется ни на йоту. Используются те же ключи и те же относительные пути. Стоит также заметить, что установщик привязан к определенной версии Windows, и запустить на работающей WindowsXP наложение ServicePack4 для Windows 2000 корректно невозможно: через несколько минут он совершит недопустимую операцию и будет аварийно завершен. Справедливо обратное утверждение: на Windows 2000 невозможно корректно создать дистрибутив Windows XP.
Полученный дистрибутив самодостаточен. Его можно записывать на компакт-диск и хранить на полочке как памятник первому самостоятельно собранному дистрибутиву. Но он не современен, а значит, небезопасен, так как был актуален в момент сборки сервиспака в Microsoft, но уж никак не в наши дни.
Следовательно, пора вспомнить о внедрении обновлений второго типа - мелких, но регулярно выходящих. Находятся они на сайте "Майкрософт", если кто забыл, напоминаю адрес: www.microsoft.com/technet/security/current.asp. Скачанные для вашей версии Windows обновления нужно сложить в одну папку, поместить ее в отдельный каталог внутри каталога $oem$ внутри дистрибутива. В файле cmdlines.txt, который находится внутри этого же $oem$, требуется перечислить все файлы заплаток в том виде, в каком они должны будут распаковываться, то есть, с ключами командной строки.
Ключи командной строки при каждой заплатке должны указывать, что она должна быть наложена ТИХО (без взаимодействия с оператором), и НЕ ПЕРЕЗАГРУЖАТЬ КОМПЬЮТЕР после себя, иначе весь процесс инсталляции пойдет насмарку.
Вот здесь нужно особое внимание, тут зарыта собака размером с Бетховена. Предварительно вручную требуется запустить каждый файлик с ключом командной строки /? и прочитать инструкцию по ключам командной строки, а потом результаты свести в cmdlines.txt в таком виде:
Q832894 /q
KB828028 /quiet /norestart
KB835732 /quiet /norestart
Я намеренно привел кусок реального файла, в котором (за ненадобностью) убраны части строк, отвечающие за версию Windows. У каждого будет свой дистрибутив, не похожий ни на кого, но ключи командной строки - одинаковые.
Разберемся внимательно с ними.
Если вы перекопаете интернет в поисках информации об автоустановке обновлений Windows, то с вероятностью 90% натолкнетесь на очень старые статьи, около 2004 года выпуска. К сожалению, информация, в них хранящаяся, устарела на все 100% в части ключей командной строки. Да, до декабря 2004 года в Microsoft реально придерживались стандарта на ключ "не перезагружать" -Z, но с апреля 2004 года его заменил ключ "/norestart", а ключ "тихо" теперь звучит не "-Q", а "/quiet".
Таким образом, подтверждается факт, что собрать качественный (современный и безглючный) дистрибутив с помощью программы nLite невозможно, так как ее создатели вышеописанного факта к настоящему моменту не знают.
Идем дальше. В старых статьях все обновления назывались на букву Q. Вас не должно смущать, что современные обновления (с марта 2003 года) носят буквенный префикс KB - просто Microsoft поменяла некоторые правила именования обновлений. С марта 2003 года индекс Q носят только кумулятивные дополнения Internet Explorer и MDAC, все остальные - KB. Но вот если бы только этим отличался Internet Explorer! На нашу беду, все его обновления не документируют ключа, запрещающего принудительную перезагрузку. Исходя из этого, пользоваться ключом "/Q", обозначающим "тихую" установку, уже смысла нет, придется устанавливать обновления IE в интерактивном режиме, ВРУЧНУЮ отменяя перезагрузки.
Итак, мы определились с количеством накладываемых хотфиксов, их ассортиментом и способом наложения. Разберем пристрастно ПОСЛЕДОВАТЕЛЬНОСТЬ наложения, то бишь, порядок следования соответствующих строк в CMDlines.txt.
Самым логичным будет отсортировать весь список дополнений по датам создания файлов. Создайте его, исполнив команду с консоли dir /od >cmdlines.txt, и допишите в конце каждого имени файла выше разобранные ключи командной строки. Однако этот путь может иметь не совсем приятные последствия, так как Microsoft любила и любит (и, наверное, будет продолжать эту практику) выпускать дополнения некоторых своих собственных обновлений на месяц-полтора позже. Например, сентябрьское дополнение 2004 года (исправленное в октябре) может датироваться позже октябрьских, что в случае использования данного способа наложения явно не может привести к хорошему результату.
Наилучшим вариантом будет ручная сортировка согласно таблице выпуска обновлений, которую Microsoft любезно предоставила нам на вышеупомянутом сайте.
Но иногда лезть куда-то и анализировать цепочку просто лень. Тогда на помощь приходит специальная утилита командной строки QChain.exe производства Microsoft (качать всенепременно оттуда же). Будучи упомянутой в конце файла командных строк, она выяснит, какие самые свежие версии DLL (и прочих программных компонентов) предлагают обновления, и после перезагрузки в вашей системе будут работать самые свежие компоненты. Давайте разберемся, отчего так происходит.
Дело в том, что механизм наложения HotFix весьма сложный. Если установщику хотфикса необходимо заменить системную библиотеку, которая в данный момент используется и не может быть выгружена из памяти без фатального сбоя, то создается специальная абстракция: очередь файлов, ждущих перезагрузки, дабы быть загруженными после перезагрузки (pending по-английски). Если без qchain.exe устанавливается более одного хотфикса, то после перезагрузки загрузятся компоненты того из них, который был наложен последним в очереди, без учета устаревания версии его библиотек. Qchain анализирует pending-цепочку и оставляет в ней только самые свежие версии библиотек. Таким образом, qchain кажется спасательным кругом, брошенным утопающим рукой самой Microsoft. Присмотримся повнимательнее, не топит ли эта рука пытающихся выплыть?
Учтем тот факт, что кумулятивные обновления для Internet Explorer в июле 2004 года стали "больно умными". Они начали проверять pending-очередь перед началом своей установки, и если там не пусто, отказываются от установки вообще. Совсем как старшие братья - Internet Explorer 6 и .NET Framework.
Таким образом, полная автоматическая установка обновлений для Internet Explorer в одном пакете с заплатками на Windows становится нереальной, ибо ни ручное описание последовательности, ни Qchain не спасают дело: уже июльское обновление Internet Explorer не установится, нарушив после своего неудачного старта pending-цепочку так, что qchain в конце пакетного файла отработает некорректно (мой личный горький опыт), не говоря об остальных обновлениях.
Наконец, давайте разберемся с самой необходимостью наложения заплаток на Internet Explorer. С одной стороны, логично заплатки накладывать в единой последовательности со всеми остальными обновлениями (Windows, DirectX, Media Player, .NET FW), как будто мы проходим быстрыми шагами весь путь от момента выхода сервиспака до наших дней. С другой стороны, как мы убедились, беспрерывно такую цепочку не осуществишь. А теперь ставлю вопрос: а надо ли осуществлять?
Вопрос этот каждый для себя решает сам. Часть пользователей использует в качестве браузера не Internet Explorer, а Mozilla или Opera. Их Internet Explorer находится в том же состоянии, как и в момент простой инсталляции. Часть пользователей при помощи программы XPLite вообще вырезает IE из системы. Поставленный нами вопрос совершенно их не беспокоит. Но что делать пользователям, которые все же используют IE, несмотря на его монстроидальность и проблемность? Ведь хочется работать на самой свежей и красивой IE 6 SP1, а что предустановлено в Windows? В Windows2000 SP4 по умолчанию стоит IE 5. Следовательно, ВСЕ НАКЛАДЫВАЕМЫЕ ЗАПЛАТКИ должны быть рассчитаны на IE 5, и по окончании автоматической установки мы получим беспроблемный IE 5. Нужен ли он нам? Получается, после автоустановки Windows необходимо вручную проинсталлировать IE6 и его SP1, а только потом накладывать заплаты. И где гарантия того, что накладываемая на IE 6 SP1 октябрьская 2004 заплата не заменит случайно старой версией какой-нибудь системный файл, обновленный в январе 2005? Ведь Qchain, как мы убедились, на кумулятивные апдэйты IE не действует.
Гарантии не даст страховой полис. А в Microsoft говорят: хотите без проблем? Переходите на Windows XP SP2, в который уже встроен IE 6 SP2. Только как такой монстр будет тормозить на компьютерах с 128 Мб оперативной памяти, даже представить страшно. А ведь это типичный корпоративный тонкий клиент.
Делая неутешительный вывод из сказанного выше, рекомендую:
- составить список необходимых для вашего Windows и будущего IE обновлений;
- загрузить их с сервера Microsoft;
- определить порядок наложения, исходя из номера бюллетеня (MSXX-YYY);
- автоматически проинсталлировать Windows (как - рассмотрим в следующих статьях);
- вручную установить требуемую версию IE;
- создать несколько пакетных файлов, каждый из которых содержит перечисленные в нужном порядке hotfix Windows за определенный период времени с qchain в конце;
- запускать эти файлы в
следующей последовательности:
- файл с обновлениями Windows;
- кумулятивное обновление IE за этот период;
- перезагрузка.
В завершение хочется сказать, что существует возможность внедрить и IE, и Hotfix в дистрибутив на уровне файловой системы, но это уже тема отдельного большого разговора. А в следующих статьях данного цикла мы рассмотрим формат SIF, способы создания unattended.txt и методы автоустановки.
Ваш дядюшка
хардовик,
Mexicanetz Express,
crowngold.narod.ru
![Версия для печати Версия для печати](https://www.kv.by/sites/all/modules/print/icons/print_icon.png)
Комментарии
2. Хотелось бы узнать поподробнее об интеграции драйверов в дистрибутив ХР, проблемах драйверов без цифровой подписи.
Сам пользуюсь автоматической установкой, еще со времен WIN 2000.
Всем советую вот этот ресурсик:
http://unattended.oszone.net/
хотя и там есть недочеты (в часности с аттоматичестой установкой на рэйдовый винт)
Теперь по существу. WindowsXP обладает мощной системой, не лишенной все же дыр, позволяющих интегрировать драйвера не-WHQL и даже со сбитой CRC (правда, об этом молчат). Во второй части статьи я разберу этот момент.
Далее - по поводу OSZone.ru. Статьи эти успели устареть к настоящему моменту. Дело в том, что патчи после MS04-014 имеют ключ "/integrate", а до -- не имеют. Исходя из этого, нельзя назвать корректно заапдэйченым дистрибутив W2KSP4. Плюс к тому. Если хотфикс накладывался на уровне файловой системы на дистрибутив, то он не будет "светить" в списке установленных обновлений со всеми вытекающими последствиями.
Я занимаюсь unattended-установкой еще с 1998 года (win95OSR2rus), и никогда еще такой корявости, как допускает сейчас WinXP, не встречал. Думаю, в Вистлере будет еще хуже.