Linuxissa apt, dnf ja pacman ovat ohjelmistojen asennuksen ja päivitysten perusta. Kun ne näyttävät olevan “rikki”, ongelma ei tarkoita vain sitä, ettei uusia ohjelmia voi asentaa. Usein myös tietoturvapäivitykset pysähtyvät, ja koko järjestelmän ylläpito vaikeutuu huomattavasti. Yleisiä syitä ovat keskeytyneet päivitykset, vialliset mirror-palvelimet, epäjohdonmukaiset paketitietokannat, allekirjoitusvirheet, rikkoutuneet riippuvuudet tai jäljelle jääneet lock-tiedostot. Tärkeintä ei ole alkaa heti poistaa cachea tai asetuksia summittaisesti, vaan ymmärtää ensin, mikä osa on oikeasti vaurioitunut.
Joskus näyttää siltä, että itse paketinhallinta on rikki, vaikka todellinen syy on verkossa, DNS:ssä, repository-asetuksissa tai levytilan puutteessa. Siksi vianmääritys pitäisi aloittaa erottamalla, onko kyse yhteysongelmasta, repository-ongelmasta, paikallisen tietokannan viasta vai riippuvuuksista.
Tavalliset oireet
apt update,dnf updatetaipacman -Syupäättyvät virheeseen- Näkyviin tulee viestejä ratkaisemattomista riippuvuuksista tai rikkinäisistä paketeista
- Repositoryjä ei voi käyttää GPG- tai allekirjoitusvirheiden vuoksi
- Tietokanta on lukittu eikä pakettioperaatioita voi suorittaa
- Mirrorit palauttavat 404-virheitä tai timeoutteja
- Keskeytyneen päivityksen jälkeen pakettienhallinta ei toimi enää normaalisti
- Tiettyjen kirjastojen päivityksen jälkeen paketinhallinta itse ei enää käynnisty
Mitä kannattaa tarkistaa ensin
Ensimmäinen askel on selvittää, onko ongelma todella paketinhallinnassa vai johtuuko se verkosta tai DNS:stä.
ping -c 4 8.8.8.8
ping -c 4 google.com
ip addr
ip route
Jos verkko tai DNS on jo valmiiksi rikki, apt:n, dnf:n tai pacman:in virheet voivat olla vain seurausta siitä. Jos tavallinen verkkoyhteys toimii, mutta pakettioperaatiot epäonnistuvat, huomio kannattaa kohdistaa repositoryihin, avaimiin, lock-tiedostoihin, cacheen, tietokantoihin ja riippuvuuksiin.
Yhteiset syyt apt / dnf / pacman -ongelmiin
1. Keskeytynyt päivitys
Yksi yleisimmistä syistä on päivitys, joka katkeaa kesken. Sähkökatko, suljettu terminaali, katkennut SSH-yhteys tai jumiutunut graafinen ympäristö voivat jättää paketitietokannan tai tietyt paketit keskeneräiseen tilaan.
Tällaisessa tilanteessa ei kannata heti alkaa poistaa tiedostoja, vaan ensin yrittää saattaa keskeneräinen tila loppuun oikein.
2. Jäljelle jääneet lock-tiedostot
Paketinhallintatyökalut käyttävät lock-mekanismia estääkseen useiden operaatioiden samanaikaisen suorittamisen. Jos jokin toinen prosessi on yhä käynnissä tai crashin jälkeen jäljelle jäi vain lock-tiedosto, järjestelmä ilmoittaa, että paketinhallinta on jo käytössä.
Mutta lock-tiedostoja ei saa poistaa sokeasti. Ensin pitää varmistaa, ettei mikään asiaan liittyvä prosessi ole enää käynnissä.
ps aux | grep -E 'apt|dpkg|dnf|yum|pacman'
3. Rikkoutunut repository-määritys
Kolmannen osapuolen repositoryt, vanhat PPA:t, vanhentuneet mirrorit tai jakelupäivityksen jälkeen jääneet asetukset voivat tehdä pakettilähteistä virheellisiä. Tyypillisiä oireita ovat 404-virheet, puuttuva Release file tai metadata-haun epäonnistuminen.
4. GPG-avainten ja allekirjoitusten ongelmat
Repositoryt tarkistetaan yleensä kryptografisesti. Jos avain on vanhentunut, sitä ei ole tuotu, avainten hallintatapa on muuttunut tai paikallinen keyring on vioittunut, paketinhallinta pysähtyy turvallisuussyistä.
5. Rikkoutuneet riippuvuudet
Riippuvuudet rikkoutuvat usein silloin, kun pakotetaan yhteensopimattomia pakettiversioita, sekoitetaan eri repositoryjä, tehdään osittaisia päivityksiä tai korvataan järjestelmäkirjastoja käsin. Tämä on erityisen vaarallista pacman-pohjaisissa järjestelmissä, mutta myös apt ja dnf muuttuvat nopeasti epävakaiksi, jos lähteitä sekoitetaan hallitsemattomasti.
6. Rikkoutunut cache tai metadata
Puoliksi ladatut paketit, vanhentunut metadata tai vioittuneet synkronointitietokannat voivat estää pakettien listojen oikean lukemisen ja saada asennukset epäonnistumaan.
7. Levytilan puute
Yksi yleinen mutta usein aliarvioitu syy on vapaan tilan loppuminen. Jos esimerkiksi /var tai /boot on täynnä, purkaminen ja tiedostojen kirjoittaminen voivat epäonnistua kesken, jolloin pakettijärjestelmä jää epäjohdonmukaiseen tilaan.
df -h
du -sh /var/cache/* 2>/dev/null
Mitä tarkistaa, kun apt ei toimi
Debian- ja Ubuntu-järjestelmissä on tärkeää tarkastella paitsi apt:a myös sen alla toimivan dpkg:n tilaa.
Korjaa keskeneräisesti määritetyt paketit
sudo dpkg --configure -a
sudo apt --fix-broken install
Keskeytyneen päivityksen jälkeen nämä kaksi komentoa ovat usein tärkein ensimmäinen askel.
Lataa pakettien luettelot uudelleen
sudo apt update
Jos tässä näkyy 404-, allekirjoitus- tai Release file -virheitä, pitää tarkistaa /etc/apt/sources.list ja /etc/apt/sources.list.d/-hakemiston sisältö.
Tyhjennä cache
sudo apt clean
sudo apt autoclean
Jos ongelma johtuu rikkinäisestä tai vanhentuneesta cachesta, tämä voi auttaa.
Mitä tarkistaa, kun dnf ei toimi
Fedora- ja RHEL-järjestelmissä kannattaa kiinnittää erityistä huomiota metadataan, tapahtumahistoriaan ja repository-asetuksiin.
Rakenna metadata uudelleen
sudo dnf clean all
sudo dnf makecache
Jos mirror-tiedot tai metadata ovat vioittuneet, tämä on usein hyvä ensimmäinen askel.
Tarkista riippuvuudet ja järjestelmän johdonmukaisuus
sudo dnf check
sudo dnf distro-sync
Tämä auttaa selvittämään, vastaako järjestelmä edelleen jakelun odotettua pakettitilaa.
Katso historia
sudo dnf history
sudo dnf history info last
Historia näyttää usein, minkä päivityksen jälkeen ongelmat alkoivat.
Mitä tarkistaa, kun pacman ei toimi
Arch Linuxissa on erityisen tärkeää tarkistaa synkronointitietokannat, avaimet, mirrorit ja mahdolliset osittaiset päivitykset.
Synkronoi tietokannat uudelleen
sudo pacman -Syy
Jos paikallinen synkronointitietokanta ei enää vastaa repositoryä, tämä on yleensä ensimmäinen askel.
Tee täydellinen päivitys
sudo pacman -Syu
Archissa osittaisia päivityksiä tulee välttää. Joidenkin pakettien päivittäminen ja muiden jättäminen vanhoiksi on klassinen tapa saada järjestelmä epäjohdonmukaiseen tilaan.
Tarkista avainongelmat
sudo pacman-key --init
sudo pacman-key --populate
Jos ongelma liittyy allekirjoituksiin tai keyringiin, voi olla tarpeen alustaa se uudelleen.
Lokit ovat erittäin tärkeitä
Paketinhallinnan virheissä pelkkä viimeinen rivi ei yleensä riitä. Vain lokit ja yksityiskohtainen tuloste näyttävät, johtuuko ongelma allekirjoituksista, riippuvuuksista, verkosta vai tietokannasta.
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
Käytännöllinen tarkastusjärjestys
Vaihe 1: Tarkista verkko ja DNS
ping -c 4 8.8.8.8
ping -c 4 google.com
Vaihe 2: Tarkista vapaa levytila
df -h
Vaihe 3: Tarkista prosessit ja lock-tiedostot
ps aux | grep -E 'apt|dpkg|dnf|yum|pacman'
Vaihe 4: Lue lokit
Ensin pitää ymmärtää, mikä viimeinen konkreettinen toiminto oikeasti epäonnistui.
Vaihe 5: Käytä jakelulle sopivia palautuskomentoja
apt-järjestelmissä aloitetaan usein komennolla dpkg --configure -a, dnf-järjestelmissä metadatan siivouksella ja pacmanissa täydellä synkronoinnilla sekä avainten tarkistuksella.
Mitä tulisi välttää
- Älä poista lock-tiedostoja ymmärtämättä syytä
- Älä asenna sattumanvaraisia .deb / .rpm / muita paketteja epäluotettavista lähteistä
- Älä tee toistuvia osittaisia päivityksiä Archissa
- Älä sekoita apt:iä dpkg:hen, dnf:ää rpm:ään tai pacmania käsin tehtyihin tiedostomuutoksiin hallitsemattomasti
- Älä poista allekirjoitusten tarkistusta käytöstä ymmärtämättä virhettä
Kuinka estää ongelman toistuminen
- Vältä sähkökatkoksia ja pakotettua sammutusta päivitysten aikana
- Älä lisää liikaa kolmannen osapuolen repositoryjä
- Tee snapshot tai backup ennen suuria päivityksiä
- Noudata jakelun suosittelemaa päivitystapaa
- Vältä erityisesti osittaisia päivityksiä Archissa
Yhteenveto
Vaikka näyttää siltä, että apt, dnf tai pacman itse olisi rikki, todellinen syy on usein verkossa, lock-tiedostoissa, allekirjoituksissa, riippuvuuksissa, cachessa, levytilassa tai repository-asetuksissa. Tärkeintä on olla reagoimatta heti satunnaisella poistolla tai uudelleenasennuksella, vaan ymmärtää ensin lokien avulla, millä tasolla virhe oikeasti syntyi. Sen jälkeen kannattaa käyttää oikeaa lähestymistapaa: dpkg-korjaus apt:lle, metadata ja historia dnf:lle sekä täydellinen synkronointi ja avainten tarkistus pacmanille.