разработчики Shelly выпустили версию 3.1.7 менеджера пакетов для Arch Linux и дистрибутивов на его основе. Главное изменение – собственный движок RLPM на языке Zig, который выполняет операции с системными пакетами без обращения к libalpm. В стандартной сборке доступны оба движка, а libalpm остаётся первоначальным выбором. Обновление также расширяет изолированные сборки AUR, улучшает показ разрешений Flatpak и исправляет интеграцию AppImage.
Что изменилось в Shelly 3.1.7

Shelly объединяет управление пакетами из репозиториев Arch, AUR, Flatpak и AppImage. У программы есть графический интерфейс GTK4 и командная строка. Ранее мы рассказывали о переработке поиска и терминального интерфейса Shelly; в новом выпуске основное изменение касается механизма установки и обновления системных пакетов.
В примечаниях к выпуску 3.1.7 разработчики выделяют следующие направления:
| Область | Изменение относительно 3.1.6 |
|---|---|
| Движок пакетов | Независимая реализация RLPM и общий интерфейс выбора между ней и libalpm |
| Варианты сборки | Возможность собрать программу без libalpm, с RLPM по умолчанию |
| Интеграция дистрибутивов | Профили путей Arch и Devario, выбор файла конфигурации и политика каталогов хуков |
| Изолированные сборки | Установка из AUR через отдельные свежие окружения, полные планы зависимостей и подготовка окружения через RLPM |
| Готовые пакеты | Предустановки сжатия и отдельная настройка архитектуры выходного пакета |
| Упаковка Shelly | Раздельные пакеты CLI, Flatpak, уведомлений и вариант без службы уведомлений |
| Интерфейс | Доступность, просмотр PKGBUILD с данными Atoll, пояснения разрешений и интеграция AppImage |
| Очистка | Удаление всего содержимого AUR-кэша Shelly через --aur-cache |
RLPM: собственная реализация вместо вызовов libalpm
libalpm – библиотека управления пакетами, которую использует pacman. Она отвечает за работу с базами пакетов и выполнение операций установки, удаления и обновления.
RLPM, или Rolling Linux Package Manager, самостоятельно читает базы репозиториев, разрешает зависимости, загружает и проверяет архивы, устанавливает и удаляет пакеты, выполняет обновления, хуки и установочные сценарии. Движок также обнаруживает файловые конфликты и использует блокировки транзакций.
Он поддерживает обычные tar-базы репозиториев и базы CachyOS со встроенным SQLite-файлом pacman.db. Локальные записи используют формат базы версии 9; информация о репозитории, из которого установили пакет, сохраняется в поле INSTALLED_DB.
RLPM и libalpm используют общую блокировку db.lck. Если база изменилась после подготовки плана, RLPM останавливает операцию с ошибкой StaleDatabaseState. Проверка подписей учитывает настроенную политику доверия; импорт неизвестного ключа требует решения пользователя и сам по себе не делает ключ доверенным.
Для повреждённой или прерванной публикации записей предусмотрено восстановление согласованного состояния базы. Оно не отменяет уже записанные файлы, выполненные сценарии и завершённые установки других пакетов. Полного отката файловой системы у RLPM нет.
Разработчики прямо указывают, что полная совместимость с libalpm ещё не достигнута. Наличие тестов отдельных механизмов не подтверждает одинаковое поведение во всех рабочих сценариях или преимущество по скорости. Независимость от libalpm также не отменяет другие зависимости: RLPM использует, в частности, libarchive, SQLite и GPG.
Как проверить и переключить движок
В руководстве RLPM описано переключение через настройку NativePackageBackend. Проверить текущий выбор можно командой:
shelly config get NativePackageBackend
Включить RLPM:
shelly config set NativePackageBackend rlpm
Вернуть libalpm, если он включён в установленную сборку:
shelly config set NativePackageBackend libalpm
Выбор сохраняется в ~/.config/shelly/config.json и применяется при следующем запуске CLI. Графическое приложение выполняет системные операции через CLI и использует тот же движок. При ошибке Shelly автоматически не переключается на другой вариант.
Для сборки CLI без libalpm из дерева исходного кода предусмотрена команда:
cd Shelly.Cli.Zig zig build -Dlibalpm=false
Такая сборка изначально использует RLPM и не позволяет выбрать libalpm. В частности, отдельные рецепты packaging/arch/shelly-git и Devario собирают именно этот вариант. Поэтому поведение конкретного пакета зависит от его рецепта сборки.
Профили Arch и Devario: движок и пути настраиваются отдельно
При стандартном профиле Arch смена движка сохраняет используемые пути и совместимый формат установленной базы. Конвертация базы не требуется. Профиль Devario задаёт другие расположения:
| Ресурс | Arch | Devario |
|---|---|---|
| Конфигурация | /etc/pacman.conf | /etc/shelly.conf |
| База пакетов | /var/lib/pacman | /var/lib/shelly |
| Кэш пакетов | /var/cache/pacman/pkg | /var/cache/shelly/pkg |
| Связка ключей | /etc/pacman.d/gnupg | /etc/shelly.d/gnupg |
| Поставляемые наборы открытых ключей | /usr/share/pacman/keyrings | /usr/share/shelly/keyrings |
| Системные хуки | /usr/share/libalpm/hooks | /usr/share/rlpm/hooks |
| Хуки администратора | /etc/pacman.d/hooks | /etc/shelly.d/hooks |
Переключение на RLPM не меняет профиль, а выбор другого профиля не переносит существующие базы, кэш и ключи. Параметр --config позволяет явно указать файл конфигурации для одного запуска. Для каталогов хуков доступна политика HookDirMode: Append дополняет стандартный список, Replace использует только явно перечисленные каталоги.
Сборки AUR в отдельных окружениях и фиксация зависимостей
Shelly расширяет изолированную сборку на установку пакетов из AUR:
shelly -Ia --isolated <package>
Здесь <package> нужно заменить именем пакета. Для каждой базы пакетов, то есть pkgbase, создаётся отдельное окружение. Сборочные зависимости из репозиториев остаются внутри него; готовые архивы и необходимые зависимости времени выполнения устанавливаются обычной транзакцией в основной системе.
План зависимостей фиксирует версии, репозитории, SHA-256, связи между пакетами и контрольные суммы проверенных входных данных. Перед установкой в окружение Shelly сверяет выбранные архивы с планом. Неполный план останавливает подготовку окружения.
Режиму нужны соответствующие пространства имён Linux и systemd-nspawn. Зависимости сборки, доступные только в AUR, и подпись закрытыми ключами внутри окружения пока не поддерживаются. Параметр --isolated нельзя совмещать с --chroot и режимами установки только зависимостей.
В окне просмотра PKGBUILD появились результаты проверок Atoll и сведения об исходных файлах. Автоматический анализ дополняет ручную проверку рецепта и не гарантирует безопасность сборки.
Сам сборщик получил исправления динамических версий pkgver(), генерации SRCINFO, больших наборов пакетов из одного рецепта, извлечения исходников, обработки ключей и синтаксиса оболочки. Настройка destinations.sources теперь последовательно передаётся как SRCDEST.
В документации сборщика описаны новые уровни сжатия --compression-level от 1 до 5 для Zstandard, gzip, xz и bzip2. Если уровень не задан, сохраняются значения библиотеки по умолчанию. Настройка package.carch отдельно меняет обозначение архитектуры готового пакета, но не целевую архитектуру компилятора; пакеты any остаются any. Принимающий менеджер пакетов должен поддерживать выбранное обозначение.

Разрешения Flatpak, AppImage и доступность интерфейса
Разрешения Flatpak в CLI и GTK теперь сгруппированы по смыслу: сеть, устройства, файловая система и службы сеанса. Ошибочные или нечитаемые метаданные больше не отображаются как отсутствие запрошенных разрешений.
В GTK улучшены управление с клавиатуры, возврат фокуса, названия и роли элементов для вспомогательных технологий. Экранный диктор сообщает о смене страниц первого запуска, ходе операций и пустых результатах поиска. Обновлены немецкий, итальянский, польский, бразильский и европейский португальский переводы.
Исправления AppImage затрагивают установку, ассоциации файлов и обновление путей в ярлыках после переноса приложения. Копирование и восстановление сохраняют право на выполнение: ранее его потеря могла сделать приложение незапускаемым и скрыть ярлык из меню.
Для автоматического выбора единиц размера в текстовом выводе появилась настройка:
shelly config set FileSizeDisplay Auto
Она выбирает B, KiB, MiB, GiB или TiB. По умолчанию сохраняется Megabytes, а структурированный вывод по-прежнему передаёт числовое количество байтов.
Раздельные пакеты и расширенная очистка кэша
Новые рецепты разделяют приложение на shelly, shelly-cli, shelly-flatpak-backend и shelly-notify. Для установки без службы уведомлений предусмотрен shelly-notify-none; соответствующие варианты есть и для Git-сборок. Отдельный компонент Flatpak существовал раньше – версия 3.1.7 расширяет схему упаковки.
Параметр --aur-cache теперь удаляет всё содержимое пользовательского AUR-кэша Shelly: исходники, рабочие копии, каталоги сборки, архивы и метаданные, в том числе для уже удалённых пакетов. Раньше очистка затрагивала собранные архивы и их подписи. Предварительно посмотреть план без удаления файлов можно так:
shelly purify standard --aur-cache --dry-run
Обычная очистка запрашивает подтверждение. Результаты, сохранённые за пределами кэша Shelly, она не затрагивает. Графическая очистка кэша также получила расширенный охват AUR.
Как установить Shelly
Разработчики рекомендуют установку в CachyOS либо использование его пакетов. В апрельском выпуске CachyOS Shelly заменил Octopi в выборе графического менеджера пакетов. Для систем, в подключённых репозиториях которых есть Shelly, команда выглядит так:
sudo pacman -S shelly
На официальной странице проекта также приведены варианты установки через AUR-помощники:
yay -S shelly
Или:
paru -S shelly
Эти команды устанавливают версию, доступную в соответствующем источнике. Публикация 3.1.7 на GitHub не означает, что пакет уже обновили во всех репозиториях дистрибутивов.
Вывод
Shelly получил самостоятельный движок системных пакетов и возможность собирать вариант без libalpm. Для повседневной работы обновление также делает понятнее разрешения приложений, улучшает интеграцию AppImage и даёт больше контроля над сборками AUR. Перед использованием RLPM стоит проверить вариант установленной сборки и учитывать текущие ограничения совместимости и восстановления после сбоев.