Linux: apt / dnf / pacman on katki — põhjused ja lahendused

Linuxis on apt, dnf ja pacman tarkvara paigaldamise ja uuendamise alus. Kui need näivad olevat “katki”, ei tähenda see ainult seda, et uusi programme ei saa enam paigaldada. Sageli peatuvad ka turvauuendused ning kogu süsteemi haldamine muutub palju keerulisemaks. Levinud põhjused on katkestatud uuendused, rikkis mirror’id, ebajärjekindlad paketibaasid, allkirjakontrolli vead, katkised sõltuvused või alles jäänud lock-failid. Kõige olulisem ei ole hakata kohe cache’i või konfiguratsiooni juhuslikult kustutama, vaid kõigepealt mõista, milline osa tegelikult rikki on läinud.

Mõnikord tundub, nagu oleks katki just paketihaldur ise, kuigi tegelik põhjus peitub võrgus, DNS-is, repository seadistuses või kettaruumi puudumises. Seetõttu peaks tõrkeotsing algama sellest, et eristada, kas probleem on ühenduses, repository’s, kohalikus andmebaasis või sõltuvustes.

Tüüpilised sümptomid

  • apt update, dnf update või pacman -Syu lõpevad veaga
  • Ilmuvad teated lahendamatute sõltuvuste või katkiste pakettide kohta
  • Repository’sid ei saa kasutada GPG- või signatuurivigade tõttu
  • Andmebaas on lukus ja paketioperatsioonid ei tööta
  • Mirror’id tagastavad 404 või timeout
  • Pärast katkestatud uuendust ei tööta paketioperatsioonid enam õigesti
  • Pärast mõne teegi uuendamist ei käivitu paketihaldur ise enam

Mida tuleks kõigepealt kontrollida

Esimene samm on välja selgitada, kas probleem on tõesti paketihalduris või peitub see võrgus ja DNS-is.

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

Kui võrk või DNS ise juba ei tööta korralikult, võivad apt, dnf või pacman vead olla vaid selle tagajärg. Kui tavaline võrk töötab, kuid just paketioperatsioonid ebaõnnestuvad, siis tuleb tähelepanu pöörata repository’dele, võtmetele, lock-failidele, cache’ile, andmebaasidele ja sõltuvustele.

Levinud põhjused apt / dnf / pacman puhul

1. Katkestatud uuendus

Üks sagedasemaid põhjuseid on pooleli jäänud uuendus. Elektrikatkestus, suletud terminal, katkenud SSH-seanss või hangunud graafiline keskkond võivad jätta paketibaasi või mõned paketid poolikusse olekusse.

Sellises olukorras ei tasu kohe faile kustutama hakata, vaid kõigepealt proovida pooleli jäänud olek korrektselt lõpuni viia.

2. Alles jäänud lock-failid

Paketihaldurid kasutavad lock-mehhanismi, et vältida mitme operatsiooni samaaegset käivitamist. Kui mõni teine protsess töötab veel edasi või pärast crash’i jäi alles ainult lock-fail, ütleb süsteem, et paketihaldur on juba kasutusel.

Kuid lock-faile ei tohi pimesi kustutada. Kõigepealt tuleb kinnitada, et ükski seotud protsess enam ei tööta.

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

3. Rikutud repository seadistus

Kolmandate osapoolte repository’d, vanad PPA-d, aegunud mirror’id või distributsiooni uuenduse järel alles jäänud seadistused võivad muuta paketiallikad kehtetuks. Tüüpilised märgid on 404, puuduva Release file’i vead või metadata laadimise tõrked.

4. GPG-võtmete ja allkirjade probleemid

Repository’sid kontrollitakse tavaliselt krüptograafiliselt. Kui võti on aegunud, importimata, võtmete haldus on muutunud või kohalik keyring on kahjustatud, peatab paketihaldur töö turvalisuse huvides.

5. Katkised sõltuvused

Sõltuvused lähevad sageli katki siis, kui paigaldatakse sunniviisiliselt sobimatuid paketiversioone, segatakse erinevaid repository’sid, tehakse osalisi uuendusi või kirjutatakse süsteemiteegid käsitsi üle. See on eriti ohtlik pacman-põhistes süsteemides, kuid ka apt ja dnf muutuvad kiiresti ebastabiilseks, kui allikaid kontrollimatult segada.

6. Rikutud cache või metadata

Poolikult alla laaditud paketid, vananenud metadata või kahjustatud sünkroonimisandmebaasid võivad takistada paketiloendite korrektset lugemist ja põhjustada paigalduse ebaõnnestumise.

7. Kettaruumi puudus

Üks sage, kuid alahinnatud põhjus on vähene vaba ruum. Kui näiteks /var või /boot on täis, võivad failide lahtipakkimine ja kirjutamine pooleli katkeda ning jätta paketisüsteemi vigasesse olekusse.

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

Mida kontrollida, kui apt ei tööta

Debiani ja Ubuntu süsteemides on oluline vaadata mitte ainult apt ennast, vaid ka all töötava dpkg seisundit.

Poolikult seadistatud pakettide parandamine

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

Pärast pooleli jäänud uuendust on need kaks käsku sageli kõige tähtsam esimene samm.

Paketiloendite uuesti laadimine

sudo apt update

Kui siin ilmnevad 404, signatuurivead või Release file’i vead, tuleb kontrollida /etc/apt/sources.list ja /etc/apt/sources.list.d/ sisu.

Cache puhastamine

sudo apt clean
sudo apt autoclean

Kui probleem on rikutud või aegunud cache’is, võib see aidata.

Mida kontrollida, kui dnf ei tööta

Fedora ja RHEL süsteemides tuleks erilist tähelepanu pöörata metadata’le, tehinguajaloole ja repository seadistustele.

Metadata uuesti loomine

sudo dnf clean all
sudo dnf makecache

Kui mirror-teave või metadata on rikutud, on see sageli kasulik esimene samm.

Sõltuvuste ja süsteemi kooskõla kontroll

sudo dnf check
sudo dnf distro-sync

See aitab kontrollida, kas süsteem vastab endiselt distributsiooni eeldatavale paketiseisule.

Ajaloo vaatamine

sudo dnf history
sudo dnf history info last

Ajalugu näitab sageli, millise uuenduse järel probleemid algasid.

Mida kontrollida, kui pacman ei tööta

Arch Linuxis tuleb eriti tähelepanelikult vaadata sünkroonimisandmebaase, võtmeid, mirror’eid ja võimalikke osalisi uuendusi.

Andmebaaside uuesti sünkroonimine

sudo pacman -Syy

Kui kohalik sünkroonimisandmebaas ei vasta enam repository’le, on see tavaliselt esimene samm.

Täielik uuendus

sudo pacman -Syu

Archis tuleks vältida osalisi uuendusi. Mõne paketi uuendamine ja teiste vanaks jätmine on klassikaline tee süsteemi ebajärjekindlusse.

Võtmeprobleemide kontroll

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

Kui probleem on signatuurides või keyring’is, võib vaja minna uuesti initsialiseerimist.

Logid on väga olulised

Paketihalduri vigade puhul ei piisa tavaliselt ainult viimasest reast. Ainult logid ja detailne väljund näitavad, kas probleem on signatuuris, sõltuvustes, võrgus või andmebaasis.

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

Praktiline kontrollimise järjekord

Samm 1: Kontrolli võrku ja DNS-i

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

Samm 2: Kontrolli vaba kettaruumi

df -h

Samm 3: Kontrolli protsesse ja lock-faile

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

Samm 4: Loe logisid

Kõigepealt tuleb aru saada, milline viimane konkreetne toiming tegelikult ebaõnnestus.

Samm 5: Kasuta distributsioonile sobivaid taastamiskäske

apt puhul alustatakse sageli käsuga dpkg --configure -a, dnf puhul metadata puhastamisest ning pacman puhul täielikust sünkroonimisest ja võtmete kontrollist.

Mida tuleks vältida

  • Ära kustuta lock-faile põhjust mõistmata
  • Ära paigalda juhuslikke .deb / .rpm / muid pakette ebausaldusväärsetest allikatest
  • Ära tee Archis korduvalt osalisi uuendusi
  • Ära sega apt-i dpkg-ga, dnf-i rpm-iga või pacmani käsitsi failimuudatustega korratult
  • Ära lülita signatuurikontrolli välja vea põhjust mõistmata

Kuidas vältida probleemi kordumist

  • Väldi voolukatkestusi ja sunnitud väljalülitamist uuenduste ajal
  • Ära lisa liiga palju kolmandate osapoolte repository’sid
  • Tee enne suuremaid uuendusi snapshot või backup
  • Järgi distributsiooni soovitatud uuendusviisi
  • Eriti Archis väldi osalisi uuendusi

Kokkuvõte

Isegi kui tundub, et katki on just apt, dnf või pacman ise, peitub tegelik põhjus sageli võrgus, lock-failides, signatuurides, sõltuvustes, cache’is, kettaruumis või repository seadistuses. Kõige olulisem on mitte kohe hakata juhuslikult kustutama või uuesti paigaldama, vaid esmalt logide abil aru saada, millisel tasemel viga tegelikult tekkis. Alles seejärel tuleb kasutada õiget lähenemist: dpkg parandamine apt puhul, metadata ja ajaloo kontroll dnf puhul ning täielik sünkroonimine koos võtmete kontrolliga pacman puhul.

Leave a Reply

Sinu e-postiaadressi ei avaldata. Nõutavad väljad on tähistatud *-ga