Linux: apt / dnf / pacman są uszkodzone — przyczyny i rozwiązania

W Linuxie apt, dnf i pacman stanowią podstawę instalacji i aktualizacji oprogramowania. Gdy wyglądają na „uszkodzone”, problem nie oznacza wyłącznie tego, że nie da się instalować nowych programów. Często zatrzymują się także aktualizacje bezpieczeństwa, a utrzymanie całego systemu staje się znacznie trudniejsze. Typowe przyczyny to przerwane aktualizacje, uszkodzone mirrory, niespójne bazy pakietów, błędy podpisów, zepsute zależności albo pozostawione pliki lock. Najważniejsze jest to, aby nie zaczynać od przypadkowego usuwania cache i konfiguracji, lecz najpierw zrozumieć, która część rzeczywiście została uszkodzona.

Czasami wygląda to tak, jakby sam menedżer pakietów był zepsuty, chociaż prawdziwa przyczyna leży w sieci, DNS, konfiguracji repository albo w braku wolnego miejsca na dysku. Dlatego diagnozę należy zacząć od ustalenia, czy problem dotyczy komunikacji, repository, lokalnej bazy czy zależności.

Typowe objawy

  • apt update, dnf update albo pacman -Syu kończą się błędem
  • Pojawiają się komunikaty o nierozwiązywalnych zależnościach lub uszkodzonych pakietach
  • Repository nie da się używać z powodu błędów GPG lub podpisu
  • Baza danych jest zablokowana i nie można wykonywać operacji na pakietach
  • Mirrory zwracają 404 albo timeout
  • Po przerwanej aktualizacji operacje na pakietach przestają działać poprawnie
  • Po aktualizacji niektórych bibliotek sam menedżer pakietów przestaje się uruchamiać

Co należy sprawdzić najpierw

Pierwszym krokiem jest ustalenie, czy problem rzeczywiście dotyczy menedżera pakietów, czy może sieci albo DNS.

ping -c 4 8.8.8.8
ping -c 4 google.com
ip addr
ip route

Jeśli sama sieć albo DNS już nie działają poprawnie, błędy apt, dnf lub pacman będą jedynie ich skutkiem. Jeśli natomiast zwykła sieć działa poprawnie, a zawodzi jedynie obsługa pakietów, wtedy trzeba skupić się na repository, kluczach, plikach lock, cache, bazach danych i zależnościach.

Wspólne przyczyny problemów z apt / dnf / pacman

1. Przerwana aktualizacja

Jedną z najczęstszych przyczyn jest aktualizacja zatrzymana w połowie. Brak zasilania, zamknięty terminal, zerwane połączenie SSH albo zawieszone środowisko graficzne mogą zostawić bazę pakietów lub niektóre pakiety w stanie częściowo ukończonym.

W takiej sytuacji nie należy od razu kasować plików, tylko najpierw spróbować poprawnie dokończyć ten niedokończony stan.

2. Pozostawione pliki lock

Menedżery pakietów używają mechanizmu lock, aby uniemożliwić jednoczesne wykonywanie wielu operacji. Jeśli inny proces nadal działa albo po crashu został jedynie plik lock, system poinformuje, że menedżer pakietów jest już używany.

Nie wolno jednak usuwać plików lock bez zrozumienia sytuacji. Najpierw trzeba upewnić się, że żaden powiązany proces rzeczywiście już nie działa.

ps aux | grep -E 'apt|dpkg|dnf|yum|pacman'

3. Uszkodzona konfiguracja repository

Repository stron trzecich, stare PPA, nieaktualne mirrory albo pozostałości konfiguracji po aktualizacji dystrybucji mogą sprawić, że źródła pakietów staną się nieprawidłowe. Typowe objawy to błędy 404, brak pliku Release albo problemy z pobieraniem metadata.

4. Problemy z kluczami GPG i podpisami

Repository są zwykle sprawdzane kryptograficznie. Jeśli klucz wygasł, nie został zaimportowany, system zarządzania kluczami się zmienił albo lokalny keyring jest uszkodzony, menedżer pakietów zatrzyma pracę ze względów bezpieczeństwa.

5. Uszkodzone zależności

Zależności często psują się wtedy, gdy wymusza się instalację niezgodnych wersji pakietów, miesza się różne repository, wykonuje częściowe aktualizacje albo ręcznie nadpisuje biblioteki systemowe. Jest to szczególnie groźne w systemach opartych na pacmanie, ale również apt i dnf szybko stają się niestabilne przy niekontrolowanym mieszaniu źródeł.

6. Uszkodzony cache lub metadata

Częściowo pobrane pakiety, przestarzałe metadata albo uszkodzone bazy synchronizacji mogą uniemożliwić poprawne odczytanie list pakietów i powodować niepowodzenia instalacji.

7. Brak miejsca na dysku

Częstą, ale często niedocenianą przyczyną jest brak wolnego miejsca. Jeśli partycje takie jak /var albo /boot są pełne, rozpakowywanie i zapis plików mogą przerwać się w połowie, pozostawiając system pakietów w niespójnym stanie.

df -h
du -sh /var/cache/* 2>/dev/null

Co sprawdzić, gdy apt nie działa

W systemach Debian / Ubuntu ważne jest, aby patrzeć nie tylko na apt, ale również na stan dpkg działającego pod spodem.

Naprawa nie w pełni skonfigurowanych pakietów

sudo dpkg --configure -a
sudo apt --fix-broken install

Po przerwanej aktualizacji te dwa polecenia są często najważniejszym pierwszym krokiem.

Ponowne wczytanie list pakietów

sudo apt update

Jeśli tutaj pojawiają się błędy 404, podpisu albo Release file, trzeba sprawdzić /etc/apt/sources.list oraz zawartość /etc/apt/sources.list.d/.

Wyczyszczenie cache

sudo apt clean
sudo apt autoclean

Jeśli problem wynika z uszkodzonego albo przestarzałego cache, to może pomóc.

Co sprawdzić, gdy dnf nie działa

W systemach Fedora / RHEL trzeba zwrócić szczególną uwagę na metadata, historię transakcji oraz konfigurację repository.

Odbudowa metadata

sudo dnf clean all
sudo dnf makecache

Jeśli informacje o mirrorach lub metadata są uszkodzone, jest to często dobry pierwszy krok.

Sprawdzenie zależności i spójności systemu

sudo dnf check
sudo dnf distro-sync

Pomaga to ustalić, czy system nadal odpowiada oczekiwanemu stanowi pakietów dystrybucji.

Podgląd historii

sudo dnf history
sudo dnf history info last

Historia często pokazuje, po której aktualizacji zaczęły się problemy.

Co sprawdzić, gdy pacman nie działa

W Arch Linuxie szczególnie ważne jest sprawdzenie baz synchronizacji, kluczy, mirrorów i ewentualnych częściowych aktualizacji.

Ponowna synchronizacja baz

sudo pacman -Syy

Jeśli lokalna baza synchronizacji nie zgadza się już z repository, jest to często pierwszy krok.

Wykonanie pełnej aktualizacji

sudo pacman -Syu

W Archu należy unikać częściowych aktualizacji. Aktualizowanie tylko części pakietów i pozostawianie reszty starych to klasyczna droga do niespójności systemu.

Sprawdzenie problemów z kluczami

sudo pacman-key --init
sudo pacman-key --populate

Jeśli problem dotyczy podpisów albo keyringu, może być potrzebna ponowna inicjalizacja.

Logi są bardzo ważne

Przy błędach menedżera pakietów zwykle nie wystarcza spojrzenie tylko na ostatnią linię. Dopiero logi i szczegółowe wyjście pokazują, czy problem dotyczy podpisów, zależności, sieci czy bazy danych.

apt / dpkg

sudo tail -n 100 /var/log/apt/history.log
sudo tail -n 100 /var/log/dpkg.log

dnf

sudo dnf history
sudo journalctl -xe --no-pager | tail -n 100

pacman

sudo tail -n 100 /var/log/pacman.log

Praktyczna kolejność sprawdzania

Krok 1: Sprawdź sieć i DNS

ping -c 4 8.8.8.8
ping -c 4 google.com

Krok 2: Sprawdź wolne miejsce

df -h

Krok 3: Sprawdź procesy i pliki lock

ps aux | grep -E 'apt|dpkg|dnf|yum|pacman'

Krok 4: Przeczytaj logi

Najpierw trzeba zrozumieć, która ostatnia konkretna operacja rzeczywiście się nie powiodła.

Krok 5: Użyj właściwych poleceń naprawczych dla dystrybucji

W apt zwykle zaczyna się od dpkg --configure -a, w dnf od czyszczenia metadata, a w pacman od pełnej synchronizacji i sprawdzenia kluczy.

Czego należy unikać

  • Nie usuwaj plików lock bez zrozumienia przyczyny
  • Nie instaluj przypadkowych .deb / .rpm / innych pakietów z niepewnych źródeł
  • Nie wykonuj wielokrotnie częściowych aktualizacji w Archu
  • Nie mieszaj bez kontroli apt z dpkg, dnf z rpm ani pacmana z ręcznymi zmianami plików
  • Nie wyłączaj weryfikacji podpisów bez zrozumienia błędu

Jak zapobiec ponownemu wystąpieniu problemu

  • Unikaj przerw w zasilaniu i wymuszonego zamykania podczas aktualizacji
  • Nie dodawaj zbyt wielu repository stron trzecich
  • Twórz snapshoty lub backup przed dużymi aktualizacjami
  • Przestrzegaj zalecanego sposobu aktualizacji dla danej dystrybucji
  • Zwłaszcza w Archu unikaj częściowych aktualizacji

Wniosek

Nawet jeśli wygląda na to, że to właśnie apt, dnf lub pacman są uszkodzone, prawdziwa przyczyna często leży w sieci, plikach lock, podpisach, zależnościach, cache, wolnym miejscu albo konfiguracji repository. Najważniejsze jest, aby nie zaczynać od przypadkowego kasowania lub reinstalacji, lecz najpierw zrozumieć z logów, na jakim poziomie faktycznie powstał błąd. Dopiero potem należy zastosować odpowiednie podejście: naprawę dpkg dla apt, pracę z metadata i historią dla dnf oraz pełną synchronizację i kontrolę kluczy dla pacman.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *