Не легкая халява Java
Как сильно я заблуждался, думая, что не коснется меня чаша сия под названием Java. В одной из бородатых книг прошлого века, я вычитал, что название это появилось благодаря юмору разработчиков, пивших по-черному одноименный сорт кофе. Ничего юморнее в те времена в индустрии софта, наверное, не было. Однако до потомков отцам-основателям было ой как далеко! Уровень юмора современных разработчиков я полностью оценил, пытаясь внедрить бесплатный Java Runtime Environment на каждую клиентскую машину компании.
Что такое развертывание ПО в корпоративной среде? – Это максимальная автоматизация процесса плюс отшибание всего лишнего типа автообновления, назойливых окон с лицензионным соглашением и т.п. И не смотря на весь свист в свое время про огромную пользу технологии Java для организаций, у нынешних разработчиков отлично получается превратить внедрение Java в энтерпрайзе в захватывающее приключение. На протяжении какого-то десятка релизов до актуального на момент написания статьи JavaRE 1.6 update 21 я вдоволь наелся проблем с отключением автообновлений. Авторы, петляя как зайцы, запутывали дублированием и перепрятывали эти настройки и в конфигурационные файлы, и в реестр, то в машинную, то в пользовательскую ветку. Буквально с каждым релизом необходимо было держать ухо востро и воспринимать его как абсолютно новое ПО.
Я честно пытался понять, что происходит в системе и мониторил изменения с помощью regmon.exe, filemon.exe и procmon.exe. В результате меня стало преследовать ощущение, что я не пью столько одноименного кофе, чтобы разобраться в играх разума разработчиков. И не я один, если судить по количеству и качеству постов о внедрении JavaRE на сайте appdeploy.com - .
Но обо всем по порядку. Начинается все с инсталляционного пакета. При входе на для установки Java сразу же предлагается большая красная кнопка. Это не то, что надо! При нажатии на нее происходит загрузка и запуск веб-установщика. Дистрибутив автономной установки jre-6u21-windows-i586-s.exe скачивается со страницы . При его запуске уже на самом первом экрана мастера
утилита procexp.exe показывает, что дистрибутив является контейнером, из которого распаковывался MSI-пакет и стартовала его установка с помощью msiexec и команды астрономической длины:
“C:\WINDOWS\system32\msiexec.exe” /i “C:\Documents and Settings\admin\Application Data\Sun\Java\jre1.6.0_21\jre1.6.0_21.msi” TRANSFORMS=”C:\Documents and Settings\admin\Application Data\Sun\Java\jre1.6.0_21\sp1033.MST” PREFERENCEORDER=SP8;SP1;SP4 ED=0 SP2OFF=1 SP3OFF=1 SP5OFF=1 SP6OFF=1 SP7OFF=1 SP9OFF=1 SP10OFF=1 MSDIR=ms5 SPWEB=http://javadl-esd.sun.com/update/1.6.0/sp-1.6.0_21-b07 COUNTRY=RU METHOD=joff-s
Перейдя в каталог с MSI-файлом, указанный в графе “Command Line”, нужно скопировать в отдельную папку все его содержимое.
После чего нажать “Cancel” и прекратить инсталляцию.
Имея на руках MSI-дистрибутив, можно уже планировать развертывание ПО с помощью штатных методов групповой политики, а необходимую донастройку выполнить в Orca, создав отдельный трансформ-файл.
В таблице Property принимаем лицензионное соглашение, отключаем иконку в области системных часов и сбрасываем 3 параметра (чего еще недостаточно), отвечающие за автообновление:
В таблице Registry отключаем иконку и продолжаем бороться с автообновлением в соответствии с опытом, изложенным в
В той же теме засветился ключ реестра, запускающий процедуру автообновления. От него избавляемся, добавляя строку в таблицу RemoveRegistry
Может быть, самый железный метод отключения автообновления описан в Deployment Configuration File and Properties - . В соответствии с ним создаем пару текстовых конфигурационных файлов загадочного синтаксиса:
deployment.config:
deployment.system.config=file\:C\:/WINDOWS/Sun/Java/Deployment/deployment.properties
deployment.properties:
deployment.javaws.autodownload=NEVER
deployment.javaws.autodownload.locked
Утилитой cabarc.exe из CabSDK пакуем оба файла в CAB-архив Data2.cab:
cabarc.exe N Data2.cab deployment.config deployment.properties
Теперь нужно задать их установку в папку C:\WINDOWS\Sun\Java\Deployment. Для этого в таблице Directory описывается структура каталогов:
В таблицу Component необходимо добавить новую запись, с которой можно связать каталог файловой системы, куда будут установлены файлы:
Самостоятельно выдумывать ComponentId не требуется, достаточно добавить строку без него, а затем через контекстное меню попросить Orc-у сгенерировать GUID в этом поле:
Через таблицу FeatureComponents созданную нами компоненту необходимо связать с устанавливаемыми “фичами”. В великом и могучем этот термин звучит не менее забавно - “возможность”. А по сути он описывает древовидную структуру в интерфейсе инсталлятора, где пользователь для каждого элемента может выбрать “Устанавливать”, “Не устанавливать”, “Установить при первом запуске” и т.п.
Сами файлы описываем в таблице File:
И в таблицу Media добавляем дополнительный источник, содержащий эти 2 файла:
Остался дембельский аккорд – отключение паразитной службы-ускорителя JQS (Java Quick Starter). Связанный с ней исполняемый модуль в числе прочих поддерживает ключ –unregister.
Добавляем запуск приложения в таблицу CustomAction:
Задаем краткое описание процедуры:
Согласно хронометражу установки действие InstallFinalize выполняется в момент времени 6600, сразу после него планируем удаление JQS:
Сохраняем трансформ под именем config.mst
Копируем в сетевую папку все файлы дистрибутива (jre1.6.0_21.msi, Data1.cab, gtapi.dll, lzma.dll, sp1033.mst) и добавляем туда же созданные нами Data2.cab и config.mst
В машинной ветке групповой политики назначаем установку MSI-пакета и указываем 2 трансформа: sp1033.mst и config.mst
При апгрейде версии метод развертывания – “Особый”, обновление – “Заменить”.
Готовый трансформ в архиве – config.zip и Data2.zip.
Ссылки:
Домашняя страница Java -
Deployment Configuration File and Properties -
Описание службы Java Quick Starter –
Java Runtime Environment 1.x на Appdeploy -
Microsoft Cabinet Software Development Kit -




















































































