Перейти к основному содержимому

Stapler v0.0.28

· 5 мин. чтения

Выпущена версия Stapler v0.0.28.

В этом релизе мы продолжаем усиливать надёжность и предсказуемость Stapler: разделили вывод/логи, переписали песочницу на libcontainer, добавили инструменты для диагностики и расширили возможности формата Staplerfile.

Коротко (tl;dr)

  • Переход на песочницу на основе libcontainer.
  • Разделён вывод в консоль и логи (логи в systemd journal).
  • Новое предупреждение при повышении привилегий (rootCmd).
  • Добавлены команды support и migrate.
  • Добавлено поле report_url в stapler-repo.toml.
  • Добавлены appstream_app_id и appstream_metainfo в Staplerfile.
  • Новая опция --no-suffix для stplr build.
  • Исправлено несколько багов: fetch detached-коммитов, определение ALT-подобных дистрибутивов, проверка опциональных зависимостей, корректное завершение по Ctrl+C, версия в stdout.
  • Подготовка к будущему D-Bus API (рефакторинг, интерфейсы).

Основные изменения

Переход песочницы на libcontainer

В этом релизе Stapler получил новый механизм изоляции — теперь вместо нашего старого самописного решения используется реализация на основе libcontainer. Это тот же фундамент, на котором строятся современные OCI-рантаймы, поэтому поведение стало более предсказуемым, а сам код — надёжнее и проще в сопровождении.

Для пользователя переход остаётся прозрачным: внешний runc не нужен, а системные требования не изменились. Тем не менее, в отдельных нетривиальных сценариях работа с mounts, cgroups или capabilities может слегка отличаться от прежней версии. Мы не считаем это breaking change, но рекомендуем протестировать редкие, «хрупкие» сборки.

Технические детали

Ранее песочница была полностью самописной и строилась вокруг linux namespaces. С переходом на модель runc/libcontainer мы задействуем проверенную временем архитектуру из OCI-мирa. Это уменьшает количество низкоуровневого кода в Stapler, делает поведение ближе к стандартам, а безопасность — более предсказуемой.

Вывод и логирование

В этой версии мы серьёзно переработали то, как Stapler показывает информацию пользователю. Раньше почти весь вывод строился поверх структурированного лога, из-за чего CLI выглядел перегруженным техническими деталями, а гибкость отображения была сильно ограничена.

Теперь же вывод и логирование разделены:

  • всё, что нужно пользователю, показывается в консоли в читаемом виде;
  • технические сообщения и внутренние события записываются отдельно — в systemd journal, через sd_journal (info по умолчанию).

Это позволило сделать интерфейс чище и понятнее, а диагностику — проще: все логи теперь доступны через journalctl, без лишнего шума в CLI.

Ниже можно увидеть разницу в выводе до и после обновления:

Было

Стало

Предупреждение при повышении прав

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

Предупреждение при повышении прав

Команда support

В версии 0.0.28 появилась команда для локального сбора диагностической информации:

stplr support

Она формирует архив stplr-support.tar.gz, содержащий сведения о системе, журналы работы stplr (включая записи из systemd journal), полезные файлы и прочие данные для анализа проблем.

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

Подробнее читайте в документации.

Команда migrate

Добавлена новая команда:

stplr migrate

Она пригодится при изменении форматов конфигурации и обновлении stplr.

к сведению

Мейнтейнерам Stapler в репозиториях дистрибутивов рекомендуется добавлять вызов stplr migrate в postinstall для удобства пользователей.

Подробнее читайте в документации.

Поле report_url в stapler-repo.toml

Также в stapler-repo.toml стало доступно поле:

report_url = 'https://example.com/report?package={{ .BasePackageName }}'

Оно помогает формировать ссылки на баг-репорты:

Пример report_url в Stapler-repo.toml

Подробнее читайте в документации.

Новые поля в Staplerfile

Для интеграции с AppStream появились поля:

appstream_app_id="org.example.MyApp"
appstream_metainfo="org.example.MyApp.metainfo.xml"

Они позволяют передавать метаданные приложения в стандартном для AppStream формате.

Подробнее про appstream_app_id и appstream_metainfo читайте в документации.

Опция --no-suffix для stplr build

До этого Stapler автоматически добавлял к имени итогового пакета суффикс вроде:

<pkgname>+stplr-<repo>-1.0.0-1.x86_64

Теперь можно собирать артефакты без добавления +stplr-<repo>:

stplr build --no-suffix

Это делает Stapler удобнее для пользователей, которым нужно формировать «чистые» пакеты без дополнительного суффикса.

Улучшения и исправления

Эта версия включает набор практичных исправлений, которые повышают стабильность и совместимость Stapler:

  • теперь корректно fetch-ятся detached-коммиты и коммиты вне веток;
  • улучшено определение ALT-подобных — учитывается ID_LIKE;
  • Stapler больше не предлагает устанавливать опциональные зависимости, если они уже есть в системе;
  • устранены проблемы с завершением по Ctrl+C — процессы завершаются корректно;
  • версия утилиты выводится в stdout, что полезно для автоматизации.

Рефакторинг и подготовка к D-Bus API

В этой версии мы провели рефакторинг кода и заложили основу для D-Bus API, которое, скорее всего, появится в следующем релизе. D-Bus API позволит удобно создавать GUI-приложения для Stapler, чего пользователи давно ждали, и откроет новые возможности для визуальной работы с пакетами и сборкой.

Примечания по обновлению

  • Переход на libcontainer прозрачен и дополнительных зависимостей не требует. В редких сценариях возможно слегка иное поведение песочницы, поэтому рекомендуется проверить нестандартные сборки.
  • Если ваша автоматизация ожидала версию в stderr, обновите скрипты — теперь она печатается в stdout.