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 updatevõipacman -Syulõ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.