Delen via


Veelvoorkomende problemen in de hulpprogramma's voor yum- en dnf-pakketbeheer voor Linux oplossen

Van toepassing op: ✔️ Virtuele Linux-machines

In dit artikel worden veelvoorkomende problemen besproken en opgelost die u kunt ondervinden wanneer u hulpprogramma's voor pakketbeheer gebruikt yum om dnf toepassingen te installeren of bij te werken op virtuele Microsoft Azure-machines (VM's).

Let op

Dit artikel verwijst naar CentOS, een Linux-distributie die het einde van de levensduur van de ondersteuning (EOL) heeft bereikt. Overweeg uw gebruik en planning dienovereenkomstig. Zie de Richtlijnen voor het einde van de levensduur van CentOS voor meer informatie.

Overzicht

Het yum-opdrachtregelprogramma voor pakketbeheer wordt gebruikt in Linux-distributies die gebruikmaken van de RPM-Pakketbeheer. De naam van het hulpprogramma is een acroniem voor 'Yellowdog Updater Modified' en is oorspronkelijk ontwikkeld voor Yellow Dog Linux. Het yum hulpprogramma heeft wijdverspreid gebruik gekregen, met name in RPM-distributies zoals Red Hat Enterprise Linux (RHEL), CentOS, Oracle Linux, Mariner en Fedora.

Het dnf-opdrachtregelprogramma voor pakketbeheer of 'Dandified Yum' is een gemoderniseerd en uitgebreid hulpprogramma voor pakketbeheer voor LINUX-distributies op basis van RPM.

Scenario 1: Probleem met toegang tot opslagplaats

U ondervindt fouten die van toepassing zijn op certificaten of netwerkconnectiviteit.

Een validatiescript uitvoeren

Azure biedt het controlescript voor de Red Hat Update Infrastructure (RHUI)-opslagplaats op GitHub. Dit Python-script bevat de volgende functies:

  • Valideert het RHUI-clientcertificaat.
  • Valideert consistentie RHUI rpm.
  • Controleert de consistentie tussen configuraties van uitgebreide updateondersteuning (EUS) en niet-EUS-opslagplaatsconfiguraties en hun vereisten.
  • Valideert de connectiviteit met de RHUI-opslagplaatsen.
  • Rapporteert de verbinding met de opslagplaats als er geen fouten worden gedetecteerd.
  • Controleert de SSL-verbinding met de RHUI-opslagplaatsen.
  • Richt zich uitsluitend op de RHUI-opslagplaatsen.
  • Controleert een gevonden fout met behulp van de gedefinieerde voorwaarden en geeft aanbevelingen voor een oplossing.

Ondersteunde Red Hat-installatiekopieën

Deze versie van het controlescript ondersteunt momenteel alleen de volgende Red Hat-VM's die zijn geïmplementeerd vanuit de Azure Marketplace-installatiekopie:

  • RHEL 7.x PAYG-VM's
  • RHEL 8.x PAYG-VM's
  • RHEL 9.x PAYG-VM's
  • RHEL 10. x PAYG-VM's

Het RHUI-controlescript uitvoeren

Voer de volgende shellopdrachten in op een Red Hat-VM om het controlescript uit te voeren:

  1. Als de VIRTUELE machine internettoegang heeft, voert u het script rechtstreeks vanaf de VIRTUELE machine uit met behulp van de volgende opdracht:

    curl -sL https://raw.githubusercontent.com/Azure/azure-support-scripts/refs/heads/master/Linux_scripts/rhui-check/rhui-check.py | sudo python2 -
    
  2. Als de VIRTUELE machine geen directe internettoegang heeft, downloadt u het script via de volgende URL: RHUI check script, brengt u het script over naar de VIRTUELE machine en voert u de volgende opdracht uit:

    sudo python2 ./rhui-check.py 
    
  3. Het script genereert een rapport met eventuele gevonden problemen. De scriptuitvoer wordt ook opgeslagen /var/log/rhuicheck.log nadat u deze hebt uitgevoerd.

Oplossing 1

Zie Red Hat RHUI-certificaatproblemen in Azure oplossen of Problemen met red hat RHUI-connectiviteit in Azure oplossen voor een RHEL-systeem.

Voor andere Linux-distributies moet u ervoor zorgen dat communicatie met de bijbehorende opslagplaats is toegestaan via poort 443. Zorg er bovendien voor dat het besturingssysteem een geldig certificaat gebruikt als een geldig certificaat vereist is.

Scenario 2: Probleem met afhankelijkheid

Er kunnen verschillende fouten optreden wanneer er een afhankelijkheidsconflict optreedt tijdens een update. In de volgende subsecties worden de uitvoersymptomen van typische afhankelijkheidsfouten weergegeven.

Symptoom 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)

Symptoom 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)

Oplossing 2

Wanneer u een afhankelijkheidsprobleem ondervindt, begint u met het identificeren van de specifieke combinatie van pakket en versie die ontbreekt of niet compatibel is. Het yum foutbericht geeft meestal aan welke combinatie van pakketversie is vereist, maar niet beschikbaar is.

Oplossing voor symptoom 2a: het oudere pakket verwijderen

Voor symptoom 2a yum weigert u een transactie en retourneert u een foutbericht. De fout wordt veroorzaakt door nn-incompatibiliteit tussen het python2-leapp pakket van een oudere release en de nieuwste release.

U kunt deze fout oplossen door het oudere pakket te verwijderen dat het conflict veroorzaakt (in dit geval python2-leapp-0.16.0-1.el7_9.noarch) door de volgende yum remove opdracht uit te voeren:

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

Vervolgens kunt u doorgaan met de update of installatie van het vereiste pakket.

Oplossing voor symptoom 2b: Verwijder de pakketuitsluiting uit het configuratiebestand

Voor symptoom 2b yum weigert u een transactie en retourneert u een foutbericht. Een uitsluitingsfilter veroorzaakt de fout.

Als u deze fout wilt oplossen zodat u het bijwerken of installeren van het vereiste pakket kunt hervatten, moet u ervoor zorgen dat het systemd pakket niet is uitgesloten in het configuratiebestand /etc/yum.conf of /etc/dnf.conf . Als u wilt controleren of de systemd pakketuitsluiting plaatsvindt, voert u een opdracht uit, zoals de volgende cat/grep combinatie:

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

Als het systemd pakket is uitgesloten, wordt de volgende uitvoer weergegeven:

exclude=systemd

Als u deze pakketuitsluiting wilt beëindigen, gebruikt u een teksteditor (zoals , of ) om de vermelding voor de regel 'exclude' in het vi of /etc/dnf.confvimcommentaar te geven.nano

Scenario 3: Verkeerde versie van Python

De yum, dnfen rpm hulpprogramma's zijn geschreven in Python en zijn afhankelijk van de Python-interpreter om correct te werken. Ze zijn met name afhankelijk van bepaalde functies en bibliotheken die de Python-interpreter biedt om hun code uit te voeren en te communiceren met het systeem. Als u de standaardversie van Python wijzigt die op het systeem is geïnstalleerd, kan dit problemen yum veroorzaken of dnf vanwege een afhankelijkheid van specifieke Python-versies en -configuraties.

U kunt bijvoorbeeld een van de volgende fouten ondervinden als u niet de juiste versie van Python hebt geïnstalleerd:

  • "Ongeldige syntaxis"

    yum list all
      File "/usr/bin/yum", line 30
        except KeyboardInterrupt, e:
                                ^
    SyntaxError: invalid syntax
    
  • "Geen module met de naam 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
    
  • "Ongeldige interpreter: geen dergelijk bestand of dergelijke map"

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

Oplossing 3

Door de officiële documentatie voor uw Linux-distributie te raadplegen, kunt u de standaardversie van Python controleren en deze vergelijken met de versie die op uw systeem is geïnstalleerd. Dit proces zorgt voor consistentie en compatibiliteit tussen softwareafhankelijkheden en systeemconfiguraties.

Nadat u de standaardversie van Python voor uw Linux-distributie hebt geïdentificeerd, kunt u de momenteel geïnstalleerde versie bepalen door een van de volgende opdrachten uit te voeren:

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

Als u controleert of een niet-ondersteunde versie van Python wordt gebruikt, hebt u verschillende opties om dit probleem op te lossen.

Verwijder de symlink naar de niet-ondersteunde versie van Python en maak een symlink naar de ondersteunde versie van Python door de volgende opdrachten uit te voeren:

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

Oplossing 3b: Python opnieuw installeren met behulp van RPM

Installeer het Python-pakket opnieuw door de volgende rpm opdracht uit te voeren:

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

Oplossing 3c: Python opnieuw installeren vanaf een reddings-VM

Installeer het Python-pakket opnieuw vanaf een reddings-VM. Zie Ontbrekende belangrijke systeemkernbibliotheken en -pakketten voor instructies.

Scenario 4: Dubbele pakketten

Als er een onderbreking optreedt tijdens yum het bijwerken, yum behoudt u mogelijk de oude pakketversies naast de nieuwe pakketten die worden geïnstalleerd. Dubbele pakketten kunnen verwarring veroorzaken in systeembewerkingen tijdens het volgende gebruik van het hulpprogramma en uiteindelijk 'beveiligde multilib'-fouten of misleidende afhankelijkheidsproblemen veroorzaken.

De volgende scenario's zijn gebruikelijk:

  • Wordt uitgevoerd yum update via Secure Shell (SSH) en ondervindt connectiviteitsonderbrekingen tijdens het updateproces

  • SIGINT Een en een kill -2 signaal naar het yum proces verzenden of Ctrl+ selecteren om het yum proces te beëindigen terwijl het actief wordt uitgevoerd

  • Een systeem wordt halverwege het updateproces opnieuw opgestart

Oplossing 4

Er zijn twee mogelijke oplossingen: probeer de transactie te voltooien of verwijder de dubbele pakketten handmatig. De stappen voor het voltooien van deze benaderingen verschillen afhankelijk van de distributie en versie van uw Linux-installatie.

Oplossing 4a: probeer de transactie te voltooien

  1. Probeer de transactie te voltooien door de volgende yum-complete-transactieopdracht uit te voeren:

    sudo yum-complete-transaction
    

    Als de bewerking is geslaagd zonder meer duplicaten te verlaten, gaat u naar stap 2.

  2. Als er duplicaten aanwezig zijn, lost u deze transactie op door de --cleanup-only parameter in de yum-complete-transaction opdracht op te geven:

    sudo yum-complete-transaction --cleanup-only
    

Oplossing 4b: Duplicaten handmatig verwijderen

  1. Verwijder de dubbele pakketten handmatig door de volgende opdrachten uit te voeren. Voor de yum check opdracht kan veel tijd nodig zijn, maar het verkrijgen van de uitvoer is van cruciaal belang om door te gaan met deze stappen:

    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. Nadat de duplicaten zijn verwijderd, installeert u de kernel opnieuw als er een nieuwe kernel is opgenomen in de mislukte transactie, om er zeker van te zijn dat de juiste generatie Van Grand Unified Bootloader-vermeldingen (GRUB), de eerste RAM-schijf (initrd) en het oorspronkelijke RAM-bestandssysteem (initramfs) zijn geïnstalleerd.

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

Scenario 5: Yum werkt niet en toont de fout '404 Niet gevonden'

Een foutbericht '404 Niet gevonden' in de yum uitvoer geeft aan dat yum het pakket of de resource niet kan worden gevonden op de server. Dit probleem treedt meestal op als yum u probeert een pakket te downloaden of te openen vanuit een opslagplaats, maar het pakketbestand of de metagegevens die eraan zijn gekoppeld, ontbreken of zijn niet beschikbaar op de server. Dit scenario heeft verschillende oorzaken, waaronder de volgende:

  • Het pakket of de resource is verwijderd uit de opslagplaats.

  • De URL of configuratie van de opslagplaats is onjuist.

  • Netwerkproblemen verhinderen toegang yum tot de opslagplaatsserver.

  • Er was tijdelijke uitvaltijd of onderhoud van de server.

Voorbeelden van deze fout worden weergegeven in voorbeelduitvoer voor verschillende Linux-distributies.

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-

Oplossing 5

De volgende mogelijke oplossingen zijn van toepassing op verschillende Linux-distributies.

Zorg ervoor dat u het juiste proces volgt wanneer u schakelt tussen eus-levenscyclusopslagplaatsen (Extended Update Support) en niet-EUS-opslagplaatsen, of van niet-EUS naar EUS. Zie het gedrag van het bijwerken van afbeeldingen voor meer informatie.

Als de fout meestal optreedt omdat er een onjuiste waarde wordt gebruikt voor /etc/yum/vars/releasever en /etc/dnf/vars/releasever, of omdat de waarde niet aanwezig moet zijn (voor niet-EUS-opslagplaatsen), voert u de volgende stappen uit:

  1. Controleer of uw systeem GEBRUIKMAAKT van EUS- of niet-EUS-opslagplaatsen. Voer hiervoor de volgende rpm/grep opdrachtcombinatie uit:

    sudo rpm -qa | grep -i rhui
    

    De bestandsnaamindeling die de opdracht produceert, is afhankelijk van het type opslagplaats, zoals wordt weergegeven in de volgende tabel.

    Type opslagplaats Indeling van bestandsnaam
    EUS rhui-azure-rhelX-eus-new-version-release.noarch<><>
    niet-EUS rhui-azure-rhelX-new-version-release.noarch<><>
  2. Bepaal de huidige waarde voor de releaseversie door de volgende cat opdracht uit te voeren.

    RHEL-versie Opdracht
    RHEL 7 sudo cat /etc/yum/vars/releasever
    RHEL 8 en 9 sudo cat /etc/dnf/vars/releasever
  3. Wijzig en gebruik de juiste waarde voor de releaseversie:

    • Als uw systeem GEBRUIKMAAKT van EUS-opslagplaatsen, moet u ervoor zorgen dat de juiste versievergrendeling is toegepast. In het volgende voorbeeld wordt de versievergrendeling toegevoegd voor RHEL 9.2 omdat RHUI EUS opslagplaatsen worden gebruikt:

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

      Notitie

      De steun voor RHEL7 EUS is beëindigd op 30 augustus 2021. U wordt aangeraden geen EUS-opslagplaatsen meer te gebruiken in RHEL7.

      RHEL 8.x-versies voor EUS zijn beschikbaar. Deze versies omvatten RHEL 8.8, 8.6, 8.4, 8.2 en 8.1.

      RHEL 9.x-versies voor EUS zijn beschikbaar. Deze versies bevatten momenteel RHEL 9.2 en 9.0.

      Zie Red Hat Enterprise Linux-levenscyclus voor meer informatie over de beschikbaarheid van versies.

    • Als uw systeem niet-EUS-opslagplaatsen gebruikt, moet u ervoor zorgen dat u de versievergrendeling voor het bestand /etc/yum/vars/releasever of /etc/dnf/vars/releasever verwijdert door de volgende opdracht uit te voeren.

      RHEL-versie Opdracht
      RHEL 7 sudo echo "" > /etc/yum/vars/releasever
      RHEL 8 en 9 sudo echo "" > /etc/dnf/vars/releasever

Scenario 6: PROBLEEM MET RPM-database

De volgende fouten worden weergegeven als u de rpmopdracht , up2date, yumof dnftdnf opdracht uitvoert:

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:

Deze fouten kunnen om een van de volgende redenen optreden:

  • Verbroken RPM-databases
  • Een andere toepassing die gebruikmaakt van de database
  • Onvoldoende ruimte in de map /var/lib/rpm

Oplossing 6

Bouw de RPM-database opnieuw door de volgende stappen uit te voeren:

Belangrijk

Voordat u deze stappen uitvoert, moet u ervoor zorgen dat er voldoende vrije schijfruimte beschikbaar is.

  1. Maak een back-up van de map /var/lib/rpm door de opdracht uit te tar voeren:

    sudo tar zcvf /var/lib/rpm-backup.tar.gz /var/lib/rpm
    
  2. Als u verouderde vergrendelingen wilt voorkomen, verwijdert u de __db* -bestanden en controleert u de integriteit van het pakketbestand :

    sudo cd /var/lib/rpm
    sudo rm -f __db.*
    sudo /usr/lib/rpm/rpmdb_verify Packages
    
  3. Bouw de RPM-database opnieuw op door de opdracht uit te rpm voeren:

    sudo rpm -vv --rebuilddb
    

Scenario 7: Yum-opdracht mislukt en retourneert '[Errno 14] HTTPS-fout 403 --Verboden'

De volgende fouten worden weergegeven als u de yum opdracht uitvoert op een Red Hat 7.x VM die is verbonden met 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

Oplossing 7

  1. Controleer of er een curl-pakket van derden is geïnstalleerd op uw VM:

    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/
    

    Als er een pakket van derden is geïnstalleerd, gaat u naar stap 2.

    Belangrijk

    De curl-pakketten van bronnen van derden worden geleverd samen met hun eigen binaire bestanden en certificaten die niet worden herkend door Red Hat. Deze incompatibiliteit zorgt ervoor dat yum problemen ondervindt.

  2. Gebruik een van de volgende methoden om de nieuwste versie van de curl, libcurlen libcurl-devel pakketten te downloaden die worden geleverd voor RHEL 7.9:

    • Download de pakketten handmatig door u aan te melden bij Red Hat Download en upload vervolgens de rpms-bestanden naar de betreffende VM.

    • Meld u aan bij een werkende RHEL 7.9-VM (PAYGO), download de vereiste pakketten met behulp van de yumdownloader opdracht en kopieer de rpms-bestanden vervolgens naar de betreffende VM:

      sudo yumdownloader curl.x86_64 libcurl.x86_64 libcurl-devel.x86_64
      
  3. Downgrade de curl-pakketten met behulp van de rpms-bestanden uit stap 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=*
    

Disclaimerinformatie van derden

De producten van derden die in dit artikel worden vermeld, worden vervaardigd door bedrijven die onafhankelijk zijn van Microsoft. Microsoft verleent dan ook geen enkele garantie, impliciet noch anderszins, omtrent de prestaties of de betrouwbaarheid van deze producten.

Disclaimerinformatie van derden

Microsoft biedt contactgegevens van derden om u te helpen aanvullende informatie over dit onderwerp te vinden. Deze contactinformatie kan zonder voorafgaande kennisgeving worden gewijzigd. Microsoft garandeert niet de nauwkeurigheid van contactgegevens van derden.

Contacteer ons voor hulp

Als u vragen hebt of hulp nodig hebt, maak een ondersteuningsaanvraag of vraag de Azure-communityondersteuning. U kunt ook productfeedback verzenden naar de Azure-feedbackcommunity.