Гид по технологиям

Установка Podman из исходников на Ubuntu 18.04

6 min read Контейнеры Обновлено 25 Nov 2025
Установка Podman из исходников на Ubuntu 18.04
Установка Podman из исходников на Ubuntu 18.04

Что такое Podman

Podman — это контейнерный рантайм, совместимый по функциям с Docker, входящий в библиотеку libpod. Ключевая особенность: Podman не использует клиент‑серверную архитектуру и не требует постоянно работающего демона; при необходимости он может запускаться без прав root.

Быстрая однострочная дефиниция: Podman — это инструмент для управления подами, контейнерами, образами и томами без docker‑демона.

Предварительные условия

  • Ubuntu 18.04 (сервер)
  • Привилегии root (sudo)
  • Подключение к интернету для клонирования репозиториев и скачивания конфигураций

Что мы сделаем

  1. Установим зависимости и Go
  2. Создадим конфигурационные каталоги и скачем базовые файлы
  3. Соберём и установим conmon (мониторинг контейнеров)
  4. Соберём и установим CNI‑плагины
  5. Соберём и установим runc (OCI runtime)
  6. Соберём и установим сам 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 в каталоге /etc/containers

Коротко про файлы:

  • 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

Вывод установки conmon в каталог /usr/libexec/podman

Проверка:

/usr/libexec/podman/conmon --help

Пример вывода --help для conmon

Если команда показывает справку — 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 плагинов в /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 и копирование в /usr/bin

Проверка:

runc --help

Вывод --help для runc

Если команда выводит справку — 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

Проверка:

podman version
podman info

Вывод podman info

Тестирование поиска и скачивания образов:

podman search alpine
podman pull alpine
podman images

Пример результата podman images

Запуск простого контейнера:

podman run --net host --rm -ti alpine echo 'Hello Podman'

Результат выполнения контейнера с выводом 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 при ошибках контейнера

Типичные ошибки и способы устранения

  1. Проблема: “conmon: not found” или контейнеры не запускаются.
    • Проверьте, установлен ли /usr/libexec/podman/conmon и разрешения. Убедитесь, что путь верный.
  2. Проблема: CNI‑плагины не найдены.
    • Убедитесь, что /usr/libexec/cni содержит бинарники и /etc/cni/net.d имеет корректный conflist.
  3. Проблема: runc не запускается из‑за отсутствия seccomp.
    • Пересоберите runc с нужными BUILD TAGS (как в примере). Проверьте ядро на поддержку seccomp.
  4. Проблема: podman pull зависает или ошибки TLS.
    • Проверьте сетевые настройки, DNS, прокси и registries.conf; при приватных реестрах — добавьте учетные данные и CA.

Откат:

  • Удалите бинарники conmon, runc и CNI из системных каталогов.
  • Очистите /etc/containers и /etc/cni/net.d, если вы создавали тестовые файлы.
  • Если вы устанавливали пакеты через apt ранее, верните пакеты из резервной копии или выполните apt reinstall.

Альтернативные подходы

  1. Установка из официального репозитория дистрибутива (apt install podman) — быстрее и проще; пакеты могут не быть самыми свежими.
  2. Установка через официальные репозитории проекта Containers (добавление репо и apt install) — баланс удобства и актуальности.
  3. Использование готовых бинарников/релизов 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 для воспроизводимой сборки.

Источник и дополнительные материалы:

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Discord не обновляется в Windows 10 — быстрые исправления
Технологии

Discord не обновляется в Windows 10 — быстрые исправления

Экспорт контактов iPhone в Windows 10
How-to

Экспорт контактов iPhone в Windows 10

Тыловые 5.1 колонки не работают после Windows 10
Требуется решение

Тыловые 5.1 колонки не работают после Windows 10

Как недорого работать в дороге — гаджеты и планы
Удалённая работа

Как недорого работать в дороге — гаджеты и планы

Где находятся файлы конфигурации Apache
Инфраструктура

Где находятся файлы конфигурации Apache

Встроенный администратор в Windows 11: включить/отключить
Windows

Встроенный администратор в Windows 11: включить/отключить