Как упаковка Podman работает в Linux
Узнайте больше о пакетах Podman для Debian и Ubuntu, используя исходные коды Fedora, OBS и Debbuild.
За последние несколько месяцев проект Podman переработал процесс создания пакетов Debian и Ubuntu. В этой статье описывается прошлое и настоящее работы по упаковке Debian, проделанной командой проекта Podman. Обратите внимание, что эта статья не относится к официальным пакетам Debian и Ubuntu, которые Рейнхард Тартлер и его команда создали и поддерживают.
Процесс сборки Debian
Короче говоря, типичный процесс сборки Debian включает в себя «дебианизацию» исходного репозитория. Сначала в исходный репозиторий добавляется подкаталог debian
, содержащий метаданные упаковки и все необходимые исправления. Затем запускается команда dpkg-buildpackage
для создания пакетов .deb
.
Старый процесс сборки Debian для Podman
Раньше пакеты Debian для Podman создавались с использованием этого процесса «Debianization». Каталог debian
, содержащий метаданные упаковки, был добавлен в исходный код Podman в отдельной вилке. Эта вилка менялась для каждого нового выпуска Podman.
Проблемы с процессом сборки Debian (для упаковщика RPM)
Хотя простое перебазирование часто помогало, это было не всегда так. Обычно сам исходный код Podman требует исправления, чтобы все работало для нескольких версий Debian и Ubuntu, что приводит к сбоям при перебазировании. А сбои при перебазировании означали сбои в автоматизированных задачах. Что, в свою очередь, вызвало массу разочарований.
Это же разочарование заставило нашу команду в прошлом отказаться от пакетов Debian. Когда Podman v3.4 официально появился в Debian 11 и Ubuntu 22.04 LTS (спасибо замечательному Рейнхарду Тартлеру), мы подумали, что проект Podman может попрощаться с поддержкой пакетов Debian.
Но этого не должно было случиться. И Debian, и Ubuntu довольно консервативны в своей политике обновления пакетов, особенно в их выпуске и версиях LTS. В результате многие пользователи Podman в дистрибутивах на основе Debian на долгое время застряли на версии 3.4, возможно, на всю жизнь версии дистрибутива. Хотя пользователи часто могут устанавливать последние пакеты из экспериментального репозитория Debian, это не обязательно удобно для всех. В результате многие пользователи Debian обратились к проекту Podman за новыми пакетами.
Если бы мы хотели возродить собственные пакеты Debian проекта Podman, нам нужно было, чтобы формат упаковки был простым в обслуживании и отладке для упаковщиков RPM, а также легко автоматизировался, что означало отсутствие частых сбоев при перебазировании и исправлениях.
OBS + Деббилд
Инструмент debbuild
, созданный Нилом Гомпой и другими, представляет собой набор макросов упаковки RPM, позволяющий упаковщикам собирать пакеты Debian, используя исходные коды пакетов Fedora. Удобно, что пакеты debbuild
можно легко добавить в качестве зависимостей к проекту, размещенному в инфраструктуре Open Build Service openSUSE.
Вот фрагмент того, как включается поддержка debbuild
для Ubuntu 22.04 в репозитории OBS Stable Kubic, поддерживаемом проектом Podman:
<repository name="xUbuntu_22.04">
<path project="Ubuntu:debbuild" repository="Ubuntu_22.04"/>
<path project="Ubuntu:22.04" repository="universe"/>
<arch>x86_64</arch>
<arch>s390x</arch>
<arch>armv7l</arch>
<arch>aarch64</arch>
</repository>
Полный файл конфигурации доступен здесь.
Помимо включения пакетов debbuild
в качестве зависимостей, исходные коды пакетов Fedora должны быть обновлены правилами, позволяющими изменить процесс сборки для сред Debian и Ubuntu.
Вот фрагмент того, как это делается для Podman:
%if "%{_vendor}" == "debbuild"
Packager: Podman Debbuild Maintainers <https://github.com/orgs/containers/teams/podman-debbuild-maintainers>
License: ASL-2.0+ and BSD and ISC and MIT and MPLv2.0
Release: 0%{?dist}
%else
License: ASL 2.0 and BSD and ISC and MIT and MPLv2.0
Release: %autorelease
ExclusiveArch: %{golang_arches}
%endif
Условие " %{_vendor}" == "debbuild" используется во многих других местах файла спецификации. Например, в этом примере кода указаны разные наборы зависимостей и этапы сборки для Fedora и Debian. Кроме того, debbuild
позволяет создавать условия для версий Debian и Ubuntu с помощью макросов {debian
и {ubuntu
, которые знакомы упаковщикам RPM.
Вы можете найти обновленный файл спецификации RPM со всеми изменениями debbuild
здесь.
Вместе эти две части создают успешные сборки пакетов Debian в репозитории OBS Unstable Kubic.
Использование debbuild
также гарантирует, что метаданные упаковки будут храниться в отдельном репозитории, что исключает необходимость внесения исправлений или проблем с перебазированием исходных кодов Podman.
Удобство использования
В настоящее время доступны пакеты для Ubuntu 22.04, Debian Testing и Debian Unstable. Мы ведем переговоры с сопровождающими инфраструктуры OBS о корректировке сред сборки Debian 11 и Ubuntu 20.04, после чего у нас также будут успешные сборки для этих двух сред.
$ apt list podman
Listing... Done
podman/unknown,now 4:4.2.0-0ubuntu22.04+obs55.1 amd64 [installed]
podman/unknown 4:4.2.0-0ubuntu22.04+obs55.1 arm64
podman/unknown 4:4.2.0-0ubuntu22.04+obs54.1 armhf
podman/unknown 4:4.2.0-0ubuntu22.04+obs54.1 s390x
Теперь поговорим об удобстве использования. Эти пакеты были проверены вручную, и команда Podman обнаружила, что они удовлетворяют типичным сценариям использования. Пользователи могут устанавливать эти пакеты так же, как и любой другой пакет DEB. Сначала необходимо включить репозиторий. Инструкции есть на веб-сайте Podman. Однако эти пакеты не одобрены Debian. Они не прошли тот же процесс обеспечения качества, что и официальные пакеты Debian. Эти пакеты в настоящее время не рекомендуются для промышленного использования, и мы настоятельно рекомендуем вам соблюдать осторожность, прежде чем приступать к установке.
Заворачивать
Проект debbuild
позволяет команде проекта Podman создавать пакеты Debian с некоторыми дополнениями к исходным кодам пакетов Fedora, что упрощает обслуживание, отладку и автоматизацию пакетов Debian. Это также позволяет пользователям Debian и Ubuntu получать последнюю версию Podman с той же скоростью, что и пользователи Fedora. Пользователи Podman в Debian и Ubuntu, ищущие последние обновления, могут использовать наш нестабильный репозиторий Kubic (в идеале пока не в производственных средах.).
Мы также настоятельно рекомендуем установку debbuild
и OBS упаковщикам RPM, которые должны предоставлять пакеты Debian и Ubuntu своим пользователям. Это разнообразный набор инструментов, но открытый исходный код — это совместная работа.