wadimus
22-03-2018, 15:25
Универсальный Авто-обновляемый Инсталлятор АОИ, теория Идеальной Сборки (ИС)
концепция ячейки
ячейка - это папка, в которой содержатся некие файлы.
для простого юзера ячейка - черный ящик.
для неё (ячейки) есть два типа воздействия и несколько информационных каналов.
типы воздействия:
- первый: обновление инсталлятора (запуск обновлятора)
- второй: запуск инсталлятора
- обновление инсталлятора (запуск обновлятора):
в каждой ячейке есть файл up.bat или pu.bat (а может и не быть)
его назначение - обновление программ установки из тернета и коррекции версии этих программ
- запуск инсталлятора
это файл ins.bat
его назначение - тихая (возможно) установка программы из файлов в ячейке
файлы для обновления инсталлятора. должен присутствовать только один (или-или):
up.bat - для автообновляемых ячеек!
pu.bat - для обновляемых вручную!
файл для установки инсталлятора:
ins.bat - для автоустановочной ячейки и для установки вручную.
информационные каналы:
- файлы с расширением .txt - текстовые файлы. кодовая страница (кодировка) стандартная 1251.
в информационных каналах содержится вся информация о ячейке.
вот описание всех информационных файлов:
первая группа ячеек (они присутствуют всегда)
name.txt - название ячейки (программы, которая поставится из инсталлятора)
name1.txt - характеристики ячейки: автообновление + автоустановка
version.txt - версия инсталлятора. для автообновляемых инсталляторов заполняется автоматически при обновлении.
date.txt - дата крайнего успешного обновления. если крайнее обновление было неуспешным, то дата не изменяется! при успешном обновлении используется текущая дата.
вторая группа ячеек (присутствие их необязательно, но важно) .. они введены для использования ячейки в сборке программ (для этого используется MInstall)
about.txt - файл описания ячейки (до 600 символов! возможно и больше)
group.txt - группа, к которой принадлежит ячейка (число)
guid.txt - строка для проверки уже установленной программы в системе
icon.ico (или icon.txt) - иконка (или номер иконки) для отображения данной ячейки в списке выбора в сборке
license.txt - число. для показа лицензионности программы. free - лицензия (репак) - или trial (ограничения). если файла нет - программа free!
os.txt - совместимость с системой (на какие системы можно поставить инсталлятор). если файла нет - инсталлятор можно поставить на все системы!
все текстовые файлы однострочные! в процессе дальнейшего использования ячеек в сборке используются только первые строки этих файлов.
разберём подробнее информационные потоки.
name.txt - название ячейки
следует отличать название каталога (папки), в которой расположена данная ячейка и название этой ячейки.
для избежания проблемм названия всех папок желательно делать только англ.буквами, цыфрами, без русских или иных национальных символов.
а вот название ячейки (содержимое файла name.txt) может быть любым.
name1.txt - характеристики ячейки
ячейка предназначена для двух задач: обновление и/или установки.
обновление ячейки бывает автоматическое (запуском обновлятора) или неавтоматическое (для обновления нужны некие усилия)
установка инсталлятора из ячейки тоже бывает автоматическое (запуск дистрибутива с ключами) или неавтоматичесое (установка требует ручное действие)
в файле name1.txt записано 2-хзначное число, которое и показывает эти характеристики данной ячейки.
возможные комбинации такие:
11 - ячейку можно автоматически обновить и автоматически инсталлировать. это самый благоприятный вариант!
10 - ячейку можно автоматически обновить, но для установки инсталлятора требуется ручное воздействие (как вариант нажатие кнопок Далее-Далее .. -Конец)
01 - ячейка не автообновляемая, но установка инсталлятора автоматическое. как вариант это репаки.
00 - ячейку надо обновлять и устанавливать инсталляторы вручную.
version.txt - версия инсталлятора
используется первая строка! версия определяется (для автообновляемых ячеек) автоматически, как она (версия) прописана на офсайтах данного инсталлятора.
date.txt - дата успешного обновления
в файле содержится дата, когда данная ячейка успешно обновилась. форма даты (для русской версии Win) такой: ДД.ММ.ГОД (15.03.2018)
при дальнейшем использовании в сборках показ даты без года (15.03) для упрощения вывода
group.txt - группа, к которой принадлежит ячейка (число)
группирование (каталогизация, тегирование) ячейки очень важна!
в ячейке содержится инсталлятор, который можно группировать по разл.критериям.
например ячейка Mozilla Firefox (в ней содержится инсталлятор, что устанавливает браузер Mozilla Firefox в систему)
тегирование может быть таким: интернет, браузеры
все возможные и нужные теги пронумерованы.
есть файл All-Group.txt (он расположен в корне сборки .. вернее в корне папки, где расположены все ячейки, которые представляют собой сборку)
содержимое файла All-Group.txt такое (я использовал свою сборку всех браузеров):
[Group]
0=- неправильная группа-
1=-- Браузеры на основе Firefox
2=-- Браузеры на основе Chromium
3=-- Браузеры на основе Internet Explorer
4=-- Комбо-Браузеры (много-движковые)
...
99=-- Выход / Перезагрузка
и в каждой ячейке, что составляют мою сборку, есть файл group.txt
вот он такой для ячейки Waterfox Browser (его содержимое):
1
если файла group.txt нет, то группа считается нулевой (0)
тогда при создании сборки такие ячейки будут выделятся в группу - неправильная группа-
изначально в ячейках нет тегирования. задача группирования - это проблема пользователя!
причина: просто я не хочу навязывать своё вИдение группирования.
диапазон числа 0 - 99 (99 - для выхода)
в моих готовых сборках тегирование есть!
icon.ico (или icon.txt)
для визуального представления списка ячеек в сборке желательно использовать иконки. MInstall (как оболочка) использует иконки размером 32х32
для удобства вместо файла icon.ico можно использовать файл icon.txt
в файле icon.txt содержится число х (> или < 0). MInstall использует для коллекции иконок два файла (dll-1.dll и dll-2.dll)
расположение этих файлов от файла MInstall.exe такое:
\profiles\Icons\
число х (к примеру 234 - используем номер иконки 234 из файла dll-1.dll) (-87 - используем номер иконки 87 из файла dll-2.dll)
Важно!
файл icon.ico важнее! если в ячейке есть кроме файла icon.ico текстовый файл icon.txt - то будет использоваться иконка icon.ico!
если таких файлов нет - будет подставляться первая иконка из файла dll-1.dll
about.txt - файл описания ячейки
описание ячейки, краткое описание программы, что поставится при установки инсталлятора.
используется только одна строка! если необходимо вывести информацию на сл.строке, используем символ |
длина строки ограничена. предел 500-600 символов.
файлы guid.txt license.txt os.txt не рассматриваются. см. описание программы MInstall, там эти файлы подробно описаны.
файл alarm.txt - это маркер успешности ячейки
понятие успешности
ячейка обновляется из тернета. если содержащийся в ячейке инсталлятор обновился, то маркера alarm.txt в ячейке нет!
успех - это состояние ячейки. в успешной ячейке есть инсталлятор, файл версии и файл даты обновления.
неуспешная ячейка - в ней есть те же данные, но возможно старые и в процессе обновления (инсталлятора) были проблемы.
еще важное понятие: живая-мертвая ячейка.
ячейка живая. периодически появляются обновление софтов. с помощью обновление инсталлятора (запуск обновлятора) мы можем обновить инсталлятор и обновить файл версии.
это живая ячейка .. иногда она обновляется.
ячейка мертвая. в ней содержится инсталлятор уже необновляемой программы. к примеру Winamp .. Google Chrome для WinXp .. Ms .NET Framework 4.6.2 ..
обновить мертвую ячейку можно. но получим те же данные! она не изменится!
концепция Идеальной Сборки
сборка - это интегратор + Мастер автоустановки приложений (MInstAll) + ячейки
интегратор (файл start.exe):
управляющий сборкой. с помощью него можно перестроить сборку (собрать MInstAll) в различных режимах (фазах) и также запустить MInstAll
на одном уровне с файлом start.exe есть файл start.ini - он текстовый, для управления интегратором.
папка Scripts - в ней скрипты для управления, вывода, создания фаз (режимов сборки)
папка ToolZ - фазо-создатели (bat-файлы). исполняемые файлы (текстовые, можно править и корректировать)
Фазы - режимы перестройки сборки. пока фазы 2. сборка 2-хфазная!
первая фаза: собрать сборку в режиме установка
вторая фаза: собрать сборку в режиме обновления
!!
третья фаза Обновление необновляемых инсталляторов пока разрабатывается.
!!
смысл фаз. сборка динамичная, ячейки, которые составляют сборку, могут в любой момент обновиться и/или инсталлироваться.
при обновлении ячейки может изменится версия инсталлятора в ячейке, могут возникнуть ошибки при обновлении.
а Мастер автоустановки приложений (MInstAll) требует при работе статичные файлы профилей.
поэтому после обновления ячеек требуется перестройка профилей (пересборка)
интегратор взял отсюда:
http://azjio.ucoz.ru/
Мастер автоустановки приложений (MInstAll):
взял отсюда:
http://forum.oszone.net/thread-265582.html
Ячейки:
ячейки, которые содержит наша сборка, расположены в определенном месте.
обычно (можно менять) это папка Install
которая расположена на одном уровне с интегратором
в папке Install расположены ячейки в виде папок и есть еще один файл:
All-Group.txt
в этом файле прописаны строки для группирования сборки
Итак, структура Идеальной Сборки:
start.exe - файл интегратора
start.ini - файл управления интегратором
далее на одном уровне папки:
Install - папка, где расположены ячейки
MInstall - Мастер автоустановки приложений
Scripts - папка скриптов и прочих файлов для создания фаз
ToolZ - папка фазо-создателей
Обновлятор
рассмотрим только авто-обновляемые ячейки.
в каждой ячейке есть файл up.bat (а может и не быть). его назначение - обновление программ установки из тернета и коррекции версии этих программ
файл up.bat - текстовый, его можно просмотреть или откорректировать в простом блокноте.
сам файл шаблонизирован и сделан блоками.
рассмотрим блоки:
- блок определения переменных
переменные используются одни и те же.
переменная прямой ссылки на файл, переменная названия файла, который будет сохранятся (это наш дистрибутив)
переменная донора (исходной веб-страницы), где расположена ссылки на нужные файлы
переменная парсинговых выражений
переменная версии
аналогичных переменных может быть несколько.
- блок парсинга (если он нужен). при парсинге из переменных создается текстовый файл (он мусорный, потом будут удален), в котором расположены нужные ссылки.
- блок анализа из подготовленного текстового файла выделяются в переменные прямые ссылки на скачиваемые файлы.
- блок скачивания файлов из подготовленных переменных (файлы скачиваются в названия по переменным). возможно скачивание 1, 2 или более файлов. например отдельно дистрибутив для х86 и отдельно для х64
- блок анализа (верификации) для определения версии дистрибутива. версия определяется или по версии уже скачанного файла или берется из результатов парсинга.
- блок записи файлов в ячейку создание файлов version.txt и date.txt
- блок чистки от мусорных файлов
пример.
рассматриваю ячейки из своей сборки Все Браузеры
Mozilla Firefox
(в сборке 2-е ячейки для получения дистрибутива. первая - официальная. вторая - получение инсталлятора по FTP)
подробнее рассмотрим первый способ.
есть прямые ссылки для скачивания, которые мы будем использовать.
- блок переменных
переменные названий готовых файлов:
set "w1=Firefox-Setup-x86.exe"
set "w2=Firefox-Setup-x64.exe"
переменные прямых ссылок:
set "g1=http://download.mozilla.org/?product=firefox-latest&os=win&lang=ru"
set "g2=http://download.mozilla.org/?product=firefox-latest&os=win64&lang=ru"
сразу переходим на блок скачивания файлов
предварительно перед началом процесса создаем файл alarm.txt
это символ неуспеха процесса обновления. если процесс обновления будет успешен, то в конце этот файл удалится.
если же будут проблемы со скачиванием или мы сами прекратим процесс, то этот файл останется!
скачивание идет не сразу!
расcчитываем размер файла переменной %w1% (Firefox-Setup-x86.exe).
если мы уже его скачивали (то есть в ячейке уже находится инсталлятор и мы хотим обновить ячейку), вычисляем его размер и заносим в переменную %fsize%
если файла нет, в переменную %fsize% пишем 0
далее вычисляем размер дистрибутива (по прямой ссылке из переменной %g1%) напрямую из тернета, без скачивания самого дистрибутива!
число (размер файла) заносим в переменную %nsize%
сравниваем переменные %fsize% и %nsize%
если они одинаковые, то наш инсталлятор (или первый дистрибутив) одинаков с расположенным в тернете! и его скачивать не надо!
если есть отличия, то дистрибутив изменился. качаем его.
скачивание идет не напрямую в файл переменной %w1%, а в промежуточный файл %w1%.~ (Firefox-Setup-x86.exe.~)
файл скачался, проверяем его по размеру.
если размер равен 0, то в процессе скачивания произошли ошибки (отсутствие тернета, недоступность файла, возможно сами прервали скачивание), тогда просто переходим на блок чистки и выход.
размер не равен 0, скачивание успешное, переименовываем промежуточный файл в нужный %w1% (Firefox-Setup-x86.exe).
если инсталлятор состоит из нескольких дистрибутивов (Firefox-Setup-x64.exe), выполняем еще раз блок скачивания
но используем другую пару переменных %g2% и %w2%
блок верификации (определение версии инсталлятора)
зачастую версия вычисляется из уже готовых дистрибутивов используя определенный файл от мелкософта.
но для мозилл такой способ не годится!
версию вычисляем блоком верификации, используя определенный файл напрямую определяя версию из тернета.
далее выполняем блок записи файлов в ячейку (заносим переменные версии и даты в нужные файлы.)
убираем маркер успешности alarm.txt
выполняем блок чистки от мусорных файлов
всё!
обновлятор в ячейке отработал.
поменялись ли дистрибутивы (инсталлятор) в этой ячейке?
смотрим версию и дату обновления.
сама ячейка визуально не изменилась. файлы одни и те же. стал новее инсталлятор - это хорошо :)
даже если в процессе обновления произошли ошибки (остался файл alarm.txt), то предыдущие файлы дистрибутивов остались!
Инсталлятор
файл ins.bat
его назначение - тихая (возможно) установка программы из файлов в ячейке.
в ячейке есть файл name1.txt - характеристики ячейки: автообновление + автоустановка
если вторая цЫфра в 2-х-значном числе равна 1 (11 или 01), то эту ячейку можно инсталлировать тихо с ключами.
красота концепции ячейки: дистрибутивы (инсталлятор) скачиваются из тернета в независимости от названия файлов, расположенных на офсайте!
поэтому содержимое ячеек (число и название файлов) неизменно! могут появляться мусорные файлы, которые леххко удалить.
пример.
Mozilla Firefox
прямая ссылка:
http://download.mozilla.org/?product=firefox-latest&os=win&lang=ru
если скормить эту ссылку любому качальщику или вставить её в браузере, то пойдет скачивание дистрибутива.
на 18.03.18 будет предлагаться сохранить такой файл: Firefox Setup 59.0.1.exe
мы же его сохраняем под определённым именем! и это имя неизменно!
Firefox-Setup-x86.exe
в файле version.txt (при успешном обновлении ячейки, т.е. запуска обновлятора) будет записана строка: 59.0.1
неизменность имён дистрибутивов при любом действии обновлятора приводит к упрощению работы инсталлятора.
в файле ins.bat в кодировке 866 приведены строки, которые тихо устанавливают Mozilla Firefox:
if defined ProgramW6432 (
set file=Firefox-Setup-x64.exe
) else (
set file=Firefox-Setup-x86.exe
)
start /wait %file% -ms -ira
и тут также существуют блоки и переменные.
- блок определения переменной %file% дистрибутива для установки:
if defined ProgramW6432 (
set file=Firefox-Setup-x64.exe
) else (
set file=Firefox-Setup-x86.exe
)
- блок авто-установки нужного дистрибутива из переменной:
start /wait %file% -ms -ira
некоторые инсталляторы не позволяют установить дистрибутивы тихо с ключами.
пример. (использую ту же сборку Всех Браузеров)
QQBrowser
файл ins.bat такой:
start /wait QQBrowser_Setup.exe
и в файле name1.txt этой ячейки число такое:
10
т.е. обновляем эту ячейку автоматически, а устанавливаем руками
Изоляция ячеек
ячейка - независима от иных папок. убрав любую ячейку и перестроив сборку (выполнив фазы пересборки), мы удалим любые следы упоминания об этой ячейки!
аналогично, добавив ячейку и перефазировав сборку - у нас появится еще одна программа для установки-обновления (если такие возможности есть в этой ячейке)
главная проблема для пользователя: группирование новых ячеек! контролируйте содержимое файла group.txt в такой ячейке.
если такого файла не будет, то ячейка при фазировании попадет в неправильную группу.
в файле All-Group.txt перечислены наши группы. выберите нужную группу (или добавьте строку, содержащую новую группу и число)
и потом в новой ячейке исправьте или введите нужное число в файле group.txt
в папке есть только один файл инсталлятора ins.bat, что подразумевает одно действие при установке.
а как же быть, если возможно установить один и тот же инсталлятор разными путями, используя другие ключи установки.
пример.
ячейка Comodo Internet Security (CIS) 10
допустим, это папка с названием CIS10 (Full)
в ней содержится обновлятор up.bat, который может обновить дистрибутивы cis_setup_x86.msi и cis_setup_x64.msi
и в ней содержится инсталлятор ins.bat, который может установить полную версию Comodo Internet Security:
if defined ProgramW6432 (
set file=cis_setup_x64.msi
) else (
set file=cis_setup_x86.msi
)
start /wait msiexec.exe /i %file% /qn REBOOT=ReallySuppress CIS_LANGUAGE_ID=1049 SETOURDNSSERVER=2
а как же быть с возможностью установки Comodo Firewall (CF) 10 из тех же дистрибутивов?
решение:
создаем рядом еще одну ячейку. название папки CIS10 (CF)
в этой ячейки нет обновлятора (файла up.bat)
поэтому эта ячейка не будет учитываться в фазе: собрать сборку в режиме обновления
но, т.к. есть инсталлятор (файл ins.bat), то эта ячейка будет учитываться в фазе: собрать сборку в режиме установка
файл ins.bat в этой ячейке CIS10 (CF) такой:
set where=CIS10 (Full)
if defined ProgramW6432 (
set file=cis_setup_x64.msi
) else (
set file=cis_setup_x86.msi
)
start /wait "" msiexec.exe /i "%where%\%file%" /qn REBOOT=ReallySuppress CIS_LANGUAGE_ID=1049 INSTALLANTIVIRUS=0 SETOURDNSSERVER=2
Reg Add "HKLM\SYSTEM\software\Comodo\Firewall Pro\Configurations\2\HIPS\Settings\" /v "Mode" /t "REG_DWORD" /d "0x018ee7fe" /f
т.е. опустимся на уровень ниже, зайдем в папку, которая описана переменной %where% (это папка CIS10 (Full)) и там запустим с ключами нужный файл из переменной %file%
ячейка CIS10 (CF) взаимо-зависима от ячейки CIS10 (Full)
и т.к. в ней нет обновлятора (файла up.bat), то версия этой ячейки не изменится. а она и не нужна! можно убрать файл version.txt
при фазировании (фаза: собрать сборку в режиме установка) вместо отсутствующих файлах будет подставляться пробел.
остальные файлы нужны!
Утилиты и папка Scripts
для работы обновлятора (файла up.bat или pu.bat) нужны некоторые файлы (утилиты), к примеру: скачать файл по ссылке, проверить его размер по ссылке, утилиты для ускорения скачивания, утилита верификации
держать такие файлы в каждой ячейке неразумно. поэтому все они собраты и размещены в отдельной папке.
эта папка Scripts
расположение её рядом с нашими ячейками, что составляют сборку.
эта папка должна быть! иначе многие блоки в обновляторах ячеек не сработают.
вызов таких утилит из любых ячеек таков:
к примеру, скачать ускорителем промежуточный файл, что определён переменной %w1% по ссылке, которая определена переменной %g1%
"%~dp0..\Scripts\axel.exe" "%g1%" -a -n 8 -o "%~dp0%w1%.~"
файл axel.exe берется так:
- спустились на уровень ниже ячейки (..\) т.е. это корневая папка где расположены все наши ячейки
- и запустили файл axel.exe из ячейки Scripts\
перечислю утилиты, что содержатся в ячейке Scripts (тоже считаем эту папку ячейкой, но в ней нет ни обновлятора ни инсталлятора, поэтому при обработки фаз эта ячейка будет игнорироваться)
замечу, что в папке, где содержатся ячейки, которые составляют нашу сборку, могут присутствовать любые папки и файлы.
если в таких папках нет файлов up.bat или pu.bat и ins.bat - то они не учавствуют в фазах!
wget.exe - главный файл для получения файлов из тернета. в папке присутствует в двух видах: wget-x86.exe и wget-x64.exe (по умолчанию используется х86 вариант)
axel.exe (+ cygwin1.dll) - ускоритель скачивания. используется вместо wget.exe. реально ускоряет получения нужных файлов. некоторые сайты не поддерживают такой вид скачивания. в таком случае используем старый и медленный wget.exe
http2cli.exe - утилита получения парсенных страниц
netsize.exe - утилита получения размера скачиваемого файла без его реального скачивания.
dl.exe - утилита для скачивания файлов, используется для получения версии качаемого файла без его реального скачивания.
filever.exe - утилита получения версии реального (скачанного) файла. не работает на некоторых файлах (мозилло-подобных браузерах к примеру)
7z.exe (+ 7z.dll) - утилита разархивирования некоторых файлов. есть часть дистрибутивов, которые распространяются в архивном виде. в ячейках дистрибутивы уже готовые для инсталляции. поэтому в некоторых ячейках после скачивания нужных файлов, они распаковываются.
AkelPad.exe (AkelPad.ini) - небольшой текстовый редактор для показа текстовых файлов.
aria2c.exe - комбайн. большой и мощный. пока в ячейках не использую. но пусть будет!
файлы http2cli.exe netsize.exe и dl.exe взял отсюда:
http://dzzb.ru/blog/http2cli
http://dzzb.ru/blog/2pomogators
остальные взяты на просторах тернета
концепция ячейки
ячейка - это папка, в которой содержатся некие файлы.
для простого юзера ячейка - черный ящик.
для неё (ячейки) есть два типа воздействия и несколько информационных каналов.
типы воздействия:
- первый: обновление инсталлятора (запуск обновлятора)
- второй: запуск инсталлятора
- обновление инсталлятора (запуск обновлятора):
в каждой ячейке есть файл up.bat или pu.bat (а может и не быть)
его назначение - обновление программ установки из тернета и коррекции версии этих программ
- запуск инсталлятора
это файл ins.bat
его назначение - тихая (возможно) установка программы из файлов в ячейке
файлы для обновления инсталлятора. должен присутствовать только один (или-или):
up.bat - для автообновляемых ячеек!
pu.bat - для обновляемых вручную!
файл для установки инсталлятора:
ins.bat - для автоустановочной ячейки и для установки вручную.
информационные каналы:
- файлы с расширением .txt - текстовые файлы. кодовая страница (кодировка) стандартная 1251.
в информационных каналах содержится вся информация о ячейке.
вот описание всех информационных файлов:
первая группа ячеек (они присутствуют всегда)
name.txt - название ячейки (программы, которая поставится из инсталлятора)
name1.txt - характеристики ячейки: автообновление + автоустановка
version.txt - версия инсталлятора. для автообновляемых инсталляторов заполняется автоматически при обновлении.
date.txt - дата крайнего успешного обновления. если крайнее обновление было неуспешным, то дата не изменяется! при успешном обновлении используется текущая дата.
вторая группа ячеек (присутствие их необязательно, но важно) .. они введены для использования ячейки в сборке программ (для этого используется MInstall)
about.txt - файл описания ячейки (до 600 символов! возможно и больше)
group.txt - группа, к которой принадлежит ячейка (число)
guid.txt - строка для проверки уже установленной программы в системе
icon.ico (или icon.txt) - иконка (или номер иконки) для отображения данной ячейки в списке выбора в сборке
license.txt - число. для показа лицензионности программы. free - лицензия (репак) - или trial (ограничения). если файла нет - программа free!
os.txt - совместимость с системой (на какие системы можно поставить инсталлятор). если файла нет - инсталлятор можно поставить на все системы!
все текстовые файлы однострочные! в процессе дальнейшего использования ячеек в сборке используются только первые строки этих файлов.
разберём подробнее информационные потоки.
name.txt - название ячейки
следует отличать название каталога (папки), в которой расположена данная ячейка и название этой ячейки.
для избежания проблемм названия всех папок желательно делать только англ.буквами, цыфрами, без русских или иных национальных символов.
а вот название ячейки (содержимое файла name.txt) может быть любым.
name1.txt - характеристики ячейки
ячейка предназначена для двух задач: обновление и/или установки.
обновление ячейки бывает автоматическое (запуском обновлятора) или неавтоматическое (для обновления нужны некие усилия)
установка инсталлятора из ячейки тоже бывает автоматическое (запуск дистрибутива с ключами) или неавтоматичесое (установка требует ручное действие)
в файле name1.txt записано 2-хзначное число, которое и показывает эти характеристики данной ячейки.
возможные комбинации такие:
11 - ячейку можно автоматически обновить и автоматически инсталлировать. это самый благоприятный вариант!
10 - ячейку можно автоматически обновить, но для установки инсталлятора требуется ручное воздействие (как вариант нажатие кнопок Далее-Далее .. -Конец)
01 - ячейка не автообновляемая, но установка инсталлятора автоматическое. как вариант это репаки.
00 - ячейку надо обновлять и устанавливать инсталляторы вручную.
version.txt - версия инсталлятора
используется первая строка! версия определяется (для автообновляемых ячеек) автоматически, как она (версия) прописана на офсайтах данного инсталлятора.
date.txt - дата успешного обновления
в файле содержится дата, когда данная ячейка успешно обновилась. форма даты (для русской версии Win) такой: ДД.ММ.ГОД (15.03.2018)
при дальнейшем использовании в сборках показ даты без года (15.03) для упрощения вывода
group.txt - группа, к которой принадлежит ячейка (число)
группирование (каталогизация, тегирование) ячейки очень важна!
в ячейке содержится инсталлятор, который можно группировать по разл.критериям.
например ячейка Mozilla Firefox (в ней содержится инсталлятор, что устанавливает браузер Mozilla Firefox в систему)
тегирование может быть таким: интернет, браузеры
все возможные и нужные теги пронумерованы.
есть файл All-Group.txt (он расположен в корне сборки .. вернее в корне папки, где расположены все ячейки, которые представляют собой сборку)
содержимое файла All-Group.txt такое (я использовал свою сборку всех браузеров):
[Group]
0=- неправильная группа-
1=-- Браузеры на основе Firefox
2=-- Браузеры на основе Chromium
3=-- Браузеры на основе Internet Explorer
4=-- Комбо-Браузеры (много-движковые)
...
99=-- Выход / Перезагрузка
и в каждой ячейке, что составляют мою сборку, есть файл group.txt
вот он такой для ячейки Waterfox Browser (его содержимое):
1
если файла group.txt нет, то группа считается нулевой (0)
тогда при создании сборки такие ячейки будут выделятся в группу - неправильная группа-
изначально в ячейках нет тегирования. задача группирования - это проблема пользователя!
причина: просто я не хочу навязывать своё вИдение группирования.
диапазон числа 0 - 99 (99 - для выхода)
в моих готовых сборках тегирование есть!
icon.ico (или icon.txt)
для визуального представления списка ячеек в сборке желательно использовать иконки. MInstall (как оболочка) использует иконки размером 32х32
для удобства вместо файла icon.ico можно использовать файл icon.txt
в файле icon.txt содержится число х (> или < 0). MInstall использует для коллекции иконок два файла (dll-1.dll и dll-2.dll)
расположение этих файлов от файла MInstall.exe такое:
\profiles\Icons\
число х (к примеру 234 - используем номер иконки 234 из файла dll-1.dll) (-87 - используем номер иконки 87 из файла dll-2.dll)
Важно!
файл icon.ico важнее! если в ячейке есть кроме файла icon.ico текстовый файл icon.txt - то будет использоваться иконка icon.ico!
если таких файлов нет - будет подставляться первая иконка из файла dll-1.dll
about.txt - файл описания ячейки
описание ячейки, краткое описание программы, что поставится при установки инсталлятора.
используется только одна строка! если необходимо вывести информацию на сл.строке, используем символ |
длина строки ограничена. предел 500-600 символов.
файлы guid.txt license.txt os.txt не рассматриваются. см. описание программы MInstall, там эти файлы подробно описаны.
файл alarm.txt - это маркер успешности ячейки
понятие успешности
ячейка обновляется из тернета. если содержащийся в ячейке инсталлятор обновился, то маркера alarm.txt в ячейке нет!
успех - это состояние ячейки. в успешной ячейке есть инсталлятор, файл версии и файл даты обновления.
неуспешная ячейка - в ней есть те же данные, но возможно старые и в процессе обновления (инсталлятора) были проблемы.
еще важное понятие: живая-мертвая ячейка.
ячейка живая. периодически появляются обновление софтов. с помощью обновление инсталлятора (запуск обновлятора) мы можем обновить инсталлятор и обновить файл версии.
это живая ячейка .. иногда она обновляется.
ячейка мертвая. в ней содержится инсталлятор уже необновляемой программы. к примеру Winamp .. Google Chrome для WinXp .. Ms .NET Framework 4.6.2 ..
обновить мертвую ячейку можно. но получим те же данные! она не изменится!
концепция Идеальной Сборки
сборка - это интегратор + Мастер автоустановки приложений (MInstAll) + ячейки
интегратор (файл start.exe):
управляющий сборкой. с помощью него можно перестроить сборку (собрать MInstAll) в различных режимах (фазах) и также запустить MInstAll
на одном уровне с файлом start.exe есть файл start.ini - он текстовый, для управления интегратором.
папка Scripts - в ней скрипты для управления, вывода, создания фаз (режимов сборки)
папка ToolZ - фазо-создатели (bat-файлы). исполняемые файлы (текстовые, можно править и корректировать)
Фазы - режимы перестройки сборки. пока фазы 2. сборка 2-хфазная!
первая фаза: собрать сборку в режиме установка
вторая фаза: собрать сборку в режиме обновления
!!
третья фаза Обновление необновляемых инсталляторов пока разрабатывается.
!!
смысл фаз. сборка динамичная, ячейки, которые составляют сборку, могут в любой момент обновиться и/или инсталлироваться.
при обновлении ячейки может изменится версия инсталлятора в ячейке, могут возникнуть ошибки при обновлении.
а Мастер автоустановки приложений (MInstAll) требует при работе статичные файлы профилей.
поэтому после обновления ячеек требуется перестройка профилей (пересборка)
интегратор взял отсюда:
http://azjio.ucoz.ru/
Мастер автоустановки приложений (MInstAll):
взял отсюда:
http://forum.oszone.net/thread-265582.html
Ячейки:
ячейки, которые содержит наша сборка, расположены в определенном месте.
обычно (можно менять) это папка Install
которая расположена на одном уровне с интегратором
в папке Install расположены ячейки в виде папок и есть еще один файл:
All-Group.txt
в этом файле прописаны строки для группирования сборки
Итак, структура Идеальной Сборки:
start.exe - файл интегратора
start.ini - файл управления интегратором
далее на одном уровне папки:
Install - папка, где расположены ячейки
MInstall - Мастер автоустановки приложений
Scripts - папка скриптов и прочих файлов для создания фаз
ToolZ - папка фазо-создателей
Обновлятор
рассмотрим только авто-обновляемые ячейки.
в каждой ячейке есть файл up.bat (а может и не быть). его назначение - обновление программ установки из тернета и коррекции версии этих программ
файл up.bat - текстовый, его можно просмотреть или откорректировать в простом блокноте.
сам файл шаблонизирован и сделан блоками.
рассмотрим блоки:
- блок определения переменных
переменные используются одни и те же.
переменная прямой ссылки на файл, переменная названия файла, который будет сохранятся (это наш дистрибутив)
переменная донора (исходной веб-страницы), где расположена ссылки на нужные файлы
переменная парсинговых выражений
переменная версии
аналогичных переменных может быть несколько.
- блок парсинга (если он нужен). при парсинге из переменных создается текстовый файл (он мусорный, потом будут удален), в котором расположены нужные ссылки.
- блок анализа из подготовленного текстового файла выделяются в переменные прямые ссылки на скачиваемые файлы.
- блок скачивания файлов из подготовленных переменных (файлы скачиваются в названия по переменным). возможно скачивание 1, 2 или более файлов. например отдельно дистрибутив для х86 и отдельно для х64
- блок анализа (верификации) для определения версии дистрибутива. версия определяется или по версии уже скачанного файла или берется из результатов парсинга.
- блок записи файлов в ячейку создание файлов version.txt и date.txt
- блок чистки от мусорных файлов
пример.
рассматриваю ячейки из своей сборки Все Браузеры
Mozilla Firefox
(в сборке 2-е ячейки для получения дистрибутива. первая - официальная. вторая - получение инсталлятора по FTP)
подробнее рассмотрим первый способ.
есть прямые ссылки для скачивания, которые мы будем использовать.
- блок переменных
переменные названий готовых файлов:
set "w1=Firefox-Setup-x86.exe"
set "w2=Firefox-Setup-x64.exe"
переменные прямых ссылок:
set "g1=http://download.mozilla.org/?product=firefox-latest&os=win&lang=ru"
set "g2=http://download.mozilla.org/?product=firefox-latest&os=win64&lang=ru"
сразу переходим на блок скачивания файлов
предварительно перед началом процесса создаем файл alarm.txt
это символ неуспеха процесса обновления. если процесс обновления будет успешен, то в конце этот файл удалится.
если же будут проблемы со скачиванием или мы сами прекратим процесс, то этот файл останется!
скачивание идет не сразу!
расcчитываем размер файла переменной %w1% (Firefox-Setup-x86.exe).
если мы уже его скачивали (то есть в ячейке уже находится инсталлятор и мы хотим обновить ячейку), вычисляем его размер и заносим в переменную %fsize%
если файла нет, в переменную %fsize% пишем 0
далее вычисляем размер дистрибутива (по прямой ссылке из переменной %g1%) напрямую из тернета, без скачивания самого дистрибутива!
число (размер файла) заносим в переменную %nsize%
сравниваем переменные %fsize% и %nsize%
если они одинаковые, то наш инсталлятор (или первый дистрибутив) одинаков с расположенным в тернете! и его скачивать не надо!
если есть отличия, то дистрибутив изменился. качаем его.
скачивание идет не напрямую в файл переменной %w1%, а в промежуточный файл %w1%.~ (Firefox-Setup-x86.exe.~)
файл скачался, проверяем его по размеру.
если размер равен 0, то в процессе скачивания произошли ошибки (отсутствие тернета, недоступность файла, возможно сами прервали скачивание), тогда просто переходим на блок чистки и выход.
размер не равен 0, скачивание успешное, переименовываем промежуточный файл в нужный %w1% (Firefox-Setup-x86.exe).
если инсталлятор состоит из нескольких дистрибутивов (Firefox-Setup-x64.exe), выполняем еще раз блок скачивания
но используем другую пару переменных %g2% и %w2%
блок верификации (определение версии инсталлятора)
зачастую версия вычисляется из уже готовых дистрибутивов используя определенный файл от мелкософта.
но для мозилл такой способ не годится!
версию вычисляем блоком верификации, используя определенный файл напрямую определяя версию из тернета.
далее выполняем блок записи файлов в ячейку (заносим переменные версии и даты в нужные файлы.)
убираем маркер успешности alarm.txt
выполняем блок чистки от мусорных файлов
всё!
обновлятор в ячейке отработал.
поменялись ли дистрибутивы (инсталлятор) в этой ячейке?
смотрим версию и дату обновления.
сама ячейка визуально не изменилась. файлы одни и те же. стал новее инсталлятор - это хорошо :)
даже если в процессе обновления произошли ошибки (остался файл alarm.txt), то предыдущие файлы дистрибутивов остались!
Инсталлятор
файл ins.bat
его назначение - тихая (возможно) установка программы из файлов в ячейке.
в ячейке есть файл name1.txt - характеристики ячейки: автообновление + автоустановка
если вторая цЫфра в 2-х-значном числе равна 1 (11 или 01), то эту ячейку можно инсталлировать тихо с ключами.
красота концепции ячейки: дистрибутивы (инсталлятор) скачиваются из тернета в независимости от названия файлов, расположенных на офсайте!
поэтому содержимое ячеек (число и название файлов) неизменно! могут появляться мусорные файлы, которые леххко удалить.
пример.
Mozilla Firefox
прямая ссылка:
http://download.mozilla.org/?product=firefox-latest&os=win&lang=ru
если скормить эту ссылку любому качальщику или вставить её в браузере, то пойдет скачивание дистрибутива.
на 18.03.18 будет предлагаться сохранить такой файл: Firefox Setup 59.0.1.exe
мы же его сохраняем под определённым именем! и это имя неизменно!
Firefox-Setup-x86.exe
в файле version.txt (при успешном обновлении ячейки, т.е. запуска обновлятора) будет записана строка: 59.0.1
неизменность имён дистрибутивов при любом действии обновлятора приводит к упрощению работы инсталлятора.
в файле ins.bat в кодировке 866 приведены строки, которые тихо устанавливают Mozilla Firefox:
if defined ProgramW6432 (
set file=Firefox-Setup-x64.exe
) else (
set file=Firefox-Setup-x86.exe
)
start /wait %file% -ms -ira
и тут также существуют блоки и переменные.
- блок определения переменной %file% дистрибутива для установки:
if defined ProgramW6432 (
set file=Firefox-Setup-x64.exe
) else (
set file=Firefox-Setup-x86.exe
)
- блок авто-установки нужного дистрибутива из переменной:
start /wait %file% -ms -ira
некоторые инсталляторы не позволяют установить дистрибутивы тихо с ключами.
пример. (использую ту же сборку Всех Браузеров)
QQBrowser
файл ins.bat такой:
start /wait QQBrowser_Setup.exe
и в файле name1.txt этой ячейки число такое:
10
т.е. обновляем эту ячейку автоматически, а устанавливаем руками
Изоляция ячеек
ячейка - независима от иных папок. убрав любую ячейку и перестроив сборку (выполнив фазы пересборки), мы удалим любые следы упоминания об этой ячейки!
аналогично, добавив ячейку и перефазировав сборку - у нас появится еще одна программа для установки-обновления (если такие возможности есть в этой ячейке)
главная проблема для пользователя: группирование новых ячеек! контролируйте содержимое файла group.txt в такой ячейке.
если такого файла не будет, то ячейка при фазировании попадет в неправильную группу.
в файле All-Group.txt перечислены наши группы. выберите нужную группу (или добавьте строку, содержащую новую группу и число)
и потом в новой ячейке исправьте или введите нужное число в файле group.txt
в папке есть только один файл инсталлятора ins.bat, что подразумевает одно действие при установке.
а как же быть, если возможно установить один и тот же инсталлятор разными путями, используя другие ключи установки.
пример.
ячейка Comodo Internet Security (CIS) 10
допустим, это папка с названием CIS10 (Full)
в ней содержится обновлятор up.bat, который может обновить дистрибутивы cis_setup_x86.msi и cis_setup_x64.msi
и в ней содержится инсталлятор ins.bat, который может установить полную версию Comodo Internet Security:
if defined ProgramW6432 (
set file=cis_setup_x64.msi
) else (
set file=cis_setup_x86.msi
)
start /wait msiexec.exe /i %file% /qn REBOOT=ReallySuppress CIS_LANGUAGE_ID=1049 SETOURDNSSERVER=2
а как же быть с возможностью установки Comodo Firewall (CF) 10 из тех же дистрибутивов?
решение:
создаем рядом еще одну ячейку. название папки CIS10 (CF)
в этой ячейки нет обновлятора (файла up.bat)
поэтому эта ячейка не будет учитываться в фазе: собрать сборку в режиме обновления
но, т.к. есть инсталлятор (файл ins.bat), то эта ячейка будет учитываться в фазе: собрать сборку в режиме установка
файл ins.bat в этой ячейке CIS10 (CF) такой:
set where=CIS10 (Full)
if defined ProgramW6432 (
set file=cis_setup_x64.msi
) else (
set file=cis_setup_x86.msi
)
start /wait "" msiexec.exe /i "%where%\%file%" /qn REBOOT=ReallySuppress CIS_LANGUAGE_ID=1049 INSTALLANTIVIRUS=0 SETOURDNSSERVER=2
Reg Add "HKLM\SYSTEM\software\Comodo\Firewall Pro\Configurations\2\HIPS\Settings\" /v "Mode" /t "REG_DWORD" /d "0x018ee7fe" /f
т.е. опустимся на уровень ниже, зайдем в папку, которая описана переменной %where% (это папка CIS10 (Full)) и там запустим с ключами нужный файл из переменной %file%
ячейка CIS10 (CF) взаимо-зависима от ячейки CIS10 (Full)
и т.к. в ней нет обновлятора (файла up.bat), то версия этой ячейки не изменится. а она и не нужна! можно убрать файл version.txt
при фазировании (фаза: собрать сборку в режиме установка) вместо отсутствующих файлах будет подставляться пробел.
остальные файлы нужны!
Утилиты и папка Scripts
для работы обновлятора (файла up.bat или pu.bat) нужны некоторые файлы (утилиты), к примеру: скачать файл по ссылке, проверить его размер по ссылке, утилиты для ускорения скачивания, утилита верификации
держать такие файлы в каждой ячейке неразумно. поэтому все они собраты и размещены в отдельной папке.
эта папка Scripts
расположение её рядом с нашими ячейками, что составляют сборку.
эта папка должна быть! иначе многие блоки в обновляторах ячеек не сработают.
вызов таких утилит из любых ячеек таков:
к примеру, скачать ускорителем промежуточный файл, что определён переменной %w1% по ссылке, которая определена переменной %g1%
"%~dp0..\Scripts\axel.exe" "%g1%" -a -n 8 -o "%~dp0%w1%.~"
файл axel.exe берется так:
- спустились на уровень ниже ячейки (..\) т.е. это корневая папка где расположены все наши ячейки
- и запустили файл axel.exe из ячейки Scripts\
перечислю утилиты, что содержатся в ячейке Scripts (тоже считаем эту папку ячейкой, но в ней нет ни обновлятора ни инсталлятора, поэтому при обработки фаз эта ячейка будет игнорироваться)
замечу, что в папке, где содержатся ячейки, которые составляют нашу сборку, могут присутствовать любые папки и файлы.
если в таких папках нет файлов up.bat или pu.bat и ins.bat - то они не учавствуют в фазах!
wget.exe - главный файл для получения файлов из тернета. в папке присутствует в двух видах: wget-x86.exe и wget-x64.exe (по умолчанию используется х86 вариант)
axel.exe (+ cygwin1.dll) - ускоритель скачивания. используется вместо wget.exe. реально ускоряет получения нужных файлов. некоторые сайты не поддерживают такой вид скачивания. в таком случае используем старый и медленный wget.exe
http2cli.exe - утилита получения парсенных страниц
netsize.exe - утилита получения размера скачиваемого файла без его реального скачивания.
dl.exe - утилита для скачивания файлов, используется для получения версии качаемого файла без его реального скачивания.
filever.exe - утилита получения версии реального (скачанного) файла. не работает на некоторых файлах (мозилло-подобных браузерах к примеру)
7z.exe (+ 7z.dll) - утилита разархивирования некоторых файлов. есть часть дистрибутивов, которые распространяются в архивном виде. в ячейках дистрибутивы уже готовые для инсталляции. поэтому в некоторых ячейках после скачивания нужных файлов, они распаковываются.
AkelPad.exe (AkelPad.ini) - небольшой текстовый редактор для показа текстовых файлов.
aria2c.exe - комбайн. большой и мощный. пока в ячейках не использую. но пусть будет!
файлы http2cli.exe netsize.exe и dl.exe взял отсюда:
http://dzzb.ru/blog/http2cli
http://dzzb.ru/blog/2pomogators
остальные взяты на просторах тернета