Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a: ✔️ macchine virtuali Linux
Questo articolo illustra e risolve i problemi comuni che possono verificarsi quando si usano yum
gli strumenti di gestione dei pacchetti e dnf
per installare o aggiornare applicazioni in macchine virtuali di Microsoft Azure.
Attenzione
Questo articolo fa riferimento a CentOS, una distribuzione Linux che ha raggiunto la fine del supporto (EOL). Prendere in considerazione l'uso e la pianificazione di conseguenza. Per ulteriori informazioni, consultare la Guida alla fine del ciclo di vita di CentOS.
Panoramica
Lo strumento di gestione dei pacchetti della riga di comando yum viene usato nelle distribuzioni Linux che usano il Gestione pacchetti RPM. Il nome dello strumento è l'acronimo di "Yellowdog Updater Modified" ed è stato originariamente sviluppato per Yellow Dog Linux. Lo yum
strumento ha acquisito un uso diffuso, in particolare nelle distribuzioni basate su RPM, ad esempio Red Hat Enterprise Linux (RHEL), CentOS, Oracle Linux, Mariner e Fedora.
Lo strumento di gestione dei pacchetti da riga di comando dnf o "Dandified Yum" è uno strumento di gestione pacchetti moderno e avanzato per le distribuzioni Linux basate su RPM.
Scenario 1: Problema di accesso al repository
Si verificano errori che si applicano ai certificati o alla connettività di rete.
Eseguire uno script di convalida
Azure fornisce lo script di controllo del repository RHUI (Red Hat Update Infrastructure) in GitHub. Questo script Python include le funzionalità seguenti:
- Convalida il certificato client RHUI.
- Convalida la coerenza rpm RHUI.
- Verifica la coerenza tra le configurazioni del repository EUS (Extended Update Support) e non EUS e i relativi requisiti.
- Convalida la connettività ai repository RHUI.
- Segnala la connettività corretta del repository se non vengono rilevati errori.
- Verifica la connettività SSL ai repository RHUI.
- Si concentra esclusivamente sui repository RHUI.
- Verifica un errore trovato usando le condizioni definite e fornisce raccomandazioni per una correzione.
Immagini Red Hat supportate
Questa versione dello script check supporta attualmente solo le macchine virtuali Red Hat seguenti distribuite dall'immagine di Azure Marketplace:
- RHEL 7.x macchine virtuali con pagamento in base al consumo
- RHEL 8.x macchine virtuali con pagamento in base al consumo
- RHEL 9.x macchine virtuali con pagamento in base al consumo
- RHEL 10.x macchine virtuali PAYG
Come eseguire lo script di controllo RHUI
Per eseguire lo script check, immettere i comandi della shell seguenti in una macchina virtuale Red Hat:
Se la macchina virtuale ha accesso a Internet, eseguire lo script direttamente dalla macchina virtuale usando il comando seguente:
curl -sL https://raw.githubusercontent.com/Azure/azure-support-scripts/refs/heads/master/Linux_scripts/rhui-check/rhui-check.py | sudo python2 -
Se la macchina virtuale non ha accesso diretto a Internet, scaricare lo script dall'URL seguente: RHUI check script, trasferire lo script alla macchina virtuale e quindi eseguire il comando seguente:
sudo python2 ./rhui-check.py
Lo script genera un report che include eventuali problemi rilevati. L'output dello script viene salvato anche in
/var/log/rhuicheck.log
dopo l'esecuzione.
Soluzione 1
Per un sistema RHEL, vedere Risolvere i problemi di certificato RHUI di Red Hat in Azure o risolvere i problemi di connettività RHUI di Red Hat in Azure.
Per altre distribuzioni linux, assicurarsi che la comunicazione con il repository corrispondente sia consentita tramite la porta 443. Assicurarsi inoltre che il sistema operativo usi un certificato valido se è necessario un certificato valido.
Scenario 2: Problema di dipendenza
È possibile che si verifichino diversi errori quando si verifica un conflitto di dipendenza durante un aggiornamento. Nelle sottosezioni seguenti vengono visualizzati i sintomi di output dei tipici errori di dipendenza.
Sintomo 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)
Sintomo 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)
Soluzione 2
Quando si verifica un problema di dipendenza, iniziare identificando la combinazione specifica di pacchetto e versione mancante o incompatibile. Il yum
messaggio di errore indica in genere quale combinazione di versione del pacchetto è necessaria ma non è disponibile.
Soluzione per il sintomo 2a: Eliminare il pacchetto precedente
Per Sintomo 2a rifiuta yum
una transazione e restituisce un messaggio di errore. L'errore è causato da incompatibilità tra il python2-leapp
pacchetto da una versione precedente e la versione più recente.
Per correggere questo errore, è necessario rimuovere il pacchetto precedente che causa il conflitto (in questo caso python2-leapp-0.16.0-1.el7_9.noarch) eseguendo il comando seguente yum remove
:
sudo yum remove python2-leapp-0.16.0-1.el7_9.noarch
È quindi possibile continuare l'aggiornamento o l'installazione del pacchetto richiesto.
Soluzione per il sintomo 2b: Rimuovere l'esclusione del pacchetto dal file di configurazione
Per il sintomo 2b, yum
rifiuta una transazione e restituisce un messaggio di errore. Un filtro di esclusione causa l'errore.
Per correggere questo errore in modo che sia possibile riprendere l'aggiornamento o installare il pacchetto necessario, assicurarsi che il systemd
pacchetto non sia escluso nel file di configurazione /etc/yum.conf o /etc/dnf.conf . Per verificare se si verifica l'esclusione del systemd
pacchetto, eseguire un comando come la combinazione seguentecat
/grep
:
sudo cat /etc/yum.conf | grep -i exclude
Se il systemd
pacchetto viene escluso, viene visualizzato l'output seguente:
exclude=systemd
Per terminare l'esclusione del pacchetto, usare un editor di testo (ad esempio , o ) per rimuovere o impostare come commento la voce per la riga "exclude" nel vi
o vim
.nano
Scenario 3: Versione errata di Python
Gli yum
strumenti , dnf
e rpm
sono scritti in Python e dipendono dall'interprete Python per funzionare correttamente. In particolare, si basano su alcune funzionalità e librerie fornite dall'interprete Python per eseguire il codice e interagire con il sistema. La modifica della versione predefinita di Python installata nel sistema può causare problemi all'interno yum
o dnf
a causa di una dipendenza da specifiche versioni e configurazioni python.
Ad esempio, è possibile che si verifichi uno degli errori seguenti se non è installata la versione corretta di Python:
"Sintassi non valida"
yum list all File "/usr/bin/yum", line 30 except KeyboardInterrupt, e: ^ SyntaxError: invalid syntax
"Nessun modulo denominato 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
"Interprete non valido: nessun file o directory di questo tipo"
bash: /usr/bin/yum: /usr/bin/pythonX.X: bad interpreter: No such file or directory
Soluzione 3
Consultando la documentazione ufficiale per la distribuzione Linux, è possibile verificare con sicurezza la versione predefinita di Python e confrontarla con la versione installata nel sistema. Questo processo consente di garantire coerenza e compatibilità tra le dipendenze software e le configurazioni di sistema.
Dopo aver identificato la versione predefinita di Python per la distribuzione Linux, è possibile determinare la versione attualmente installata eseguendo uno dei comandi seguenti:
sudo ls -al `which python`
sudo ls -lrth /usr/bin/python*
sudo rpm -V python
Se si verifica che sia in uso una versione non supportata di Python, sono disponibili diverse opzioni per risolvere il problema.
Soluzione 3a: Correggere il collegamento simbolico
Rimuovere il collegamento simbolico alla versione non supportata di Python e creare un collegamento simbolico alla versione supportata di Python eseguendo i comandi seguenti:
sudo cd /usr/bin
sudo unlink python
sudo ln -s python2.7 python # Modify if necessary.
Soluzione 3b: Reinstallare Python usando RPM
Reinstallare il pacchetto Python eseguendo il comando seguente rpm
:
sudo rpm -ivh python-<release>.<arch>.rpm --replacepkgs --replacefiles
Soluzione 3c: Reinstallare Python da una macchina virtuale di ripristino
Reinstallare il pacchetto Python da una macchina virtuale di ripristino. Per istruzioni, vedere Missing important system core libraries and packages (Librerie e pacchetti di base di sistema mancanti).
Scenario 4: Pacchetti duplicati
Se si verifica un'interruzione durante yum
l'aggiornamento, yum
è possibile conservare le versioni precedenti del pacchetto insieme ai nuovi pacchetti da installare. I pacchetti duplicati possono causare confusione nelle operazioni di sistema durante l'uso successivo dello strumento e alla fine causano errori "multilib protetti" o problemi di dipendenza fuorvianti.
Gli scenari seguenti sono tipici:
Esecuzione
yum update
su Secure Shell (SSH) e si verificano interruzioni della connettività durante il processo di aggiornamentoInvio di un
SIGINT
segnale ekill -2
alyum
processo o selezione di CTRL+C per terminare il processo durante l'esecuzione attivayum
Si è verificato un riavvio del sistema a metà del processo di aggiornamento
Soluzione 4
Esistono due possibili soluzioni: provare a completare la transazione o rimuovere manualmente i pacchetti duplicati. I passaggi per completare questi approcci variano a seconda della distribuzione e della versione dell'installazione di Linux.
Soluzione 4a: Provare a completare la transazione
Provare a completare la transazione eseguendo il comando yum-complete-transaction seguente:
sudo yum-complete-transaction
Se l'operazione ha esito positivo senza lasciare altri duplicati, andare al passaggio 2.
Se sono presenti duplicati, risolvere questa transazione specificando il
--cleanup-only
parametro nelyum-complete-transaction
comando :sudo yum-complete-transaction --cleanup-only
Soluzione 4b: rimuovere manualmente i duplicati
Rimuovere manualmente i pacchetti duplicati eseguendo i comandi seguenti. Il
yum check
comando potrebbe richiedere molto tempo, ma ottenere l'output è fondamentale per procedere con questi passaggi: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
Dopo aver rimosso i duplicati, se è stato incluso un nuovo kernel nella transazione non riuscita, reinstallare il kernel per assicurarsi che sia installata la generazione corretta di voci GRUB (Grand Unified Bootloader), il disco RAM iniziale (initrd) e il file system RAM iniziale (initramfs).
sudo yum remove kernel-<newversion>-<release>.<arch> sudo yum install kernel-<newversion>-<release>.<arch>
Scenario 5: Yum non funziona e mostra un errore '404 Non trovato'
Un messaggio di errore "404 Non trovato" nell'output yum
indica che yum
non è stato possibile trovare il pacchetto o la risorsa nel server. Questo problema si verifica in genere se yum
tenta di scaricare o accedere a un pacchetto da un repository, ma il file del pacchetto o i metadati associati a esso non è disponibile o mancante nel server. Questo scenario presenta varie cause, tra cui le seguenti:
Il pacchetto o la risorsa è stato rimosso dal repository.
L'URL o la configurazione del repository non è corretta.
I problemi di rete impediscono
yum
l'accesso al server del repository.Si è verificato un tempo di inattività temporaneo del server o manutenzione.
Esempi di questo errore vengono visualizzati nell'output di esempio per varie distribuzioni linux.
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-
Soluzione 5
Le possibili soluzioni seguenti si applicano a varie distribuzioni di Linux.
Assicurarsi di seguire il processo corretto quando si passa tra repository del ciclo di vita eus (Extended Update Support) e repository non EUS o da eus a EUS. Per altre informazioni, vedere Comportamento di aggiornamento delle immagini.
Se l'errore si verifica in genere perché viene usato un valore non corretto per /etc/yum/vars/releasever e /etc/dnf/vars/releasever oppure perché il valore deve essere assente (per i repository non EUS), seguire questa procedura:
Controllare se il sistema usa repository EUS o non EUS. A tale scopo, eseguire la combinazione di comandi seguente
rpm
/grep
:sudo rpm -qa | grep -i rhui
Il formato del nome file generato dal comando dipende dal tipo di repository, come illustrato nella tabella seguente.
Tipo di repository Formato nome file EUS rhui-azure-rhelX-eus-new-version-release.noarch<><> non EUS rhui-azure-rhelX-new-version-release.noarch<><> Determinare il valore corrente per la versione di rilascio eseguendo il comando seguente
cat
.Versione di RHEL Comando RHEL 7 sudo cat /etc/yum/vars/releasever
RHEL 8 e 9 sudo cat /etc/dnf/vars/releasever
Modificare e usare il valore corretto per la versione di rilascio:
Se il sistema usa repository EUS, assicurarsi che venga applicato il blocco della versione appropriato. Nell'esempio seguente viene aggiunto il blocco della versione per RHEL 9.2 perché
RHUI EUS
vengono usati i repository:sudo sh -c 'echo 9.2 > /etc/dnf/vars/releasever'
Annotazioni
Il supporto per RHEL7 EUS è terminato il 30 agosto 2021. È consigliabile non usare più repository EUS in RHEL7.
RHEL 8.Sono disponibili x versioni per EUS. Queste versioni includono RHEL 8.8, 8.6, 8.4, 8.2 e 8.1.
RHEL 9.Sono disponibili x versioni per EUS. Attualmente, queste versioni includono RHEL 9.2 e 9.0.
Per altre informazioni sulla disponibilità delle versioni, vedere Red Hat Enterprise Linux Life Cycle.
Se il sistema usa repository non EUS, assicurarsi di rimuovere il blocco della versione per il file /etc/yum/vars/releasever o /etc/dnf/vars/releasever eseguendo il comando seguente.
Versione di RHEL Comando RHEL 7 sudo echo "" > /etc/yum/vars/releasever
RHEL 8 e 9 sudo echo "" > /etc/dnf/vars/releasever
Scenario 6: problema del database RPM
Se si esegue il rpm
comando , up2date
, yum
, dnf
, o tdnf
vengono visualizzati gli errori seguenti:
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:
Questi errori possono verificarsi per uno dei motivi seguenti:
- Database RPM interrotti
- Un'altra applicazione che usa il database
- Spazio insufficiente nella directory /var/lib/rpm
Soluzione 6
Ricompilare il database RPM seguendo questa procedura:
Importante
Prima di eseguire questi passaggi, assicurarsi che sia disponibile spazio su disco sufficiente.
Creare un backup della directory /var/lib/rpm eseguendo il
tar
comando :sudo tar zcvf /var/lib/rpm-backup.tar.gz /var/lib/rpm
Per evitare blocchi non aggiornati, rimuovere i file __db* e verificare l'integrità del file Packages :
sudo cd /var/lib/rpm sudo rm -f __db.* sudo /usr/lib/rpm/rpmdb_verify Packages
Ricompilare il database RPM eseguendo il
rpm
comando :sudo rpm -vv --rebuilddb
Scenario 7: Il comando Yum ha esito negativo e restituisce "[Errno 14] Errore HTTPS 403 --Accesso negato"
Se si esegue il comando in red hat 7, vengono visualizzati gli yum
errori seguenti.x macchina virtuale connessa a 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
Soluzione 7
Verificare se nella macchina virtuale è installato un pacchetto curl di terze parti:
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/
Se è installato un pacchetto di terze parti, andare al passaggio 2.
Importante
I pacchetti curl di origini di terze parti vengono forniti insieme ai propri file binari e certificati non riconosciuti da Red Hat. Questa incompatibilità causa problemi di yum to experience.
Usare uno dei metodi seguenti per scaricare la versione più recente dei
curl
pacchetti ,libcurl
elibcurl-devel
forniti per RHEL 7.9:Scaricare manualmente i pacchetti accedendo a Red Hat Download e quindi caricando i file rpms nella macchina virtuale interessata.
Accedere a una macchina virtuale
(PAYGO)
RHEL 7.9 funzionante, scaricare i pacchetti necessari usando ilyumdownloader
comando e quindi copiare i file rpms nella macchina virtuale interessata:sudo yumdownloader curl.x86_64 libcurl.x86_64 libcurl-devel.x86_64
Effettuare il downgrade dei pacchetti curl usando i file rpms del passaggio 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=*
Dichiarazione di non responsabilità sulle informazioni di terze parti
I prodotti di terzi citati in questo articolo sono prodotti da società indipendenti da Microsoft. Microsoft non rilascia alcuna garanzia implicita o esplicita relativa alle prestazioni o all'affidabilità di tali prodotti
Dichiarazione di non responsabilità di contatti di terze parti
Microsoft fornisce informazioni di contatto di terze parti per aiutarti a trovare ulteriori informazioni su questo argomento. Queste informazioni di contatto sono soggette a modifica senza preavviso. Microsoft non garantisce l'accuratezza delle informazioni di contatto di terze parti.
Contattaci per ricevere assistenza
In caso di domande o bisogno di assistenza, creare una richiesta di supporto tecnico oppure formula una domanda nel Supporto della community di Azure. È possibile anche inviare un feedback sul prodotto al feedback della community di Azure.