Błąd wczytywania metadanych repozytorium „AppStream" [CentOS] w systemie CentOS 8
Wprowadzenie
Podczas uruchamiania aktualizacji lub próby zainstalowania pakietu na CentOS 8 menedżer pakietów może zatrzymać się z następującym błędem:
Failed to load metadata for 'AppStream' repo: Cannot prepare internal mirror list: No URLs in mirror list.
Nie jest to usterka sieci ani tymczasowy problem z serwerami mirror. Jest to spodziewany efekt tego, że CentOS 8 osiągnął koniec cyklu życia. Ten artykuł wyjaśnia, dlaczego pojawia się ten błąd, jakie jest właściwe rozwiązanie długoterminowe oraz jak tymczasowo przywrócić działanie systemu, jeśli nadal potrzebujesz do niego dostępu.

Dlaczego pojawia się ten błąd
CentOS Linux 8 osiągnął koniec cyklu życia 31 grudnia 2021 r. Po tej dacie usługa listy serwerów mirror dla CentOS Linux 8 została wycofana, a pakiety przeniesiono na serwer archiwalny vault.centos.org.
Pliki repozytoriów w systemie nadal wskazują na mirrorlist.centos.org. Ponieważ ta usługa nie zwraca już żadnych adresów URL, lista serwerów mirror wraca pusta, a menedżer pakietów nie ma adresu, z którego mógłby pobrać metadane. To właśnie ten komunikat widzisz.
Pakiety nie zostały usunięte. Zostały przeniesione na serwer archiwalny, vault.centos.org. Właśnie to umożliwia zastosowanie tymczasowego rozwiązania opisanego poniżej.
Zalecane rozwiązanie: migracja do AlmaLinux lub Rocky Linux
Ponieważ CentOS 8 nie otrzymuje już żadnych aktualizacji, w tym aktualizacji zabezpieczeń, utrzymywanie go w środowisku produkcyjnym stanowi ryzyko. Właściwym rozwiązaniem jest przejście na dystrybucję binarnie kompatybilną z systemem, który już eksploatujesz.
AlmaLinux i Rocky Linux to darmowe, wspierane przez społeczność odtworzenia Red Hat Enterprise Linux. Zostały zaprojektowane jako bezpośrednie zamienniki CentOS, dzięki czemu istniejące oprogramowanie i konfiguracja w większości przypadków działają dalej bez zmian. Oba projekty udostępniają skrypt migracji in-place, który konwertuje CentOS 8 bez ponownej instalacji serwera.
Przed migracją zawsze wykonaj pełną kopię zapasową lub migawkę. Konwersja in-place zmienia kluczowe pakiety systemowe, warto więc mieć możliwość powrotu, jeśli coś pójdzie nie tak.
Oba skrypty migracji wymagają działającego menedżera pakietów do pobrania nowych pakietów. W systemie CentOS 8, który osiągnął koniec cyklu życia, repozytoria są martwe, dlatego najpierw zastosuj tymczasowe rozwiązanie opisane w następnej sekcji, a dopiero potem uruchom migrację.
Aby zmigrować do AlmaLinux 8:
curl -O https://raw.githubusercontent.com/AlmaLinux/almalinux-deploy/master/almalinux-deploy.sh bash almalinux-deploy.sh

Aby zmigrować do Rocky Linux 8:
curl -O https://raw.githubusercontent.com/rocky-linux/rocky-tools/main/migrate2rocky/migrate2rocky.sh bash migrate2rocky.sh -r

Po zakończeniu działania skryptu uruchom ponownie serwer i potwierdź nowy system za pomocą:
cat /etc/os-release dnf repolist


Jeśli serwera nie można zmigrować in-place lub wolisz zacząć od czystej instalacji, wdróż nowy VPS z już zainstalowanym AlmaLinux lub Rocky Linux i przenieś tam swoje dane. INTROSERV oferuje VPS z systemem Linux z tymi dystrybucjami dostępnymi już w momencie zamówienia.
Tymczasowe rozwiązanie: przekierowanie repozytoriów do archiwum
Używaj tego rozwiązania tylko wtedy, gdy potrzebujesz, aby system ponownie działał przez krótki czas, na przykład aby wykonać ostatnią kopię zapasową przed migracją lub aby utrzymać działanie niekrytycznej maszyny do czasu ukończenia migracji. Nie sprawia to, że CentOS 8 ponownie staje się wspierany, ani nie przywraca aktualizacji.
Przed uruchomieniem poniższych poleceń sprawdź dokładną wersję swojej instalacji za pomocą cat /etc/centos-release. Ten artykuł jako przykład wykorzystuje wersję 8.5.2111. Zastąp ją wersją zgłoszoną przez Twój własny system. Jeśli podasz nieprawidłową zarchiwizowaną wersję, DNF może zwracać błędy 404, ponieważ taki katalog nie istnieje dla Twojej instalacji.

Poniższe polecenia wyłączają nieaktywną już listę serwerów mirror i kierują pliki repozytoriów zamiast tego na serwer archiwalny 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-*
W przeciwieństwie do aktywnych repozytoriów, archiwum jest zorganizowane w oparciu o ustalone katalogi wydań, na przykład 8.5.2111. W rezultacie domyślna ścieżka $releasever nie wskazuje już na prawidłową zawartość i musi zostać zastąpiona dokładną zarchiwizowaną wersją. Dotyczy to wszystkich trzech domyślnych plików repozytoriów: AppStream, BaseOS i Extras, a nie tylko AppStream.
Po uruchomieniu powyższych poleceń zweryfikuj każdy plik repozytorium osobno, zamiast ślepo ufać zbiorczej edycji, ponieważ zbiorcze polecenie sed zastosowane do trzech plików to łatwe miejsce, w którym niezauważenie może wkraść się błędny znak lub niewłaściwy separator.
Sprawdź plik AppStream:
cat CentOS-Linux-AppStream.repo
Linia baseurl powinna wyglądać dokładnie tak, przy czym katalog wydania musi odpowiadać Twojej wersji:
baseurl=https://vault.centos.org/8.5.2111/AppStream/x86_64/os/

Sprawdź w ten sam sposób plik BaseOS:
cat CentOS-Linux-BaseOS.repo
Oraz plik Extras:
cat CentOS-Linux-Extras.repo
Gdy wszystkie trzy pliki zostaną potwierdzone, wyczyść pamięć podręczną i odbuduj ją:
dnf clean all dnf makecache dnf repolist

Jeśli repozytorium zostało poprawnie naprawione, teraz pobiera swoje metadane bez błędów. Jeśli jeden z plików nadal zawiera literówkę, dnf zgłasza konkretne repozytorium, które zawiodło, co ułatwia powrót i sprawdzenie właśnie tego pliku.
Archiwum zawiera ostatnie pakiety wydane przed końcem cyklu życia. Nie otrzymasz żadnych nowszych wersji ani poprawek bezpieczeństwa. Traktuj to jako sposób na utrzymanie systemu w stanie dostępnym do czasu migracji, a nie jako stan docelowy.
Aby potwierdzić, że pakiety instalują się poprawnie, a nie tylko że ładują się metadane, przetestuj to na dowolnym małym pakiecie:
dnf install -y wget


Gdy to się powiedzie, uruchom właściwą aktualizację:
dnf update -y
Podsumowanie
Błąd metadanych AppStream na CentOS 8 jest sygnałem, że dystrybucja osiągnęła koniec cyklu życia. Jedynym długoterminowym rozwiązaniem jest migracja do wspieranej, binarnie kompatybilnej dystrybucji, takiej jak AlmaLinux lub Rocky Linux, najlepiej po wykonaniu pełnej kopii zapasowej. Obejście z użyciem vault.centos.org pozostaje przydatne, ale wyłącznie jako krótkotrwały most, który pozwala serwerowi działać na tyle długo, by bezpiecznie przejść z CentOS 8.