Представляю перспективный способ распространения ПО для Linux без репозиториев - Installer-SH v2.3

Installer-SH это автономный установочный пакет приложений для Linux, в первую очередь предназначен для дистрибутива Chimbalix, однако способен работать и в прочих линуксах, далее речь пойдёт про Installer-SH версии 2.3, актуальная на текущий момент.
реклама
Архив с разными версиями Installer-SH находится в репозитории GitHub, там же находится текущая версия. Самая свежая, и временами нестабильная версия установочного пакета, находится в отдельном репозитории предназначенном для активной разработки. Приложения упакованные в формат Installer-SH можно найти в репозитории Chimbalix-Software-Catalog, там находится софт упакованный в новый формат.
Может в "каталоге" и не идеально упакованные приложения, но я не профессиональный упаковщик, однако разработчик Installer-SH, именно потому делаю "как получается", и уже на основании полученного опыта работаю над новыми версиями установочного пакета.

Изменения в Installer-SH v2.3
реклама
Чистка: Удалён лишний код (рефакторинг), убраны лишние ярлыки помещаемые на рабочем столе, так же были структурированы файлы примеров для более удобного использования.
Тихая установка: Теперь установка действительно тихая, только действительно важные сообщения могут нарушить "тишину" в терминале, что важно при установке множества программ разом.
Контроль над меню: Добавлена настройка позволяющая отключать функции автоматического обновления меню, так же это можно сделать с помощью аргумента -noupdmenu, что полезно при установке множества приложений разом. Настройка была создана по той простой причине, что некоторые линуксы буквально ломались при частом использовании команд предназначенных для обновления меню, но это уже проблемы самих линуксов, я могу только предоставить дополнительный контроль над функционалом.
Так же есть параметр -forcemenu, он только обновляет меню, если это поддерживается рабочим окружением, полезно при пакетной установке приложений, в самом конце запустить один раз, чтобы не выходить из системы для обновления меню приложений. Да, линуксы далеко не всегда умеют обновлять меню приложений после появления новых ярлыков, иначе не было бы таких "костылей".
реклама
Справка: Добавлена новая функция "справки", вызывается параметром -h, -help или --help, в данный момент эта функция не поддерживает локализацию, но это может быть добавлено в следующих версиях Installer-SH, если в этом будет необходимость.
Настройки: Хотя это и не было основной задачей, но на одном форуме нашёлся пользователь с вопросом относительно Installer-SH, однако линуксоиды над ним просто посмеялись, и всё на этом...
https://krinkels.org/threads/installyator-dlya-sredy-linux.5603

реклама
Хотя это и выходит за рамки основного функционала Installer-SH, но я решил предоставить возможность изменения путей установки приложения в основном блоке настроек, но это уже на усмотрение "экспериментаторов", ведь изначально всё настроено согласно стандартам XDG и PortSoft, отклонение от стандартов может быть чревато!
Дополнительные проверки: Если вдруг пользователь установил программу, а она не запускается (случился очередной ад зависимостей), теперь он получит сообщение об ошибке, но только если разработчик/упаковщик правильно собрал приложение с использованием прослойки из комплекта Installer-SH.
Редкие проблемы: Исправлена редкая проблема с правами доступа к файлу для удаления программы, проявлялась эта проблема исключительно в Gentoo 2016 года выпуска. Суть заключалась в том, что после работы утилиты "sed" напрочь слетали все права доступа к файлу, потому были введены дополнительные проверки и автоматические исправления. В других линуксах пока не сталкивался с такой неадекватной работой стандартных утилит, однако "костыль" лишним не будет, это же Linux.
На этом список изменений можно завершить, остальные мелочи уже можно не расписывать.
Ключевые особенности Installer-SH
Теперь перечислим ключевые особенности нового формата распространения программ для Linux.
Отличное сжатие: Реализовано благодаря архиватору 7-Zip и оптимизированным параметрам сжатия, по сравнению с AppImage преимущество может доходить до 80% и больше, в зависимости от конкретного случая и сжимаемых данных, даже по сравнению с DEB/TAR.XZ преимущество может достигать десятка процентов в пользу Installer-SH, в зависимости от конкретного случая и сжимаемых данных.
Автономность и жизнеспособность: В отличие от всевозможных прочих линуксоидных способов распространения софта - Installer-SH изначально подразумевает упаковку программ вместе со всеми зависимостями, я против концепции "основной пакет размером 1 МиБ + десяток зависимостей на 10+ ГиБ", потому пакеты в формате Installer-SH будут жить до тех пор, пока существует хоть одна копия, даже если все репозитории Linux умрут естественным образом, а сеть интернет исчезнет.
Хотя разработчики могут обмазываться зависимостями как хотят, но это уже на их совести и репутации.
Разные версии одного приложения: Установочный пакет предлагает отдельные домашние каталоги для каждого приложения, что исключает большинство конфликтов между файлами конфигурации, когда установлено несколько версий одной программы в системе.
Работа без ROOT прав: Изначально Installer-SH всегда работает в режиме пользователя, и софт устанавливает исключительно для текущего пользователя, потому не нужны административные права для функционирования программ. Хотя и возможно переключение в режим для всех пользователей с root правами, но этот способ не следует использовать, если приложение не было подготовлено для такого режима установки.
Переносимость: Так как установочный пакет обычно работает в режиме пользователя, а домашний рабочий каталог расположен рядом с программой, при необходимости, пользователь может сделать резервную копию программы со всеми данными и настройками, или скопировать в другое место. Хотя это и не перенесёт ярлыки в меню приложений, так как они формируются по стандарту XDG, и крайне непригодны для подобных манипуляций из-за особенностей стандарта, но стандарт PortSoft позволяет легко копировать установленные приложения при необходимости.
Так же есть возможность переустановить Chimbalix с сохранением домашнего каталога, и все установленные приложения в формате Installer-SH будут доступны, это относится и к прочим линуксам, что следуют стандартам PortSoft и XDG Desktop.
Простота обновлений: При желании, разработчик может упаковать свою программу в формате Installer-SH, а после просто обновлять со временем, либо выпускать каждую версию отдельным пакетом уникальным. В любом случае, обновление программы в формате Installer-SH подразумевает перепаковку архива с файлами программы, а так же, при необходимости, архива с "системными" файлами. Прочие настройки производятся в основном блоке настроек установочного пакета.
Разумеется, разработчик может реализовать функции обновления в самой программе, либо отдельными модулями, никто не запрещает, так что тут полная свобода выбора, вплоть до того, что можно построить репозиторий распространяющий пакеты в формате Installer-SH... Впрочем, вряд ли кто-то будет городить очередные линуксоидные репозитории, от которых пользователи, как правило, бегут в ужасе.
Практическое использование Installer-SH
В качестве испытуемого возьмём графический редактор Krita, есть три варианта загрузок на выбор, Flatpak и Snap абсолютно непригодны для нормального использования на компьютерах без интернета, да и зависимостей там будет целое болото проблемное, так что остаётся только формат AppImage, выбираем лучшее из худшего.

В принципе, если дать права на исполнение и запустить AppImage, то он заработает в дистрибутиве Chimbalix, правда будут нюансы с интеграцией в системе, ибо данный линуксоидный формат весьма проблемный в плане интеграции, так же будут проблемы с работой кэша файловой системы, ведь AppImage работает по принципу монтирования во временный каталог под случайным именем, тем самым засоряет кэш файловой системы в ОЗУ...

Так же для работы AppImage нужен Fuse, а эта штука не в каждом линуксе есть, например Ubuntu поставляется без этой важной для линуксоидного формата утилиты, что приводит к лишним пляскам с бубном, а это крайне сложно для большинства пользователей (отсюда и "нулевая" популярность линуксов).

В общем, начинаю перепаковку программы в более состоятельный и перспективный формат Installer-SH.
Так как разработчики Krita используют кривой файл AppRun с давних времён, непригодный для использования в распакованном виде, я беру оригинальный файл из AppImageKit, с ним программа отлично работает, да, вот такие нюансы иногда приходится учитывать при перепаковке софта из линуксоидных форматов.

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

Так как программа массивная - увеличиваю размер словаря архиватора до 256 МиБ, такой архив потребует 256 МиБ свободной ОЗУ для распаковки, зато степень сжатия будет лучшей. Процесс упаковки занимает некоторое время, но тут нужно потерпеть, халтура недопустима, иначе за неё будут расплачиваться конечные пользователи в итоге.

Ну что же, устанавливаем свежеиспечённый пакет, забыл переключить локализацию на русскую, так как системный язык у меня английский, и пакет работает на системном языке по умолчанию, ну да ладно.
![]() |
![]() |
![]() |
![]() |
В меню порядок, на рабочем столе тоже.

Запускаем программу, и всё отлично работает, даже не конфликтует с настройками старой версии Krita 5.2.6, что установлена к слову уже давно.

Похоже было правильным решением вынести рабочий домашний каталог отдельно от пользовательского, ибо разработчики программ для Linux совсем не заботятся об адекватной обработке файлов конфигураций, почему? Да потому что Linux испокон веков настолько недоразвит, что в принципе не подразумевает установку нескольких разных версий одного приложения, от чего рождаются всевозможные костыли вроде Docker в серверном сегменте.
Ну а в настольном сегменте уже мне пришлось разрабатывать свой стандарт PortSoft, и свой установочный пакет Installer-SH, ибо прочие, уже существующие линуксоидные способы распространения ПО, ну совершенно непригодны для нормального использования обычным пользователем.

А теперь спровоцируем ошибочную ситуацию, когда пользователь устанавливает программу в линуксе, с которым программа не дружит, мягко говоря. Давайте подменим исполняемый файл, я специально взял погрязший в зависимостях DEB пакет программы KiKad, извлёк бинарник и подставил его вместо Krita.

Запускаю, и получаю код ошибки, прошлые версии Installer-SH не обрабатывали такие ошибки запуска приложений, и это было плохо, а сейчас хорошо.

При запуске через терминал уже можно посмотреть конкретное сообщение об ошибке, нет нужных для работы библиотек.

Но даже если бы я и предоставил нужные библиотеки, погрязшее в болоте зависимостей приложение всё равно не заработало бы, ведь есть базовая зависимость GLIBC, и тут уже требуется версия 2.38, одна из самых свежих по сути, такая далеко не в каждом линуксе есть.
![]() |
![]() |
К чему это я? Правильно, совместимость с прочими линуксами можно выяснить посмотрев на требуемую версию GLIBC, в случае Krita требуется версия 2.36, а это уже линуксы уровня свежести Debian 12 и выше...
![]() |
![]() |
Ладно, давайте просто проверим пару линуксов, например Ubuntu 22.04, разумеется, без доступа к интернету, и впишем это в список совместимости. Хотя Installer-SH работает начиная с Debian 7 (2013 год), но вот совместимость программы уже исключительно на совести разработчиков.
Хотя Ubuntu 22.04 имеет GLIBC 2.35, но Krita всё же заработала, видимо есть какие-то хитрости.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Ну а в случае Debian 11 уже не заработало, GLIBCXX и CXXABI не подходят, увы. И тут уже заметил ошибку, требующую срочного исправления, заметили? Да, ошибка в прослойке, просмотрел путь к исполняемому файлу, он жёстко прописан, а должен меняться в зависимости от программы.
![]() |
![]() |
![]() |
![]() |
Для выявления таких ошибок я как раз и тестирую в разнообразных условиях свои разработки, вроде мелочь, ни на что не влияет, а неприятная, так что делаю срочное исправление уже добавленной в архив версии Installer-SH, ведь потом оставлю эту версию и больше не буду трогать.

Да, мне придётся упаковать заново программу со всеми исправлениями, но ничего страшного, на то и нужно тестирование, чтобы выявлять и исправлять ошибки. Уже исправленную версию проверяю в EndeavourOS 22.12, всё работает, отлично.
![]() |
![]() |
![]() |
![]() |
Ради забавы устанавливаю Krita в дистрибутиве PureOS 10, но увы, несмотря на 2022 год выпуска - этот линукс оказался не способен запустить Krita 5.2.9...
![]() |
![]() |
![]() |
![]() |
На этом пожалуй хватит тестов.
Заключение
Ну что же, пакет готов, давайте сравним с исходным файлом, что был перепакован в формат Installer-SH. Что мы видим? Правильно, Krita 5.2.9 в исходном формате AppImage весит порядка 350 МиБ, когда в формате Installer-SH это же приложение весит всего 234 МиБ, разница в пользу Installer-SH на лицо.

Найти установочный пакет Krita v5.2.9 в формате Installer-SH можно в репозитории GitHub.
https://github.com/Shedou/Chimbalix-Software-Catalog/releases/tag/krita529

Ссылки на Installer-SH и ChimbalixSoftware Catalog уже оставлял в начале статьи.
Благодарю за внимание, больше интересных статей в блоге Hard-Workshop.

Лента материалов
Соблюдение Правил конференции строго обязательно!
Флуд, флейм и оффтоп преследуются по всей строгости закона!
Комментарии, содержащие оскорбления, нецензурные выражения (в т.ч. замаскированный мат), экстремистские высказывания, рекламу и спам, удаляются независимо от содержимого, а к их авторам могут применяться меры вплоть до запрета написания комментариев и, в случае написания комментария через социальные сети, жалобы в администрацию данной сети.




























Комментарии Правила