Napaka pri nalaganju metapodatkov za repozitorij »AppStream« [CentOS] v sistemu CentOS 8
Uvod
Ko na CentOS 8 zaženete posodobitev ali poskušate namestiti paket, se lahko upravitelj paketov ustavi z naslednjo napako:
Failed to load metadata for 'AppStream' repo: Cannot prepare internal mirror list: No URLs in mirror list.
To ni omrežna motnja niti začasna težava z zrcalnimi strežniki. Gre za pričakovan rezultat dejstva, da je CentOS 8 dosegel konec svoje življenjske dobe. Ta članek pojasnjuje, zakaj pride do te napake, kakšna je pravilna dolgoročna rešitev in kako sistem začasno znova vzpostaviti, če do njega še vedno potrebujete dostop.

Zakaj pride do te napake
CentOS Linux 8 je konec svoje življenjske dobe dosegel 31. decembra 2021. Po tem datumu je bila storitev seznama zrcalnih strežnikov za CentOS Linux 8 ukinjena, paketi pa so bili premaknjeni na arhivski strežnik vault.centos.org.
Datoteke repozitorijev v sistemu še vedno kažejo na mirrorlist.centos.org. Ker ta storitev ne vrača več nobenih naslovov URL, se seznam zrcalnih strežnikov vrne prazen, upravitelj paketov pa nima naslova, s katerega bi prenesel metapodatke. To je sporočilo, ki ga vidite.
Paketi niso bili izbrisani. Premaknjeni so bili na arhivski strežnik vault.centos.org. Prav to omogoča spodaj opisano začasno rešitev.
Priporočena rešitev: preselitev na AlmaLinux ali Rocky Linux
Ker CentOS 8 ne prejema več nobenih posodobitev, vključno z varnostnimi, je njegovo nadaljnje delovanje v produkcijskem okolju tvegano. Pravilna rešitev je prehod na distribucijo, ki je binarno združljiva s sistemom, ki ga že uporabljate.
AlmaLinux in Rocky Linux sta brezplačni, s strani skupnosti podprti obnovitvi Red Hat Enterprise Linux. Zasnovani sta kot neposredni nadomestek za CentOS, zato obstoječa programska oprema in konfiguracija v večini primerov delujeta naprej brez sprememb. Oba projekta ponujata skript za migracijo na mestu (in place), ki pretvori CentOS 8 brez ponovne namestitve strežnika.
Pred migracijo vedno naredite popolno varnostno kopijo ali posnetek stanja. Pretvorba na mestu spremeni ključne sistemske pakete, zato je dobro imeti možnost vrnitve, če kaj ne uspe.
Oba skripta za migracijo potrebujeta delujočega upravitelja paketov za prenos novih paketov. V sistemu CentOS 8, ki je dosegel konec življenjske dobe, repozitoriji ne delujejo več, zato najprej uporabite začasno rešitev iz naslednjega razdelka, nato pa zaženite migracijo.
Za migracijo na AlmaLinux 8:
curl -O https://raw.githubusercontent.com/AlmaLinux/almalinux-deploy/master/almalinux-deploy.sh bash almalinux-deploy.sh

Za migracijo na Rocky Linux 8:
curl -O https://raw.githubusercontent.com/rocky-linux/rocky-tools/main/migrate2rocky/migrate2rocky.sh bash migrate2rocky.sh -r

Ko se skript zaključi, znova zaženite strežnik in potrdite nov sistem z ukazoma:
cat /etc/os-release dnf repolist


Če strežnika ni mogoče migrirati na mestu ali če raje začnete znova, vzpostavite nov VPS z že nameščenim AlmaLinux ali Rocky Linux in tja prenesite svoje podatke. INTROSERV ponuja Linux VPS s temi distribucijami, ki so na voljo že ob naročilu.
Začasna rešitev: preusmeritev repozitorijev na arhiv
To uporabite le, kadar potrebujete, da sistem znova deluje za kratek čas, na primer za izdelavo zadnje varnostne kopije pred migracijo ali za ohranjanje delovanja nekritičnega stroja do zaključka migracije. S tem CentOS 8 ne postane znova podprt in ne prinese nazaj posodobitev.
Preden zaženete spodnje ukaze, preverite točno različico svoje namestitve z ukazom cat /etc/centos-release. Ta članek kot primer uporablja različico 8.5.2111. Zamenjajte jo z različico, ki jo javi vaš sistem. Če navedete napačno arhivirano različico, lahko DNF vrne napake 404, ker ta mapa za vašo namestitev ne obstaja.

Spodnji ukazi onemogočijo neaktiven seznam zrcalnih strežnikov in namesto tega usmerijo datoteke repozitorijev na arhivski strežnik 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-*
Za razliko od aktivnih repozitorijev je arhiv organiziran znotraj fiksnih map po različicah, na primer 8.5.2111. Zato privzeta pot $releasever ne kaže več na veljavno vsebino in jo je treba zamenjati s točno arhivirano različico. To velja za vse tri privzete datoteke repozitorijev, AppStream, BaseOS in Extras, ne le za AppStream.
Po zagonu zgornjih ukazov preverite vsako datoteko repozitorija posebej, namesto da bi slepo zaupali skupinskemu urejanju, saj je pri ukazu sed, izvedenem hkrati na treh datotekah, lahko neopazno prišlo do napačnega znaka ali napačnega ločila.
Preverite datoteko AppStream:
cat CentOS-Linux-AppStream.repo
Vrstica baseurl bi morala biti natanko taka, pri čemer se mapa različice ujema z vašo:
baseurl=https://vault.centos.org/8.5.2111/AppStream/x86_64/os/

Na enak način preverite datoteko BaseOS:
cat CentOS-Linux-BaseOS.repo
In datoteko Extras:
cat CentOS-Linux-Extras.repo
Ko so vse tri datoteke potrjene, počistite predpomnilnik in ga znova zgradite:
dnf clean all dnf makecache dnf repolist

Če je bil repozitorij pravilno popravljen, zdaj prenese svoje metapodatke brez napak. Če ima ena od datotek še vedno tipkarsko napako, dnf sporoči, kateri repozitorij ni uspel, kar olajša vrnitev in preverjanje prav te datoteke.
Arhiv vsebuje zadnje pakete, izdane pred koncem življenjske dobe. Ne boste prejemali novejših različic ali varnostnih popravkov. To obravnavajte kot način, da sistem ostane dosegljiv do migracije, ne kot trajno stanje.
Za potrditev, da se paketi pravilno namestijo, ne le da se naložijo metapodatki, preizkusite s katerim koli majhnim paketom:
dnf install -y wget


Ko to uspe, zaženite dejansko posodobitev:
dnf update -y
Zaključek
Napaka metapodatkov AppStream na CentOS 8 je znak, da je distribucija dosegla konec svoje življenjske dobe. Edina dolgoročna rešitev je migracija na podprto, binarno združljivo distribucijo, kot sta AlmaLinux ali Rocky Linux, po možnosti po izdelavi popolne varnostne kopije. Obhod prek vault.centos.org je še vedno uporaben, vendar le kot kratkotrajen most, ki omogoči, da strežnik deluje dovolj dolgo za varen prehod s CentOS 8.