So fragen Sie Paketinformationen mit dem rpm-Paketmanager ab
RPM ist die rekursive Abkürzung für RPM Package Manager: Es ist der standardmäßige Low-Level-Paketmanager in einigen der bekanntesten und am häufigsten verwendeten Linux-Distributionen wie Fedora, Red Hat Enterprise Linux, CentOS, OpenSUSE und deren Derivaten. Die Software ist, wie zu erwarten, kostenlos und Open Source; Wenn es mit der Option -q aufgerufen wird, kann es verwendet werden, um Pakete abzufragen, um bestimmte Informationen wie Abhängigkeiten, Empfehlungen, Dateien usw. abzurufen. In diesem Tutorial lernen wir, wie man solche Abfragen durchführt.
In diesem Tutorial lernen Sie:
- So führen Sie rpm im "Abfrage"-Modus aus
- So erhalten Sie allgemeine Informationen zu einer Pauschalreise
- Wie man ein Paketänderungsprotokoll liest
- So listen Sie die Dateien auf, die von einem Paket bereitgestellt werden
- So listen Sie die Skripts auf, die von einem Paket verwendet werden
- Auflisten von Paketabhängigkeiten und Empfehlungen
- Wie man Pakete auflistet, die durch ein rpm obsolet geworden sind
So fragen Sie Paketinformationen mit dem rpm-Paketmanager ab
Verwendete Softwareanforderungen und Konventionen
Aufrufen von rpm im Abfragemodus
Der rpm-Paketmanager kann verwendet werden, um den Status des Systems zu ändern, da er zum Installieren, Aktualisieren und Entfernen von Paketen verwendet werden kann (wenn er mit den Optionen -i, -U und e aufgerufen wird), oder er kann im "Abfrage"-Modus ausgeführt werden, ohne dass Administratorrechte erforderlich sind, wenn er mit der Option -q gestartet wird. Dies ist die Kurzversion von --query.
Wenn ein Paket bereits auf unserem System installiert ist, müssen wir es nur mit seinem Namen erwähnen; Wenn dies nicht der Fall ist und wir z. B. eine heruntergeladene .rpm-Datei abfragen möchten, müssen wir die Option -p (--package) verwenden und den Pfad der Datei als Argument angeben. Sehen wir uns einige praktische Beispiele an, wie man Informationen über ein Paket abrufen kann.
Abrufen allgemeiner Informationen über ein Paket
Eines der grundlegenden Dinge, die wir tun sollten, wenn wir mit einem RPM-Paket umgehen, ist die Anzeige allgemeiner Informationen darüber. Um diese Aufgabe zu erfüllen, müssen wir lediglich die Option -i (oder --info) verwenden, wenn wir rpm im Abfragemodus aufrufen. Für dieses Beispiel werden wir mit dem Paket "gimp" arbeiten, das bereits im System installiert ist. In diesem Fall würden wir Folgendes ausführen:
rpm -qi gimp
Unmittelbar nachdem wir den Befehl aufgerufen haben, erhalten wir eine Ausgabe ähnlich der folgenden, die Informationen wie die Softwarebeschreibung, ihre Version, Architektur, Installationsdatum, Größe usw. enthält:
Name : gimp
Epoch : 2
Version : 2.10.24
Release : 1.fc34
Architecture: x86_64
Install Date: Mon 21 Jun 2021 11:26:33 AM CEST
Group : Unspecified
Size : 109267268
License : GPLv3+ and GPLv3
Signature : RSA/SHA256, Sat 03 Apr 2021 02:00:02 AM CEST, Key ID 1161ae6945719a39
Source RPM : gimp-2.10.24-1.fc34.src.rpm
Build Date : Sat 03 Apr 2021 01:13:55 AM CEST
Build Host : buildhw-x86-11.iad2.fedoraproject.org
Packager : Fedora Project
Vendor : Fedora Project
URL : http://www.gimp.org/
Bug URL : https://bugz.fedoraproject.org/gimp
Summary : GNU Image Manipulation Program
Description :
GIMP (GNU Image Manipulation Program) is a powerful image composition and
editing program, which can be extremely useful for creating logos and other
graphics for web pages. GIMP has many of the tools and filters you would expect
to find in similar commercial offerings, and some interesting extras as well.
GIMP provides a large image manipulation toolbox, including channel operations
and layers, effects, sub-pixel imaging and anti-aliasing, and conversions, all
with multi-level undo.
Lesen eines Paket-Changelogs
Wie wir wissen, ist ein Changelog ein Protokoll, in dem alle an einem Projekt vorgenommenen Änderungen chronologisch gemeldet und geordnet werden. Wenn wir das Changelog eines RPM-Pakets lesen wollen, müssen wir den rpm-Paketmanager im Abfragemodus aufrufen und die Option --changelog verwenden. Sehen wir uns ein Beispiel an:
rpm -q --changelog gimp
Hier ist die (gekürzte) Ausgabe des obigen Befehls auf der neuesten Version von Fedora (34):
[...]
Thu Jan 09 2020 Josef Ridky <jridky@redhat.com> - 2:2.10.14-3
- Demodularizing of gimp (#1772469)
* Mon Nov 18 2019 Kalev Lember <klember@redhat.com> - 2:2.10.14-2
- Rebuild for libmypaint 1.4.0
* Mon Nov 04 2019 Kalev Lember <klember@redhat.com> - 2:2.10.14-1
- Update to 2.10.14
* Tue Aug 20 2019 Josef Ridky <jridky@redhat.com> - 2:2.10.12-3
- Fix default configuration for font folders (#1706653)
* Wed Jul 31 2019 Josef Ridky <jridky@redhat.com> - 2:2.10.12-2
- Fix issue with reading SVG files (#1715882)
* Thu Jul 25 2019 Fedora Release Engineering <releng@fedoraproject.org> - 2:2.10.12-1.1
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Thu Jun 13 2019 Kalev Lember <klember@redhat.com> - 2:2.10.12-1
- Update to 2.10.12
* Thu Apr 11 2019 Richard Shaw <hobbes1069@gmail.com> - 2:2.10.10-2
- Rebuild for OpenEXR 2.3.0.
* Mon Apr 08 2019 Josef Ridky <jridky@redhat.com> - 2:2.10.10-1
- New upstream release 2.10.10 (#1697119)
Auflisten aller Dateien, die von einem Paket bereitgestellt werden
Wenn wir ein Paket auf unserem System installieren, wird eine Reihe von Dateien an den entsprechenden Stellen kopiert, wie es vom Betreuer beabsichtigt ist. Wenn wir die Dateien auflisten möchten, die von einem Paket bereitgestellt werden, das bereits auf unserem System installiert ist, können wir den rpm-l (kurz für --list) aufrufen:
rpm -ql gimp
Wie wir bereits gesagt haben, müssen wir, wenn wir ein Paket abfragen wollen, bevor wir es installieren, stattdessen die Option -p hinzufügen und den Pfad des Pakets als Argument angeben:
rpm -qlp /path/to/package.rpm
Der obige Befehl führt zu folgendem Ergebnis:
/etc/gimp
/etc/gimp/2.0
/etc/gimp/2.0/controllerrc
/etc/gimp/2.0/gimprc
/etc/gimp/2.0/gtkrc
/etc/gimp/2.0/menurc
/etc/gimp/2.0/sessionrc
/etc/gimp/2.0/templaterc
/etc/gimp/2.0/toolrc
/etc/gimp/2.0/unitrc
/usr/bin/gimp
/usr/bin/gimp-2.10
/usr/bin/gimp-console
/usr/bin/gimp-console-2.10
/usr/bin/gimp-test-clipboard-2.0
[...]
Auflisten der Skripte, die von einem Paket verwendet werden
Einige .rpm-Pakete verwenden eine Reihe von Skripten oder "Scriptlets", die als Teil des Installations- oder Deaktivierungsprozesses ausgeführt werden. Wenn wir einen Blick auf sie werfen möchten, können wir dies tun, indem wir rpm im Abfragemodus mit der Option --scripts
aufrufen. Für dieses Beispiel werden wir die Skripte auschecken, die im systemd-Paket enthalten sind:
rpm -q --scripts systemd
Unten sehen wir die (abgeschnittene) Ausgabe des obigen Befehls, wenn er auf Fedora 34 gestartet wird. Wie Sie sehen können, können wir vor den Skripten selbst feststellen, dass auch der Kontext gemeldet wird, in dem sie verwendet werden (z. B. "preinstall" oder "postinstall"):
preinstall scriptlet (using /bin/sh):
getent group cdrom &>/dev/null || groupadd -r -g 11 cdrom &>/dev/null || :
getent group utmp &>/dev/null || groupadd -r -g 22 utmp &>/dev/null || :
getent group tape &>/dev/null || groupadd -r -g 33 tape &>/dev/null || :
getent group dialout &>/dev/null || groupadd -r -g 18 dialout &>/dev/null || :
getent group input &>/dev/null || groupadd -r input &>/dev/null || :
getent group kvm &>/dev/null || groupadd -r -g 36 kvm &>/dev/null || :
getent group render &>/dev/null || groupadd -r render &>/dev/null || :
getent group systemd-journal &>/dev/null || groupadd -r -g 190 systemd-journal 2>&1 || :
[...]
Eine weitere ähnliche Option ist --triggers, die verwendet wird, um die in einem Paket enthaltenen Trigger-Skripte anzuzeigen. Was sind Trigger-Skripte? Sie sind im Grunde genommen Skripte, die ausgeführt (ausgelöst) werden, wenn sich der Status eines anderen Pakets
ändert:
rpm -q --triggers systemd
Mit dem obigen Befehl können wir die im systemd-Paket enthaltenen Trigger-Skripte visualisieren:
triggerun scriptlet (using /bin/sh) -- systemd < 246.1-1
This is for upgrades from previous versions before systemd-resolved became the default.
systemctl --no-reload preset systemd-resolved.service &>/dev/null || :
if systemctl -q is-enabled systemd-resolved.service &>/dev/null; then
systemctl -q is-enabled NetworkManager.service 2>/dev/null && \
! test -L /etc/resolv.conf 2>/dev/null && \
! mountpoint /etc/resolv.conf &>/dev/null && \
grep -q 'Generated by NetworkManager' /etc/resolv.conf 2>/dev/null && \
echo -e '/etc/resolv.conf was generated by NetworkManager.\nRemoving it to let systemd-resolved manage this file.' && \
mv -v /etc/resolv.conf /etc/resolv.conf.orig-with-nm && \
ln -sv ../run/systemd/resolve/stub-resolv.conf /etc/resolv.conf 2>/dev/null || :
systemctl start systemd-resolved.service &>/dev/null || :
fi
triggerpostun scriptlet (using /bin/sh) -- systemd < 247.3-2
This is for upgrades from previous versions before oomd-defaults is available.
We use %triggerpostun here because rpm doesn't allow a second %triggerun with
a different package version.
systemctl --no-reload preset systemd-oomd.service &>/dev/null || :
Auflisten von Paketabhängigkeiten und Empfehlungen
Eine weitere häufige Aufgabe, die wir möglicherweise ausführen möchten, ist das Finden der Abhängigkeiten eines RPM-Pakets. Die Option, mit der wir die Aufgabe erledigen können, ist -R (kurz für --requires). Um beispielsweise die Abhängigkeiten des Pakets "gimp" zu überprüfen, würden wir den folgenden Befehl ausführen:
rpm -qR gimp
Sobald wir den Befehl ausführen, wird die Liste der Softwareabhängigkeiten auf dem Bildschirm angezeigt:
/usr/bin/python2
babl(x86-64) >= 0.1.78
config(gimp) = 2:2.10.24-1.fc34
fontconfig >= 2.12.4
freetype >= 2.1.7
gegl04(x86-64) >= 0.4.30
gimp-libs(x86-64) = 2:2.10.24-1.fc34
glib2 >= 2.56.2
gtk2 >= 2.24.32
hicolor-icon-theme
[...]
Wenn wir anstelle der Option -R --recommends verwenden, können wir eine Liste der Software erhalten, die von dem Paket, das wir abfragen, nicht unbedingt benötigt wird, aber von ihm empfohlen wird:
rpm -q --recommends gimp
Auflisten der Pakete, die durch ein rpm obsolet geworden sind
Auf die gleiche Weise wie in den obigen Beispielen können wir sehen, welche Pakete durch das Paket, das wir abfragen, veraltet sind. Alles, was wir tun müssen, ist, die Option --obsoletes zu verwenden:
rpm -q --obsoletes gimp
Hier ist die Ausgabe des Befehls im Beispiel:
gimp < 2:2.10.24-1.fc34
gimp-help-browser < 2:2.10.24-1.fc34
gimp-unstable < 2:2.10
Schlüsse
Rpm ist ein sehr leistungsfähiger Paketmanager: In diesem Tutorial haben wir gesehen, wie man ihn im "Abfrage"-Modus ausführt. Wir haben gesehen, wie man allgemeine Informationen über ein Paket erhält, wie z.B. seine Version und Architektur, wie man ein Paket-Changelog liest, wie man alle Dateien auflistet, die von einem Paket installiert werden, wie man einen Blick auf die "Scriptlets" wirft, die als Teil der Paketverwaltung verwendet werden, und wie man eine Liste der Abhängigkeiten und Empfehlungen eines Pakets erhält.
