Dela via


Felsöka vanliga problem i yum- och dnf-pakethanteringsverktygen för Linux

Gäller för: ✔️ Virtuella Linux-datorer

Den här artikeln beskriver och löser vanliga problem som kan uppstå när du använder yum och dnf pakethanteringsverktyg för att installera eller uppdatera program på virtuella Microsoft Azure-datorer (VM).

Varning

Den här artikeln refererar till CentOS, en Linux-distribution som har nått sin supportslutpunkt (EOL). Överväg att använda och planera i enlighet med detta. Mer information finns i CentOS End Of Life-vägledningen.

Översikt

Kommandoradspakethanteringsverktyget yum används i Linux-distributioner som använder RPM Package Manager. Verktygsnamnet är en förkortning för "Yellowdog Updater Modified" och utvecklades ursprungligen för Yellow Dog Linux. Verktyget yum har fått omfattande användning, särskilt i RPM-baserade distributioner som Red Hat Enterprise Linux (RHEL), CentOS, Oracle Linux, Mariner och Fedora.

Dnf-kommandoradspaketets hanteringsverktyg, eller "Dandified Yum", är ett moderniserat och förbättrat pakethanteringsverktyg för RPM-baserade Linux-distributioner.

Scenario 1: Problem med lagringsplatsåtkomst

Du får fel som gäller för certifikat eller nätverksanslutning.

Kör ett valideringsskript

Azure tillhandahåller kontrollskriptet för Red Hat Update Infrastructure (RHUI) på GitHub. Det här Python-skriptet innehåller följande funktioner:

  • Validerar RHUI-klientcertifikatet.
  • Validerar RHUI rpm-konsekvens.
  • Kontrollerar konsekvensen mellan konfigurationer av utökad uppdateringssupport (EUS) och icke-EUS-lagringsplatser och deras krav.
  • Verifierar anslutningen till RHUI-lagringsplatserna.
  • Rapporterar lyckad lagringsplatsanslutning om inga fel identifieras.
  • Verifierar SSL-anslutningen till RHUI-lagringsplatserna.
  • Fokuserar uteslutande på RHUI-lagringsplatserna.
  • Verifierar ett fel som hittats med hjälp av de definierade villkoren och ger rekommendationer för en korrigering.

Red Hat-bilder som stöds

Den här versionen av kontrollskriptet stöder för närvarande endast följande virtuella Red Hat-datorer som distribueras från Azure Marketplace-avbildningen:

  • RHEL 7.x PAYG virtuella datorer
  • RHEL 8.x PAYG virtuella datorer
  • RHEL 9.x PAYG virtuella datorer
  • RHEL 10.x virtuella PAYG-maskiner

Så här kör du RHUI-kontrollskriptet

Om du vill köra kontrollskriptet anger du följande gränssnittskommandon på en virtuell Red Hat-dator:

  1. Om den virtuella datorn har internetåtkomst kör du skriptet direkt från den virtuella datorn med hjälp av följande kommando:

    curl -sL https://raw.githubusercontent.com/Azure/azure-support-scripts/refs/heads/master/Linux_scripts/rhui-check/rhui-check.py | sudo python2 -
    
  2. Om den virtuella datorn inte har direkt internetåtkomst laddar du ned skriptet från följande URL: RHUI-kontrollskript, överför skriptet till den virtuella datorn och kör sedan följande kommando:

    sudo python2 ./rhui-check.py 
    
  3. Skriptet genererar en rapport som innehåller eventuella problem som hittas. Skriptutdata sparas också i /var/log/rhuicheck.log när du har kört det.

Lösning 1

Ett RHEL-system finns i Felsöka Red Hat RHUI-certifikatproblem i Azure eller Felsöka Red Hat RHUI-anslutningsproblem i Azure.

För andra Linux-distributioner kontrollerar du att kommunikation till motsvarande lagringsplats tillåts via port 443. Kontrollera dessutom att operativsystemet använder ett giltigt certifikat om ett giltigt certifikat krävs.

Scenario 2: Beroendeproblem

Du kan uppleva något av flera fel när du stöter på en beroendekonflikt under en uppdatering. Följande underavsnitt visar utdatasymptomen för typiska beroendefel.

Symptom 2a

Error: 
 Problem: package leapp-0.16.0-2.el8.noarch requires python3-leapp = 0.16.0-2.el8, but none of the providers can be installed
  - package python2-leapp-0.16.0-1.el7_9.noarch conflicts with python3-leapp provided by python3-leapp-0.16.0-2.el8.noarch
  - package python3-leapp-0.16.0-2.el8.noarch conflicts with python2-leapp provided by python2-leapp-0.16.0-1.el7_9.noarch
  - cannot install the best update candidate for package leapp-0.16.0-1.el7_9.noarch
  - problem with installed package python2-leapp-0.16.0-1.el7_9.noarch
(try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)

Symptom 2b

Error: 
 Problem 1: package systemd-udev-239-78.el8.x86_64 requires systemd(x86-64) = 239-78.el8, but none of the providers can be installed
  - cannot install the best update candidate for package systemd-udev-239-74.el8_8.5.x86_64
  - package systemd-239-78.el8.x86_64 is filtered out by exclude filtering
 Problem 2: package systemd-container-239-78.el8.x86_64 requires systemd(x86-64) = 239-78.el8, but none of the providers can be installed
  - cannot install the best update candidate for package systemd-container-239-74.el8_8.5.x86_64
  - package systemd-239-78.el8.x86_64 is filtered out by exclude filtering
 Problem 3: package systemd-pam-239-78.el8.x86_64 requires systemd = 239-78.el8, but none of the providers can be installed
  - cannot install the best update candidate for package systemd-pam-239-74.el8_8.5.x86_64
  - package systemd-239-78.el8.i686 is filtered out by exclude filtering
  - package systemd-239-78.el8.x86_64 is filtered out by exclude filtering
 Problem 4: systemd-libs-239-74.el8_8.5.i686 has inferior architecture
  - package systemd-239-74.el8_8.5.x86_64 requires systemd-libs = 239-74.el8_8.5, but none of the providers can be installed
  - cannot install both systemd-libs-239-78.el8.x86_64 and systemd-libs-239-74.el8_8.5.x86_64
  - cannot install the best update candidate for package systemd-libs-239-74.el8_8.5.x86_64
  - problem with installed package systemd-239-74.el8_8.5.x86_64
(try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)

Lösning 2

När du stöter på ett beroendeproblem börjar du med att identifiera den specifika kombinationen av paket och version som saknas eller är inkompatibel. Felmeddelandet yum anger vanligtvis vilken kombination av paketversion som krävs men inte är tillgänglig.

Lösning för symptom 2a: Ta bort det äldre paketet

För Symptom 2a yum avvisar en transaktion och returnerar ett felmeddelande. Felet orsakas av nn-inkompatibilitet mellan python2-leapp paketet från en äldre version och den senaste versionen.

För att åtgärda det här felet måste du ta bort det äldre paketet som orsakar konflikten (i det här fallet python2-leapp-0.16.0-1.el7_9.noarch) genom att köra följande yum remove kommando:

sudo yum remove python2-leapp-0.16.0-1.el7_9.noarch

Sedan kan du fortsätta uppdateringen eller installationen av det nödvändiga paketet.

Lösning för symptom 2b: Ta bort paketundantag från konfigurationsfilen

För symptom 2b yum avvisar en transaktion och returnerar ett felmeddelande. Ett undantagsfilter orsakar felet.

Om du vill åtgärda det här felet så att du kan återuppta uppdateringen eller installationen av det nödvändiga paketet kontrollerar du att systemd paketet inte är exkluderat i konfigurationsfilen /etc/yum.conf eller /etc/dnf.conf . Om du vill kontrollera om systemd paketundantag inträffar kör du ett kommando, till exempel följande cat/grep kombination:

sudo cat /etc/yum.conf | grep -i exclude

Om paketet systemd undantas visas följande utdata:

exclude=systemd

Om du vill avsluta det här paketundantag använder du en textredigerare (till exempel , eller ) för att ta bort eller kommentera ut posten för raden "exclude" i vi eller vim.nano

Scenario 3: Fel version av Python

Verktygen yum, dnfoch rpm skrivs i Python och är beroende av att Python-tolken fungerar korrekt. Mer specifikt förlitar de sig på vissa funktioner och bibliotek som Python-tolken tillhandahåller för att köra sin kod och interagera med systemet. Om du ändrar standardversionen av Python som är installerad i systemet kan det orsaka problem inom yum eller dnf på grund av ett beroende av specifika Python-versioner och konfigurationer.

Du kan till exempel uppleva något av följande fel om du inte har rätt version av Python installerad:

  • "Ogiltig syntax"

    yum list all
      File "/usr/bin/yum", line 30
        except KeyboardInterrupt, e:
                                ^
    SyntaxError: invalid syntax
    
  • "Ingen modul med namnet yum"

    yum repolist
    There was a problem importing one of the Python modules
    required to run yum. The error leading to this problem was:
    
       No module named yum
    
  • "Felaktig tolk: Ingen sådan fil eller katalog"

    bash: /usr/bin/yum: /usr/bin/pythonX.X: bad interpreter: No such file or directory
    

Lösning 3

Genom att konsultera den officiella dokumentationen för din Linux-distribution kan du kontrollera standardversionen av Python och jämföra den med den version som är installerad på systemet. Den här processen hjälper till att säkerställa konsekvens och kompatibilitet mellan programvaruberoenden och systemkonfigurationer.

När du har identifierat standardversionen av Python för din Linux-distribution kan du fastställa vilken version som är installerad genom att köra något av följande kommandon:

sudo ls -al `which python`
sudo ls -lrth /usr/bin/python*
sudo rpm -V python

Om du kontrollerar att en version av Python som inte stöds används har du flera alternativ för att åtgärda problemet.

Ta bort symlinken till den version av Python som inte stöds och skapa en symlink till den version av Python som stöds genom att köra följande kommandon:

sudo cd /usr/bin
sudo unlink python
sudo ln -s python2.7 python  # Modify if necessary.

Lösning 3b: Installera om Python med RPM

Installera om Python-paketet genom att köra följande rpm kommando:

sudo rpm -ivh python-<release>.<arch>.rpm --replacepkgs --replacefiles

Lösning 3c: Installera om Python från en virtuell räddningsdator

Installera om Python-paketet från en virtuell räddningsdator. Anvisningar finns i Saknade viktiga systemkärnningsbibliotek och -paket.

Scenario 4: Duplicera paket

Om ett avbrott inträffar under yum uppdateringen yum kan du behålla de gamla paketversionerna tillsammans med de nya paket som installeras. Duplicerade paket kan orsaka förvirring i systemåtgärder under efterföljande användning av verktyget och så småningom orsaka "skyddade multilib"-fel eller missvisande beroendeproblem.

Följande scenarier är typiska:

  • Köra yum update över Secure Shell (SSH) och uppleva anslutningsstörningar under uppdateringsprocessen

  • Skicka en SIGINT och en kill -2 signal till yum processen, eller välj Ctrl+C för att avsluta processen medan den yum körs aktivt

  • Upplever en systemomstart halvvägs genom uppdateringsprocessen

Lösning 4

Det finns två möjliga lösningar: Försök att slutföra transaktionen eller ta bort dubblettpaketen manuellt. Stegen för att slutföra dessa metoder varierar beroende på distributionen och versionen av linux-installationen.

Lösning 4a: Försök att slutföra transaktionen

  1. Försök att slutföra transaktionen genom att köra följande yum-complete-transaction-kommando :

    sudo yum-complete-transaction
    

    Om åtgärden lyckas utan att lämna fler dubbletter går du till steg 2.

  2. Om dubbletter finns löser du den här transaktionen genom att ange parametern --cleanup-only i yum-complete-transaction kommandot:

    sudo yum-complete-transaction --cleanup-only
    

Lösning 4b: Ta bort dubbletter manuellt

  1. Ta bort dubblettpaketen manuellt genom att köra följande kommandon. Kommandot yum check kan kräva mycket tid, men det är viktigt att du hämtar utdata för att fortsätta med följande steg:

    sudo tar -cjf /tmp/rpm_dbbkp.tar.bz2 /var/lib/{rpm,yum}
    sudo yum check &> /tmp/yumcheck
    grep "duplicate" /tmp/yumcheck | awk '{ print $NF }' | egrep -v "\:" > /tmp/duplicaterpms
    grep "duplicate" /tmp/yumcheck | awk '{ print $NF }' | egrep ":" | awk -F':' '{ print $NF }' >> /tmp/duplicaterpms
    for i in $(cat /tmp/duplicaterpms); do sudo rpm -e --justdb --nodeps $i; done
    sudo yum update
    
  2. När dubbletterna har tagits bort, om en ny kernel ingick i den misslyckade transaktionen, installerar du om kerneln för att se till att rätt generering av GRUB-poster (Grand Unified Bootloader), den ursprungliga RAM-disken (initrd) och det första RAM-filsystemet (initramfs) har installerats.

    sudo yum remove kernel-<newversion>-<release>.<arch>
    sudo yum install kernel-<newversion>-<release>.<arch>
    

Scenario 5: Yum fungerar inte och visar felet "404 Hittades inte"

Felmeddelandet "404 Hittades inte" i yum utdata anger att det inte gick att yum hitta paketet eller resursen på servern. Det här problemet uppstår vanligtvis om yum du försöker ladda ned eller komma åt ett paket från en lagringsplats, men paketfilen eller metadata som är associerade med den saknas eller är inte tillgängliga på servern. Det här scenariot har olika orsaker, inklusive följande:

  • Paketet eller resursen har tagits bort från lagringsplatsen.

  • Lagringsplatsens URL eller konfiguration är felaktig.

  • Nätverksproblem hindrar yum från att komma åt lagringsplatsens server.

  • Det fanns tillfällig serveravbrott eller underhåll.

Exempel på det här felet visas i exempelutdata för olika Linux-distributioner.

Red Hat Enterprise Linux 9 for x86_64 - Supplem  46  B/s |  14  B     00:00    
Errors during downloading metadata for repository 'rhel-9-for-x86_64-supplementary-rhui-rpms':
  - Status code: 404 for https://rhui4-1.microsoft.com/pulp/repos/content/dist/rhel9/rhui/9.1/x86_64/supplementary/os/repodata/repomd.xml (IP: 52.142.4.99)
Error: Failed to download metadata for repo 'rhel-9-for-x86_64-

Lösning 5

Följande möjliga lösningar gäller för olika Linux-distributioner.

Se till att du följer rätt process när du växlar mellan lagringsplatser för utökad uppdateringssupport (EUS) och lagringsplatser som inte är EUS-lagringsplatser, eller från icke-EUS till EUS. Mer information finns i Beteende för bilduppdatering.

Om felet vanligtvis uppstår på grund av att ett felaktigt värde används för /etc/yum/vars/releasever och /etc/dnf/vars/releasever, eller på grund av att värdet ska vara frånvarande (för lagringsplatser som inte kommer från EUS), följer du dessa steg:

  1. Kontrollera om systemet använder EUS- eller icke-EUS-lagringsplatser. Kör följande rpm/grep kommandokombination för att göra detta:

    sudo rpm -qa | grep -i rhui
    

    Filnamnsformatet som kommandot skapar beror på lagringsplatsens typ, enligt följande tabell.

    Lagringsplatstyp Format på filnamn
    EUS rhui-azure-rhelX-eus-new-version-release.noarch<><>
    icke-EUS rhui-azure-rhelX-new-version-release.noarch<><>
  2. Fastställa det aktuella värdet för versionsversionen genom att köra följande cat kommando.

    RHEL-version Befallning
    RHEL 7 sudo cat /etc/yum/vars/releasever
    RHEL 8 och 9 sudo cat /etc/dnf/vars/releasever
  3. Ändra och använd rätt värde för versionsversionen:

    • Om systemet använder EUS-lagringsplatser kontrollerar du att rätt versionslås tillämpas. I följande exempel läggs versionslåset till för RHEL 9.2 eftersom RHUI EUS lagringsplatser används:

      sudo sh -c 'echo 9.2 > /etc/dnf/vars/releasever'
      

      Kommentar

      Stödet för RHEL7 EUS upphörde den 30 augusti 2021. Vi rekommenderar att du inte längre använder EUS-lagringsplatser i RHEL7.

      RHEL 8.x versioner för EUS är tillgängliga. Dessa versioner omfattar RHEL 8.8, 8.6, 8.4, 8.2 och 8.1.

      RHEL 9.x versioner för EUS är tillgängliga. För närvarande innehåller dessa versioner RHEL 9.2 och 9.0.

      Mer information om versionstillgänglighet finns i Livscykel för Red Hat Enterprise Linux.

    • Om systemet använder icke-EUS-lagringsplatser måste du ta bort versionslåset för filen /etc/yum/vars/releasever eller /etc/dnf/vars/releasever genom att köra följande kommando.

      RHEL-version Befallning
      RHEL 7 sudo echo "" > /etc/yum/vars/releasever
      RHEL 8 och 9 sudo echo "" > /etc/dnf/vars/releasever

Scenario 6: RPM-databasproblem

Följande fel visas om du kör rpmkommandot , up2date, yum, dnfeller tdnf :

error: rpmdb: BDB0113 Thread/process 24669/140693557245760 failed: BDB1507 Thread died in Berkeley DB library
error: db5 error(-30973) from dbenv->failchk: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery
error: cannot open Packages index using db5 - (-30973)
error: cannot open Packages database in /var/lib/rpm
CRITICAL:yum.main:

Dessa fel kan inträffa av någon av följande orsaker:

  • Brutna RPM-databaser
  • Ett annat program som använder databasen
  • Otillräckligt utrymme i katalogen /var/lib/rpm

Lösning 6

Återskapa RPM-databasen genom att följa dessa steg:

Viktigt!

Innan du utför de här stegen måste du se till att det finns tillräckligt med ledigt diskutrymme.

  1. Skapa en säkerhetskopia av katalogen /var/lib/rpm genom att tar köra kommandot:

    sudo tar zcvf /var/lib/rpm-backup.tar.gz /var/lib/rpm
    
  2. För att undvika inaktuella lås tar du bort __db*-filerna och kontrollerar paketfilensintegritet:

    sudo cd /var/lib/rpm
    sudo rm -f __db.*
    sudo /usr/lib/rpm/rpmdb_verify Packages
    
  3. Återskapa RPM-databasen genom att rpm köra kommandot:

    sudo rpm -vv --rebuilddb
    

Scenario 7: Yum-kommandot misslyckas och returnerar "[Errno 14] HTTPS-fel 403 --Förbjuden"

Följande fel visas om du kör yum kommandot på en Red Hat 7.x Virtuell dator som är ansluten till RHUI.

https://rhui4-1.microsoft.com/pulp/repos/content/dist/rhel/rhui/server/7/7Server/x86_64/rh-common/os/repodata/repomd.xml: [Errno 14] HTTPS Error 403 - Forbidden

Lösning 7

  1. Kontrollera om ett curl-paket från tredje part är installerat på den virtuella datorn:

    sudo rpm -qa | grep -i curl
    
    rpm -q --queryformat '%{VENDOR}\n' curl libcurl
    
    curl-7.73.0-2.0.cf.rhel7.x86_64 
    libcurl-7.73.0-2.0.cf.rhel7.x86_64
    libcurl-devel-7.73.0-2.0.cf.rhel7.x86_64 
    
    city-fan.org repo http://www.city-fan.org/ftp/contrib/
    

    Om något tredjepartspaket har installerats går du till steg 2.

    Viktigt!

    Curl-paketen från tredjepartskällor tillhandahålls tillsammans med egna binärfiler och certifikat som inte känns igen av Red Hat. Den här inkompatibiliteten gör att yum får problem.

  2. Använd någon av följande metoder för att hämta den senaste versionen av curl, libcurloch libcurl-devel paket som tillhandahålls för RHEL 7.9:

    • Ladda ned paketen manuellt genom att logga in på Red Hat Download och ladda sedan upp rpms-filerna till den berörda virtuella datorn.

    • Logga in på en fungerande virtuell RHEL 7.9-dator (PAYGO), ladda ned de paket som krävs med kommandot yumdownloader och kopiera sedan rpms-filerna till den berörda virtuella datorn:

      sudo yumdownloader curl.x86_64 libcurl.x86_64 libcurl-devel.x86_64
      
  3. Nedgradera curl-paketen med hjälp av rpms-filerna från steg 2:

    sudo cd /path/location/of/rpms/downloaded
    sudo yum downgrade curl-X.XX.0-XX.el7_9.X.x86_64.rpm libcurl-X.XX.X-XX.el7_9.X.x86_64.rpm libcurl-devel-X.XX.X-XX.el7_9.X.x86_64.rpm --disablerepo=*
    

Ansvarsfriskrivning för information från tredje part

De produkter från andra tillverkare som diskuteras i denna artikel tillverkas oberoende av Microsoft. Produkternas funktion eller tillförlitlighet kan därför inte garanteras.

Ansvarsfriskrivning för tredje part

Microsoft tillhandahåller kontaktinformation från tredje part som hjälper dig att hitta ytterligare information om det här ämnet. Denna kontaktinformation kan ändras utan föregående meddelande. Microsoft garanterar inte att kontaktinformation från tredje part är korrekt.

Kontakta oss för att få hjälp

Om du har frågor eller behöver hjälp skapar du en supportförfrågan eller frågar Azure community support. Du kan också skicka produktfeedback till Azure-feedbackcommunityn.