Migración de CentOS a Rocky Linux o AlmaLinux
La discontinuación de CentOS Linux en diciembre de 2021 obligó a millones de administradores de sistemas a evaluar rutas de migración para su infraestructura de producción. Este cambio inesperado transformó el panorama empresarial de Linux, creando tanto desafíos como oportunidades para las organizaciones que dependían de CentOS para sus sistemas críticos.
Esta guía completa proporciona instrucciones detalladas para migrar de CentOS a Rocky Linux o AlmaLinux, dos distribuciones impulsadas por la comunidad y compatibles con RHEL que surgieron como las principales alternativas a CentOS. Ya sea que estés administrando un puñado de servidores u orquestando migraciones en cientos de sistemas, esta guía cubre planificación, ejecución, verificación y solución de problemas para transiciones exitosas.
Tabla de Contenidos
- Introducción
- Comprendiendo la Situación de CentOS
- Rocky Linux vs AlmaLinux: Comparación
- Planificación y Evaluación Pre-Migración
- Preparación de Respaldo y Recuperación
- Método de Migración 1: Migración In-Place (Recomendado)
- Método de Migración 2: Instalación Limpia
- Migrando Cargas de Trabajo Específicas
- Verificación Post-Migración
- Solución de Problemas Comunes
- Migrando a Escala
- Rutas de Migración Alternativas
- Mejores Prácticas y Recomendaciones
- Conclusión
Introducción
El 8 de diciembre de 2020, Red Hat anunció que CentOS Linux sería discontinuado, con CentOS 8 alcanzando el fin de vida el 31 de diciembre de 2021, y CentOS 7 recibiendo actualizaciones hasta el 30 de junio de 2024. Esta decisión redirigió el proyecto CentOS hacia CentOS Stream, una distribución de lanzamiento continuo posicionada upstream de Red Hat Enterprise Linux (RHEL) en lugar de downstream.
Este cambio eliminó el CentOS Linux estable y predecible en el que las organizaciones habían confiado durante casi dos décadas, obligando a los administradores a elegir entre:
- Rocky Linux: Fundado por Gregory Kurtzer (fundador original de CentOS), proporcionando compatibilidad binaria 1:1 con RHEL
- AlmaLinux: Creado por CloudLinux, ofreciendo compatibilidad con RHEL con respaldo comercial
- CentOS Stream: El lanzamiento continuo de Red Hat, upstream de RHEL
- RHEL: Migrar a suscripciones pagas de Red Hat
- Distribuciones Alternativas: Moverse a Ubuntu, Debian u otras distribuciones Linux
Tanto Rocky Linux como AlmaLinux proporcionan reemplazos directos para CentOS, manteniendo compatibilidad binaria con RHEL y ofreciendo ciclos de soporte a largo plazo. Esta guía se centra en migrar a estas alternativas impulsadas por la comunidad que preservan la estabilidad y previsibilidad que hicieron popular a CentOS.
Comprendiendo la Situación de CentOS
Historia y Cronología de CentOS
# Verifica tu versión actual de CentOS
cat /etc/centos-release
# Salidas de ejemplo:
# CentOS Linux release 7.9.2009 (Core)
# CentOS Linux release 8.4.2105
Cronología Crítica:
- Diciembre 2020: Anuncio de EOL de CentOS 8
- 31 de diciembre de 2021: CentOS 8 alcanzó fin de vida (sin más actualizaciones)
- 30 de junio de 2024: CentOS 7 alcanza fin de vida
- En curso: CentOS Stream continúa como vista previa upstream de RHEL
Por Qué es Necesaria la Migración
Riesgos de Seguridad:
# Verifica el tiempo desde la última actualización de seguridad
rpm -qa --last | grep -i kernel | head -5
# Los sistemas sin actualizaciones no reciben parches de seguridad
# Las vulnerabilidades sin parchear se acumulan con el tiempo
# Los marcos de cumplimiento requieren actualizaciones de seguridad actuales
Problemas de Cumplimiento:
- PCI-DSS requiere sistemas operativos soportados
- HIPAA exige gestión de parches de seguridad
- El cumplimiento SOC 2 demanda software actualizado
- Requisitos de seguros y auditorías
Deuda Técnica:
- Los parches de seguridad faltantes crean vulnerabilidades
- Los paquetes de software se vuelven cada vez más obsoletos
- El software de terceros puede eliminar el soporte
- Las imágenes base de contenedores se vuelven inseguras
Rocky Linux vs AlmaLinux: Comparación
Ambas distribuciones tienen como objetivo reemplazar CentOS con alternativas compatibles con RHEL, pero existen diferencias sutiles.
Resumen de Rocky Linux
# Características de Rocky Linux
cat << 'EOF'
Fundado: 2020
Fundador: Gregory Kurtzer (fundador original de CentOS)
Gobernanza: Rocky Enterprise Software Foundation (liderada por la comunidad)
Financiación: Patrocinios, donaciones
Compatibilidad Binaria: 1:1 con RHEL
Ciclo de Soporte: 10 años (coincidiendo con RHEL)
Soporte Comercial: Opciones emergentes de terceros
EOF
Características Clave:
- Estructura de gobernanza impulsada por la comunidad
- Fuerte enfoque en principios de código abierto
- Comunidad de desarrollo activa
- Creciente soporte del ecosistema
Resumen de AlmaLinux
# Características de AlmaLinux
cat << 'EOF'
Fundado: 2020
Fundador: CloudLinux Inc.
Gobernanza: AlmaLinux OS Foundation (sin fines de lucro)
Financiación: Patrocinio de CloudLinux, donaciones
Compatibilidad Binaria: 1:1 con RHEL (moviéndose a compatibilidad ABI)
Ciclo de Soporte: 10 años (coincidiendo con RHEL)
Soporte Comercial: Soporte pago de CloudLinux disponible
EOF
Características Clave:
- Respaldo comercial de CloudLinux
- Infraestructura madura desde el día uno
- Soporte profesional disponible
- Fuerte enfoque en seguridad
Comparación de Características
| Característica | Rocky Linux | AlmaLinux |
|---|---|---|
| Compatibilidad RHEL | Binaria 1:1 | Binaria 1:1 (ABI futuro) |
| Gobernanza | Fundación Comunitaria | Fundación Sin Fines de Lucro |
| Respaldo Comercial | Ninguno | CloudLinux |
| Soporte Pago | Terceros | CloudLinux |
| Herramientas de Migración | migrate2rocky | almalinux-deploy |
| Tiempo de Lanzamiento | Días después de RHEL | Días después de RHEL |
| Personalización | Cambios mínimos | Cambios mínimos |
¿Cuál Elegir?
Elige Rocky Linux si:
- Prefieres gobernanza puramente comunitaria
- Valoras la independencia de la influencia corporativa
- Tu equipo tiene experiencia con CentOS 7
- No requieres soporte comercial
Elige AlmaLinux si:
- Quieres opciones de soporte comercial
- Prefieres respaldo organizacional
- Necesitas SLAs profesionales
- Valoras la infraestructura de CloudLinux
Realidad: Ambas distribuciones son excelentes reemplazos de CentOS. Las diferencias son principalmente filosóficas en lugar de técnicas. Muchas organizaciones eligen basándose en preferencias de la comunidad o relaciones de proveedores existentes.
# Prueba ambas distribuciones antes de decidir
# Usa VMs o contenedores para evaluar cada una
docker run -it rockylinux:9 bash
docker run -it almalinux:9 bash
Planificación y Evaluación Pre-Migración
Las migraciones exitosas comienzan con planificación exhaustiva y evaluación del sistema.
Inventario del Sistema
#!/bin/bash
# Crea un inventario completo del sistema
REPORT_DIR="/root/migration-assessment-$(date +%Y%m%d)"
mkdir -p "$REPORT_DIR"
echo "Creando inventario del sistema para planificación de migración..."
# Información del sistema
hostnamectl > "$REPORT_DIR/system-info.txt"
cat /etc/centos-release >> "$REPORT_DIR/system-info.txt"
uname -a >> "$REPORT_DIR/system-info.txt"
# Detalles del hardware
lscpu > "$REPORT_DIR/cpu-info.txt"
free -h > "$REPORT_DIR/memory-info.txt"
df -h > "$REPORT_DIR/disk-info.txt"
lsblk >> "$REPORT_DIR/disk-info.txt"
# Paquetes instalados
rpm -qa | sort > "$REPORT_DIR/installed-packages.txt"
yum repolist > "$REPORT_DIR/repositories.txt"
# Servicios en ejecución
systemctl list-units --type=service --state=running > "$REPORT_DIR/services.txt"
# Módulos del kernel
lsmod > "$REPORT_DIR/kernel-modules.txt"
# Configuración de red
ip addr show > "$REPORT_DIR/network-config.txt"
ip route show >> "$REPORT_DIR/network-config.txt"
# Estado de SELinux
sestatus > "$REPORT_DIR/selinux-status.txt"
# RPMs personalizados (no de repos oficiales)
rpm -qa --qf '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH} %{VENDOR}\n' | grep -v "CentOS\|Red Hat" > "$REPORT_DIR/custom-packages.txt"
echo "Inventario guardado en $REPORT_DIR"
Identificar Servicios Críticos
#!/bin/bash
# Documenta servicios críticos y sus configuraciones
cat << 'EOF' > /root/critical-services.md
## Inventario de Servicios Críticos
### Servicios Web
- Nginx: /etc/nginx/
- Apache: /etc/httpd/
- Configuraciones: Vhosts personalizados, certificados SSL
### Servicios de Base de Datos
- PostgreSQL: /var/lib/pgsql/
- MariaDB: /var/lib/mysql/
- Configuraciones: my.cnf personalizado, pg_hba.conf
### Servicios de Aplicaciones
- Aplicaciones personalizadas: /opt/applications/
- Unidades SystemD: /etc/systemd/system/
- Trabajos Cron: /etc/cron.d/, /var/spool/cron/
### Servicios de Red
- Firewalld: /etc/firewalld/
- DNS: /etc/named/
- NTP: /etc/chrony/
### Monitoreo y Registro
- Exportadores de Prometheus
- Reenvío de logs (rsyslog)
- Agentes de monitoreo
EOF
Verificar Software de Terceros
# Identifica repositorios no estándar
yum repolist all
# Verifica paquetes EPEL
rpm -qa | grep epel
# Verifica software comercial
rpm -qa | grep -E "oracle|mongodb|elastic|puppet|chef"
# Lista paquetes de repos de terceros
yum list installed | grep -v "@base\|@updates\|@extras"
# Documenta controladores propietarios
lsmod | grep -E "nvidia|amd|proprietary"
Evaluar Complejidad de Migración
cat << 'EOF' > /root/migration-complexity.md
## Evaluación de Complejidad de Migración
### Baja Complejidad (Seguro para migración in-place)
- [ ] Stack LAMP/LEMP estándar
- [ ] Usando solo repositorios oficiales de CentOS
- [ ] Sin módulos personalizados del kernel
- [ ] Configuraciones estándar
- [ ] Ambiente de pruebas disponible
### Complejidad Media (In-place posible con precaución)
- [ ] Paquetes EPEL instalados
- [ ] Repositorios de terceros (Docker, PostgreSQL)
- [ ] Configuraciones personalizadas pero bien documentadas
- [ ] Algo de software propietario
- [ ] Ambiente de pruebas limitado
### Alta Complejidad (Considerar instalación limpia)
- [ ] Kernel personalizado compilado
- [ ] Controladores propietarios
- [ ] Software comercial no soportado
- [ ] Personalizaciones extensivas
- [ ] Sin ambiente de pruebas
- [ ] Sistema de producción crítico
**Decisión**: Basado en la evaluación, elegir método de migración
EOF
Crear Cronología de Migración
cat << 'EOF' > /root/migration-timeline.md
## Cronología de Migración de CentOS a Rocky Linux
### Fase 1: Preparación (Semana 1-2)
- [ ] Completar inventario del sistema
- [ ] Documentar configuraciones
- [ ] Crear respaldos
- [ ] Configurar ambiente de pruebas
- [ ] Probar migración en réplica
### Fase 2: Pruebas (Semana 3-4)
- [ ] Realizar migración de prueba
- [ ] Validar aplicaciones
- [ ] Documentar problemas y soluciones
- [ ] Actualizar procedimientos de migración
- [ ] Capacitar al equipo en nuevos procedimientos
### Fase 3: Sistemas No Críticos (Semana 5-6)
- [ ] Migrar servidores de desarrollo
- [ ] Migrar ambientes de prueba
- [ ] Validar monitoreo
- [ ] Documentar cualquier problema
### Fase 4: Migración de Producción (Semana 7-12)
- [ ] Programar ventanas de mantenimiento
- [ ] Migrar servidores de producción (escalonado)
- [ ] Monitorear de cerca problemas
- [ ] Actualizar documentación
- [ ] Validar cumplimiento
### Fase 5: Limpieza (Semana 13-14)
- [ ] Eliminar respaldos antiguos
- [ ] Actualizar planes de recuperación de desastres
- [ ] Actualizaciones finales de documentación
- [ ] Retrospectiva del equipo
EOF
Preparación de Respaldo y Recuperación
Nunca migres sin respaldos completos y procedimientos de recuperación probados.
Respaldo Completo del Sistema
#!/bin/bash
# Respaldo completo antes de la migración
BACKUP_DIR="/backup/pre-migration-$(date +%Y%m%d)"
mkdir -p "$BACKUP_DIR"
echo "Iniciando respaldo completo del sistema..."
# Respaldo completo del sistema (excluyendo sistemas de archivos virtuales)
tar --exclude=/backup \
--exclude=/proc \
--exclude=/tmp \
--exclude=/mnt \
--exclude=/dev \
--exclude=/sys \
--exclude=/run \
--exclude=/media \
--exclude=/var/cache \
--exclude=/var/tmp \
-czf "$BACKUP_DIR/system-backup.tar.gz" /
# Respaldar configuraciones críticas por separado
tar -czf "$BACKUP_DIR/etc-backup.tar.gz" /etc
tar -czf "$BACKUP_DIR/var-lib-backup.tar.gz" /var/lib
# Crear lista de paquetes RPM
rpm -qa --qf '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' | sort > "$BACKUP_DIR/rpm-list.txt"
# Respaldar configuración de yum/dnf
tar -czf "$BACKUP_DIR/yum-backup.tar.gz" /etc/yum.repos.d/ /etc/yum.conf
echo "Respaldo del sistema completado: $BACKUP_DIR"
echo "Tamaño del respaldo: $(du -sh $BACKUP_DIR)"
Respaldos de Bases de Datos
#!/bin/bash
# Respaldar todas las bases de datos antes de la migración
BACKUP_DIR="/backup/databases-$(date +%Y%m%d)"
mkdir -p "$BACKUP_DIR"
# Respaldo de PostgreSQL
if systemctl is-active --quiet postgresql; then
echo "Respaldando PostgreSQL..."
sudo -u postgres pg_dumpall > "$BACKUP_DIR/postgresql-all.sql"
gzip "$BACKUP_DIR/postgresql-all.sql"
fi
# Respaldo de MariaDB/MySQL
if systemctl is-active --quiet mariadb; then
echo "Respaldando MariaDB..."
mysqldump --all-databases --single-transaction \
--routines --triggers --events \
> "$BACKUP_DIR/mariadb-all.sql"
gzip "$BACKUP_DIR/mariadb-all.sql"
fi
echo "Respaldos de bases de datos completados: $BACKUP_DIR"
Respaldos Basados en Snapshots
# Para máquinas virtuales - crear snapshot antes de la migración
# Snapshot de VMware
# Crear snapshot vía interfaz de vSphere/ESXi
# Nombre: "Pre-Rocky-Migration-$(date +%Y%m%d)"
# Snapshot de LVM
sudo lvcreate -L 20G -s -n root-pre-migration /dev/vg0/root
# Snapshots en la nube (ejemplo AWS)
aws ec2 create-snapshot \
--volume-id vol-1234567890abcdef0 \
--description "Pre-Rocky-Linux-migration-$(date +%Y%m%d)"
# Verificar snapshot creado
aws ec2 describe-snapshots --snapshot-ids snap-xxxxxxxxx
Método de Migración 1: Migración In-Place (Recomendado)
La migración in-place convierte CentOS a Rocky Linux o AlmaLinux sin reinstalación.
Migrando a Rocky Linux
Paso 1: Preparar el Sistema
# Actualizar CentOS a la última versión antes de la migración
sudo yum update -y
# Reiniciar si se actualizó el kernel
if [ -f /var/run/reboot-required ]; then
echo "Reinicio requerido - por favor reinicia antes de la migración"
# sudo reboot
fi
# Verificar que el sistema está completamente actualizado
yum check-update
Paso 2: Descargar Script de Migración
# Descargar script oficial migrate2rocky
curl https://raw.githubusercontent.com/rocky-linux/rocky-tools/main/migrate2rocky/migrate2rocky.sh -o migrate2rocky.sh
# Revisar el script (recomendado)
less migrate2rocky.sh
# Hacer ejecutable
chmod +x migrate2rocky.sh
Paso 3: Ejecutar Migración
# Ejecutar script de migración
# Usar screen o tmux para sesiones SSH
screen -S rocky-migration
# Ejecutar la migración
sudo ./migrate2rocky.sh -r
# El script:
# 1. Verificará compatibilidad del sistema
# 2. Descargará repositorios de Rocky Linux
# 3. Reemplazará paquetes de CentOS con equivalentes de Rocky
# 4. Actualizará todos los paquetes
# 5. Instalará branding de Rocky
# Este proceso toma 15-60 minutos dependiendo de:
# - Número de paquetes
# - Velocidad de red
# - Recursos del sistema
Paso 4: Reiniciar y Verificar
# Reiniciar sistema después de la migración
sudo reboot
# Después del reinicio, verificar Rocky Linux
cat /etc/rocky-release
# Debería mostrar: Rocky Linux release 8.x (Green Obsidian)
# Verificar información del SO
hostnamectl
# Verificar base de datos RPM
rpm -qa | grep -i rocky
# Verificar remanentes de CentOS
rpm -qa | grep -i centos
Migrando a AlmaLinux
Paso 1: Preparar el Sistema
# Actualizar CentOS completamente
sudo yum update -y
# Limpiar caché de yum
sudo yum clean all
# Verificar que no hay paquetes rotos
rpm -Va
# Reiniciar si es necesario
if [ -f /var/run/reboot-required ]; then
sudo reboot
fi
Paso 2: Descargar Herramienta de Migración de AlmaLinux
# Descargar script almalinux-deploy
curl -O https://raw.githubusercontent.com/AlmaLinux/almalinux-deploy/master/almalinux-deploy.sh
# Verificar integridad del script (opcional pero recomendado)
# Verificar SHA256 de la documentación oficial de AlmaLinux
# Hacer ejecutable
chmod +x almalinux-deploy.sh
Paso 3: Ejecutar Migración
# Ejecutar en sesión screen/tmux
screen -S alma-migration
# Ejecutar migración
sudo bash almalinux-deploy.sh
# El script:
# 1. Verificará compatibilidad del sistema
# 2. Respaldará archivos de lanzamiento actuales
# 3. Descargará repositorios de AlmaLinux
# 4. Reemplazará paquetes de CentOS
# 5. Actualizará sistema a AlmaLinux
# La migración típicamente toma 20-60 minutos
Paso 4: Verificar Migración
# Reiniciar después de la migración
sudo reboot
# Verificar instalación de AlmaLinux
cat /etc/almalinux-release
# Salida: AlmaLinux release 8.x (Sky Tiger)
# Verificar información del sistema
hostnamectl
# Verificar base de paquetes
rpm -qa | grep -i alma
# Verificar paquetes de CentOS restantes
rpm -qa | grep -i centos | grep -v centos-release
Limpieza de Paquetes Post-Migración
# Eliminar paquetes antiguos de branding de CentOS (si quedan)
sudo rpm -e --nodeps $(rpm -qa | grep -i centos-logos)
sudo rpm -e --nodeps $(rpm -qa | grep -i centos-release)
# Limpiar caché de paquetes
sudo dnf clean all
# Reconstruir base de datos RPM
sudo rpm --rebuilddb
# Actualizar todos los paquetes
sudo dnf update -y
Método de Migración 2: Instalación Limpia
Para sistemas complejos o cuando la migración in-place es demasiado arriesgada.
Procedimiento de Instalación Limpia
Paso 1: Documentar Sistema Actual
#!/bin/bash
# Documentación completa para instalación limpia
DOC_DIR="/root/fresh-install-docs-$(date +%Y%m%d)"
mkdir -p "$DOC_DIR"
# Paquetes instalados
rpm -qa > "$DOC_DIR/packages.txt"
# Configuraciones de servicios
systemctl list-unit-files --state=enabled > "$DOC_DIR/enabled-services.txt"
# Configuración de red
cp -r /etc/sysconfig/network-scripts "$DOC_DIR/"
ip addr show > "$DOC_DIR/ip-config.txt"
# Reglas de firewall
firewall-cmd --list-all-zones > "$DOC_DIR/firewall-rules.txt"
# Trabajos cron
crontab -l > "$DOC_DIR/root-crontab.txt"
ls -la /etc/cron.d/ > "$DOC_DIR/cron.d-files.txt"
# Usuarios y grupos
getent passwd > "$DOC_DIR/users.txt"
getent group > "$DOC_DIR/groups.txt"
# Ubicaciones de datos de aplicaciones
find /opt -type d -maxdepth 2 > "$DOC_DIR/opt-structure.txt"
find /var/www -type d -maxdepth 2 > "$DOC_DIR/www-structure.txt" 2>/dev/null
Paso 2: Respaldar Datos de Aplicaciones
#!/bin/bash
# Respaldar datos de aplicaciones y archivos de usuario
BACKUP_DIR="/backup/fresh-install-$(date +%Y%m%d)"
mkdir -p "$BACKUP_DIR"
# Datos de aplicaciones web
if [ -d /var/www ]; then
tar -czf "$BACKUP_DIR/var-www.tar.gz" /var/www
fi
# Directorios de aplicaciones
if [ -d /opt ]; then
tar -czf "$BACKUP_DIR/opt.tar.gz" /opt
fi
# Directorios home de usuarios
tar -czf "$BACKUP_DIR/home.tar.gz" /home
# Bases de datos (formato dump)
# Ver sección de respaldo de bases de datos anterior
echo "Datos de aplicaciones respaldados en $BACKUP_DIR"
Paso 3: Instalar Rocky Linux / AlmaLinux Limpio
# Descargar ISO de fuentes oficiales
# Rocky Linux: https://rockylinux.org/download
# AlmaLinux: https://almalinux.org/get-almalinux/
# Arrancar desde medios de instalación
# Seguir asistente de instalación:
# 1. Seleccionar idioma
# 2. Configurar particiones de disco (coincidir con diseño antiguo)
# 3. Configurar red (mismo IP/hostname)
# 4. Establecer contraseña de root
# 5. Crear cuentas de usuario
# 6. Seleccionar instalación mínima o servidor
# 7. Completar instalación y reiniciar
Paso 4: Restaurar Configuración y Datos
#!/bin/bash
# Restaurar configuraciones en instalación limpia
BACKUP_DIR="/backup/fresh-install-20241215"
# Instalar paquetes del sistema antiguo
# Revisar lista e instalar paquetes necesarios
while read package; do
dnf install -y "$package" || echo "Fallido: $package"
done < "$BACKUP_DIR/packages.txt"
# Restaurar configuraciones
tar -xzf "$BACKUP_DIR/etc-specific.tar.gz" -C /
# Restaurar datos de aplicaciones
tar -xzf "$BACKUP_DIR/var-www.tar.gz" -C /
tar -xzf "$BACKUP_DIR/opt.tar.gz" -C /
# Restaurar bases de datos
# PostgreSQL
gunzip < "$BACKUP_DIR/postgresql-all.sql.gz" | sudo -u postgres psql
# MariaDB
gunzip < "$BACKUP_DIR/mariadb-all.sql.gz" | mysql
# Establecer permisos apropiados
chown -R nginx:nginx /var/www # o apache:apache
restorecon -R /var/www # Restaurar contextos SELinux
# Habilitar e iniciar servicios
systemctl enable nginx postgresql
systemctl start nginx postgresql
Migrando Cargas de Trabajo Específicas
Diferentes cargas de trabajo requieren consideraciones específicas durante la migración.
Servidores Web (Apache/Nginx)
# Antes de la migración - respaldar configuraciones
tar -czf /backup/httpd-config.tar.gz /etc/httpd
tar -czf /backup/nginx-config.tar.gz /etc/nginx
# Después de la migración - verificar servidor web
systemctl status httpd
systemctl status nginx
# Probar configuración
httpd -t # Apache
nginx -t # Nginx
# Verificar hosts virtuales
httpd -S # Resumen de vhost de Apache
nginx -T # Configuración completa de Nginx
# Verificar certificados SSL
openssl x509 -in /etc/ssl/certs/cert.pem -text -noout
# Reiniciar servicios web
systemctl restart httpd nginx
Servidores de Base de Datos
# Verificación de migración de PostgreSQL
sudo -u postgres psql -c "SELECT version();"
# Verificar bases de datos
sudo -u postgres psql -l
# Verificar directorio de datos
ls -la /var/lib/pgsql/
# Verificación de MariaDB/MySQL
mysql -e "SELECT VERSION();"
# Verificar bases de datos
mysql -e "SHOW DATABASES;"
# Verificar integridad de datos
mysqlcheck --all-databases
# Verificar rendimiento
mysqladmin status
Cargas de Trabajo Docker y Contenedores
# Verificar instalación de Docker
docker --version
systemctl status docker
# Listar contenedores existentes
docker ps -a
# Listar imágenes
docker images
# Verificar redes
docker network ls
# Probar creación de contenedor
docker run hello-world
# Verificar Docker Compose
docker-compose --version
# Verificar volúmenes
docker volume ls
Nodos Kubernetes
# Después de la migración, reunirse con clúster o verificar estado del nodo
# Verificar kubelet
systemctl status kubelet
# Verificar estado del nodo
kubectl get nodes
# Verificar pods en ejecución
kubectl get pods --all-namespaces
# Verificar plugin CNI
ls -la /etc/cni/net.d/
# Verificar runtime de contenedores
crictl version
# Drenar nodo antes de la migración
kubectl drain node-name --ignore-daemonsets
# Descordonar después de la migración
kubectl uncordon node-name
Verificación Post-Migración
La verificación exhaustiva asegura el éxito de la migración.
Lista de Verificación del Sistema
#!/bin/bash
# Verificación completa post-migración
echo "Reporte de Verificación Post-Migración"
echo "===================================="
echo ""
# Versión del SO
echo "Sistema Operativo:"
cat /etc/os-release | grep "^NAME\|^VERSION"
echo ""
# Versión del Kernel
echo "Kernel:"
uname -r
echo ""
# Estado del Sistema
echo "Estado del Sistema:"
systemctl is-system-running
echo ""
# Servicios Fallidos
echo "Servicios Fallidos:"
systemctl --failed
echo ""
# Espacio en Disco
echo "Espacio en Disco:"
df -h / | tail -1
echo ""
# Memoria
echo "Memoria:"
free -h | grep Mem
echo ""
# Red
echo "Conectividad de Red:"
ping -c 3 google.com > /dev/null 2>&1 && echo "✓ Internet OK" || echo "✗ Internet FALLIDO"
echo ""
# SELinux
echo "Estado de SELinux:"
sestatus | grep "Current mode"
echo ""
# Base de Datos de Paquetes
echo "Base de Datos RPM:"
rpm -qa > /dev/null 2>&1 && echo "✓ BD RPM OK" || echo "✗ BD RPM DAÑADA"
echo ""
# Acceso a Repositorios
echo "Acceso a Repositorios:"
dnf repolist > /dev/null 2>&1 && echo "✓ Repos OK" || echo "✗ Repos FALLIDOS"
echo ""
Pruebas Específicas de Aplicaciones
#!/bin/bash
# Probar aplicaciones críticas
# Respuesta del servidor web
curl -I http://localhost > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "✓ Servidor web respondiendo"
else
echo "✗ Servidor web no respondiendo"
fi
# Conexión de base de datos
if systemctl is-active --quiet postgresql; then
sudo -u postgres psql -c "SELECT 1;" > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "✓ PostgreSQL respondiendo"
else
echo "✗ Conexión de PostgreSQL fallida"
fi
fi
# Verificación de salud de aplicación personalizada
# Agregar pruebas específicas de aplicación aquí
curl http://localhost:8000/health
Verificación de Seguridad
# Verificar que SELinux está en modo enforcing
sestatus
# Verificar denegaciones AVC
ausearch -m avc -ts recent
# Verificar firewall
firewall-cmd --state
firewall-cmd --list-all
# Verificar puertos abiertos
ss -tulpn
# Verificar configuración SSH
sshd -t
# Verificar cambios no autorizados
rpm -Va | grep '^..5' # Archivos con contenido cambiado
Solución de Problemas Comunes
Fallos de Script de Migración
# Problema: Script de migración falla con errores de dependencias
# Solución: Actualizar CentOS completamente primero
sudo yum update -y
sudo yum clean all
sudo rpm --rebuilddb
# Eliminar paquetes problemáticos
sudo rpm -e --nodeps nombre-paquete
# Reintentar migración
sudo ./migrate2rocky.sh -r
Conflictos de Paquetes
# Problema: Conflictos RPM durante la migración
# Identificar paquetes en conflicto
rpm -qa | grep -i conflict
# Eliminar conflictos manualmente
sudo rpm -e --nodeps paquete-conflictivo
# Reinstalar después de la migración
sudo dnf install nombre-paquete
Problemas de Repositorios
# Problema: No se puede acceder a repositorios después de la migración
# Limpiar caché
sudo dnf clean all
sudo rm -rf /var/cache/dnf
# Regenerar caché
sudo dnf makecache
# Verificar configuración de repositorio
ls -la /etc/yum.repos.d/
# Probar acceso a repositorio
sudo dnf repolist
sudo dnf check-update
Denegaciones de SELinux
# Problema: Servicios fallan debido a SELinux
# Verificar denegaciones
sudo ausearch -m avc -ts recent
# Establecer temporalmente en permisivo para solucionar problemas
sudo setenforce 0
# Corregir contextos de SELinux
sudo restorecon -R /var/www
sudo restorecon -R /etc/nginx
# Re-habilitar enforcing
sudo setenforce 1
# Generar política para denegaciones persistentes
sudo ausearch -m avc -ts recent | audit2allow -M mypolicy
sudo semodule -i mypolicy.pp
Problemas de Arranque
# Problema: Sistema no arranca después de la migración
# Arrancar en modo rescate
# Seleccionar kernel más antiguo del menú GRUB
# Hacer chroot al sistema
mount /dev/sda1 /mnt
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
chroot /mnt
# Reinstalar bootloader
grub2-install /dev/sda
grub2-mkconfig -o /boot/grub2/grub.cfg
# Salir y reiniciar
exit
reboot
Migrando a Escala
Gestionar migraciones en muchos servidores requiere automatización.
Playbook Ansible para Migración
---
# rocky-migration-playbook.yml
- name: Migrar CentOS a Rocky Linux
hosts: centos_servers
serial: 1 # Migrar un servidor a la vez
become: yes
tasks:
- name: Crear directorio de respaldo
file:
path: /backup/pre-migration-{{ ansible_date_time.date }}
state: directory
- name: Respaldar lista de paquetes
shell: rpm -qa > /backup/pre-migration-{{ ansible_date_time.date }}/packages.txt
- name: Respaldar configuraciones
archive:
path: /etc
dest: /backup/pre-migration-{{ ansible_date_time.date }}/etc-backup.tar.gz
- name: Actualizar CentOS
yum:
name: '*'
state: latest
- name: Reiniciar si es necesario
reboot:
reboot_timeout: 600
when: ansible_facts['reboot_required'] is defined
- name: Descargar script migrate2rocky
get_url:
url: https://raw.githubusercontent.com/rocky-linux/rocky-tools/main/migrate2rocky/migrate2rocky.sh
dest: /root/migrate2rocky.sh
mode: '0755'
- name: Ejecutar migración
command: /root/migrate2rocky.sh -r
register: migration_result
- name: Reiniciar después de la migración
reboot:
reboot_timeout: 600
- name: Verificar Rocky Linux
shell: cat /etc/rocky-release
register: rocky_version
- name: Mostrar resultado
debug:
msg: "Migración exitosa: {{ rocky_version.stdout }}"
Script de Migración por Lotes
#!/bin/bash
# Migrar múltiples servidores desde archivo de inventario
INVENTORY_FILE="/root/servers-to-migrate.txt"
LOG_FILE="/root/migration-log-$(date +%Y%m%d).txt"
# Leer lista de servidores
while IFS= read -r server; do
echo "$(date): Iniciando migración en $server" | tee -a "$LOG_FILE"
# SSH al servidor y ejecutar migración
ssh root@$server << 'ENDSSH'
# Respaldo
tar -czf /backup/pre-migration-$(date +%Y%m%d).tar.gz /etc
# Actualizar
yum update -y
# Descargar y ejecutar migración
curl -O https://raw.githubusercontent.com/rocky-linux/rocky-tools/main/migrate2rocky/migrate2rocky.sh
chmod +x migrate2rocky.sh
./migrate2rocky.sh -r
# Reiniciar
reboot
ENDSSH
# Esperar a que el servidor vuelva en línea
echo "Esperando a que $server se reinicie..." | tee -a "$LOG_FILE"
sleep 60
until ssh root@$server "echo 'Servidor en línea'"; do
echo "Aún esperando a $server..."
sleep 30
done
# Verificar migración
ssh root@$server "cat /etc/rocky-release" | tee -a "$LOG_FILE"
echo "$(date): Migración completada en $server" | tee -a "$LOG_FILE"
echo "---" | tee -a "$LOG_FILE"
done < "$INVENTORY_FILE"
echo "Todas las migraciones completadas. Verifica $LOG_FILE para detalles"
Rutas de Migración Alternativas
CentOS Stream
# Convertir CentOS Linux a CentOS Stream
# No recomendado para estabilidad en producción
sudo dnf install centos-release-stream
sudo dnf swap centos-linux-repos centos-stream-repos
sudo dnf distro-sync
# CentOS Stream recibe actualizaciones antes que RHEL
# Modelo de lanzamiento continuo
# Menos predecible para producción
Red Hat Enterprise Linux
# Convertir a RHEL (requiere suscripción)
# Descargar herramienta convert2rhel
curl -o convert2rhel.rpm https://access.redhat.com/convert2rhel-latest.rpm
sudo yum install convert2rhel.rpm
# Registrar con Red Hat
subscription-manager register
# Ejecutar conversión
convert2rhel
# Requiere suscripción RHEL válida
# Proporciona soporte oficial de Red Hat
Mejores Prácticas y Recomendaciones
Mejores Prácticas Pre-Migración
- Prueba Primero: Siempre prueba la migración en sistemas no productivos
- Respalda Todo: Múltiples tipos de respaldo (snapshots, tar, bases de datos)
- Documenta Exhaustivamente: Inventario, configuraciones, procedimientos
- Programa Ventanas de Mantenimiento: Comunica con stakeholders
- Ten Plan de Rollback: Sabe cómo restaurar desde respaldos
Durante la Migración
- Usa Screen/Tmux: Previene problemas de desconexión SSH
- Monitorea Progreso: Observa logs en terminal separada
- No Interrumpas: Deja que la migración se complete totalmente
- Mantén Notas: Documenta cualquier error o advertencia
Post-Migración
- Verifica Exhaustivamente: Verifica todos los servicios y aplicaciones
- Monitorea de Cerca: Observa logs durante varios días
- Actualiza Documentación: Refleja nueva versión de SO
- Planifica Actualizaciones Regulares: Establece cronograma de mantenimiento
Cronología Recomendada
# Para ambientes de producción
Semana 1-2: Planificación y documentación
Semana 3-4: Migración y validación de ambiente de prueba
Semana 5-6: Migración de sistemas no críticos
Semana 7+: Migración de producción (escalonada, monitorizada)
Conclusión
Migrar de CentOS a Rocky Linux o AlmaLinux es una transición necesaria para organizaciones que buscan distribuciones estables, impulsadas por la comunidad y compatibles con RHEL. Tanto Rocky Linux como AlmaLinux proporcionan excelentes reemplazos para CentOS, ofreciendo compatibilidad binaria, soporte a largo plazo y ambientes familiares para administradores de sistemas.
Puntos Clave:
-
La Migración es Necesaria: CentOS 7 alcanza EOL en junio de 2024. Los sistemas sin parchear crean riesgos de seguridad y problemas de cumplimiento.
-
Ambas Opciones son Viables: Rocky Linux y AlmaLinux son excelentes elecciones. La selección a menudo se reduce a preferencias filosóficas o requisitos de soporte.
-
La Migración In-Place Funciona: Los scripts migrate2rocky y almalinux-deploy proporcionan migraciones in-place confiables para la mayoría de los sistemas.
-
Las Pruebas son Críticas: Nunca migres producción sin probar el procedimiento exacto en réplicas primero.
-
Los Respaldos son Obligatorios: Los respaldos completos proporcionan red de seguridad para problemas inesperados.
-
La Verificación es Esencial: Las pruebas exhaustivas post-migración aseguran que todos los servicios funcionen correctamente.
-
Planifica para Escala: Los despliegues grandes se benefician de la automatización vía Ansible o herramientas similares.
Cuándo Elegir Rocky Linux:
- Se prefiere gobernanza puramente comunitaria
- Se valora independencia de influencia corporativa
- Se desea desarrollo impulsado por la comunidad
Cuándo Elegir AlmaLinux:
- Se necesitan opciones de soporte comercial
- Se valora respaldo de CloudLinux
- Se requieren SLAs profesionales
Ambas distribuciones reciben actualizaciones dentro de días de los lanzamientos de RHEL, proporcionan ciclos de soporte de 10 años y mantienen la estabilidad y previsibilidad que hicieron popular a CentOS. Las diferencias técnicas son mínimas, haciendo cualquier elección confiable para ambientes de producción.
La discontinuación de CentOS, aunque disruptiva, creó oportunidades para distribuciones Enterprise Linux verdaderamente impulsadas por la comunidad. Al migrar a Rocky Linux o AlmaLinux, las organizaciones mantienen compatibilidad con RHEL mientras apoyan proyectos de comunidad de código abierto.
Próximos Pasos
Después de una migración exitosa:
- Actualizar documentación de recuperación de desastres
- Modificar monitoreo y alertas para nueva versión de SO
- Capacitar equipo en cualquier diferencia
- Establecer cronograma de actualización regular
- Unirse a foros de comunidad y listas de correo
- Contribuir de vuelta a la distribución elegida
- Planificar para futuras migraciones LTS
La migración desde CentOS puede haber sido forzada por las circunstancias, pero tanto Rocky Linux como AlmaLinux demuestran la resiliencia y adaptabilidad de la comunidad de código abierto. Con planificación y ejecución adecuadas, esta migración fortalece en lugar de debilitar tu base de infraestructura.


