О разработке Installer-SH v2.5 и несколько слов про Linux (desktop)
Есть огромное множество причин несостоятельности Linux в настольном сегменте. Настолько много, что даже перечислить полноценно в пределах одной статьи затруднительно.
Но одну из причин я вполне успешно решаю в последнее время. Речь сейчас пойдёт не про дистрибутив Chimbalix, который за десяток выпущенных версий уже превосходит многие прочие Линуксы в плане использования, ибо ни одним другим Линуксом я так долго не мог пользоваться.
реклама

Речь пойдёт про новый формат распространения софта под названием Installer-SH.
Installer-SH
В репозитории Chimbalix-Software-Catalog уже набралось несколько десятков приложений в формате Installer-SH. Вроде и мелочь, но внимательные уже давно могли заметить явное разделение списка на версии установочного пакета.
реклама

Хотя Installer-SH и является новым методом распространения софта для Linux, но он уже прошёл путь в несколько десятков версий и к текущему моменту имеет следующие особенности:
- Пригоден для установки на компьютерах без доступа в интернет.
- Базовая информация о софте прописана в установочном пакете и отображается перед установкой.
- Не зависит от перегруженных менеджеров пакетов, которые зачастую мертвы без доступа к интернету.
- Работает, начиная с дистрибутивов уровня Debian 7 (2013 год и новее). Важно заметить! Грамотная совместимость устанавливаемого софта с дистрибутивами Linux является обязанностью разработчиков программы, а не установочного пакета или способа распространения!
- Installer-SH порой способен вывести код ошибки, если установленное приложение не запустилось или закрылось некорректно.
- По умолчанию установка происходит в пользовательском режиме без root прав. На усмотрение упаковщика возможно переключение в системный режим.
- Уже установленные программы сохраняются при переустановке Linux с сохранением домашнего каталога.
- Позволяет устанавливать разные версии одной программы без конфликта файлов конфигурации. Для каждого приложения выделяется отдельный домашний каталог, в котором располагаются файлы конфигурации и кэш. Эту функцию можно отключить, если приложение достаточно адекватно разработано и не конфликтует с самим собой.
- На текущий момент основным языком пакета является английский. Так же есть русская локализация, которая может быть использована как заготовка для перевода на прочие языки. Нужная локализация автоматически загружается в соответствии с системной.
- Упаковка файлов в оптимизированном формате 7-Zip позволяет значительно экономить место на диске при хранении пакетов.
- Есть возможность переключиться на формат tar.xz вместо 7-Zip, что снизит уровень сжатия, но позволит устанавливать приложение в дистрибутивах уровня Debian 6. Так же данный формат позволяет упаковывать «опасные» символические ссылки, что может быть важно для некоторых приложений.
- Installer-SH является самодостаточным, полагается в основном на утилиты GNU. Архиватор 7-Zip располагается рядом с установочным пакетом, как и всё необходимое для подготовки базы PortSoft с разделами меню. Нет необходимости что-то устанавливать в систему через менеджеры пакетов с root правами, в отличие от прочих способов распространения софта вроде Snap и Flatpak.
- Использует спецификации XDG Desktop для размещения ярлыков в меню приложений. Хотя не все дистрибутивы Linux и рабочие окружения в полной мере следуют спецификациям. К сожалению...
- Installer-SH крайне жизнеспособен, так как приложение, упакованное в данном формате, является носителем не только софта, но и установочного пакета. При создании нового пакета можно взять за основу уже упакованное в данном формате приложение.
- Рутина автоматизирована до простых команд, что позволяет собирать новые пакеты, не требуя особых навыков и знаний от сборщика, в отличие от всяких DEB пакетов...
- Использование уже готового пакета в качестве основы для выпуска новых версий программы в формате Installer-SH гораздо проще, чем создание нового пакета с нуля.
- При повторной установке программы будет выведено предупреждение, что уже существующие файлы будут перезаписаны. Эту функцию можно отключить в новой версии Installer-SH с помощью параметра запуска «update».
- Тихий режим позволяет массово устанавливать программы, что оказалось удобным при тестировании приложений на совместимость с разнообразными дистрибутивами Linux.
Это всё звучит неплохо, но достаточно ли, чтобы сравниться с уровнем действительно пригодной для использования Windows? На самом деле нет. Даже идеальный установочный пакет не сможет вправить руки в плечи разработчикам софта, как и разработчикам дистрибутивов и даже самого ядра Linux, в котором постоянно что-то ломают и выбрасывают с обновлениями.
Исправления
Ранее я сделал и проверил десять версий Kdenlive в формате Installer-SH. В целом программа меня не порадовала — слишком уж много косяков. Но при этом остался доволен экономией места на диске при хранении установочных пакетов. Размер вышел почти в два раза меньше, чем если бы я хранил это всё в исходном линуксоидном формате AppImage.
реклама

Однако были проблемы и у Installer-SH версии 2.4. Массовая установка пакетов в тихом режиме работала, но не совсем правильно.

Потому пришлось начать работу над следующей версией пакета. Первым делом исправил код, отвечающий за функцию обновления меню. Теперь она нормально отключается.
реклама

Эта функция нужна именно потому, что некоторые дистрибутивы Linux не способны сами следить за своим меню. Linux нужно постоянно пинать, но если пинать слишком часто, то он может и развалиться. Потому дистрибутивы Linux я порой называю «дряхлым пингвином»...
Так же создал два вспомогательных скрипта. Первый позволяет массово устанавливать пакеты. Нужно только заполнить массив списком файлов и запустить.
Второй скрипт уже предназначен для использования в виртуальной машине с кривыми дистрибутивами Linux вроде Fedora, которые не выделяют достаточно места для файловой системы в Live-CD режиме.
Короче говоря, этими двумя скриптами можно заранее выделить 2-16 Гб места для файловой системы из ОЗУ под каталог PortSoft, а после начать массовую установку софта для тестирования.
![]() |
![]() |
Полировка
Как можно что-то сделать лучше? Просто взять и сделать? Нет, так оно не работает. Чтобы что-то сделать лучше, этим нужно пользоваться. А ещё лучше иметь опыт с лучшим из лучшего, чтобы было на что ориентироваться.
К сожалению, разработчики от мира Linux явно не всегда пользуются своими же поделками, а разработчики дистрибутивов вряд ли смотрят на лучшую ОС в сегменте под названием Windows. Иначе Linux не занимал бы столь печальное положение на протяжении десятилетий.

С устоявшимся подходом в мире «дряхлого пингвина» невозможно достичь уровня Windows. Только Windows может опуститься до уровня Linux...
Не скажу, что я прямо лучший разработчик. Напротив, мои основные навыки находятся в других областях. Моя нестабильная история GitHub не даст соврать. Но в этом и состоит ирония ситуации.

Разработчики от мира Linux десятилетиями не могут полноценно догнать даже уровень древней Windows XP в плане удобства использования и функциональности. А я далеко не разработчик. Просто пришёл и сделал Chimbalix, а после Installer-SH, так как другие не осилили ничего подобного. Только кричать горазды, какая Windows якобы плохая и ужасная, Linux якобы классный и прекрасный, а пользователи вокруг все такие «неосиляторы», не могут осилить пару команд в терминале...
![]() |
![]() |
Хотя Installer-SH уже разжирел до 1500+ строк кода, но он всё еще не очень нравится мне, потому что активно использую данный способ установки софта и вижу некоторые недостатки.
Однажды мне понадобилось приложение для обработки RAW изображений с фотокамеры. В среде Windows всё нашлось бы очень легко, но в среде Linux мало качественного софта. Из вменяемого и подходящего в данном случае знаю только RawTherapee. Эта программа изначально разрабатывалась именно под Windows. Чисто на заметку.

Как уже все могли заметить, распространяется RawTherapee нормальными установочными пакетами для Windows и macOS. Но для Linux нет нормальных вариантов. Только посредственный контейнер AppImage с массой проблем как технического характера, так и пользовательского.
Конечно, не обошлось без косяков с путями в оригинальных скриптах необходимых для запуска...

Как вам такое? Классно выглядят кнопки в интерфейсе?

Мне пришлось переопределить ряд переменных окружения в своей прослойке для запуска, чтобы всё нормально заработало после распаковки линуксоидного контейнера.

Теперь кнопки появились на своих местах, и программа нормально заработала.

Таким образом, был собран ещё один пакет в формате Installer-SH. Но я не спешу выкладывать его в репозиторий, хотя уже протестировал в дистрибутиве Debian и Fedora.

Весит в два с лишним раза меньше оригинального AppImage контейнера. Это коротко о преимуществе оптимизированных параметров сжатия файлов с помощью архиватора 7-Zip.

Хоть и был создан нормальный установочный пакет с нужной мне программой, который будет жить до тех пор, пока существует хоть одна копия, но Installer-SH сам себя не сделает лучше.

Сначала навожу порядок в прослойке для запуска, хотя выглядит всё беспорядочно в режиме отображения изменений...
![]() |
![]() |
В общем. Перенёс основные настройки и переменные в начало скрипта. Ещё поправил порядок элементов в переменных вроде LD_LIBRARY_PATH и выделил зону для всего прочего, что может понадобиться софту.

Desktop Menu Specifications
Дальше будет веселее. Ведь меню приложений далеко не во всех дистрибутивах Linux работает правильно. Пример тому — Debian 9. Я знаю об этой проблеме уже давно, но только сейчас решился сделать костыли, чтобы хоть как-то работало в таких проблемных Линуксах.
Выглядит проблема никак. Буквально. Новая категория просто не появляется после установки софта.
![]() |
![]() |
На самом деле я следую спецификациям XDG Desktop. Но не совсем идеально. В ярлыках использую категории вроде «chi-edit», когда по спецификациям нужно добавлять «X» в начало, что даёт «X-chi-edit». Полагаю, не нужно объяснять, почему я продолжаю использовать имена категорий без приставки «X».
Кстати, оформление сайта FreeDesktop в последнее время сильно преобразилось. Хорошая работа.
![]() |
![]() |
Вернёмся к делу. Беда вовсе не в злополучных категориях, хотя и связана с ними. Достаточно добавить любой файл ярлыка в категорию, предназначенную для размещения подкатегорий с приложениями, и она начинает отображаться в поломанном Debian 9.
![]() |
![]() |
Это весьма забавная ситуация. Ведь в других дистрибутивах, в том числе более старых, меню работает без подобных костылей.
Осталось разобраться, почему не отображается иконка. Но как бы я не танцевал с бубном вокруг «дряхлого пингвина», единственный вариант заставить работать иконку требовал root права для доступа к системному каталогу «icons».

Такое я не могу себе позволить ради откровенно поломанных дистрибутивов Linux. Увы.
Но что точно могу себе позволить, так это костыли! Просто лишний ярлык, который порой невозможно будет убрать из меню без утилит либо ручной правки файлов, так как многие рабочие окружения Linux слишком недоразвитые до сих пор. Будет мотивацией разработчикам рабочих окружений, у которых меню до сих пор слишком отсталое и функционально ущербное.

Мне лишний ярлык мешать точно не будет. Так что выбираю меньшее из зол. Помимо Debian 9, наверняка есть и другие такие же поломанные дистрибутивы, о которых я даже понятия не имею.
Осталось добавить новый код в главный скрипт и протестировать.

Так гораздо лучше. Это был не самый изящный способ решения проблемы, но рабочий.
![]() |
![]() |
![]() |
Обычно линуксоиды просто всё выбрасывают, что не могут осилить, часто оправдываясь, что функционал якобы устарел или им якобы никто не пользуется. Я же стараюсь сохранить, что возможно, даже если приходиться писать костыли. Это и отличает линуксоидов от нормальных разработчиков.
Как выяснилось, Fedora 24 тоже является поломанным дистрибутивом Linux, и новый костыль спасает ситуацию. А ведь я уже говорил, что понятия не имею, сколько ещё Линуксов поломано.
![]() |
![]() |
![]() |
Одной проблемой меньше. Заодно обновил основные архивы.

Так же поправил функцию очистки мусора после окончательной сборки пакета.

Теперь удаляется даже неиспользуемая версия архиватора 7-Zip, что позволяет сэкономить 3-4 Мб в конечном размере пакета.
Хотя при неправильном использовании это может привести к ситуации, что функция может удалить обе версии архиватора, если после первой чистки будут изменены настройки пакета, затрагивающие архиватор.

Но это нормально. Данная функция используется, когда упаковщик уверен, что всё собрал правильно, и оно работает как положено. Это самый последний этап, после которого идут только расширенные тесты в прочих дистрибутивах Linux и создание распространяемого Tar архива.
Продолжение следует...
На этом завершим текущую часть статьи. Далее поэкспериментируем с GNOME и проведём тесты. Следите за обновлениями, чтобы не пропустить следующую часть.
Благодарю за внимание, больше интересных статей в блоге Hard-Workshop.

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




















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