Установка Podman из исходников на Ubuntu 18.04
Что такое Podman
Podman — это контейнерный рантайм, совместимый по функциям с Docker, входящий в библиотеку libpod. Ключевая особенность: Podman не использует клиент‑серверную архитектуру и не требует постоянно работающего демона; при необходимости он может запускаться без прав root.
Быстрая однострочная дефиниция: Podman — это инструмент для управления подами, контейнерами, образами и томами без docker‑демона.
Предварительные условия
- Ubuntu 18.04 (сервер)
- Привилегии root (sudo)
- Подключение к интернету для клонирования репозиториев и скачивания конфигураций
Что мы сделаем
- Установим зависимости и Go
- Создадим конфигурационные каталоги и скачем базовые файлы
- Соберём и установим conmon (мониторинг контейнеров)
- Соберём и установим CNI‑плагины
- Соберём и установим runc (OCI runtime)
- Соберём и установим сам Podman
Шаг 1 — Установка зависимостей
Сначала обновите репозитории и систему:
sudo apt update
sudo apt upgrade -yУстановите Go и необходимые системные пакеты для сборки:
sudo apt install -y btrfs-tools git golang-go go-md2man iptables libassuan-dev libdevmapper-dev libglib2.0-dev libc6-dev libgpgme-dev libgpg-error-dev libprotobuf-dev libprotobuf-c-dev libostree-dev libseccomp-dev libselinux1-dev pkg-configПримечание: пакеты зависят от задач, которые вы планируете выполнять (например, если вы не используете btrfs, этот пакет не обязателен). Поддерживайте систему в актуальном состоянии.
Шаг 2 — Загрузка дополнительных конфигураций
Создайте каталог для глобальных конфигураций контейнеров и скачайте базовые файлы реестров и политик:
sudo mkdir -p /etc/containers
sudo curl https://raw.githubusercontent.com/projectatomic/registries/master/registries.fedora -o /etc/containers/registries.conf
sudo curl https://raw.githubusercontent.com/containers/skopeo/master/default-policy.json -o /etc/containers/policy.json
Коротко про файлы:
- registries.conf — список реестров и приоритеты для поиска образов (docker.io, registry.fedoraproject.org и т. п.).
- policy.json — политика доверия и подписи образов, используется skopeo и другими инструментами.
Важно: при необходимости адаптируйте registries.conf под ваши приватные реестры.
Шаг 3 — Сборка и установка conmon (мониторинг контейнеров)
Conmon — часть экосистемы CRI‑O; отвечает за мониторинг процесса контейнера, обработку логов и обнаружение ситуаций OOM.
По умолчанию GOPATH для Go 1.8+ — ~/go. Установим GOPATH и создадим директорию:
export GOPATH=~/go
mkdir -p $GOPATHКлонируем исходники CRI‑O и перейдём в каталог проекта:
git clone https://github.com/kubernetes-sigs/cri-o $GOPATH/src/github.com/kubernetes-sigs/cri-o
cd $GOPATH/src/github.com/kubernetes-sigs/cri-oСоберём conmon и установим его в ожидаемое место для Podman:
mkdir bin
make bin/conmon
sudo install -D -m 755 bin/conmon /usr/libexec/podman/conmon
Проверка:
/usr/libexec/podman/conmon --help
Если команда показывает справку — conmon установлен корректно.
Шаг 4 — Установка CNI‑плагинов
CNI‑плагины отвечают за сетевые интерфейсы контейнеров. Мы соберём стандартный набор плагинов из upstream.
Клонируем репозиторий и соберём плагины:
git clone https://github.com/containernetworking/plugins.git $GOPATH/src/github.com/containernetworking/plugins
cd $GOPATH/src/github.com/containernetworking/plugins
./build_linux.shПосле успешной сборки скопируйте бинарники в системный каталог:
sudo mkdir -p /usr/libexec/cni
sudo cp bin/* /usr/libexec/cni
Создайте каталог конфигураций CNI и скачайте пример для Podman:
mkdir -p /etc/cni/net.d
curl -qsSL https://raw.githubusercontent.com/containers/libpod/master/cni/87-podman-bridge.conflist | tee /etc/cni/net.d/99-loopback.confПроверка доступных бинарников:
ls -lah /usr/libexec/cniЕсли плагины есть в каталоге — шаг выполнен.
Шаг 5 — Сборка и установка runc
runc — реализация OCI runtime; Podman использует его для запуска контейнеров.
Клонируем исходники runc и соберём бинарник:
git clone https://github.com/opencontainers/runc.git $GOPATH/src/github.com/opencontainers/runc
cd $GOPATH/src/github.com/opencontainers/runc
make BUILDTAGS="seccomp"
sudo cp runc /usr/bin/runc
Проверка:
runc --help
Если команда выводит справку — runc установлен.
Шаг 6 — Сборка и установка Podman
Клонируем исходники libpod (Podman) и соберём проект:
git clone https://github.com/containers/libpod/ $GOPATH/src/github.com/containers/libpod
cd $GOPATH/src/github.com/containers/libpod
make
sudo make install PREFIX=/usr
Проверка:
podman version
podman info
Тестирование поиска и скачивания образов:
podman search alpine
podman pull alpine
podman images
Запуск простого контейнера:
podman run --net host --rm -ti alpine echo 'Hello Podman'
Если контейнер запускается и выводит сообщение — установка и базовая настройка завершены.
Критерии приёмки
- podman version выводит корректную версию
- /usr/libexec/podman/conmon доступен и исполняем
- /usr/libexec/cni содержит набор стандартных плагинов
- /usr/bin/runc работает и выводит справку
- Удачная загрузка и запуск образа (alpine)
Чеклисты по ролям
Администратор (установщик):
- Обновил систему и установил зависимости
- Настроил GOPATH и склонировал репозитории
- Установил conmon, CNI, runc и Podman
- Проверил наличие файлов в /etc/containers и /etc/cni/net.d
- Откатный план на случай ошибок (см. раздел «Откат»)
Разработчик (использователь Podman):
- Проверил podman version и podman info
- Понял базовые команды: podman run, podman pull, podman build
- Уточнил политику реестров и доступ к образам
CI/CD инженер:
- Добавил сборку Podman в образ или pipeline при необходимости
- Обеспечил кэширование GOPATH для ускорения сборки
- Настроил мониторинг логов conmon при ошибках контейнера
Типичные ошибки и способы устранения
- Проблема: “conmon: not found” или контейнеры не запускаются.
- Проверьте, установлен ли /usr/libexec/podman/conmon и разрешения. Убедитесь, что путь верный.
- Проблема: CNI‑плагины не найдены.
- Убедитесь, что /usr/libexec/cni содержит бинарники и /etc/cni/net.d имеет корректный conflist.
- Проблема: runc не запускается из‑за отсутствия seccomp.
- Пересоберите runc с нужными BUILD TAGS (как в примере). Проверьте ядро на поддержку seccomp.
- Проблема: podman pull зависает или ошибки TLS.
- Проверьте сетевые настройки, DNS, прокси и registries.conf; при приватных реестрах — добавьте учетные данные и CA.
Откат:
- Удалите бинарники conmon, runc и CNI из системных каталогов.
- Очистите /etc/containers и /etc/cni/net.d, если вы создавали тестовые файлы.
- Если вы устанавливали пакеты через apt ранее, верните пакеты из резервной копии или выполните apt reinstall.
Альтернативные подходы
- Установка из официального репозитория дистрибутива (apt install podman) — быстрее и проще; пакеты могут не быть самыми свежими.
- Установка через официальные репозитории проекта Containers (добавление репо и apt install) — баланс удобства и актуальности.
- Использование готовых бинарников/релизов GitHub — быстро, но проверьте подписи и совместимость.
Когда выбирать сборку из исходников:
- Нужно изменить исходники или собрать с нестандартными флагами.
- Требуется иметь самую свежую версию, отсутствующую в репозиториях.
- Необходимо отладить проблему на уровне исходников.
Когда не стоит собирать из исходников:
- Если вы хотите стабильность и поддержку пакетов — используйте дистрибутивные репозитории.
- Для быстрых развёртываний в продакшн лучше доверять проверенным пакетным каналам.
Ментальные модели и лучшие практики
- Отделяйте управление образами и выполнение контейнеров от системных конфигураций (используйте /etc/containers для централизованной политики).
- Сборка из исходников — это инструмент разработчика/администратора, а не штатный путь для массового развёртывания.
- Разделяйте привилегированные операции (установка) и запуск контейнеров (возможность rootless).
Быстрая шпаргалка команд
- Проверка версии и состояния:
podman version
podman info- Образы и реестры:
podman search <имя>
podman pull <образ>
podman images- Контейнеры:
podman run --rm -ti alpine sh
podman ps -a
podman stop - Очистка:
podman rmi
podman container prune
podman image prune Факты и полезные пути
- GOPATH по умолчанию: ~/go
- Конфигурации контейнеров: /etc/containers
- Конфигурации CNI: /etc/cni/net.d
- Бинарники CNI: /usr/libexec/cni
- conmon: /usr/libexec/podman/conmon
- runc: /usr/bin/runc
- Podman (по make install PREFIX=/usr): /usr/bin/podman
Диаграмма принятия решения (Mermaid)
flowchart TD
A[Нужно установить Podman?] --> B{Требуется самая новая версия или патч?}
B -- Да --> C[Собрать из исходников]
B -- Нет --> D{Требуется быстро и стабильно?}
D -- Да --> E[Установить из репозитория дистрибутива]
D -- Нет --> F[Установить из официального репозитория проекта Containers]
C --> G[Следовать этому руководству]
E --> H[apt install podman]
F --> I[Добавить репо project / apt install]Однострочный глоссарий
- conmon — монитор контейнерного процесса и логгер.
- CNI — интерфейсы и плагины для сетей контейнеров.
- runc — реализации OCI runtime для запуска контейнеров.
- Podman — инструмент управления контейнерами без демона.
Безопасность и примечания по приватности
- Храните файлы policy.json и registries.conf в защищённом каталоге и ограничьте доступ.
- Для приватных реестров используйте защищённые учетные данные и CA; не храните секреты в открытом виде в /etc/containers.
Сводка
Вы успешно собрали и установили Podman из исходников на Ubuntu 18.04: установлены зависимости, настроены /etc/containers, собраны и установлены conmon, CNI‑плагины и runc. Проверьте podman version, podman info, выполните podman pull и podman run, чтобы подтвердить работоспособность.
Важно: для продакшн‑систем рассмотрите использование пакетов из проверенных репозиториев или добавление CI‑pipeline для воспроизводимой сборки.
Источник и дополнительные материалы:
Похожие материалы
Discord не обновляется в Windows 10 — быстрые исправления
Экспорт контактов iPhone в Windows 10
Тыловые 5.1 колонки не работают после Windows 10
Как недорого работать в дороге — гаджеты и планы
Где находятся файлы конфигурации Apache