Errore nel caricamento dei metadati del repository "AppStream" [CentOS] su CentOS 8
Introduzione
Quando esegui un aggiornamento o provi a installare un pacchetto su CentOS 8, il gestore dei pacchetti potrebbe interrompersi con questo errore:
Failed to load metadata for 'AppStream' repo: Cannot prepare internal mirror list: No URLs in mirror list.
Non si tratta di un problema di rete né di un problema temporaneo dei mirror. È il risultato atteso del fatto che CentOS 8 ha raggiunto la fine del suo ciclo di vita. Questo articolo spiega perché si verifica l'errore, qual è la soluzione corretta a lungo termine e come riportare temporaneamente il sistema online se hai ancora bisogno di accedervi.

Perché si verifica questo errore
CentOS Linux 8 ha raggiunto la fine del suo ciclo di vita il 31 dicembre 2021. Dopo tale data, il servizio di mirrorlist per CentOS Linux 8 è stato dismesso e i pacchetti sono stati spostati sul server di archivio vault.centos.org.
I file dei repository sul sistema puntano ancora a mirrorlist.centos.org. Poiché quel servizio non restituisce più alcun URL, l'elenco dei mirror torna vuoto e il gestore dei pacchetti non ha alcun indirizzo da cui scaricare i metadati. Questo è il messaggio che vedi.
I pacchetti non sono stati eliminati. Sono stati spostati su un server di archivio, vault.centos.org. Questo è ciò che rende possibile la soluzione temporanea descritta di seguito.
Soluzione consigliata: migrare ad AlmaLinux o Rocky Linux
Poiché CentOS 8 non riceve più alcun aggiornamento, inclusi quelli di sicurezza, mantenerlo in produzione rappresenta un rischio. La soluzione corretta è passare a una distribuzione compatibile a livello binario con il sistema già in uso.
AlmaLinux e Rocky Linux sono ricostruzioni gratuite di Red Hat Enterprise Linux, supportate dalla community. Sono progettate come sostituti diretti di CentOS, quindi il software e la configurazione esistenti continuano a funzionare senza modifiche nella maggior parte dei casi. Entrambi i progetti forniscono uno script di migrazione in place che converte CentOS 8 senza reinstallare il server.
Esegui sempre un backup completo o uno snapshot prima di migrare. Una conversione in place modifica pacchetti fondamentali del sistema, quindi è opportuno avere un modo per tornare indietro in caso di problemi.
Entrambi gli script di migrazione richiedono un gestore di pacchetti funzionante per scaricare i nuovi pacchetti. Su un sistema CentOS 8 che ha raggiunto la fine del ciclo di vita, i repository non sono più raggiungibili, quindi applica prima la soluzione temporanea descritta nella sezione successiva, quindi esegui la migrazione.
Per migrare ad AlmaLinux 8:
curl -O https://raw.githubusercontent.com/AlmaLinux/almalinux-deploy/master/almalinux-deploy.sh bash almalinux-deploy.sh

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

Al termine dello script, riavvia il server e conferma il nuovo sistema con:
cat /etc/os-release dnf repolist


Se il server non può essere migrato in place, o preferisci ripartire da zero, distribuisci un nuovo VPS con AlmaLinux o Rocky Linux già installati e trasferisci lì i tuoi dati. INTROSERV offre VPS Linux con queste distribuzioni già disponibili al momento dell'ordine.
Soluzione temporanea: reindirizzare i repository all'archivio
Usa questa soluzione solo quando hai bisogno che il sistema torni a funzionare per un breve periodo, ad esempio per eseguire un ultimo backup prima della migrazione, oppure per mantenere in funzione una macchina non critica fino al completamento della migrazione. Questo non rende nuovamente supportato CentOS 8 e non ripristina gli aggiornamenti.
Prima di eseguire i comandi seguenti, verifica la versione esatta della tua installazione con cat /etc/centos-release. Questo articolo utilizza 8.5.2111 come esempio. Sostituiscilo con la versione indicata dal tuo sistema. Se specifichi la release archiviata sbagliata, DNF potrebbe restituire errori 404, poiché quella directory non esiste per la tua installazione.

I comandi seguenti disabilitano l'elenco dei mirror ormai inutilizzabile e fanno puntare i file dei repository al server di archivio 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 differenza dei repository attivi, l'archivio è organizzato in directory di release fisse, ad esempio 8.5.2111. Di conseguenza, il percorso predefinito $releasever non punta più a contenuti validi e deve essere sostituito con la release archiviata esatta. Questo vale per tutti e tre i file di repository predefiniti, AppStream, BaseOS ed Extras, non solo per AppStream.
Dopo aver eseguito i comandi precedenti, verifica ogni file di repository singolarmente invece di fidarti ciecamente della modifica in blocco, poiché un sed applicato in blocco su tre file è un punto facile in cui un carattere errato o un separatore sbagliato può passare inosservato.
Controlla il file AppStream:
cat CentOS-Linux-AppStream.repo
La riga baseurl dovrebbe essere esattamente così, con la directory di release corrispondente alla tua versione:
baseurl=https://vault.centos.org/8.5.2111/AppStream/x86_64/os/

Controlla il file BaseOS allo stesso modo:
cat CentOS-Linux-BaseOS.repo
E il file Extras:
cat CentOS-Linux-Extras.repo
Una volta confermati tutti e tre i file, pulisci la cache e ricostruiscila:
dnf clean all dnf makecache dnf repolist

Se un repository è stato corretto correttamente, ora scarica i suoi metadati senza errori. Se un file presenta ancora un errore di battitura, dnf segnala lo specifico repository che ha fallito, rendendo semplice tornare indietro e controllare solo quel file.
L'archivio contiene gli ultimi pacchetti rilasciati prima della fine del ciclo di vita. Non riceverai versioni più recenti né patch di sicurezza. Considera questa soluzione come un modo per mantenere il sistema raggiungibile fino alla migrazione, non come uno stato permanente.
Per confermare che i pacchetti si installino correttamente e non solo che i metadati vengano caricati, esegui un test con un piccolo pacchetto qualsiasi:
dnf install -y wget


Una volta riuscito, esegui l'aggiornamento vero e proprio:
dnf update -y
Conclusione
L'errore sui metadati di AppStream su CentOS 8 è un segnale del fatto che la distribuzione ha raggiunto la fine del suo ciclo di vita. L'unica soluzione a lungo termine è migrare verso una distribuzione supportata e compatibile a livello binario, come AlmaLinux o Rocky Linux, idealmente dopo aver eseguito un backup completo. La soluzione alternativa con vault.centos.org resta utile, ma solo come ponte temporaneo che consente al server di funzionare abbastanza a lungo da abbandonare CentOS 8 in modo sicuro.