Bloqueo y control de versiones de paquetes

Introducción

En entornos de producción a veces es necesario fijar la versión de un paquete para evitar que una actualización automática rompa una aplicación. APT ofrece dos mecanismos complementarios: apt-mark hold para bloqueo simple y el sistema de pinning mediante /etc/apt/preferences para un control fino de versiones y prioridades.

apt-mark — Bloqueo de paquetes

apt-mark hold marca un paquete para que apt upgrade y apt full-upgrade lo ignoren.

Bloquear un paquete:


# apt-mark hold nginx
# apt-mark hold nginx php8.3 mysql-server   # varios a la vez
          

Desbloquear un paquete:


# apt-mark unhold nginx
          

Ver paquetes bloqueados:


$ apt-mark showhold
          

Equivalente con dpkg:


$ dpkg --get-selections | grep hold          # ver paquetes en hold
# echo "nginx hold" | dpkg --set-selections  # bloquear manualmente
# echo "nginx install" | dpkg --set-selections  # desbloquear
          

Pinning — Control fino con /etc/apt/preferences

El pinning permite asignar prioridades a versiones o repositorios concretos. APT elige siempre el candidato con mayor prioridad.

Prioridades por defecto de APT:

  • 100 → paquete instalado pero no disponible en ningún repositorio activo
  • 500 → paquete disponible en un repositorio estándar
  • 990 → paquete de la distribución objetivo (-t)
  • >1000 → se instala aunque sea una versión anterior a la instalada
  • <0 → el paquete nunca se instala automáticamente

Formato de /etc/apt/preferences:


Package: nginx
Pin: version 1.24.*
Pin-Priority: 1001
          

Fijar una versión exacta:


Package: nginx
Pin: version 1.24.0-2
Pin-Priority: 1001
          

Bloquear un paquete para que nunca se instale:


Package: paquete-no-deseado
Pin: release *
Pin-Priority: -1
          

Dar prioridad a un repositorio concreto:


Package: *
Pin: origin "download.docker.com"
Pin-Priority: 900
          

Verificar la política de un paquete:


$ apt-cache policy nginx
          

Instalar una versión específica manualmente


$ apt list --all-versions nginx            # ver todas las versiones disponibles
# apt install nginx=1.24.0-2              # instalar versión concreta
# apt install nginx=1.24.0-2 --allow-downgrades  # permitir bajar versión
          

Combina apt-mark hold para bloqueos rápidos y /etc/apt/preferences cuando necesitas control fino sobre versiones o repositorios de origen.

Gestión de paquetes Snap en Ubuntu Server

Índice de la sección

Índice del curso