GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Arbeiten mit Paketabhängigkeiten unter Red Hat Linux

Ziel

Unser Ziel ist es, uns an die verfügbaren Tools zu gewöhnen, um Informationen über Paketabhängigkeiten auf einem RPM-basierten System herauszufinden.

Betriebssystem- und Softwareversionen

  • Betriebssystem: Red Hat Enterprise Linux 7.5
  • Software: U/min 4.11, lecker 3.4.3

Anforderungen

Privilegierter Zugriff auf das System.

Schwierigkeit

EINFACH

Konventionen

  • # – erfordert, dass bestimmte Linux-Befehle mit Root-Rechten ausgeführt werden, entweder direkt als Root-Benutzer oder durch Verwendung von sudo Befehl
  • $ – gegebene Linux-Befehle, die als normaler nicht-privilegierter Benutzer ausgeführt werden sollen

Einführung

RPM steht für Red Hat Package Manager und ist ein bekannter und ausgereifter Paketmanager, der von allen Red Hat Flavor-Distributionen sowie von SuSE verwendet wird. Mit RPM kann der Paketierer Beziehungen zwischen Paketen und sogar Versionen von Paketen definieren – zum Beispiel benötigt ein Apache Tomcat-Server die richtige Java-Umgebung, um ausgeführt werden zu können.

Andererseits benötigen Sie zum Installieren einer Java-Umgebung keinen Tomcat-Server – Sie können sich entscheiden, eine andere Java-basierte Anwendung auszuführen, vielleicht eine von Ihnen selbst geschriebene, die bei Bedarf von Hand gestartet wird. Mit anderen Worten, der Tomcat-Server ist abhängig auf Java.

RPM kann das Leben eines Systemadministrators viel einfacher machen, indem es diese Abhängigkeiten präsentiert – und Tools, die auf RPM basieren, wie z. B. rpm Utility oder yum kann diese Abhängigkeiten automatisch lösen und alle zusätzlichen Pakete installieren, die für eine ordnungsgemäße Ausführung einer neuen Komponente erforderlich sind.

Informationen sammeln

Um die Liste der Pakete herauszufinden, von denen das Paket foo.bar abhängt, führen Sie einfach Folgendes aus:

# yum deplist foo.bar

Und um die Liste der Pakete zu finden, die das Paket foo.bar benötigen (von diesem abhängen):

rpm -q --whatrequires foo.bar

Ein Beispiel aus dem wirklichen Leben mit einem generischen Paket:bash . Sehen wir uns an, welche Pakete vom Bash-Paket benötigt werden:

# 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

Aus der Paketperspektive bash ist sehr generisch und hängt, wie oben gesehen, von einigen Kernpaketen ab. Aber wenn wir etwas viel abhängigeres installieren möchten, sagen wir, die konzole KDE-Terminalemulator auf einem Red Hat Linux mit einem Gnome-Desktop-Manager erhalten wir möglicherweise mehr als eine Seite lange Abhängigkeitsliste. Und mit konzole , der Fall ist sogar noch komplizierter, da es auf QT- und KDE-Paketen angewiesen ist. Um es also zu installieren, müssen Sie die gesamte KDE-Umgebung neben Gnome installieren (was Sie sicherlich tun können), um alles bereitzustellen konzole braucht.

Um mehr darüber zu erfahren, welche Pakete installiert werden, sehen Sie sich die von yum bereitgestellte Liste an, bevor Sie mit der Installation beginnen:

# 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 = [...]

Im Falle eines Red-Hat-Systems mit Gnome kann es ziemlich lange dauern, die Abhängigkeiten einer KDE-Anwendung zum ersten Mal aufzulösen, und wenn das erledigt ist, wird yum das einzige Paket präsentieren, nach dem wir gefragt haben, mit einer netten kleinen Größe . Gefolgt von mehr als hundert installierten Paketen für Abhängigkeiten:

[...]
--> 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
[...]

Und in der Zusammenfassung können wir sehen, dass die Installation am Ende viel mehr Speicherplatz auf der Festplatte benötigt als die Größe des Pakets, das wir benötigen:

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

Total download size: 108 M
Installed size: 307 M

Das ist viel, aber wir haben nützliche Informationen darüber, wie viel Speicherplatz verwendet wird. Dies ist besonders nützlich, wenn wir viele Pakete in einer Transaktion installieren.

Während in diesem Fall die Transaktion verschwenderisch ist, besteht das Ziel von Abhängigkeiten letztendlich darin, Ressourcen zu sparen:Wenn jemand eine Funktionalität in seinen Code implementiert, die auf dem System aufgerufen werden kann, muss der nächste Entwickler möglicherweise nicht dieselbe Funktionalität implementieren wieder, aber verwenden Sie die bereits vorhandene Implementierung. Für die konzole Beispiel, wenn Sie akregator installieren möchten Beim nächsten Mal hat das System bereits viele Abhängigkeiten gelöst, wie kdepim Paket, das akregator enthält stützt sich auch auf qt , kdelibs , und so weiter.

Wir können rpm verwenden Dienstprogramm, um die Informationen umgekehrt zu erhalten:Lassen Sie uns die installierten Pakete auflisten, die die bash erfordern Paket:

# 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

Nicht benötigte Pakete bereinigen

Wenn wir unsere Systeme auf dem neuesten Stand halten und ihre Rollen ändern oder erweitern, werden unweigerlich „Müll“-Pakete angezeigt. Im Sinne von Paketen bedeutet Junk nicht mehr benötigte und/oder veraltete Pakete. Um dem obigen Beispiel zu folgen, brauchen wir akregator nicht mehr , da wir den „Dienst“ der RSS-Verarbeitung auf einen hypothetischen zentralen RSS-Konzentrator innerhalb unseres Systems verschoben haben. Nachdem wir unsere Feeds an den zentralen Ort migriert haben, deinstallieren wir die lokale RSS-Verarbeitungsanwendung. Dadurch werden nicht alle KDE-Pakete entfernt, da viele andere Pakete von ihnen abhängen können. Aber wenn nicht, sind diese Pakete Junk und verbrauchen Ressourcen, einschließlich längerer Aktualisierungszeiten, als yum standardmäßig wird alles blind aktualisiert, wofür es neue Pakete/Errata findet.

Es scheint kein Problem zu sein, Ressourcen für das Upgrade einiger nicht benötigter Pakete auf einem Laptop mit Breitbandverbindung und SSD aufzuwenden, aber stellen Sie sich ein Rechenzentrum mit Hunderten oder Tausenden von Computern vor, und Sie erhalten ein Bild. Es ist im Allgemeinen eine gute Idee, alle Systeme einfach zu halten, und die Ressourcenverwaltung ist nur ein Punkt. Je komplexer ein System ist, desto fehleranfälliger ist es. Mehr Komponenten bedeuten mehr mögliche Fehler.

Um einen Überblick über nicht benötigte Pakete zu erhalten, die auf dem System installiert sind, können wir yum und package-cleanup auf die gleiche Weise wie unter CentOS oder eine andere Funktion von yum, autoremove, verwenden :

yum autoremove

Die Pakete, die diese Tools als nicht benötigt markieren, sind nicht identisch.

Wenn Sie eines dieser Tools verwenden, sollten Sie überprüfen, was yum ist entfernen wird, und testen Sie möglicherweise, was die Reinigung auf Testmaschinen mit identischem Paketinhalt bewirkt, bevor Sie die Produktionssysteme bereinigen.

Diese Tools sind in der Tat clever, aber nicht allwissend:Beispielsweise wird es in der RPM-Datenbank keinen Eintrag über eine benutzerdefinierte PHP-Anwendung geben, die auf einem Webserver läuft, der cups aufruft eingehende Bestellungen auf einem mit dem Server verbundenen Drucker auszudrucken. Das heißt, es kann ein Eintrag sein, wenn die Anwendung mit den richtigen Abhängigkeiten gepackt und korrekt mit rpm installiert wurde oder yum – aber das erfordert Mühe, und alle Dienste müssen auf die gleiche Weise verpackt werden, wenn Sie sich mit yum-basierten automatischen Bereinigungen sicher fühlen möchten.

Abhängigkeitsprobleme lösen

Besonders in großen Umgebungen kann es beim Installieren oder Aktualisieren von Systemen zu Abhängigkeitsproblemen kommen.

Der folgende Screenshot zeigt ein einfaches Problem:

Abhängigkeiten mit rpm lösen

Im obigen Terminalbildschirm versuchen wir, den nrpe zu installieren Paket musste der Client viele Aspekte des Systems mit Nagios überwachen. Wir haben den Client für die Verteilung heruntergeladen, aber beide rpm und yum schlägt mit demselben Fehler fehl:nrpe Paket erfordert (hängt ab) von nagios-common Paket. In diesem Beispiel können wir das benötigte Paket aus derselben Quelle beziehen, und wenn wir beide installieren, den rpm Das Dienstprogramm sieht, dass die Abhängigkeit, bei der wir zuvor gescheitert sind, am Ende der Transaktion erfüllt sein wird, und installiert beide Pakete, wobei es erfolgreich automatisch beendet wird.

Schlussfolgerung

Yum und RPM sind wichtige Tools, wenn Sie mit Distributionen arbeiten, die den RPM-Paketmanager verwenden. Wenn Sie das Toolset kennen, ist es viel einfacher und normalerweise sicherer, Installations-, Upgrade- und Änderungsaufgaben in der Softwareumgebung eines bestimmten Systems zu lösen.


Linux
  1. Linux-Paketverwaltung mit apt

  2. So listen Sie die Abhängigkeiten eines Pakets in Linux auf

  3. Arbeiten mit Pipes auf der Linux-Befehlszeile

  4. Registrieren Sie Red Hat Enterprise Linux und hängen Sie ein Abonnement mit Ansible an

  5. Aktualisieren Sie Zsh auf Red Hat 5 X86_64?

RPM-Befehle in Linux mit Beispielen

So installieren Sie xrdp unter CentOS 8 / Red Hat Enterprise Linux 8

So konvertieren Sie Linux-Pakete mit Alien

Arbeiten mit dem Echtzeit-Kernel für Red Hat Enterprise Linux

Meine Reise in die Linux-Systemadministration

Einrichten eines OpenVPN-Servers mit Red Hat Linux und Viscosity