Linux · 8 min read · Dec 01, 2025

Cómo bloquear actualizaciones de paquetes y del núcleo en CentOS / Rocky Linux

El gestor de paquetes 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 yum upgrade. Y es un dolor actualizar cada paquete individualmente.

En este tutorial, cubriremos 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 retener paquetes durante mucho tiempo puede introducir problemas de seguridad.

Discutiremos cinco métodos aquí. Todos estos métodos involucrarán el gestor de paquetes yum ( Yellow dog Updater, Modified) y el dnf ( Dandified YUM).

Requisitos previos

  • Un servidor con CentOS o Rocky Linux o Alma Linux. Se utilizó Rocky Linux 9 para este tutorial, pero los comandos aquí deberían funcionar bien con otros sistemas operativos y versiones anteriores también.
  • Un usuario no root con privilegios sudo.

Método 1 - Deshabilitar permanentemente la instalación/actualizaciones de paquetes (Usando yum.conf)

Para bloquear un paquete permanentemente de ser instalado, actualizado o eliminado, podemos usar el archivo /etc/yum.conf o /etc/dnf/dnf.conf.

Debería verse como lo siguiente.

[main]
gpgcheck=1
installonly_limit=3
clean_requirements_on_remove=True
best=True
skip_if_unavailable=False

Si deseas retener un paquete, por ejemplo, nginx, para que no se instale, actualice o elimine, agrega la siguiente línea al final del archivo.

exclude=nginx

Si deseas detener todos los paquetes de nginx, entonces puedes usar el carácter *.

exclude=nginx*

Si deseas excluir más de un paquete, puedes separar sus nombres por espacio.

exclude=nginx php

El paquete bloqueado permanecerá en la misma versión incluso si actualizas tu sistema. Esto es especialmente útil para retener controladores gráficos.

Intentemos instalar el paquete bloqueado, nginx.

$ sudo dnf install nginx
or
$ sudo yum install nginx

Obtendrás una salida similar.

Última verificación de expiración de metadatos: hace 0:00:21 el lun 05 dic 2022 10:42:01 AM UTC.
Todos los coincidencias fueron filtradas por el filtrado de exclusión para el argumento: nginx
Error: No se pudo encontrar una coincidencia: nginx

También puedes bloquear paquetes a través de su arquitectura aquí. Por ejemplo, si deseas bloquear paquetes de 32 bits, puedes ingresar la siguiente línea en el archivo /etc/yum.conf.

exclude=*.i?86 *i686

Hay una advertencia importante con este método. Si bien el paquete no se actualizará automáticamente al usar el comando sudo yum upgrade o al actualizar el sistema, aún puedes eliminar el paquete manualmente. sudo yum 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.

Bloquear actualizaciones del núcleo

Para bloquear la actualización del núcleo, usa el siguiente comando.

$ sudo dmf --exclude=kernel* update
or
$ sudo yum --exclude=kernel* update

Puedes usar kernel* como el nombre del paquete en todos los otros métodos para bloquear actualizaciones del núcleo.

Método 2 - Deshabilitar temporalmente la instalación/actualizaciones de paquetes

Este método implica usar el comando yum con un parámetro adicional.

En el momento de actualizar cualquier paquete, usa el switch -x con tu comando para bloquear paquetes específicos que no deseas actualizar.

$ sudo dnf -x nginx update
or
$ sudo yum -x nginx update

El comando anterior actualizará todos los paquetes excepto el paquete nginx en tu sistema. Para bloquear múltiples paquetes con un solo comando, usa el switch -x múltiples veces.

$ sudo dnf -x nginx -x php update
or
$ sudo yum -x nginx -x php update

También puedes usar el switch –exclude en lugar de -x de la misma manera.

$ sudo dnf --exclude nginx, php
or
$ sudo yum --exclude nginx, php

Método 3 - Usando el repositorio (Usando archivos .repo)

Si tienes un paquete instalado a través de su repositorio, entonces hay otra manera de detenerlo de ser actualizado. Esto se hace editando su archivo .repo que puedes encontrar en el directorio /etc/yum.repos.d.

Supongamos que tu sistema tiene el repositorio Epel agregado y no deseas instalar el paquete golang desde él, puedes bloquearlo agregando la línea exclude=certbot en el archivo /etc/yum.repos.d/epel.repo como se muestra.

[epel]
name=Extra Packages for Enterprise Linux 8 - $basearch
# Es mucho más seguro usar el metalink, pero si deseas usar un espejo local
# coloca su dirección aquí.
#baseurl=https://download.example/pub/epel/8/Everything/$basearch
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-8&arch=$basearch&infra=$infra&content=$contentdir
enabled=1
gpgcheck=1
countme=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8
exclude=certbot
...

Ahora, intenta instalar el paquete certbot que está disponible a través del repositorio Epel.

$ sudo dnf install certbot
or
$ sudo yum install certbot

Obtendrás una salida similar.

Extra Packages for Enterprise Linux 8 - x86_64                                           20 kB/s | 4.5 kB     00:00
Todos los coincidencias fueron filtradas por el filtrado de exclusión para el argumento: certbot
Error: No se pudo encontrar una coincidencia: certbot

Método 4 - Bloquear un repositorio completo de actualizarse

Alternativamente, puedes bloquear un repositorio completo de ser actualizado.

Primero, verifiquemos todos los repositorios en nuestro sistema.

$ dnf repolist
or
$ yum repolist

Obtendrás una salida similar.

repo id                                       repo name
appstream                                     Rocky Linux 8 - AppStream
baseos                                        Rocky Linux 8 - BaseOS
digitalocean-agent                            DigitalOcean Agent
docker-ce-stable                              Docker CE Stable - x86_64
epel                                          Extra Packages for Enterprise Linux 8 - x86_64
extras                                        Rocky Linux 8 - Extras
nginx-stable                                  nginx stable repo

Para excluir el repositorio Epel de ser actualizado, usa el siguiente comando.

$ sudo dnf update --disablerepo=epel
or
$ sudo yum update --disablerepo=epel

Puedes deshabilitar múltiples repositorios separando sus ids con comas.

$ sudo dnf update --disablerepo=epel, extras
or
$ sudo yum update --disablerepo=epel, extras

Bloqueando repositorios a través de su archivo repo

Hay otra forma de bloquear un repositorio que implica editar el archivo repo particular.

Abramos el archivo epel.repo para editar.

$ sudo nano /etc/yum.repos.d/epel.repo

Cambia el valor de la variable enabled de 1 a 0.

[epel]
name=Extra Packages for Enterprise Linux 8 - $basearch
# Es mucho más seguro usar el metalink, pero si deseas usar un espejo local
# coloca su dirección aquí.
#baseurl=https://download.example/pub/epel/8/Everything/$basearch
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-8&arch=$basearch&infra=$infra&content=$contentdir
enabled=0
gpgcheck=1
countme=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8
...

Guarda el archivo presionando Ctrl + X y entrando Y cuando se te pida.

Ahora, intentemos instalar el paquete certbot que está disponible en el repositorio epel.

$ sudo dnf install certbot
or
$ sudo yum install certbot

Obtendrás una salida similar.

Última verificación de expiración de metadatos: hace 0:02:10 el lun 05 dic 2022 10:48:31 AM UTC.
No hay coincidencias para el argumento: certbot
Error: No se pudo encontrar una coincidencia: certbot

Método 5 - Bloquear paquetes en una versión particular (Usando el plugin versionlock)

Versionlock es un plugin para el gestor de paquetes Yum. Este plugin no permite que los paquetes se actualicen a una versión mayor que la que se instaló en el momento en que se realizó el bloqueo.

Primero, instala versionlock.

$ sudo dnf install dnf-plugin-versionlock
or
$ sudo yum install dnf-plugin-versionlock

Esto también creará un archivo /etc/yum/pluginconf.d/versionlock.list en tu sistema.

Para bloquear la versión actual de mariadb-server instalada en tu sistema, ejecuta el siguiente comando.

$ sudo dnf versionlock mariadb-server
or
$ sudo yum versionlock mariadb-server

Obtendrás una salida similar.

Última verificación de expiración de metadatos: hace 0:01:05 el lun 05 dic 2022 12:14:16 PM UTC.
Agregando versionlock en: mariadb-server-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.*

Puedes agregar múltiples paquetes a la vez.

$ sudo dnf versionlock evolution golang
or
$ sudo yum versionlock evolution golang

Obtendrás una salida similar.

Última verificación de expiración de metadatos: hace 0:01:05 el lun 05 dic 2022 12:14:16 PM UTC.
Agregando versionlock en: evolution-0:3.28.5-18.el8.*
Agregando versionlock en: golang-0:1.18.4-1.module+el8.7.0+1073+99e3b3cd.*

Intentemos actualizar el paquete mariadb-server.

$ sudo dnf update mariadb-server
or
$ sudo yum update mariadb-server

Obtendrás una salida similar.

Última verificación de expiración de metadatos: hace 0:02:07 el lun 05 dic 2022 12:14:16 PM UTC.
Paquete mariadb-server disponible, pero no instalado.
No hay coincidencias para el argumento: mariadb-server
Error: No hay paquetes marcados para actualización.

Para verificar la lista de paquetes bloqueados a través del plugin versionlock, usa el siguiente comando.

$ dnf versionlock list
or
$ yum versionlock list

Obtendrás una salida similar.

Última verificación de expiración de metadatos: hace 0:00:05 el mié 07 dic 2022 02:36:20 AM UTC.
elasticsearch-7.17.5-1.x86_64
mariadb-server-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.*
evolution-0:3.28.5-18.el8.*
golang-0:1.18.4-1.module+el8.7.0+1073+99e3b3cd.*

Para eliminar el paquete del versionlock, usa el siguiente comando.

$ sudo dnf versionlock delete mariadb-server
or
$ sudo yum versionlock delete mariadb-server

Obtendrás la siguiente salida.

Eliminando versionlock para: mariadb-server-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.*

Para descartar la lista y limpiar los bloqueos, usa el siguiente comando.

$ sudo dnf versionlock clear
or
$ sudo yum versionlock clear

Alternativamente, puedes editar el archivo /etc/yum/pluginconf.d/versionlock.list para bloquear paquetes usando el plugin versionlock.

Para agregar un paquete instalado al archivo, usa el siguiente comando.

$ sudo sh -c 'rpm -qa | grep evolution >> /etc/yum/pluginconf.d/versionlock.list'

El comando anterior bloquea el paquete evolution al agregarlo a la lista. Usamos rpm -qa | grep evolution para obtener el nombre completo del paquete. Y el

sudo sh -c comando ejecuta un shell sudo bajo el cual se ejecutan los comandos para escribir en el archivo.

Conclusión

Eso es todo para este tutorial. Ahora deberías poder bloquear cualquier versión específica de cualquier paquete que no desees que se instale o actualice en tu sistema CentOS o Rocky Linux.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.