Linux tutorial · 8 min read · Dec 20, 2025
Cómo bloquear actualizaciones de paquetes y núcleos en Debian / Ubuntu

APT es probablemente la herramienta más útil para un usuario de Linux. Puedes instalar, actualizar y eliminar cualquier software/paquete de tu sistema Linux con un solo comando. Pero a veces, necesitas un control granular sobre qué paquete deseas instalar o actualizar y qué paquete bloquear para que no se actualice automáticamente. ¿Por qué querrías hacer esto? A veces descubres que la versión actualizada de un paquete tiene errores. No quieres que ese paquete se actualice la próxima vez que ejecutes sudo apt upgrade. Y es un dolor actualizar cada paquete individualmente.
Este tutorial cubrirá cómo bloquear ciertos paquetes para que no se instalen o actualicen y cómo bloquear versiones específicas de paquetes o núcleos para que no se instalen.
Nota: Es fácil olvidar qué paquetes has retenido después de un tiempo, incluso cuando sus versiones sin errores están disponibles. Así que mantente alerta, ya que mantener paquetes retenidos durante mucho tiempo puede introducir problemas de seguridad.
Discutiremos dos métodos aquí. El primer método bloqueará todas las instalaciones y actualizaciones para un cierto paquete. El segundo método ofrece un control más granular, permitiéndote bloquear versiones específicas de un paquete.
Requisitos previos
- Un servidor con sistema operativo Ubuntu o Debian. Se utilizó Ubuntu 22.04 para este tutorial, pero los comandos aquí también deberían funcionar bien con otros sistemas operativos basados en Debian y versiones anteriores.
- Un usuario no root con privilegios de sudo.
Método 1 (apt-mark)
Para bloquear un paquete de ser instalado, actualizado o eliminado, podemos usar el comando apt-mark.
Si deseas retener un paquete, por ejemplo, htop, para que no se instale, actualice o elimine, usa el siguiente comando.
$ sudo apt-mark hold htopDeberías ver la siguiente salida.
htop set on hold.El paquete bloqueado permanecerá en la misma versión incluso si actualizas tu sistema. Esto es especialmente útil para retener controladores gráficos.
Para eliminar la retención en el paquete, emite el siguiente comando.
$ sudo apt-mark unhold htopDeberías ver la siguiente salida.
Canceled hold on htop.Hay una advertencia importante con esto. Aunque el paquete no se actualizará automáticamente al usar el comando sudo apt upgrade o al actualizar el sistema, aún puedes eliminar el paquete manualmente. sudo apt remove seguirá funcionando en paquetes retenidos.
Este método solo los bloquea de ser cambiados automáticamente. Mantenerlos en espera los mantendrá en sus versiones actuales sin importar qué, a menos que decidas eliminarlos manualmente.
Método 2 (/etc/apt/preferences)
Este método implica editar el archivo /etc/apt/preferences donde puedes especificar exactamente qué versión de qué paquete de qué repositorio está instalada.
Cada paquete recibe una prioridad numérica basada en la cual APT decide si instalar el paquete o no y, si es así, de qué repositorio debe obtenerlo.
Por ejemplo, verifiquemos algunos detalles sobre el paquete nginx. Emite el siguiente comando.
$ apt-cache policy nginxDeberías ver una salida similar.
nginx:
Installed: (none)
Candidate: 1.22.1-1~jammy
Version table:
1.22.1-1~jammy 500
500 http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages
1.22.0-1~jammy 500
500 http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages
1.20.2-1~jammy 500
500 http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages
1.18.0-6ubuntu14.3 500
500 http://us.archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages
500 http://us.archive.ubuntu.com/ubuntu jammy-security/main amd64 Packages
1.18.0-6ubuntu14 500
500 http://us.archive.ubuntu.com/ubuntu jammy/main amd64 PackagesVerás que hay dos repositorios de donde se instala nginx. El primero es el repositorio de Ubuntu y el segundo es el repositorio de nginx.
Puedes ver 500 escrito contra todos los repositorios. Este número especifica la prioridad del paquete. Dado que es el mismo para todos los repositorios, las posibilidades de que nginx provenga de cualquiera de los repositorios son las mismas. Entonces, ¿cómo decidirá el sistema qué paquete elegir? Elegirá la versión más alta que haya. En este caso, es 1.22.1. Para Ubuntu, el número de versión completo se convierte en 1.22.1-1~jammy.
Si no deseas actualizar a la versión 1.22.1 y quieres bloquearla, entonces necesitas editar el archivo /etc/apt/preferences.
Abre el archivo en el editor nano.
$ sudo nano /etc/apt/preferencesEste comando también te ayudará a crear el archivo si no existía en el sistema anteriormente.
Pega el siguiente código en el archivo.
Package: nginx
Pin: version 1.22.1-1~jammy
Pin-Priority: -1Establecer la prioridad en cualquier cosa inferior a 0 significa que el paquete no se instalará. Si deseas que un paquete se instale siempre, establece su prioridad en 1000 o más.
Guarda el archivo presionando Ctrl + X y entrando Y cuando se te solicite.
Verifiquemos el paquete nuevamente.
$ apt-cache policy nginxDeberías ver la siguiente salida.
nginx:
Installed: (none)
Candidate: 1.22.0-1~jammy
Version table:
1.22.1-1~jammy -1
500 http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages
1.22.0-1~jammy 500
500 http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages
1.20.2-1~jammy 500
500 http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages
1.18.0-6ubuntu14.3 500
500 http://us.archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages
500 http://us.archive.ubuntu.com/ubuntu jammy-security/main amd64 Packages
1.18.0-6ubuntu14 500
500 http://us.archive.ubuntu.com/ubuntu jammy/main amd64 Packages¿Notas alguna diferencia? La versión de lanzamiento candidata ha bajado de 1.22.1 a 1.22.0. Esto significa que la próxima versión más alta que el sistema instalará ahora es 1.22.0. También notarás -1 escrito contra la última versión, lo que significa que el sistema debe omitir esa versión.
Omitir una versión pero permitir la otra
Puedes agregar múltiples entradas para el mismo paquete en el archivo. Por ejemplo, agrega el siguiente código al archivo.
Package: nginx
Pin: version 1.22.1-1~jammy
Pin-Priority: -1
Package: nginx
Pin: version 1.20.2-1~jammy
Pin-Priority: 1000Aquí le estamos diciendo al sistema que omita la versión 1.22.1 pero siempre instale la versión 1.20.2.
Verifiquemos nuevamente usando el comando apt-cache policy.
nginx:
Installed: (none)
Candidate: 1.20.2-1~jammy
Version table:
1.22.1-1~jammy -1
500 http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages
1.22.0-1~jammy 500
500 http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages
1.20.2-1~jammy 1000
500 http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages
1.18.0-6ubuntu14.3 500
500 http://us.archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages
500 http://us.archive.ubuntu.com/ubuntu jammy-security/main amd64 Packages
1.18.0-6ubuntu14 500
500 http://us.archive.ubuntu.com/ubuntu jammy/main amd64 PackagesLa versión candidata ahora se ha desplazado a 1.20.2 en lugar de 1.22.0.
Cambiar la preferencia del repositorio
Consideremos un caso más. ¿Qué pasa si queremos bloquear Nginx de instalarse desde su repositorio y elegir el repositorio de Ubuntu en su lugar? Una forma sería eliminar el repositorio de Nginx, pero puedes usar nuevamente el archivo de preferencias para elegir el repositorio por ti.
Ingresa el siguiente código en el archivo.
Package: nginx
Pin: release o=nginx
Pin-Priority: -1La palabra clave release simplemente especifica la próxima versión más alta. o=nginx se refiere al origen del paquete. Aquí es nginx. Esto significa que el sistema no debe instalar el paquete nginx desde su repositorio. Otra forma de lograr el mismo resultado es usar el siguiente código.
Package: nginx
Pin: release o=jammy
Pin-Priority: 1000Esta vez hemos establecido la prioridad 1000 del paquete del repositorio de Ubuntu (jammy). Esto asegurará que Nginx siempre se instale desde el repositorio de Ubuntu y no desde ningún otro lugar.
No solo puedes especificar el origen del paquete, sino que también puedes agregar el archivo, componente, etiqueta y arquitectura del paquete que el sistema debe elegir utilizando las siguientes palabras clave bajo la sección Pin.
- c -> Componente
- a -> Archivo
- o -> Origen
- l -> Etiqueta
- n -> Arquitectura
Bloqueo de actualizaciones específicas del núcleo
Veamos cómo podemos bloquear actualizaciones específicas del núcleo. Lista todos los paquetes relacionados con el núcleo en tu sistema.
$ dpkg -l "*$(uname -r)*" | grep kernel | awk '{print $2}'Verás una salida similar.
linux-headers-5.15.0-33-generic
linux-image-5.15.0-33-generic
linux-modules-5.15.0-33-generic
linux-modules-extra-5.15.0-33-genericLos siguientes métodos deberán repetirse para todos los paquetes obtenidos aquí.
Método 1 (apt-mark)
Primero, verifiquemos qué versión del núcleo está activa. Para hacer eso, ejecuta el siguiente comando.
$ uname -rDeberías ver una salida similar.
5.15.0-53-genericPara evitar que el núcleo se actualice más, simplemente podemos usar el comando apt-mark.
$ sudo apt-mark hold linux-image-$(uname -r)Deberías ver una salida similar.
linux-image-5.15.0-53-generic set on hold.Puedes seguir el mismo método para bloquear los encabezados del núcleo bloqueando el paquete linux-headers-$(uname -r).
Método 2 (/etc/apt/apt.conf.d/50unattended-upgrades)
El segundo método implica el archivo /etc/apt/apt.conf.d/50unattended-upgrades.
Ábrelo para editar.
$ sudo nano /etc/apt/apt.conf.d/50unattended-upgradesDesplázate hacia abajo hasta la sección Unattended-Upgrade::Package-Blacklist y edítala de la siguiente manera.
Unattended-Upgrade::Package-Blacklist {
"linux-generic";
"linux-image-generic";
"linux-headers-generic";
"linux-modules-generic";
"linux-modules-extra-generic";
};Guarda el archivo presionando Ctrl + X y entrando Y cuando se te solicite.
Método 3 (dpkg)
Para retener la actualización del núcleo usando dpkg, emite el siguiente comando. Este comando retendrá todos los paquetes relacionados con el núcleo al mismo tiempo.
$ for i in $(dpkg -l "*$(uname -r)*" | grep kernel | awk '{print $2}'); do echo $i hold | dpkg --set-selections; donePara eliminar la retención, usa el siguiente comando.
$ for i in $(dpkg -l "*$(uname -r)*" | grep kernel | awk '{print $2}'); do echo $i install | dpkg --set-selections; doneMétodo 4 (/etc/apt/preferences)
Primero, verifiquemos los detalles sobre la versión actual del núcleo.
$ apt-cache policy linux-image-$(uname -r)Deberías ver la siguiente salida.
linux-image-5.15.0-53-generic:
Installed: 5.15.0-53.59
Candidate: 5.15.0-53.59
Version table:
*** 5.15.0-53.59 500
500 http://us.archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages
500 http://us.archive.ubuntu.com/ubuntu jammy-security/main amd64 Packages
100 /var/lib/dpkg/statusA pesar de que el núcleo 5.15.0.53 está en su última versión al momento de escribir este tutorial, estamos suponiendo que la próxima versión ya está disponible (5.15.0.56 es la versión estable actual del núcleo de Linux).
Para bloquear la próxima versión del núcleo, ingresa el siguiente código en el archivo /etc/apt/preferences.
Package: linux-image-5.15.0-53-generic linux-headers-5.15.0-33-generic linux-modules-5.15.0-33-generic linux-modules-extra-5.15.0-33-generic
Pin: version 5.15.0-53.59
Pin-Priority: -1El código anterior bloqueará a Ubuntu de instalar cualquier o todas las actualizaciones al núcleo.
Puedes seguir los métodos 2 y 3 para cualquier paquete regular, no solo para el núcleo.
Conclusión
Eso es todo por este tutorial. Ahora deberías poder bloquear cualquier o versiones específicas de cualquier paquete que no desees que se instalen o actualicen en tu sistema Ubuntu o Debian. Si tienes alguna pregunta, publícalas en los comentarios a continuación.
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.