Compilar Podman en Debian

Podman es una herramienta poderosa y segura para crear y gestionar contenedores, que ofrece una alternativa a Docker con una serie de beneficios y características únicas.

Algunas de las características clave de Podman son:

  • No requiere un demonio (servicio en segundo plano) para funcionar, lo que lo hace más ligero y seguro que Docker.
  • Utiliza el mismo formato de archivo de configuración que Docker (dockerfile), lo que facilita la migración de proyectos existentes.
  • Soporta la mayoría de las características de Docker, incluyendo la creación de contenedores, la gestión de imágenes y la configuración de redes.
  • Permite la ejecución de contenedores en modo rootless (sin necesidad de permisos de root), lo que mejora la seguridad.

Nota: El siguiente procedimiento ha sido ejecutado en Debian 12

1. Instalar dependencias

$ sudo apt-get install gcc \
    git \
    iptables \
    libassuan-dev \
    libc6-dev \
    libdevmapper-dev \
    libglib2.0-dev \
    libgpgme-dev \
    libgpg-error-dev \
    libprotobuf-dev  \
    libprotobuf-c-dev \
    libselinux1-dev  \
    libsystemd-dev  \
    make \
    netavark \
    passt \
    pkg-config \
    runc \
    uidmap \
    libseccomp-dev 

Instalar golang

Instale la versión 1.24.2 siguiendo los pasos ¿Cómo instalar el lenguaje de programación Go?

Compilar conmon

$ git clone https://github.com/containers/conmon
$ cd conmon
$ export GOCACHE="$(mktemp -d)"
$ make
$ sudo make podman
$ cd

Compilar/Instalar Podman

$ git clone https://github.com/containers/podman/
$ cd podman
$ git checkout v5.4.2
$ make PREFIX=/usr
$ sudo env PATH=$PATH make install PREFIX=/usr
$ cd

Comprobar versión

$ podman -v
podman version 5.4.2

Crear los ficheros registries.conf y policy.conf

$ mkdir -p $HOME/.config/containers && \
$ curl -L -o $HOME/.config/containers/registries.json https://raw.githubusercontent.com/containers/image/main/registries.conf
$ curl -L -o $HOME/.config/containers/policy.json https://raw.githubusercontent.com/containers/image/main/default-policy.json

Ficheros temporales de Podman

$ sudo cp $HOME/podman/contrib/tmpfile/podman.conf /etc/tmpfiles.d/ -v

Modificar la unidad systemd podman-restart.service

Debe agregar la siguiente línea a la unidad podman-restart.service

ExecStartPre=/bin/sleep 20

El contenido de la unidad debe quedar así

$ cat /usr/lib/systemd/user/podman-restart.service
[Unit]
Description=Podman Start All Containers With Restart Policy Set To Always
Documentation=man:podman-start(1)
StartLimitIntervalSec=0
Wants=network-online.target
After=network-online.target
[Service]
Type=oneshot
RemainAfterExit=true
Environment=LOGGING="--log-level=info"
ExecStartPre=/bin/sleep 20
ExecStart=/usr/bin/podman $LOGGING start --all --filter restart-policy=always
ExecStop=/usr/bin/podman  $LOGGING stop  --all --filter restart-policy=always
[Install]
WantedBy=default.target

Habilite los servicios

$ systemctl --user enable --now podman.socket podman-restart.service

Lingering

Permite ejecutar servicios systemd en la sesión de usuario sin necesidad de loguearse.

$ loginctl enable-linger $USER
$ loginctl list-users

Referencias

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

This site uses Akismet to reduce spam. Learn how your comment data is processed.