March 7

Stapler, новый мост пользовательских репозиториев для операционных систем семейства Linux

Пользовательский репозиторий, но не для Arch — почему нет? Сегодня поговорим о новинке от Максима Слипенко — Stapler. По планам, v0.0.31 станет последним релизом в серии v0.0.x, следующим будет v0.1.0. Инструмент позволяет установить программное обеспечение, которое по какой-то причине отсутствует в основных репозиториях вашей операционной системы.

Принцип работы

Разберём идею на примере популярного приложения Obsidian. Несмотря на его широкую известность, Obsidian отсутствует в большинстве официальных репозиториев, вне зависимости от семейства дистрибутивов. Официально для общесистемной установки разработчик распространяет его только через свой сайт в виде .deb-пакета и еще нескольких вариантов поставки. Это означает, что пользователям дистрибутивов, отличных от Debian/Ubuntu, приходится либо вручную работать с архивом, либо искать сторонние (и не всегда актуальные) сборки. Ситуация осложняется тем, что без своевременных обновлений можно столкнуться с проблемами совместимости или отсутствием новых функций.

Stapler решает эту проблему, всегда предоставляя самую свежую версию приложения. Пользователю, например, в Альте, достаточно выполнить команду stplr in obsidian. Stapler автоматически найдёт официальный исходный архив, проверит целостность, подготовит из него нативный пакет для вашего дистрибутива и установит его. Когда выходит новая версия Obsidian, достаточно выполнить stplr up, и инструмент самостоятельно загрузит обновление, обновит установочный сценарий и установит новую версию. Все операции выполняются локально, в вашей системе. Это удобно: пользователям больше не нужно запоминать "магические" команды, скачивать пакеты вручную или изучать документацию по alien и подобным утилитам.

Как организованы пользовательские репозитории программного обеспечения

Одним из первых хранилищ пользовательских репозиториев стал проект для операционных систем семейства Альт — Aides. Проекту меньше года, но за это время вокруг него сформировалась обширная экосистема сервисов, которые мы с вами и рассмотрим.

Главная страница проекта https://pkgs.aides.space/

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

Не менее интересна организация самого репозитория. Он базируется на платформе для совместной работы с исходным кодом ALT Linux Space, которая содержит в себе множество автоматизированных решений. Проект aides-web основан на GO, распространяется под лицензией GNU AGPLv3 и может быть взят за основу любым пользовательским репозиторием.

Автоматизированный сценарий публикации инструкции в репозиторий Aides

На самом деле штука в своём роде уникальная — автоматизированный конвейер сопровождения инструкций. Всё начинается с запроса на добавление пакета и назначения сопровождающего и заканчивается автоматизированным сценарием публикации инструкции в репозиторий. Система также автоматически проверяет возможность пересборки для веток sisyphus и p11, чтобы гарантировать системную совместимость, и при необходимости позволяет выполнить пересборку. С точки зрения участника, решившего добавить несколько инструкций, это полностью автоматическая работа без ручного модерирования. А пользователь получает почти стопроцентную гарантию того, что после обновления приложение запустится.

Начиная с версии v0.0.30, появляется ещё одна важная возможность: управление своим набором приложений через Центр приложений GNOME. Был реализован плагин для gnome-software, который позволяет находить, просматривать, устанавливать, удалять и обновлять приложения, установленные через stplr. Благодаря этому плагину можно централизованно производить обновление приложений — механизм встроен в стандартный сценарий обновлений (на вкладке "Обновления"). Возможно обновить как все приложения одной кнопкой, так и конкретное приложение. В разделе "Репозитории ПО" отображается полный список пользовательских репозиториев, и, что особенно приятно, счётчик приложений работает!

Плагин для Центра приложений gnome-software-plugin-stplr

Сейчас сообщество обсуждает разработку генератора appstream-data, который позволит предоставлять полную информацию о приложении аналогично в общесистемных или Flatpak-пакетах в едином формате. На данный момент введено агрегирующее поле — идентификатор приложения, которое связывает существующие поля. После завершения работы над генератором мы получим все возможные метаданные: скриншоты, лицензии, подробное описание и многое другое. В планах также разработать аналогичный плагин для Центра приложений окружения KDE Plasma.

Разработка плагина для Центра приложений Discover

В итоге мы получаем очень интересную концепцию — экосистему, вобравшую в себя лучшее из AUR и Flatpak. Очень хочется посмотреть, что получится у участников сообщества через несколько лет.

А как пользоваться stplr к примеру на Альте?

Для использования `stplr` в семейсте операционных систем Альт необходимо убедится что утилита установлена.

rpm -q stplr

при отсутствии утилиты в системе установите утилиту:

su -
apt-get update
apt-get install stplr

Для работы необходимо подключить как минимум один репозиторий. Подключим репозиторий aides:

stplr repo add aides https://altlinux.space/aides-community/aides.git

Stapler имеет простой интерфейс командной строки. Вот несколько базовых команд, которые помогут вам начать.

Установить пакет

Установим пакет из удалённого репозитория инструкций Stapler или системного менеджера пакетов:

stplr install obsidian

Удалить пакет

Удалить установленный пакет через системный менеджер пакетов:

stplr remove obsidian

Обновить пакеты

Обновляет все установленные пакеты до последних версий из репозиториев Stapler:

stplr upgrade

Списки пакетов

Показывает все установленные пакеты из репозитория Stapler:

stplr list --installed

Показывает пакеты требующие обновления из репозитория Stapler:

stplr list --upgradable

Информация о пакете

Отобразить информацию о пакете:

stplr info yandex-browser-stable

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

Интерфейс команды help утилиты stplr

Как устроена сборка: Staplerfiles, рецепты и магия Go

В основе Stapler лежит понятие Staplerfile — файл-рецепт, очень похожий на знакомый пользователям Arch Linux PKGBUILD из AUR . Однако ключевое отличие в том, что Staplerfile не привязан к одному дистрибутиву. Это bash-скрипт с декларативной частью, который описывает, где взять исходный код программы, как его собрать и куда установить файлы, чтобы в итоге получился нативный пакет — будь то .deb, .rpm, .pkg.tar.zst для Arch или даже .apk для Alpine Linux .

Сам процесс сборки в Stapler — это выполнение строго определённых функций внутри этого рецепта . Всё начинается с функции prepare(), где можно распаковать архивы или применить патчи к исходникам в директории $srcdir. Затем идёт функция build(), где запускаются компиляторы или системы сборки вроде make. Финальный аккорд — функция package(), в которой сопровождающий рецепта копирует готовые бинарные файлы, библиотеки и конфиги в специальную директорию $pkgdir, структура которой точно повторяет корневую файловую систему Linux. Именно содержимое $pkgdir впоследствии и ляжет в основу готового пакета .

Что особенно интересно — это гибкость. Stapler понимает, что в разных дистрибутивах одни и те же зависимости могут называться по-разному. Поэтому в Staplerfile можно делать переопределения для конкретных ОС и даже их версий . Например, можно указать общий массив deps, а для Arch Linux — массив deps_arch, и инструмент сам выберет нужный во время сборки. Это позволяет поддерживать огромное количество систем с помощью единственного рецепта.

Еще одно отличие Staplerfile в сборке — присутствие функции files(). Она перечисляет все файлы, входящие в пакет, что необходимо для корректного удаления в RPM. RPM ведёт базу данных установленных файлов, и если пакет не сообщит менеджеру полный список своих файлов, при удалении в системе останутся «осиротевшие» файлы. Для удобства существуют вспомогательные функции files-find-lang, files-find-doc, files-find-binary, files-find-license, которые автоматически находят типовые группы файлов (документацию, локализацию, бинарники, лицензии) и добавляют их в список. Благодаря этому сопровождающий избавляется от ручного перечисления каждого файла, а пакет получается полным и корректным с точки зрения общесистемного менеджера пакетов.

Активно развивается и сам механизм работы с исходными архивами. В последних версиях реализована поддержка новых форматов архивов (от .rpm и .deb до .iso и .zstd) за счёт замены библиотеки. Теперь файлы многих форматов автоматически распаковываются при скачивании, что упрощает подготовку исходников и избавляет сопровождающих от лишних действий в функциях prepare() и package().

Сам Stapler написан на Go, что делает его легковесным и простым в развёртывании — он не тянет за собой горы зависимостей, работая «поверх» любого пакетного менеджера.

Итоги

В качестве итога можно сказать, что за развитием этого проекта очень сложно угнаться — он развивается настолько стремительно, что его трудно успеть обозреть. На текущий момент stplr доступен в двух репозиториях Сизиф и Роса 13, существует два пользовательских репозитория Aides и NeonXP

Если остались вопросы по самому инструменту или пользовательскому сообществу, их можно обсудить в социальных сетях:

В ближайшее время будет включён в состав операционных систем Альт Рабочая станция и Альт Рабочая станция K. Уверен, что большое сообщество станет очередной вехой в развитии такого замечательного инструмента.

И важно высказать своё мнение: лично для меня stplr не альтернатива с точки зрения способа доставки приложений конечному пользователю, в моём мире транспортом может быть только единый доверенный репозиторий самой операционной системы. Так как я пользуюсь операционной системой Альт, для меня это Сизиф. Это небольшое дополнение, которое создаёт множество проектов свободного программного обеспечения, вовлекает новых участников и, главное, размышляет над инфраструктурными задачами. Поэтому я не смог пройти мимо и не поделиться своим отзывом.