Cómo solucionar el error de metadatos del repositorio AppStream en CentOS 8
Introducción
Al ejecutar una actualización o intentar instalar un paquete en CentOS 8, el gestor de paquetes puede detenerse con este error:
Failed to load metadata for 'AppStream' repo: Cannot prepare internal mirror list: No URLs in mirror list.
Esto no es un fallo de red ni un problema temporal de los mirrors. Es el resultado esperado de que CentOS 8 haya llegado al final de su vida útil. Este artículo explica por qué ocurre el error, cuál es la solución correcta a largo plazo y cómo devolver el sistema en línea temporalmente si aún necesita acceder a él.

Por qué ocurre este error
CentOS Linux 8 llegó al final de su vida útil el 31 de diciembre de 2021. Después de esa fecha, el servicio de listas de mirrors para CentOS Linux 8 se retiró y los paquetes se trasladaron al servidor de archivo vault.centos.org.
Los archivos de repositorio del sistema siguen apuntando a mirrorlist.centos.org. Como ese servicio ya no devuelve ninguna URL, la lista de mirrors vuelve vacía, y el gestor de paquetes no tiene ninguna dirección desde la cual descargar los metadatos. Ese es el mensaje que ve.
Los paquetes no se eliminaron. Se trasladaron a un servidor de archivo, vault.centos.org. Esto es lo que hace posible la solución temporal que se describe a continuación.
Solución recomendada: migrar a AlmaLinux o Rocky Linux
Dado que CentOS 8 ya no recibe ninguna actualización, incluidas las de seguridad, mantenerlo en producción supone un riesgo. La solución correcta es migrar a una distribución que sea compatible a nivel binario con el sistema que ya está ejecutando.
AlmaLinux y Rocky Linux son reconstrucciones gratuitas de Red Hat Enterprise Linux, mantenidas por la comunidad. Están diseñadas como sustitutos directos de CentOS, de modo que el software y la configuración existentes siguen funcionando sin cambios en la mayoría de los casos. Ambos proyectos ofrecen un script de migración in situ que convierte CentOS 8 sin necesidad de reinstalar el servidor.
Realice siempre una copia de seguridad completa o una instantánea antes de migrar. Una conversión in situ modifica paquetes esenciales del sistema, y conviene disponer de una forma de volver atrás si algo sale mal.
Ambos scripts de migración necesitan un gestor de paquetes funcional para descargar los nuevos paquetes. En un sistema CentOS 8 que ha llegado al final de su vida útil, los repositorios ya no están disponibles, así que aplique primero la solución temporal de la siguiente sección y luego ejecute la migración.
Para migrar a AlmaLinux 8:
curl -O https://raw.githubusercontent.com/AlmaLinux/almalinux-deploy/master/almalinux-deploy.sh bash almalinux-deploy.sh

Para migrar a Rocky Linux 8:
curl -O https://raw.githubusercontent.com/rocky-linux/rocky-tools/main/migrate2rocky/migrate2rocky.sh bash migrate2rocky.sh -r

Cuando el script finalice, reinicie el servidor y confirme el nuevo sistema con:
cat /etc/os-release dnf repolist


Si el servidor no se puede migrar in situ, o prefiere empezar de cero, despliegue un nuevo VPS con AlmaLinux o Rocky Linux ya instalado y traslade allí sus datos. INTROSERV ofrece VPS Linux con estas distribuciones disponibles ya en el momento del pedido.
Solución temporal: apuntar los repositorios al archivo
Use esto solo cuando necesite que el sistema vuelva a funcionar durante un tiempo breve, por ejemplo, para hacer una última copia de seguridad antes de migrar, o para mantener en marcha una máquina no crítica hasta poder completar la migración. Esto no vuelve a hacer que CentOS 8 sea compatible ni restablece las actualizaciones.
Antes de ejecutar los comandos siguientes, compruebe la versión exacta de su instalación con cat /etc/centos-release. Este artículo usa 8.5.2111 como ejemplo. Sustitúyalo por la versión indicada en su propio sistema. Si especifica la versión archivada incorrecta, DNF puede devolver errores 404, ya que ese directorio no existe para su instalación.

Los comandos siguientes desactivan la lista de mirrors, que ya no funciona, y hacen que los archivos de repositorio apunten en su lugar al servidor de archivo vault.centos.org:
cd /etc/yum.repos.d/ sed -i 's/^mirrorlist/#mirrorlist/g' CentOS-* sed -i 's|^#baseurl=.*mirror.centos.org|baseurl=https://vault.centos.org|g' CentOS-* sed -i 's|/$contentdir/$releasever/|/8.5.2111/|g' CentOS-*
A diferencia de los repositorios activos, el archivo está organizado en directorios de versión fijos, por ejemplo 8.5.2111. Como resultado, la ruta predeterminada $releasever ya no apunta a contenido válido y debe sustituirse por la versión archivada exacta. Esto se aplica a los tres archivos de repositorio predeterminados, AppStream, BaseOS y Extras, no solo a AppStream.
Después de ejecutar los comandos anteriores, verifique cada archivo de repositorio individualmente en lugar de confiar ciegamente en la edición masiva, ya que un sed aplicado en bloque a tres archivos es un lugar fácil para que se cuele inadvertidamente un carácter erróneo o un separador incorrecto.
Compruebe el archivo de AppStream:
cat CentOS-Linux-AppStream.repo
La línea baseurl debe leerse exactamente así, con el directorio de versión coincidiendo con la suya:
baseurl=https://vault.centos.org/8.5.2111/AppStream/x86_64/os/

Compruebe el archivo de BaseOS de la misma manera:
cat CentOS-Linux-BaseOS.repo
Y el archivo de Extras:
cat CentOS-Linux-Extras.repo
Una vez confirmados los tres archivos, limpie la caché y vuelva a generarla:
dnf clean all dnf makecache dnf repolist

Si un repositorio se corrigió correctamente, ahora descarga sus metadatos sin errores. Si algún archivo todavía tiene un error tipográfico, dnf indica el repositorio concreto que falló, lo que facilita volver atrás y comprobar solo ese archivo.
El archivo contiene los últimos paquetes publicados antes del fin de vida útil. No recibirá versiones más nuevas ni parches de seguridad. Considere esto como una forma de mantener el sistema accesible hasta que migre, no como un estado permanente.
Para confirmar que los paquetes se instalan correctamente y no solo que se cargan los metadatos, pruebe con cualquier paquete pequeño:
dnf install -y wget


Una vez que esto se realice correctamente, ejecute la actualización real:
dnf update -y
Conclusión
El error de metadatos de AppStream en CentOS 8 es una señal de que la distribución ha llegado al final de su vida útil. La única solución a largo plazo es migrar a una distribución compatible y binariamente equivalente, como AlmaLinux o Rocky Linux, idealmente después de realizar una copia de seguridad completa. La solución temporal con vault.centos.org sigue siendo útil, pero solo como un puente breve que mantiene el servidor en funcionamiento el tiempo suficiente para abandonar CentOS 8 de forma segura.