Выпущен Installer-SH версии 1.6: Больше автоматизации, исправление ошибок, локализация

Однажды был выпущен дистрибутив Chimbalix, одна из первых ключевых особенностей состояла в каталоге PortSoft, что был создан дабы устранить характерную для Linux помойку в области расположения приложений.
реклама
Найти дистрибутив можно в GitHub репозитории: https://github.com/Shedou/Chimbalix
Изначально от этого специализированного каталога не было особого смысла, однако прошло время, и был разработан Installer-SH, найти можно в репозитории GitHub:
https://github.com/Shedou/Chimbalix-Software-Catalog
реклама

Состоит текущая версия Installer-SH из основного скрипта "install.sh", нескольких вспомогательных скриптов позволяющих явно указать язык локализации, и нескольких папок рядом:

В папке "installer-data" находятся все необходимые файлы для подготовки автономного пакета с приложением:
реклама

В папке "locales", разумеется, находятся файлы локализации, они не обязательны для работы:

Изначально я планировал начать расписывать изменения в исходном коде относительно предыдущей версии Installer-SH, однако изменений настолько много, что от предыдущего кода осталось мало нетронутого:
![]() |
![]() |
реклама
Так что не вижу смысла заострять особое внимание именно на исходном коде.
Лучше посмотрим на Installer-SH со стороны пользователя, сразу обращаем внимание на локализацию, она к слову указана в первой же строке, после основного заголовка:
![]() |
![]() |
В остальном существенных визуальных отличий от предыдущей версии Installer-SH нет, он просто делает свою работу, предупреждая пользователя о проблемах при неоходимости:
![]() |
![]() |
![]() |
![]() |
Например, если архив был повреждён, или есть какие-то файлы, что будут перезаписаны в процессе установки:
![]() |
![]() |
Так же появился тихий режим установки, в таком режиме Installer-SH просто устанавливает приложение без какого-либо вывода, однако если будут обнаружены проблемы - потребуется вмешательство. В тихом режиме используется стандартная локализация, а в правом верхнем углу написано "-silent", это необходимо, чтобы исключить загрузку локализаций (трату лишних ресурсов) в данном режиме:
![]() |
![]() |
Однако скрипт удаления не получил поддержку локализаций, просто не вижу в этом смысла пока что, может быть потом реализую, или кто-то другой реализует и предложит:

Ну что, пора бы собрать установочный пакет какого-нибудь приложения!
-
--
Сборка пакета
Теперь подойдём к Installer-SH со стороны сборщика/репакера, ведь какой смысл в инструменте, если им слишком тяжело пользоваться? Линуксоидам стоило бы задуматься над этим...
Давайте возьмём такое приложение как Inkscape

К сожалению, разработчики не предоставляют портативных версий в обычном архиве, что можно распаковать и запускать без проблем, но есть AppImage вариант, тоже сойдёт:

При загрузке пользователю вываливают нудные линуксоидные инструкции, согласитесь, большинство людей не такими видят "дружелюбность" и "удобство"... Так же упоминают про какой-то inkview, запускаемый отдельными танцами с бубном, вот это интересно:

Ну что, файл загрузился, осталось распаковать AppImage пакет, будем превращать его в полноценное приложение:

Получаем папку squashfs-root с приложением, осталось привести всё в порядок:

Именно эти файлы переносим в каталог "program_files"

И пока не забыли - удаляем все лишние файлы, они будут только мешать:

Так как у приложения есть иконка в формате SVG - её и используем как основную:

Далее заполняю информацию о приложении, так же настраиваю основной ярлык прямо через настройки в основном скрипте, и прописываю дополнительную категорию в меню, чтобы нужные ярлыки так же попали в основное меню дистрибутива:

Не забываю внести описание на русском языке в файле локализации, и о том, что ширина терминала ограничена, потому делаю переносы строк чтобы выглядело лучше:

Проверяю чтобы всё было правильно заполнено, выявляю незначительную ошибку и снова перепроверяю, отлично, описание заполнено:

Далее подготавливаю основной ярлык приложения, увы, но тут абсолютно всё не автоматизируется, немного придётся поработать над ярлыками вручную, так же подготавливаю ярлык для InkView, в идеале нужно бы другую иконку установить для InkView, но в составе приложения других иконок не было, а рисовать новую мне лень, так что оставлю так:
![]() |
![]() |
Ну и собственно всё, самая рутинная работа завершена, осталось упаковать архивы и проверить, паковать буду вариантом для небольших приложений, ибо для больших приложений используется большой размер словаря 256 МиБ, что повышает требования для распаковки без значительного увеличения эффективности сжатия при малых объёмах...
Отлично, файлы упакованы, причём стоит заметить, итоговый размер архива с приложением получился всего 67 МиБ, когда это же приложение в формате AppImage занимало целых 119 МиБ, выходит почти двухкратная экономия места на диске при хранении этого приложения до момента, когда оно понадобится:

Ещё не забываем, кэш операционной системы не дружит с AppImage приложениями по той простой причине, что оно постоянно монтируется в случайную папку при запуске, что только засоряет кэш ОС, и это серьёзный недостаток AppImage я считаю... Тем временем распакованные и нормально установленные файлы приложения нормально кэшируются ОС, и это повышает общую производительность системы, так что адепты AppImage - идите лесом со своими "аргументами в пользу".
Да, мне не противен AppImage в целом, ибо он заставляет разработчиков адекватно паковать приложения с зависимостями, что впоследствии можно перепаковать в нормальный вид, но и всё на этом...
Осталось обновить хэши в скрипте, чтобы в случае ошибок копирования это выявилось при первой же проверке:

Ну и проверяю, чтобы всё было правильно исправляя выявленные косяки:
![]() |
![]() |
Однако в процессе установки выявился косяк, да, разработчики Inkscape допустили косяк, в каталоге lib64 обнаружилась битая символическая ссылка, а архиватор 7-Zip не любит битые ссылки, а раз архиватору не нравятся битые ссылки - то и мой установщик бьёт по рукам упаковщика, чтобы тот исправил проблему:

Ох уж эти линуксоидные зависимости, брр...

Я так понимаю, ссылка должна указывать на этот файл, однако упаковывая AppImage разработчики допустили оплошность, и вместо относительного сделали абсолютный путь:

Исправляем это недоразумение создав правильную относительную ссылку:

Далее нахожу и исправляю ещё одну битую ссылку, брр, что за дичь, и это разработчики Inkscape на полном серьёзе выставили для скачивания? Я конечно тоже тот ещё засранец, тоже могу допустить косяки при работе над своим дистрибутивом Chimbalix, но одно дело косяк в огромном дистрибутиве с массой файлов, но совсем другое такие косяки в отдельном приложении, причём сравнительно небольшом:

Однако "потенциально опасных" ссылок осталось целых 18 штук, в том числе только что исправленная, архиватор считает её подозрительной, даже не знаю, я вижу только один выход - заменить эти ссылки файлами, на которые они ссылаются, чтобы наверняка лишних проблем не возникло потом:

Осталось упаковать и проверить наконец приложение, да, есть косяк с локализацией, но не страшно, ведь теперь приложение установилось как положено:
![]() |
![]() |
![]() |
![]() |
Проверяю элементы в меню, прекрасно:
![]() |
![]() |
![]() |
Так как линуксоидное меню "открыть с помощью" может иногда впадать в "сон", порой необходимо выйти и зайти в систему заново чтобы обновились ассоциации, но это если вдруг после установки приложение само не попадёт в этот список:

Но так как InkView не открыл обычный "жпег", то открываю с помощью Inkscape:

Отлично, файл открылся, приложение работает:

Трассируем картинку и сохраняем в SVG формат, чтобы потом открыть с помощью InkView:

Отлично, всё работает как положено:

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

Переименовываем файлы соответствующим образом:

И упаковываем в самый обычный ZIP архив для распространения, как можно заметить, он весит почти в 2 раза меньше оригинального AppImage файла, и не требует танцев с бубном для нормальной установки в систему, достаточно распаковать и установить:

Да, пришлось потанцевать исправляя за разработчиками Inkscape битые символические ссылки чтобы Installer-SH не бил по рукам, но я специально сделал так, чтобы установщик бил по рукам упаковщика если что-то идёт не так.
Пожалуй на этом можно заканчивать, найти Inkscape в формате автономного установочного пакета Installer-SH можно в репозитории GitHub: https://github.com/Shedou/Chimbalix-Software-Catalog
Со временем этот репозиторий, вероятно, будет пополняться и другим софтом, лицензии которого позволяют свободное распространение. В целом есть нюансы которые можно было бы поправить, но это уже оставлю на другие версии установочного пакета приложений для дистрибутива Chimbalix.
По итогу я добился сносной возможности распространять ПО не только через убогие линуксоидные репозитории, но и автономными установочными пакетами, не требующими root прав для работы в стандартном режиме, пригодными для установки на полностью автономных ПК без доступа к интернету.
Такой способ распространения софта как отдушина в вечно недоразвитых и утопающих в болоте зависимостей линуксах... И это хорошо!
Благодарю за внимание, больше интересных статей в блоге Hard-Workshop.
Похоже пора чистить компактный ПК в самодельном корпусе...

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

























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