GNU/Linux >> Linux Esercitazione >  >> Linux

Lavorare con le dipendenze dei pacchetti su Red Hat Linux

Obiettivo

Il nostro obiettivo è abituarci agli strumenti disponibili per trovare informazioni sulle dipendenze dei pacchetti su un sistema basato su RPM.

Sistema operativo e versioni software

  • Sistema operativo: Red Hat Enterprise Linux 7.5
  • Software: rpm 4.11, yum 3.4.3

Requisiti

Accesso privilegiato al sistema.

Difficoltà

FACILE

Convenzioni

  • # – richiede che i comandi linux dati vengano eseguiti con i privilegi di root direttamente come utente root o usando sudo comando
  • $ – dati comandi linux da eseguire come un normale utente non privilegiato

Introduzione

RPM, che sta per Red Hat Package Manager, è un noto e maturo gestore di pacchetti utilizzato da tutte le distribuzioni di Red Hat, così come SuSE. Con RPM il packager può definire le relazioni tra i pacchetti e anche con le versioni dei pacchetti, ad esempio, un server Apache Tomcat ha bisogno della presenza di un ambiente Java appropriato per poter essere eseguito.

D'altra parte, per installare un ambiente Java, non è necessario un server Tomcat:potresti decidere di eseguire qualche applicazione basata su Java diversa, magari una scritta da te avviata a mano quando necessario per fare il suo lavoro. In altre parole, il server Tomcat dipende su Java.

RPM può rendere la vita di un amministratore di sistema molto più semplice presentando queste dipendenze e strumenti che si basano su RPM come rpm utilità o yum può risolvere automaticamente queste dipendenze e installare tutti i pacchetti aggiuntivi necessari per il corretto funzionamento di un nuovo componente.

Raccolta di informazioni

Per scoprire l'elenco dei pacchetti da cui dipende il pacchetto foo.bar, esegui semplicemente:

# yum deplist foo.bar

E per trovare l'elenco dei pacchetti che richiedono (dipende da) il pacchetto foo.bar:

rpm -q --whatrequires foo.bar

Un esempio reale con un pacchetto generico:bash . Vediamo quali pacchetti sono necessari al pacchetto bash:

# yum deplist bash

package: bash.x86_64 4.2.46-30.el7
  dependency: libc.so.6()(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libc.so.6(GLIBC_2.11)(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libc.so.6(GLIBC_2.14)(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libc.so.6(GLIBC_2.15)(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libc.so.6(GLIBC_2.2.5)(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libc.so.6(GLIBC_2.3)(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libc.so.6(GLIBC_2.3.4)(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libc.so.6(GLIBC_2.4)(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libc.so.6(GLIBC_2.8)(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libdl.so.2()(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libdl.so.2(GLIBC_2.2.5)(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libtinfo.so.5()(64bit)
   provider: ncurses-libs.x86_64 5.9-14.20130511.el7_4
  dependency: rtld(GNU_HASH)
   provider: glibc.x86_64 2.17-222.el7
   provider: glibc.i686 2.17-222.el7

Dal punto di vista del pacchetto, bash è molto generico e, come visto sopra, dipende da alcuni pacchetti core. Ma se vorremmo installare qualcosa di molto più dipendente, diciamo, il konzole Emulatore di terminale KDE su Red Hat Linux con un desktop manager Gnome, potremmo ottenere un elenco di dipendenze lungo più di una pagina. E con konzole , il caso è ancora più complicato, poiché si basa sui pacchetti QT e KDE, quindi per installarlo, dovrai installare l'intero ambiente KDE accanto a Gnome (cosa che puoi sicuramente fare) per fornire tutto konzole esigenze.

Per avere un'idea più precisa di quali pacchetti verranno installati, controlla l'elenco fornito da yum prima di avviare l'installazione:

# yum install konsole

Resolving Dependencies
--> Running transaction check
---> Package konsole.x86_64 0:4.10.5-4.el7 will be installed
--> Processing Dependency: konsole-part = [...]

Nel caso di un sistema Red Hat con Gnome, potrebbe volerci un po' di tempo per risolvere le dipendenze di un'applicazione KDE per la prima volta, e quando questo sarà finito, yum presenterà l'unico pacchetto che abbiamo chiesto, con una piccola dimensione . Seguito da più di cento pacchetti installati per le dipendenze:

[...]
--> Running transaction check
---> Package boost-system.x86_64 0:1.53.0-27.el7 will be installed
---> Package boost-thread.x86_64 0:1.53.0-27.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

==============================================================================================================================
 Package                                Arch             Version                           Repository                    Size
==============================================================================================================================
Installing:
 konsole                                x86_64           4.10.5-4.el7                      rhel-7-server-rpms            78 k
Installing for dependencies:
 OpenEXR-libs
[...]

E nel riepilogo possiamo vedere che l'installazione utilizzerà molto più spazio su disco alla fine, quindi la dimensione del pacchetto di cui abbiamo bisogno:

[...]
Transaction Summary
==============================================================================================================================
Install  1 Package (+120 Dependent packages)

Total download size: 108 M
Installed size: 307 M

Questo è molto, ma abbiamo informazioni utili su quanto spazio verrà utilizzato. Ciò è particolarmente utile se installiamo molti pacchetti in una transazione.

Mentre in questo caso la transazione è dispendiosa, l'obiettivo delle dipendenze è in definitiva il risparmio di risorse:se qualcuno implementa alcune funzionalità nel suo codice e queste possono essere richiamate sul sistema, lo sviluppatore successivo potrebbe non aver bisogno di implementare la stessa funzionalità di nuovo, ma utilizzare l'implementazione già esistente. Per il konzole ad esempio, se vuoi installare akregator la prossima volta, il sistema avrà già molte dipendenze risolte, come kdepim pacchetto contenente akregator si basa anche su qt , kdelibs , e così via.

Possiamo usare rpm utility per ottenere le informazioni al contrario:elenchiamo i pacchetti installati che richiedono bash pacchetto:

# rpm -q --whatrequires bash
dracut-033-535.el7.x86_64
initscripts-9.49.41-1.el7.x86_64
autofs-5.0.7-83.el7.x86_64
lvm2-2.02.177-4.el7.x86_64
rsyslog-8.24.0-16.el7.x86_64

Pulizia dei pacchetti non necessari

Se manteniamo aggiornati i nostri sistemi e cambiamo o estendiamo i loro ruoli, i pacchetti "spazzatura" appariranno inevitabilmente. Nel senso del pacchetto, spazzatura significa pacchetti non più necessari e/o obsoleti. Per seguire l'esempio sopra, non abbiamo più bisogno di akregator , perché abbiamo spostato il "servizio" di gestione RSS in un ipotetico concentratore RSS centrale all'interno del nostro sistema, quindi dopo aver migrato i nostri feed nella posizione centrale, disinstalliamo l'applicazione di gestione RSS locale. Ciò non rimuoverà tutti i pacchetti di KDE, poiché molti altri pacchetti potrebbero dipendere da essi. In caso contrario, quei pacchetti sono spazzatura e consumeranno risorse, inclusi tempi di aggiornamento più lunghi, come yum per impostazione predefinita aggiornerà tutto alla cieca per cui trova nuovi pacchetti/errata.

Spendere risorse per aggiornare alcuni pacchetti non necessari su un laptop con connessione a banda larga e SSD potrebbe non sembrare un problema, ma immagina un data center con centinaia o migliaia di computer e avrai il quadro. In genere è una buona idea mantenere tutti i sistemi semplici e la gestione delle risorse è solo un punto. Più un sistema è complesso, più è soggetto a errori. Più componenti significano più possibili bug.

Per avere una panoramica sui pacchetti non necessari installati sul sistema, possiamo usare yum e la pulizia dei pacchetti allo stesso modo di CentOS, o un'altra funzionalità di yum, autoremove :

yum autoremove

I pacchetti che questi strumenti contrassegnano come non necessari non sono identici.

Quando si utilizza uno di questi strumenti si consiglia di ricontrollare cosa yum rimuoverà ed eventualmente verificherà il risultato della pulizia su macchine di prova con contenuto identico della confezione prima di pulire i sistemi di produzione.

Questi strumenti sono davvero intelligenti, ma non onnicomprensivi:ad esempio, non ci sarà alcuna voce nel database rpm su un'applicazione PHP personalizzata in esecuzione su un server web che chiama cups per stampare gli ordini in entrata su una stampante collegata al server. Cioè, ci può essere una voce se l'applicazione è inclusa nel pacchetto con le giuste dipendenze e installata correttamente con rpm o yum – ma questo richiede uno sforzo e tutti i servizi devono essere inclusi nello stesso modo se vuoi sentirti al sicuro con le pulizie automatiche basate su yum.

Risoluzione dei problemi di dipendenza

Soprattutto in ambienti di grandi dimensioni, possono verificarsi problemi di dipendenza durante l'installazione o l'aggiornamento dei sistemi.

Lo screenshot seguente mostra un semplice problema:

Risolvere le dipendenze con rpm

Nella schermata del terminale sopra, proviamo ad installare il nrpe pacchetto, il cliente doveva monitorare molti aspetti del sistema con Nagios. Abbiamo scaricato il client per la distribuzione, ma entrambi rpm e yum fallisce con lo stesso errore:il nrpe il pacchetto richiede (dipende da) il nagios-common pacchetto. In questo esempio possiamo ottenere il pacchetto necessario dalla stessa fonte, e quando installiamo entrambi il rpm l'utilità vede che la dipendenza su cui abbiamo fallito in precedenza sarà soddisfatta alla fine della transazione e installa entrambi i pacchetti, chiudendosi silenziosamente con successo.

Conclusione

Yum e rpm sono strumenti essenziali quando si lavora con le distribuzioni utilizzando il gestore di pacchetti RPM. Conoscendo il set di strumenti è molto più semplice e generalmente più sicuro risolvere attività di installazione, aggiornamento e modifica nell'ambiente software di un determinato sistema.


Linux
  1. Gestione pacchetti Linux con apt

  2. Come elencare le dipendenze di un pacchetto in Linux

  3. Lavorare con le pipe sulla riga di comando di Linux

  4. Registra Red Hat Enterprise Linux e allega un abbonamento ad Ansible

  5. Aggiorna Zsh su Red Hat 5 X86_64?

Comandi RPM in Linux con esempi

Come installare xrdp su CentOS 8 / Red Hat Enterprise Linux 8

Come convertire i pacchetti Linux con Alien

Lavorare con il kernel in tempo reale per Red Hat Enterprise Linux

Il mio viaggio nell'amministrazione del sistema Linux

Configurazione di un server OpenVPN con Red Hat Linux e Viscosity