CentOS Linux ya no recibe actualizaciones: CentOS 8 dejó de tener soporte el 31 de diciembre de 2021 y CentOS 7 el 30 de junio de 2024. Un servidor que sigue con CentOS acumula vulnerabilidades sin parchear y ni siquiera puede instalar paquetes desde los espejos originales. En este tutorial migrarás un servidor CentOS a Rocky Linux o AlmaLinux, las dos distribuciones compatibles con RHEL que lo sustituyen, usando las herramientas oficiales de cada proyecto y comprobando después que el sistema queda limpio.

Requisitos previos

  • Un servidor con CentOS Linux 7.9 o CentOS Linux 8 (x86_64), con acceso root o un usuario con sudo.
  • Un snapshot o copia de seguridad completa del servidor. Las migraciones in situ no se pueden deshacer.
  • Acceso a la consola web (VNC) del proveedor, porque el servidor se reinicia y en el caso de CentOS 7 arranca en un entorno especial de actualización.
  • Al menos 5 GB libres en / y 200 MB en /boot.
  • Una ventana de mantenimiento de una a dos horas.

Paso 1: Elegir el camino de migración

El procedimiento depende de la versión de partida. Compruébala:

cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
Versión actualDestino directoHerramienta
CentOS Linux 7.9Rocky Linux 8 o AlmaLinux 8ELevate (basada en Leapp)
CentOS Linux 8Rocky Linux 8 o AlmaLinux 8migrate2rocky o almalinux-deploy
CentOS Stream 8 o 9No recomendado in situReinstalación

CentOS Stream va por delante de RHEL, así que migrarlo a Rocky Linux o AlmaLinux implica bajar de versión paquetes, algo que las herramientas no garantizan. En ese caso, y en general en servidores de producción complejos, la opción más segura es instalar Rocky Linux 9 o AlmaLinux 9 en un servidor nuevo y mover los datos, como se explica al final.

Rocky Linux y AlmaLinux son equivalentes a efectos prácticos: los mismos paquetes, rutas y comandos. Rocky Linux busca ser idéntica a RHEL y AlmaLinux busca compatibilidad binaria con RHEL y mantiene la herramienta ELevate. Si un proveedor de software solo certifica una de ellas, elige esa; si no, cualquiera sirve.

Paso 2: Hacer una copia de seguridad e inventario

Además del snapshot, guarda fuera del servidor lo que necesitarías para reconstruirlo a mano:

sudo tar -czf /root/etc-backup-$(date +%F).tar.gz /etc
rpm -qa | sort > ~/paquetes-centos.txt
systemctl list-units --type=service --state=running > ~/servicios-centos.txt

Localiza los paquetes que no vienen de los repositorios de CentOS, porque son los que más problemas dan durante la migración (paneles de control, controladores propietarios, RPMs instalados a mano):

rpm -qa --qf '%{NAME} %{VENDOR}\n' | grep -v 'CentOS' | sort

Copia /root/etc-backup-*.tar.gz y los listados a otra máquina con scp o rsync, junto con los volcados de tus bases de datos.

Paso 3: Reparar los repositorios de CentOS

Como CentOS ya no tiene soporte, los espejos mirror.centos.org están vacíos y yum falla con errores como Cannot find a valid baseurl for repo: base. Los paquetes finales siguen disponibles en el archivo histórico vault.centos.org. Apunta los repositorios oficiales a ese archivo:

sudo sed -i -e 's/^mirrorlist=/#mirrorlist=/' -e 's|^#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|' /etc/yum.repos.d/CentOS-*.repo

Limpia la caché y comprueba que los repositorios responden:

sudo yum clean all
sudo yum repolist
repo id                    repo name                       status
base/7/x86_64              CentOS-7 - Base                 10,072
extras/7/x86_64            CentOS-7 - Extras                  526
updates/7/x86_64           CentOS-7 - Updates               6,173
repolist: 23,771

Ahora instala todas las actualizaciones pendientes y reinicia para arrancar con el último kernel:

sudo yum -y update
sudo reboot

A partir de aquí, sigue el camino A (CentOS 7) o el camino B (CentOS 8).

Camino A: CentOS 7 a AlmaLinux 8 o Rocky Linux 8 con ELevate

ELevate es un proyecto de AlmaLinux que adapta Leapp, la herramienta de Red Hat para actualizar RHEL entre versiones mayores, para que funcione con CentOS 7 y permita elegir el destino.

Instalar ELevate

Instala el repositorio de ELevate:

sudo yum install -y http://repo.almalinux.org/elevate/elevate-release-latest-el7.noarch.rpm

Instala Leapp y los datos de migración del destino que hayas elegido. Para AlmaLinux 8:

sudo yum install -y leapp-upgrade leapp-data-almalinux

Para Rocky Linux 8, usa leapp-data-rocky en lugar de leapp-data-almalinux.

Ejecutar la comprobación previa

leapp preupgrade analiza el sistema sin cambiar nada y genera un informe con los problemas encontrados:

sudo leapp preupgrade

Revisa el informe, sobre todo las entradas marcadas como inhibitor, que bloquean la migración:

sudo less /var/log/leapp/leapp-report.txt

Estos son los tres inhibidores más habituales en CentOS 7 y su solución:

  • Módulo pata_acpi cargado: descárgalo con sudo rmmod pata_acpi.
  • Falta una respuesta sobre pam_pkcs11: confirma la eliminación del módulo con sudo leapp answer --section remove_pam_pkcs11_module_check.confirm=True.
  • PermitRootLogin sin valor explícito en SSH: RHEL 8 cambia el valor por defecto, así que Leapp exige que lo fijes. Edita /etc/ssh/sshd_config y añade la línea con el valor que quieras mantener, por ejemplo PermitRootLogin no si entras con un usuario con sudo.

Vuelve a ejecutar sudo leapp preupgrade hasta que el informe no contenga inhibidores.

Lanzar la migración

Cuando la comprobación esté limpia, inicia la migración:

sudo leapp upgrade

Leapp descarga los paquetes del nuevo sistema y prepara un entorno de arranque temporal. Al terminar, reinicia:

sudo reboot

El servidor arranca la entrada ELevate-Upgrade-Initramfs y aplica la migración sin intervención. Tarda entre 15 y 40 minutos y hace un reinicio adicional; puedes seguirlo desde la consola VNC. No interrumpas este proceso.

Camino B: CentOS 8 a Rocky Linux 8 o AlmaLinux 8

En CentOS Linux 8 basta con cambiar los repositorios y reinstalar los paquetes de marca, porque la versión mayor es la misma. Cada proyecto publica un script para hacerlo. Descárgalo, revísalo antes de ejecutarlo y lánzalo como root.

Para Rocky Linux 8:

curl -O https://raw.githubusercontent.com/rocky-linux/rocky-tools/main/migrate2rocky/migrate2rocky.sh
less migrate2rocky.sh
sudo bash migrate2rocky.sh -r

El registro completo queda en /var/log/migrate2rocky.log.

Para AlmaLinux 8:

curl -O https://raw.githubusercontent.com/AlmaLinux/almalinux-deploy/master/almalinux-deploy.sh
less almalinux-deploy.sh
sudo bash almalinux-deploy.sh

Cuando el script termine sin errores, reinicia para cargar el kernel del nuevo sistema:

sudo reboot

Paso 4: Verificar la migración

Conéctate de nuevo y confirma la distribución:

cat /etc/os-release
NAME="AlmaLinux"
VERSION="8.10 (Cerulean Leopard)"
ID="almalinux"
ID_LIKE="rhel centos fedora"
VERSION_ID="8.10"
...

Comprueba que arrancaste con un kernel de la versión 8 (el8):

uname -r
4.18.0-553.el8_10.x86_64

Verifica que los repositorios activos son los de la nueva distribución y responden:

sudo dnf repolist

Busca paquetes antiguos que hayan quedado. Si migraste desde CentOS 7, no debería quedar ningún paquete el7:

rpm -qa | grep -E '\.el7'

Si aparecen, revisa si pertenecen a software de terceros que necesitas reinstalar desde un repositorio para EL8; los demás puedes eliminarlos con sudo dnf remove. En la migración desde CentOS 8, comprueba también que no quedan paquetes de marca de CentOS:

rpm -qa | grep -i centos

Por último, revisa que los servicios arrancaron y que SELinux sigue en su modo habitual:

systemctl --failed
getenforce

Prueba tus aplicaciones y revisa sus registros antes de cerrar la ventana de mantenimiento.

Paso 5: Tareas posteriores

Actualiza el sistema a la última versión menor:

sudo dnf -y upgrade

Si usabas EPEL, reinstálalo para EL8 y activa el repositorio powertools, del que dependen muchos paquetes de EPEL:

sudo dnf install -y epel-release
sudo dnf config-manager --set-enabled powertools

Los servidores migrados desde CentOS 7 heredan iptables configurado a mano o firewalld. En EL8 firewalld usa nftables por debajo; comprueba que tus reglas siguen presentes con sudo firewall-cmd --list-all.

Rocky Linux 8 y AlmaLinux 8 reciben soporte hasta mayo de 2029. Planifica el salto a la versión 9 (soportada hasta 2032): ELevate también permite actualizar de AlmaLinux 8 o Rocky Linux 8 a la versión 9 con el mismo procedimiento de leapp preupgrade y leapp upgrade.

Alternativa: instalación limpia y migración de datos

Si el servidor tiene muchos años de cambios manuales, software de terceros sin versión para EL8 o es crítico, la migración in situ no compensa el riesgo. En su lugar:

  1. Crea un servidor nuevo con Rocky Linux 9 o AlmaLinux 9.
  2. Instala los servicios desde los repositorios de la nueva versión y adapta la configuración guardada en el paso 2, en lugar de copiar /etc entero.
  3. Migra los datos con volcados lógicos (mysqldump, pg_dump) y rsync.
  4. Prueba el servidor nuevo, cambia el DNS o la IP y mantén el antiguo apagado unos días como respaldo.

Este camino requiere más trabajo, pero termina en una versión soportada hasta 2032 y sin restos del sistema anterior.

Solución de problemas

Cannot find a valid baseurl for repo al ejecutar yum. Los repositorios siguen apuntando a mirror.centos.org. Repite el paso 3 y revisa que no queden líneas mirrorlist= activas en /etc/yum.repos.d/CentOS-*.repo.

leapp upgrade se detiene por inhibidores que no aparecían antes. Vuelve a revisar /var/log/leapp/leapp-report.txt: cada entrada incluye la acción recomendada. No fuerces la migración ignorando inhibidores.

El servidor no arranca después de la migración. Desde la consola VNC, elige en el menú de GRUB un kernel anterior si está disponible. Si el sistema no se recupera, restaura el snapshot del paso 2 y valora la instalación limpia.

Conclusión

Has migrado un servidor CentOS a Rocky Linux o AlmaLinux 8 con las herramientas oficiales, has comprobado que no quedan paquetes ni repositorios de CentOS y el sistema vuelve a recibir parches de seguridad. Como siguientes pasos, planifica la actualización a la versión 9 con ELevate, configura actualizaciones automáticas de seguridad con dnf-automatic y revisa la política de firewalld del servidor.