9 Verwalten von Software mit Befehlszeilenwerkzeugen #
Dieses Kapitel behandelt zypper und RPM, zwei Befehlszeilenwerkzeuge zum Verwalten von Software. Eine Definition der in diesem Kontext verwendeten Terminologie (beispielsweise repository
, patch
oder update
) finden Sie in Abschnitt 8.1, „Definition der Begriffe“.
9.1 Verwenden von zypper #
Über den Befehlszeilen-Paketmanager Zypper können Sie Pakete installieren, aktualisieren und entfernen. Auch Repositorys werden hiermit verwaltet. Damit können Sie Software per Fernzugriff oder mithilfe von Shell-Skripten verwalten.
9.1.1 Allgemeine Verwendung #
Die allgemeine Syntax von Zypper sieht wie folgt aus:
zypper[--global-options]
COMMAND[--command-options]
[arguments]
Die Komponenten in Klammern sind nicht erforderlich. Eine Liste der allgemeinen Optionen und aller Befehle erhalten Sie mit zypper
help
. Wenn Sie Hilfe zu einem bestimmten Befehl abrufen möchten, geben Sie zypper help
COMMAND ein.
- Zypper-Befehle
Am einfachsten führen Sie Zypper aus, indem Sie seinen Namen gefolgt von einem Befehl eingeben. Geben Sie z. B. für das Anwenden aller erforderlichen Patches auf das System Folgendes ein:
>
sudo
zypper patch- Globale Optionen
Zusätzlich können Sie aus einer oder mehreren globalen Optionen wählen, indem Sie sie direkt vor dem Befehl eingeben:
>
sudo
zypper --non-interactive patchIm Beispiel oben bedeutet die Option
--non-interactive
, dass der Befehl ausgeführt wird, ohne nach Informationen zu fragen (die Standardantworten werden automatisch angewendet).- Befehlsspezifische Optionen
Um die spezifischen Optionen für einen bestimmten Befehl zu verwenden, geben Sie sie direkt nach dem Befehl ein.
>
sudo
zypper patch --auto-agree-with-licensesIm Beispiel oben wird
--auto-agree-with-licenses
verwendet, um alle erforderlichen Patches auf ein System anzuwenden, ohne dass Sie aufgefordert werden, Lizenzen zu bestätigen. Stattdessen werden Lizenzen automatisch akzeptiert.- Argumente
Einige Befehle erfordern ein oder mehrere Argumente. Wird beispielsweise der Befehl
install
verwendet, müssen Sie angeben, welches Paket oder welche Pakete Sie installieren möchten:>
sudo
zypper install mplayerManche Optionen erfordern auch ein einzelnes Argument. Der folgende Befehl listet alle bekannten Muster auf:
>
zypper search -t pattern
Sie können alle obigen Optionen kombinieren. Beispielsweise werden mit dem folgenden Befehl mc- und vim-Pakete mithilfe des factory
-Repositorys installiert und ausführlich angegeben:
>
sudo
zypper -v install --from factory mc vim
Mit der Option --from
bleiben alle Repositorys aktiviert (damit alle Abhängigkeiten aufgelöst werden können), wenn das Paket aus dem angegebenen Repository abgerufen wird. --repo
ist ein Alias für --from
. Sie können beide verwenden.
Die meisten Zypper-Befehle besitzen eine dry-run
-Option, die eine Simulation des angegebenen Befehls ausführt. Sie kann für Tests verwendet werden.
>
sudo
zypper remove --dry-run MozillaFirefox
Zypper unterstützt die globale Option --userdata
STRING
. Bei dieser Option können Sie eine Zeichenkette angeben, die dann in die Protokolle und Plugins von Zypper geschrieben wird (z. B. in das Btrfs-Plugin). Hiermit können Sie Transaktionen in Protokolldateien kennzeichnen.
>
sudo
zypper --userdata STRING patch
9.1.2 Verwenden von Zypper-Unterbefehle #
Die Zypper-Unterbefehle sind ausführbare Dateien und befinden sich im Verzeichnis, das mit der Konfigurationsoption zypper_execdir
festgelegt wurde. Standardmäßig ist dies /usr/lib/zypper/commands
. Wenn ein Unterbefehle dort nicht zu finden ist, werden die restlichen $PATH-Speicherorte automatisch von Zypper danach durchsucht. Auf diese Weise können Sie Ihre eigenen lokalen Erweiterungen erstellen und im Benutzerbereich speichern.
Die Ausführung von Unterbefehlen in der Zypper-Shell sowie die Verwendung globaler Zypper-Optionen wird nicht unterstützt.
Listen Sie die verfügbaren Unterbefehle auf:
>
zypper help subcommand
[...]
Available zypper subcommands in '/usr/lib/zypper/commands'
appstream-cache
lifecycle
migration
search-packages
Zypper subcommands available from elsewhere on your $PATH
log Zypper logfile reader
(/usr/sbin/zypper-log)
Zeigen Sie den Hilfe-Bildschirm für einen Unterbefehl an:
>
zypper help appstream-cache
9.1.3 Installieren und Entfernen von Software mit zypper #
Verwenden Sie zur Installation oder Löschung von Paketen die folgenden Befehle:
>
sudo
zypper install PACKAGE_NAME>
sudo
zypper remove PACKAGE_NAME
Entfernen Sie keine obligatorischen Systempakete, wie glibc, zypper, kernel. Werden diese Pakete entfernt, kann das System instabil werden oder aufhören zu funktionieren.
9.1.3.1 Auswählen, welche Pakete zu installieren oder zu entfernen sind #
Es gibt verschiedene Möglichkeiten, mit den Befehlen zypper install
und zypper remove
auf Pakete zu verweisen.
- Nach dem genauen Paketnamen
>
sudo
zypper install MozillaFirefox- Nach dem genauen Namen und der Versionsnummer des Pakets
>
sudo
zypper install MozillaFirefox-52.2- Nach dem Repository-Alias und Paketnamen
>
sudo
zypper install mozilla:MozillaFirefoxDabei ist
mozilla
der Alias des Repositorys, aus dem installiert werden soll.- Nach dem Paketnamen mit Wildcards
Sie können alle Pakete mit Namen auswählen, die mit einer bestimmten Zeichenfolge anfangen oder enden. Verwenden Sie Platzhalter mit äußerster Umsicht, vor allem beim Entfernen von Paketen. Der folgende Befehl installiert alle Pakete, deren Name mit „Moz“ beginnt:
>
sudo
zypper install 'Moz*'Tipp: Entfernen aller-debuginfo
-PaketeBeim Debuggen eines Problems müssen Sie unter Umständen zahlreiche
-debuginfo
-Pakete temporär installieren, mit denen Sie weitere Informationen zu den ausgeführten Prozessen erhalten. Nach Abschluss der Debugging-Sitzung bereinigen Sie die Umgebung wie folgt:>
sudo
zypper remove '*-debuginfo'- Nach Funktion
Wenn Sie beispielsweise ein Paket installieren möchten, ohne dessen Namen zu kennen, sind die Funktionen von Nutzen. Der folgende Befehl startet die Installation des Pakets MozillaFirefox:
>
sudo
zypper install firefox- Nach Funktion, Hardware-Architektur oder Version
Zusammen mit einer Funktion können Sie eine Hardware-Architektur und eine Version angeben:
Der Name der gewünschten Hardware-Architektur wird nach einem Punkt an die Funktion angefügt. Um beispielsweise die AMD64-/Intel-64-Architekturen anzugeben (die in Zypper
x86_64
heißen), verwenden Sie Folgendes:>
sudo
zypper install 'firefox.x86_64'Versionen müssen am Ende der Zeile angefügt werden und ein Operator muss vorangestellt sein:
<
(kleiner als),<=
(kleiner oder gleich),=
(gleich),>=
(größer oder gleich),>
(größer als).>
sudo
zypper install 'firefox>=74.2'Sie können auch eine Hardware-Architektur und eine Versionsanforderung kombinieren:
>
sudo
zypper install 'firefox.x86_64>=74.2'
- Nach dem Pfad der RPM-Datei
Sie können einen lokalen oder entfernten Pfad zu einem Paket angeben:
>
sudo
zypper install /tmp/install/MozillaFirefox.rpm>
sudo
zypper install http://download.example.com/MozillaFirefox.rpm
9.1.3.2 Kombinieren der Installation und der Entfernung von Paketen #
Zum gleichzeitigen Installieren und Entfernen von Paketen verwenden Sie die Modifikatoren +/-
. Verwenden Sie zum Installieren von emacs und zum gleichzeitigen Entfernen von vim Folgendes:
>
sudo
zypper install emacs -vim
Verwenden Sie zum Entfernen von emacs und zum gleichzeitigen Installieren von vim Folgendes:
>
sudo
zypper remove emacs +vim
Um zu vermeiden, dass der mit -
beginnende Paketname als Befehlsoption interpretiert wird, verwenden Sie ihn stets als das zweite Argument. Falls dies nicht möglich ist, stellen Sie ihm --
voran:
>
sudo
zypper install -emacs +vim # Wrong>
sudo
zypper install vim -emacs # Correct>
sudo
zypper install -- -emacs +vim # Correct>
sudo
zypper remove emacs +vim # Correct
9.1.3.3 Bereinigen von Abhängigkeiten entfernter Pakete #
Wenn (zusammen mit einem bestimmten Paket) automatisch alle Pakete entfernt werden sollen, die nach dem Entfernen dieses Pakets nicht mehr erforderlich sind, verwenden Sie die Option --clean-deps
:
>
sudo
zypper rm --clean-deps PACKAGE_NAME
9.1.3.4 Verwenden von Zypper in Skripten #
Standardmäßig verlangt Zypper eine Bestätigung, bevor ein ausgewähltes Paket installiert oder entfernt wird oder wenn ein Problem auftritt. Mit der Option --non-interactive
können Sie dieses Verhalten deaktivieren. Die Option muss jedoch vor dem tatsächlich auszuführenden Befehl (install
, remove
und patch
) angegeben werden, wie im Folgenden erkennbar:
>
sudo
zypper--non-interactive
install PACKAGE_NAME
Mit dieser Option kann Zypper auch in Skripten und Cron-Aufträgen verwendet werden.
9.1.3.5 Installieren oder Herunterladen von Quellpaketen #
Wenn Sie das entsprechende Quellpaket eines Pakets installieren möchten, verwenden Sie:
>
zypper source-install PACKAGE_NAME
Bei Ausführung als root
-Benutzer lautet der Standardspeicherort für die Installation von Quellpaketen /usr/src/packages/
und ~/rpmbuild
. Diese Werte können in Ihrer lokalen rpm
-Konfiguration geändert werden.
Dieser Befehl installiert auch die Build-Abhängigkeiten des angegebenen Pakets. Wenn Sie dies nicht wünschen, fügen Sie den Schalter -D
hinzu:
>
sudo
zypper source-install -D PACKAGE_NAME
Um nur die Build-Abhängigkeiten zu installieren, verwenden Sie -d
.
>
sudo
zypper source-install -d PACKAGE_NAME
Natürlich gelingt dies nur, wenn das Repository mit den Quellpaketen in Ihrer Repository-Liste aktiviert ist (es wird standardmäßig hinzugefügt, aber nicht aktiviert). Details zur Repository-Verwaltung finden Sie unter Abschnitt 9.1.6, „Verwalten von Repositorys mit Zypper“.
Eine Liste aller Quellpakete, die in Ihren Repositorys verfügbar sind, können Sie wie folgt abrufen:
>
zypper search -t srcpackage
Wenn Sie möchten, können Sie die Quellpakete für alle installierten Pakete in ein lokales Verzeichnis herunterladen. Zum Herunterladen von Quellpaketen verwenden Sie:
>
zypper source-download
Das Standardverzeichnis für heruntergeladene Dateien lautet /var/cache/zypper/source-download
. Mit der Option --directory
können Sie dieses Verzeichnis ändern. Sollen nur fehlende oder überzählige Pakete angezeigt werden, ohne Pakete herunterzuladen oder zu löschen, verwenden Sie die Option --status
. Zum Löschen überzähliger Pakete verwenden Sie die Option --delete
. Soll das Löschen deaktiviert werden, verwenden Sie die Option --no-delete
.
9.1.3.6 Installieren von Paketen aus deaktivierten Repositorys #
In der Regel können Sie nur Pakete aus aktivierten Repositorys installieren oder aktualisieren. Mit der Option --plus-content
TAG
können Sie bestimmte Repositorys aktualisieren, temporär während der aktuellen Zypper-Sitzung aktivieren und nach Abschluss der Sitzung wieder deaktivieren.
Sollen beispielsweise Repositorys mit zusätzlichen -debuginfo
- oder -debugsource
-Paketen aktiviert werden, geben Sie --plus-content debug
ein. Diese Option kann mehrfach angegeben werden.
Sollen diese „Debug“-Repositorys vorübergehend aktiviert werden, damit Sie ein bestimmtes ‑debuginfo
-Paket installieren können, geben Sie die Option wie folgt an:
>
sudo
zypper --plus-content debug \ install "debuginfo(build-id)=eb844a5c20c70a59fc693cd1061f851fb7d046f4"
Die Zeichenkette build-id
wird von gdb
für fehlende debuginfo-Pakete zurückgegeben.
Repositoys von den Installationsmedien von SUSE Linux Enterprise Server werden weiterhin konfiguriert, doch nach der erfolgreichen Installation deaktiviert. Sie können anstelle der Online-Repositorys die Option --plus-content
verwenden, um Pakete von den Installationsmedien zu installieren. Stellen Sie vor dem Aufruf von zypper
sicher, dass das Installationsmedium verfügbar ist. Legen Sie dazu beispielsweise die DVD im Laufwerk des Rechners ein.
9.1.3.7 Dienstprogramme #
Wenn Sie prüfen möchten, ob alle Abhängigkeiten noch erfüllt sind, und fehlende Abhängigkeiten reparieren möchten, verwenden Sie:
>
zypper verify
Zusätzlich zu Abhängigkeiten, die erfüllt sein müssen, „empfehlen“ einige Pakete andere Pakete. Diese empfohlenen Pakete werden installiert, wenn sie aktuell verfügbar und installierbar sind. Falls empfohlene Pakete erst nach der Installation des empfehlenden Pakets (durch Hinzufügen zusätzlicher Pakete oder zusätzlicher Hardware) zur Verfügung steht, verwenden Sie den folgenden Befehl:
>
sudo
zypper install-new-recommends
Dieser Befehl ist nach dem Anschließen einer Webcam oder eines WLAN-Geräts äußerst nützlich. Hiermit werden Treiber für das Gerät und die zugehörige Software installiert, sofern verfügbar. Die Treiber und die zugehörige Software sind nur dann installierbar, wenn bestimmte Hardware-Abhängigkeiten erfüllt sind.
9.1.4 Aktualisieren von Software mit Zypper #
Es gibt drei verschiedene Möglichkeiten, Software mithilfe von Zypper zu installieren: durch Installation von Patches, durch Installation einer neuen Version eines Pakets oder durch Aktualisieren der kompletten Distribution. Letzteres wird mit zypper
dist-upgrade
erreicht. Durchführen von Upgrades von SUSE Linux Enterprise Server wird im Kapitel 2, Upgrade-Pfade und -Methoden erläutert.
9.1.4.1 Installieren aller erforderlichen Patches #
Neue Versionen installierter Pakete lassen sich am zuverlässigsten durch Patching von SUSE Linux Enterprise Server installieren. Es garantiert, dass alle erforderlichen Pakete mit den richtigen Versionen installiert werden, und stellt sicher, dass Paketversionen, die als in Konflikt stehend angesehen werden, ausgelassen werden.
Um alle offiziell herausgegebenen Patches für Ihr System zu installieren, führen Sie Folgendes aus:
>
sudo
zypper patch
Alle verfügbaren Patches aus den auf Ihrem Computer konfigurierten Repositorys werden auf Relevanz für Ihre Installation überprüft. Sind sie relevant (und nicht als optional
oder feature
klassifiziert), werden sie sofort installiert. Die erfolgreiche Ausführung von zypper patch
gewährleistet, dass Versionspakete mit Schwachstellen nur dann installiert werden, wenn Sie die entsprechende Ausnahme bestätigen. Beachten Sie, dass das offizielle Aktualisierungs-Repository erst verfügbar ist, nachdem Sie Ihre SUSE Linux Enterprise Server-Installation registriert haben.
Umfasst ein zu installierendes Patch Änderungen, die einen System-Reboot erfordern, werden Sie zuvor benachrichtigt.
Mit dem einfachen Befehl zypper patch
werden keine Patches aus Drittanbieter-Repositorys angewendet. Sollen auch die Drittanbieter-Repositorys aktualisiert werden, geben Sie die Befehlsoption with-update
wie folgt an:
>
sudo
zypper patch --with-update
Um auch optionale Patches zu installieren, verwenden Sie Folgendes:
>
sudo
zypper patch --with-optional
Um alle Patches zu installieren, die zu einem bestimmten Bugzilla-Problem gehören, verwenden Sie Folgendes:
>
sudo
zypper patch --bugzilla=NUMBER
Um alle Patches zu installieren, die zu einem bestimmten CVE-Datenbankeintrag gehören, verwenden Sie Folgendes:
>
sudo
zypper patch --cve=NUMBER
Zum Installieren eines Sicherheits-Patches mit der CVE-Nummer CVE-2010-2713
führen Sie beispielsweise Folgendes aus:
>
sudo
zypper patch --cve=CVE-2010-2713
Um nur Patches zu installieren, die Auswirkungen auf Zypper und die Paketverwaltung an sich haben, verwenden Sie Folgendes:
>
sudo
zypper patch --updatestack-only
Denken Sie daran, dass andere Befehlsoptionen, mit denen auch andere Repositorys aktualisiert würden, außer Acht gelassen werden, wenn Sie die Befehlsoption updatestack-only
angeben.
9.1.4.2 Auflisten von Patches #
Um herauszufinden, ob Patches verfügbar sind, erlaubt Zypper das Anzeigen der folgenden Informationen:
- Anzahl der erforderlichen Patches
Um die Anzahl der erforderlichen Patches aufzulisten (Patches, die für Ihr System gelten, aber noch nicht installiert sind), verwenden Sie
patch-check
:>
zypper patch-check Loading repository data... Reading installed packages... 5 patches needed (1 security patch)Dieser Befehl kann mit der Option
--updatestack-only
kombiniert werden, um nur Patches aufzulisten, die Auswirkungen auf Zypper und die Paketverwaltung an sich haben.- Liste der erforderlichen Patches
Um alle erforderlichen Patches aufzulisten (Patches, die für Ihr System gelten, aber noch nicht installiert sind), verwenden Sie
zypper list-patches
.- Liste aller Patches
Um alle für SUSE Linux Enterprise Server verfügbaren Patches aufzulisten, unabhängig davon, ob sie bereits installiert sind oder für Ihre Installation gelten, verwenden Sie
zypper patches
.
Sie können auch Patches für bestimmte Probleme auflisten und installieren. Dazu geben Sie den Befehl zypper
list-patches
mit den folgenden Optionen ein:
- Nach Bugzilla-Problemen
Um alle Patches mit Bezug zu Bugzilla-Problemen aufzulisten, verwenden Sie die Option
--bugzilla
.Um Patches für einen bestimmten Fehler aufzulisten, können Sie auch eine Fehlernummer angeben:
--bugzilla=NUMBER
. Fügen Sie Kommas zwischen den Fehlernummern hinzu, um nach Patches mit Bezug zu mehreren Bugzilla-Problemen zu suchen, z. B.:>
zypper list-patches --bugzilla=972197,956917- Nach CVE-Nummer
Um alle erforderlichen Patches aufzulisten, die Bezug zu einem Eintrag in der CVE-Datenbank (Common Vulnerabilities and Exposures) haben, verwenden Sie die Option
--cve
.Um Patches für einen bestimmten CVE-Datenbankeintrag aufzulisten, können Sie auch eine CVE-Nummer angeben:
--cve=NUMBER
. Fügen Sie Kommas zwischen den CVE-Nummern hinzu, um nach Patches mit Bezug zu mehreren CVE-Datenbankeinträgen zu suchen, z. B.:>
zypper list-patches --cve=CVE-2016-2315,CVE-2016-2324- Abrufen von zurückgezogenen Patches
Im Codestream von SUSE Linux Enterprise 15 werden bestimmte Patches automatisch zurückgezogen. Wartungsaktualisierungen werden gründlich getestet, denn das Risiko, dass Aktualisierungen einen neuen Fehler mit sich bringen, kann nicht ausgeschlossen werden. Wenn sich herausstellt, dass ein Update einen Fehler enthält, wird ein neues Update (mit einer höheren Versionsnummer) herausgegeben, um das fehlerhafte Update rückgängig zu machen, und es wird verhindert, dass dieses erneut installiert wird. Sie können die zurückgezogenen Patches mit
zypper
abrufen:>
zypper lp --all |grep retracted
SLE-Module-Basesystem15-SP3-Updates | SUSE-SLE-Module-Basesystem-15-SP3-2021-1965 | recommended | important | --- | retracted | Recommended update for multipath-tools SLE-Module-Basesystem15-SP3-Updates | SUSE-SLE-Module-Basesystem-15-SP3-2021-2689 | security | important | --- | retracted | Security update for cpio SLE-Module-Basesystem15-SP3-Updates | SUSE-SLE-Module-Basesystem-15-SP3-2021-3655 | security | important | reboot | retracted | Security update for the Linux KernelSo erhalten Sie ausführliche Informationen zu einem zurückgezogenen (oder einem beliebigen) Patch:
>
zypper patch-info SUSE-SLE-Product-SLES-15-2021-2689
Loading repository data... Reading installed packages... Information for patch SUSE-SLE-Product-SLES-15-2021-2689: --------------------------------------------------------- Repository : SLE-Product-SLES15-LTSS-Updates Name : SUSE-SLE-Product-SLES-15-2021-2689 Version : 1 Arch : noarch Vendor : maint-coord@suse.de Status : retracted Category : security Severity : important Created On : Mon 16 Aug 2021 03:44:00 AM PDT Interactive : --- Summary : Security update for cpio Description : This update for cpio fixes the following issues: It was possible to trigger Remote code execution due to a integer overflow (CVE-2021-38185, bsc#1189206) UPDATE: This update was buggy and could lead to hangs, so it has been retracted. There will be a follow up update. [...]- Patch mit Paketkonflikten
Information for patch openSUSE-SLE-15.3-2022-333: ------------------------------------------------- Repository : Update repository with updates from SUSE Linux Enterprise 15 Name : openSUSE-SLE-15.3-2022-333 Version : 1 Arch : noarch Vendor : maint-coord@suse.de Status : needed Category : security Severity : important Created On : Fri Feb 4 09:30:32 2022 Interactive : reboot Summary : Security update for xen Description : This update for xen fixes the following issues: - CVE-2022-23033: Fixed guest_physmap_remove_page not removing the p2m mappings. (XSA-393) (bsc#1194576) - CVE-2022-23034: Fixed possible DoS by a PV guest Xen while unmapping a grant. (XSA-394) (bsc#1194581) - CVE-2022-23035: Fixed insufficient cleanup of passed-through device IRQs. (XSA-395) (bsc#1194588) Provides : patch:openSUSE-SLE-15.3-2022-333 = 1 Conflicts : [22] xen.src < 4.14.3_06-150300.3.18.2 xen.noarch < 4.14.3_06-150300.3.18.2 xen.x86_64 < 4.14.3_06-150300.3.18.2 xen-devel.x86_64 < 4.14.3_06-150300.3.18.2 xen-devel.noarch < 4.14.3_06-150300.3.18.2 [...]
Der obige Patch steht mit betroffenen oder angreifbaren Versionen von 22 Paketen in Konflikt. Wenn eines dieser betroffenen oder anfälligen Pakete installiert wird, löst dies einen Konflikt aus, und der Patch wird als erforderlich klassifiziert.
zypper patch
versucht, alle verfügbaren Patches zu installieren. Auftretende Probleme werden gemeldet, und Sie werden informiert, dass nicht alle Aktualisierungen installiert wurden. Zur Behebung des Konflikts können Sie die betroffenen oder angreifbaren Pakete entweder aktualisieren oder entfernen. Mit SUSE-Aktualisierungs-Repositorys lassen sich auch reparierte Pakete übermitteln, sodass Konflikte routinemäßig in Form von Aktualisierungen behoben werden. Sollte ein Paket nicht aktualisiert werden können (z. B. aufgrund von Abhängigkeitsproblemen oder Paketsperren), wird der Benutzer gebeten, das Löschen dieses Pakets zu genehmigen, woraufhin das Paket gelöscht wird.
Um alle Patches aufzulisten, unabhängig davon, ob sie erforderlich sind, verwenden Sie zusätzlich die Option --all
. Um beispielsweise alle Patches aufzulisten, denen eine CVE-Nummer zugewiesen ist, verwenden Sie Folgendes:
>
zypper list-patches --all --cve
Issue | No. | Patch | Category | Severity | Status
------+---------------+-------------------+-------------+-----------+----------
cve | CVE-2019-0287 | SUSE-SLE-Module.. | recommended | moderate | needed
cve | CVE-2019-3566 | SUSE-SLE-SERVER.. | recommended | moderate | not needed
[...]
9.1.4.3 Installieren neuer Paketversionen #
Wenn ein Repository neue Pakete enthält, aber keine Patches zur Verfügung stellt, zeigt zypper patch
keinerlei Wirkung. Verwenden Sie zum Aktualisieren aller installierten Pakete mit neueren verfügbaren Versionen den folgenden Befehl:
>
sudo
zypper update
zypper update
ignoriert problematische Pakete. Ist ein Paket beispielsweise gesperrt, überspringt zypper update
dieses Paket auch dann, wenn eine höhere Version verfügbar ist. Umgekehrt meldet zypper patch
einen Konflikt, wenn das Paket als angreifbar eingestuft wird.
Zum Aktualisieren einzelner Pakete geben Sie das Paket mit dem Aktualisierungs- oder Aktualisierungsbefehl an:
>
sudo
zypper update PACKAGE_NAME>
sudo
zypper install PACKAGE_NAME
Mit dem Befehl kann eine Liste mit allen neuen installierbaren Paketen abgerufen werden.
>
zypper list-updates
Dieser Befehl listet ausschließlich Pakete auf, die die folgenden Kriterien erfüllen:
stammt von demselben Hersteller wie das bereits installierte Paket,
umfasst Repositorys mit mindestens derselben Priorität wie das bereits installierte Paket,
ist installierbar (alle Abhängigkeiten wurden erfüllt).
Eine Liste aller neuen verfügbaren Pakete (unabhängig davon, ob diese Pakete installierbar sind oder nicht) erhalten Sie mit Folgendem:
>
sudo
zypper list-updates --all
Um festzustellen, warum ein neues Paket nicht installiert werden kann, verwenden Sie den Befehl zypper
install
oder zypper update
, wie oben beschrieben.
9.1.4.4 Ermitteln verwaister Pakete #
Immer, wenn Sie ein Repository aus Zypper entfernen oder Ihr System aktualisieren, erhalten manche Pakete den Status „Verwaist“. Diese verwaisten Pakete gehören zu keinem aktiven Repository mehr. Mit dem folgenden Befehl erhalten Sie eine entsprechende Liste:
>
sudo
zypper packages --orphaned
Anhand dieser Liste können Sie entscheiden, ob ein Paket noch benötigt wird oder sicher entfernt werden kann.
9.1.5 Ermitteln von Prozessen und Diensten, die gelöschte Dateien verwenden #
Beim Anwenden von Patches, beim Aktualisieren oder beim Entfernen von Paketen können auf dem System Prozesse aktiv sein, die weiterhin Dateien verwenden, die durch die Aktualisierung oder das Entfernen gelöscht wurden. Verwenden Sie zypper ps
, um Prozesse aufzulisten, die gelöschte Dateien verwenden. Falls der Prozess zu einem bekannten Dienst gehört, wird der Dienstname aufgelistet und der Dienst kann leicht neu gestartet werden. Standardmäßig zeigt zypper
ps
eine Tabelle an:
>
zypper ps
PID | PPID | UID | User | Command | Service | Files
------+------+-----+-------+--------------+--------------+-------------------
814 | 1 | 481 | avahi | avahi-daemon | avahi-daemon | /lib64/ld-2.19.s->
| | | | | | /lib64/libdl-2.1->
| | | | | | /lib64/libpthrea->
| | | | | | /lib64/libc-2.19->
[...]
PID: ID des Prozesses |
PPID: ID des übergeordneten Prozesses |
UID: ID des Benutzers, der den Prozess ausführt |
Login: Anmeldename des Benutzers, der den Prozess ausführt |
Command: Befehl, mit dem der Prozess ausgeführt wurde |
Service: Dienstname (nur wenn der Befehl einem Systemdienst zugeordnet ist) |
Files: Liste der gelöschten Dateien |
Das Ausgabeformat von zypper ps
kann wie folgt gesteuert werden:
zypper ps
-s
Kurze Tabelle ohne gelöschte Dateien erstellen.
>
zypper ps -s PID | PPID | UID | User | Command | Service ------+------+------+---------+--------------+-------------- 814 | 1 | 481 | avahi | avahi-daemon | avahi-daemon 817 | 1 | 0 | root | irqbalance | irqbalance 1567 | 1 | 0 | root | sshd | sshd 1761 | 1 | 0 | root | master | postfix 1764 | 1761 | 51 | postfix | pickup | postfix 1765 | 1761 | 51 | postfix | qmgr | postfix 2031 | 2027 | 1000 | tux | bash |zypper ps
-ss
Nur Prozesse anzeigen, die einem Systemdienst zugewiesen sind.
PID | PPID | UID | User | Command | Service ------+------+------+---------+--------------+-------------- 814 | 1 | 481 | avahi | avahi-daemon | avahi-daemon 817 | 1 | 0 | root | irqbalance | irqbalance 1567 | 1 | 0 | root | sshd | sshd 1761 | 1 | 0 | root | master | postfix 1764 | 1761 | 51 | postfix | pickup | postfix 1765 | 1761 | 51 | postfix | qmgr | postfix
zypper ps
-sss
Nur Systemdienste anzeigen, die gelöschte Dateien verwenden.
avahi-daemon irqbalance postfix sshd
zypper ps
--print "systemctl status %s"
Befehle zum Abrufen von Statusinformationen für Dienste anzeigen, die einen Neustart erfordern könnten.
systemctl status avahi-daemon systemctl status irqbalance systemctl status postfix systemctl status sshd
Weitere Informationen zum Handhaben von Diensten finden Sie unter Kapitel 19, Der Daemon systemd
.
9.1.6 Verwalten von Repositorys mit Zypper #
Sämtliche Installations- und Patch-Befehle von Zypper sind von der Liste der bekannten Repositorys abhängig. Um alle dem System bekannten Repositorys aufzulisten, verwenden Sie den Befehl:
>
zypper repos
Das Ergebnis ist der folgenden Ausgabe ähnlich:
>
zypper repos
# | Alias | Name | Enabled | Refresh
--+--------------+---------------+---------+--------
1 | SLEHA-15-GEO | SLEHA-15-GEO | Yes | No
2 | SLEHA-15 | SLEHA-15 | Yes | No
3 | SLES15 | SLES15 | Yes | No
Bei der Angabe von Repositorys kann in verschiedenen Befehlen ein Alias, URI oder eine Repository-Nummer aus der Ausgabe des Befehls zypper repos
verwendet werden. Ein Repository-Alias ist eine Kurzform des Repository-Namens, der in Repository-Befehle verwendet wird. Beachten Sie dabei, dass sich die Repository-Nummern nach dem Bearbeiten der Repository-Liste ändern können. Der Alias ändert sich nie von alleine.
Standardmäßig werden Details wie URI oder Priorität des Repositorys nicht angezeigt. Verwenden Sie den folgenden Befehl, um alle Details aufzulisten:
>
zypper repos -d
9.1.6.1 Hinzufügen von Repositorys #
Zum Hinzufügen eines Repository, führen Sie Folgendes aus:
>
sudo
zypper addrepo URI ALIAS
URI kann ein Internet-Repository, eine Netzwerkressource, ein Verzeichnis oder eine CD oder DVD sein (für Details siehe https://en.opensuse.org/openSUSE:Libzypp_URIs). Der ALIAS ist ein Kürzel und eine eindeutige Kennung für das Repository. Sie können ihn frei wählen, vorausgesetzt, er ist eindeutig. Zypper gibt eine Warnung aus, wenn Sie einen Alias angeben, der bereits verwendet wird.
9.1.6.2 Aktualisieren von Repositorys #
Mit zypper
können Sie Änderungen in Paketen aus konfigurierten Repositorys abrufen. Rufen Sie die Änderungen wie folgt ab:
>
sudo
zypper refresh
zypper
Standardmäßig führen bestimmte Befehle refresh
automatisch aus, sodass dieser Befehl nicht explizit aufgerufen werden muss.
Mit dem Befehl refresh
können Sie auch Änderungen in deaktivierten Repositorys anzeigen, indem Sie die Option --plus-content
verwenden:
>
sudo
zypper --plus-content refresh
Diese Option ruft Änderungen in Repositorys ab und behält dabei den Zustand der deaktivierten Repositorys unverändert bei – also deaktiviert.
9.1.6.3 Entfernen von Repositorys #
Wenn ein Repository von der Liste entfernt werden soll, verwenden Sie den Befehl zypper
removerepo
zusammen mit dem Alias oder der Nummer des zu löschenden Repositorys. Um beispielsweise das Repository SLEHA-12-GEO
aus Beispiel 9.1, „Zypper – Liste der bekannten Repositorys“ zu entfernen, verwenden Sie einen der folgenden Befehle:
>
sudo
zypper removerepo 1>
sudo
zypper removerepo "SLEHA-12-GEO"
9.1.6.4 Ändern von Repositorys #
Aktivieren oder deaktivieren von Repositorys mit zypper modifyrepo
. Mit diesem Befehl können Sie auch die Eigenschaften des Repositorys (z. B. Aktualisierungsverhalten, Name oder Priorität) ändern. Der folgende Befehl aktiviert das Repository mit dem Namen updates
, aktiviert die automatische Aktualisierung und legt seine Priorität auf 20 fest:
>
sudo
zypper modifyrepo -er -p 20 'updates'
Das Ändern von Repositorys ist nicht auf ein einziges Repository beschränkt – Sie können auch Gruppen bearbeiten:
-a : alle Repositorys |
-l : lokale Repositorys |
-t : entfernte Repositorys |
-m TYPE : Repositorys eines bestimmten Typs (wobei TYPE einen der folgenden Werte annehmen kann: http , https , ftp , cd , dvd , dir , file , cifs , smb , nfs , hd , iso ) |
Zum Umbenennen eines Repository-Alias verwenden Sie den Befehl renamerepo
. Das folgende Beispiel ändert den Alias von Mozilla
Firefox
in firefox
:
>
sudo
zypper renamerepo 'Mozilla Firefox' firefox
9.1.7 Abfragen von Repositorys und Paketen mit Zypper #
Zypper bietet zahlreiche Methoden zur Abfrage von Repositorys oder Paketen. Verwenden Sie die folgenden Befehle, um eine Liste aller verfügbaren Produkte, Muster, Pakete oder Patches zu erhalten:
>
zypper products>
zypper patterns>
zypper packages>
zypper patches
Zur Abfrage aller Repositorys auf bestimmte Pakete verwenden Sie search
. Mit dem Befehl info
erhalten Sie Informationen zu bestimmten Paketen.
9.1.7.1 Suchen nach Software #
Der Befehl zypper search
lässt sich auf Paketnamen oder optional auf Paketzusammenfassungen und -beschreibungen anwenden. Zeichenketten, die mit /
umschlossen sind, werden als reguläre Ausdrücke behandelt. Standardmäßig unterscheidet der Suchvorgang keine Groß- und Kleinschreibung.
- Einfache Suche nach einem Paketnamen mit dem Namensbestandteil
fire
>
zypper search "fire"- Einfache Suche nach dem genauen Paketnamen
MozillaFirefox
>
zypper search --match-exact "MozillaFirefox"- Suche auf Paketbeschreibungen und -zusammenfassungen ausdehnen
>
zypper search -d fire- Nur Pakete anzeigen, die nicht bereits installiert sind
>
zypper search -u fire- Pakete anzeigen, die die Zeichenkette
fir
enthalten, nicht gefolgt vone
>
zypper se "/fir[^e]/"
9.1.7.2 Suchen nach Paketen in allen SLE-Modulen #
Mit dem Unterbefehl search-packages
suchen Sie Pakete innerhalb und außerhalb der aktuell aktivierten SLE-Module. Mit diesem Befehl wird das SUSE Customer Center kontaktiert und alle Module werden nach passenden Paketen durchsucht, wie zum Beispiel:
>
zypper search-packages package1 package2
zypper search-packages
bietet die folgenden Optionen:
Suchen nach einer genauen Übereinstimmung mit der Suchzeichenkette:
-x
,--match-exact
Gruppieren der Ergebnisse nach Modul (Standard: Nach Paket gruppieren):
-g,
--group-by-module
Anzeigen detaillierterer Informationen zu Paketen:
-d
,--details
Ausgeben von Suchergebnissen in XML:
--xmlout
9.1.7.3 Suchen nach bestimmten Funktionen #
Verwenden Sie zur Suche nach Paketen, die eine spezielle Funktion bieten, den Befehl what-provides
. Wenn Sie beispielsweise wissen möchten, welches Paket das Perl-Modul SVN::Core
bereitstellt, verwenden Sie den folgenden Befehl:
>
zypper what-provides 'perl(SVN::Core)'
what-provides
PACKAGE_NAME
ähnelt dem Befehl rpm -q --whatprovides
PACKAGE_NAME. RPM kann jedoch nur Abfragen für die RPM-Datenbank (Datenbank mit allen installierten Paketen) durchführen. zypper informiert Sie auf der anderen Seite über Anbieter der Möglichkeit von einem beliebigen Repository, nicht nur von denen, die installiert sind.
9.1.7.4 Anzeigen von Paketinformationen #
Um einzelne Pakete abzufragen, verwenden Sie info
mit einem exakten Paketnamen als Argument. Hiermit werden detaillierte Informationen zu einem Paket angezeigt. Falls der Paketname nicht mit einem Paketnamen aus den Repositorys übereinstimmt, gibt der Befehl ausführliche Informationen zu den fehlenden Pakettreffern aus. Wenn Sie einen bestimmten Typ festlegen (mit der Option -t
) und dieser Typ nicht vorhanden ist, gibt der Befehl andere verfügbare Treffer aus, jedoch ohne ausführliche Informationen.
Wenn Sie ein Quellpaket angeben, zeigt der Befehl die aus dem Quellpaket aufgebauten Binärpakete. Wenn Sie ein Binärpaket angeben, gibt der Befehl die Quellpakete aus, aus denen das Binärpaket aufgebaut wurde.
Um auch die Elemente abzurufen, die für das Paket erforderlich/empfohlen sind, verwenden Sie die Optionen --requires
und --recommends
:
>
zypper info --requires MozillaFirefox
9.1.8 Anzeigen von Paketinformationen #
SUSE-Produkte werden im Allgemeinen 10 Jahre lang unterstützt. Häufig können Sie diesen standardmäßigen Lebenszyklus anhand der erweiterten Supportangebote von SUSE verlängern und drei Jahre Support erhalten. Den genauen Support-Lebenszyklus für Ihr Produkt finden Sie unter https://www.suse.com/lifecycle.
Mit dem Befehl zypper lifecycle
ermitteln Sie den Lebenszyklus Ihres Produkts und des unterstützten Pakets (siehe unten):
#
zypper lifecycle
Product end of support Codestream: SUSE Linux Enterprise Server 15 2028-07-31 Product: SUSE Linux Enterprise Server 15 SP3 n/a* Module end of support Basesystem Module n/a* Desktop Applications Module n/a* Server Applications Module n/a* Package end of support if different from product: autofs Now, installed 5.1.3-7.3.1, update available 5.1.3-7.6.1
9.1.9 Konfigurieren von Zypper #
Zypper ist nunmehr mit einer Konfigurationsdatei ausgestattet, in der Sie die Arbeitsweise von Zypper dauerhaft verändern können (wahlweise systemweit oder benutzerspezifisch). Für systemweite Änderungen bearbeiten Sie /etc/zypp/zypper.conf
. Für benutzerspezifische Änderungen bearbeiten Sie ~/.zypper.conf
. Falls ~/.zypper.conf
noch nicht vorhanden ist, können Sie /etc/zypp/zypper.conf
als Vorlage verwenden. Kopieren Sie diese Datei in ~/.zypper.conf
, und passen Sie sie nach Ihren Anforderungen an. Weitere Informationen zu den verfügbaren Optionen finden Sie in den Kommentaren in der Datei.
9.1.10 Fehlersuche #
Falls Sie aus konfigurierten Repositorys heraus nicht problemlos auf Pakete zugreifen können (Zypper kann beispielsweise ein bestimmtes Paket nicht finden, obwohl Sie wissen, dass sich dieses Paket in einem der Repositorys befindet), aktualisieren Sie probeweise die Repositorys:
>
sudo
zypper refresh
Falls das nicht wirkt, probieren Sie Folgendes:
>
sudo
zypper refresh -fdb
Damit wird eine vollständige Aktualisierung und ein kompletter Neuaufbau der Datenbank erzwungen, außerdem ein erzwungener Download von Roh-Metadaten.
9.1.11 Zypper-Rollback-Funktion im Btrfs-Dateisystem #
Wenn das Btrfs-Dateisystem in der Stammpartition verwendet wird und snapper
installiert ist, ruft Zypper automatisch snapper
auf, wenn an das Dateisystem Änderungen übermittelt werden, um entsprechende Dateisystem-Snapshots zu erstellen. Diese Snapshots können verwendet werden, um alle durch Zypper vorgenommenen Änderungen rückgängig zu machen. Weitere Informationen zu diesem Thema finden Sie unter dem Stichwort Kapitel 10, Systemwiederherstellung und Snapshot-Verwaltung mit Snapper.
9.1.12 Weitere Informationen #
Wenn Sie weitere Informationen zur Verwaltung von Software über die Befehlszeile benötigen, geben Sie zypper help
oder zypper help
COMMAND ein oder rufen Sie die man-Seite zypper(8)
auf. Eine ausführliche Befehlsreferenz mit cheat sheets
zu den wichtigsten Befehlen sowie Informationen zur Verwendung von Zypper in Skripten und Anwendungen finden Sie unter https://en.opensuse.org/SDB:Zypper_usage. Eine Liste der Software-Änderungen in der aktuellen SUSE Linux Enterprise Server-Version finden Sie unter https://en.opensuse.org/openSUSE:Zypper_versions.
9.2 RPM – der Paket-Manager #
RPM (RPM Package Manager) wird für die Verwaltung von Softwarepaketen verwendet. Seine Hauptbefehle sind rpm
und rpmbuild
. In der leistungsstarken RPM-Datenbank können Benutzer, Systemadministratoren und Paketersteller ausführliche Informationen zur installierten Software abfragen.
rpm
hat fünf Modi: Installieren/Deinstallieren (oder Aktualisieren) von Software-Paketen, Neuaufbauen der RPM-Datenbank, Abfragen der RPM-Basis oder individuellen RPM-Archive, Integritätsprüfung der Pakete und Signieren von Paketen. rpmbuild
ermöglicht das Aufbauen installierbarer Pakete von Pristine-Quellen.
Installierbare RPM-Archive sind in einem speziellen binären Format gepackt. Diese Archive bestehen aus den zu installierenden Programmdateien und aus verschiedenen Metadaten, die bei der Installation von rpm
benutzt werden, um das jeweilige Softwarepaket zu konfigurieren, oder die zu Dokumentationszwecken in der RPM-Datenbank gespeichert werden. RPM-Archive haben für gewöhnlich die Dateinamenserweiterung .rpm
.
Bei einigen Paketen sind die zur Software-Entwicklung erforderlichen Komponenten (Bibliotheken, Header- und Include-Dateien usw.) in eigene Pakete ausgelagert. Diese Entwicklungspakete werden nur benötigt, wenn Sie Software selbst kompilieren möchten (beispielsweise die neuesten GNOME-Pakete). Solche Pakete sind an der Namenserweiterung ‑devel
zu erkennen, z. B. die Pakete alsa-devel
und gimp-devel
.
9.2.1 Prüfen der Authentizität eines Pakets #
RPM-Pakete sind mit GPG signiert. Verwenden Sie zum Verifizieren der Signatur eines RPM-Pakets den Befehl rpm --checksig
PACKAGE-1.2.3.rpm. So können Sie feststellen, ob das Paket von SUSE oder einer anderen verbürgten Einrichtung stammt. Dies ist insbesondere bei Update-Paketen aus dem Internet zu empfehlen.
Zum Beheben von Problemen im Betriebssystem müssen Sie ggf. einen PTF (Problem Temporary Fix, temporäre Fehlerbehebung) in einem Produktionssystem installieren. Die Pakete von SUSE sind mit einem besonderen PTF-Schlüssel signiert. Im Gegensatz zu SUSE Linux Enterprise 11 wird dieser Schlüssel jedoch nicht standardmäßig von SUSE Linux Enterprise 12-Systemen importiert. Importieren Sie den Schlüssel mit dem folgenden Befehl:
>
sudo
rpm --import \ /usr/share/doc/packages/suse-build-key/suse_ptf_key.asc
Nach dem Importieren des Schlüssels können Sie PTF-Pakete auf dem System installieren.
9.2.2 Verwalten von Paketen: Installieren, Aktualisieren und Deinstallieren #
In der Regel kann ein RPM-Archiv einfach installiert werden: rpm
-i
PACKAGE.rpm. Mit diesem Befehl wird das Paket aber nur dann installiert, wenn seine Abhängigkeiten erfüllt sind und keine Konflikte mit anderen Paketen bestehen. rpm
fordert per Fehlermeldung die Pakete an, die zum Erfüllen der Abhängigkeiten installiert werden müssen. Im Hintergrund wacht die RPM-Datenbank darüber, dass keine Konflikte entstehen: Eine spezifische Datei darf nur zu einem Paket gehören. Durch die Wahl anderer Optionen können Sie rpm
zwingen, diese Standards zu ignorieren, jedoch ist dies nur für Spezialisten gedacht. Andernfalls wird damit die Integrität des Systems gefährdet und möglicherweise die Update-Fähigkeit aufs Spiel gesetzt.
Mit den Optionen -U
oder --upgrade
und -F
oder --freshen
kann ein Paket (z. B. rpm -F
PACKAGE.rpm) aktualisiert werden. Dieser Befehl entfernt die Dateien der alten Version und installiert sofort die neuen Dateien. Der Unterschied zwischen den beiden Versionen besteht darin, dass mit -U
auch Pakete installiert werden, die vorher nicht im System vorhanden waren, wohingegen mit -F
nur zuvor installierte Pakete aktualisiert werden. Bei einem Update verwendet rpm
zur sorgfältigen Aktualisierung der Konfigurationsdateien die folgende Strategie:
Falls eine Konfigurationsdatei vom Systemadministrator nicht geändert wurde, installiert
rpm
die neue Version der entsprechenden Datei. Es sind keine Eingriffe seitens des Administrators nötig.Wenn der Systemadministrator eine Konfigurationsdatei vor der Aktualisierung geändert hatte, speichert
rpm
die geänderte Datei mit der Dateinamenerweiterung.rpmorig
oder.rpmsave
(Sicherungsdatei) und installiert die Version des neuen Pakets. Dies gilt nur dann, wenn die ursprünglich installierte Datei und die neuere Version nicht identisch sind. Vergleichen Sie in diesem Fall die Sicherungsdatei (.rpmorig
oder.rpmsave
) mit der neu installierten Datei und nehmen Sie Ihre Änderungen erneut in der neuen Datei vor. Löschen Sie anschließend alle.rpmorig
- und.rpmsave
-Dateien, um Probleme mit zukünftigen Updates zu vermeiden..rpmnew
-Dateien erscheinen immer dann, wenn die Konfigurationsdatei bereits existiert und wenn die Kennungnoreplace
mit der.spec
-Datei angegeben wurde.
Im Anschluss an ein Update sollten alle .rpmsave
- und .rpmnew
-Dateien nach einem Abgleich entfernt werden, damit sie bei zukünftigen Updates nicht stören. Die Erweiterung .rpmorig
wird zugewiesen, wenn die Datei zuvor nicht von der RPM-Datenbank erkannt wurde.
Andernfalls wird .rpmsave
verwendet. Mit anderen Worten: .rpmorig
entsteht bei einem Update von einem Fremdformat auf RPM. .rpmsave
entsteht bei einem Update aus einem älteren RPM auf einen neueren RPM. .rpmnew
informiert nicht darüber, ob der Systemadministrator die Konfigurationsdatei geändert hat. Eine Liste dieser Dateien ist in /var/adm/rpmconfigcheck
verfügbar. Einige Konfigurationsdateien (wie /etc/httpd/httpd.conf
) werden nicht überschrieben, um den weiteren Betrieb zu ermöglichen.
Der Schalter -U
ist nicht einfach gleichbedeutend mit der Deinstallation mit der Option -e
und der Installation mit der Option -i
. Verwenden Sie -U
, wann immer möglich.
Um ein Paket zu entfernen, geben Sie rpm -e
PACKAGE ein. Dieser Befehl löscht das Paket nur, wenn keine ungelösten Abhängigkeiten vorhanden sind. Theoretisch ist es unmöglich, beispielsweise Tcl/Tk zu löschen, solange eine andere Anwendung Tcl/Tk noch benötigt. Auch in diesem Fall nutzt RPM die Datenbank zur Unterstützung. Falls in einem Ausnahmefall ein solcher Löschvorgang nicht möglich ist (selbst wenn keine Abhängigkeiten mehr bestehen), kann es nützlich sein, die RPM-Datenbank mit der Option --rebuilddb
neu aufzubauen.
9.2.3 Delta-RPM-Pakete #
Delta-RPM-Pakete enthalten die Unterschiede zwischen einer alten und einer neuen Version eines RPM-Pakets. Wenn Sie ein Delta-RPM auf ein altes RPM anwenden, ergibt dies ein ganz neues RPM. Es ist nicht erforderlich, dass eine Kopie des alten RPM vorhanden ist, da ein Delta-RPM auch mit einem installierten RPM arbeiten kann. Die Delta-RPM-Pakete sind sogar kleiner als Patch-RPMs, was beim Übertragen von Update-Paketen über das Internet von Vorteil ist. Der Nachteil ist, dass Update-Vorgänge mit Delta-RPMs erheblich mehr CPU-Zyklen beanspruchen als normale oder Patch-RPMs.
Die Binärdateien makedeltarpm
und applydelta
sind Teil der Delta-RPM-Suite (Paket deltarpm
) und helfen Ihnen beim Erstellen und Anwenden von Delta-RPM-Paketen. Mit den folgenden Befehlen erstellen Sie ein Delta-RPM mit dem Namen new.delta.rpm
. Der folgende Befehl setzt voraus, dass old.rpm
und new.rpm
vorhanden sind:
>
sudo
makedeltarpm old.rpm new.rpm new.delta.rpm
Mit applydeltarpm
können Sie den neuen RPM aus dem Dateisystem rekonstruieren, wenn das alte Paket bereits installiert ist:
>
sudo
applydeltarpm new.delta.rpm new.rpm
Um es aus dem alten RPM abzuleiten, ohne auf das Dateisystem zuzugreifen, verwenden Sie die Option -r
:
>
sudo
applydeltarpm -r old.rpm new.delta.rpm new.rpm
Technische Informationen finden Sie unter /usr/share/doc/packages/deltarpm/README
.
9.2.4 RPM-Abfragen #
Mit der Option -q
initiiert rpm
Abfragen und ermöglicht es, ein RPM-Archiv zu prüfen (durch Hinzufügen der Option -p
) und die RPM-Datenbank nach installierten Paketen abzufragen. Zur Angabe der benötigten Informationsart stehen mehrere Schalter zur Verfügung. Siehe Tabelle 9.1, „Wichtige Optionen für RPM-Abfragen“.
|
Paketinformation |
|
Dateiliste |
|
Abfrage nach Paket, das die Datei FILE enthält. (FILE muss mit dem vollständigen Pfad angegeben werden.) |
|
Dateiliste mit Statusinformation (impliziert |
|
Nur Dokumentationsdateien auflisten (impliziert |
|
Nur Konfigurationsdateien auflisten (impliziert |
|
Dateiliste mit vollständigen Details (zur Verwendung mit |
|
Funktionen des Pakets auflisten, die ein anderes Paket mit |
|
Fähigkeiten, die das Paket benötigt |
|
Installationsskripten (preinstall, postinstall, uninstall) |
Beispielsweise gibt der Befehl rpm -q -i wget
die in Beispiel 9.2, „rpm -q -i wget
“ gezeigte Information aus.
rpm -q -i wget
#Name : wget Version : 1.14 Release : 17.1 Architecture: x86_64 Install Date: Mon 30 Jan 2017 14:01:29 CET Group : Productivity/Networking/Web/Utilities Size : 2046483 License : GPL-3.0+ Signature : RSA/SHA256, Thu 08 Dec 2016 07:48:44 CET, Key ID 70af9e8139db7c82 Source RPM : wget-1.14-17.1.src.rpm Build Date : Thu 08 Dec 2016 07:48:34 CET Build Host : sheep09 Relocations : (not relocatable) Packager : https://www.suse.com/ Vendor : SUSE LLC <https://www.suse.com/> URL : http://www.gnu.org/software/wget/ Summary : A Tool for Mirroring FTP and HTTP Servers Description : Wget enables you to retrieve WWW documents or FTP files from a server. This can be done in script files or via the command line. Distribution: SUSE Linux Enterprise 15
Die Option -f
funktioniert nur, wenn Sie den kompletten Dateinamen mit dem vollständigen Pfad angeben. Sie können beliebig viele Dateinamen angeben. Beispiel:
>
rpm -q -f /bin/rpm /usr/bin/wget
rpm-4.14.1-lp151.13.10.x86_64
wget-1.19.5-lp151.4.1.x86_64
Wenn nur ein Teil des Dateinamens bekannt ist, verwenden Sie ein Shell-Skript, wie in Beispiel 9.3, „Skript für die Suche nach Paketen“ gezeigt. Übergeben Sie den partiellen Dateinamen als Parameter beim Aufruf des Skripts.
#! /bin/sh for i in $(rpm -q -a -l | grep $1); do echo "\"$i\" is in package:" rpm -q -f $i echo "" done
Der Befehl rpm -q --changelog
PACKAGE zeigt eine detaillierte Liste der Änderungsinformation zu einem bestimmten Paket nach Datum sortiert.
Mit der installierten RPM-Datenbank sind Überprüfungen möglich. Initiieren Sie sie mit -V
oder --verify
. Mit dieser Option zeigt rpm
alle Dateien in einem Paket, die seit der Installation geändert wurden. rpm
weist mithilfe von acht Zeichensymbolen auf folgende Änderungen hin:
|
MD5-Prüfsumme |
|
Dateigröße |
|
Symbolischer Link |
|
Änderungszeit |
|
Major- und Minor-Gerätenummern |
|
Besitzer |
|
Gruppe |
|
Modus (Berechtigungen und Dateityp) |
Bei Konfigurationsdateien wird der Buchstabe c
ausgegeben. Beispielsweise für Änderungen an /etc/wgetrc
(wget
-Paket):
>
rpm -V wget
S.5....T c /etc/wgetrc
Die Dateien der RPM-Datenbank werden in /var/lib/rpm
abgelegt. Wenn die Partition /usr
eine Größe von 1 GB aufweist, kann diese Datenbank beinahe 30 MB belegen, insbesondere nach einem kompletten Update. Wenn die Datenbank viel größer ist als erwartet, kann es nützlich sein, die Datenbank mit der Option --rebuilddb
neu aufzubauen. Legen Sie zuvor eine Sicherungskopie der alten Datenbank an. Das cron
-Skript cron.daily
erstellt tägliche Kopien der Datenbank (gepackt mit GZIP) und speichert sie unter /var/adm/backup/rpmdb
. Die Anzahl der Kopien wird durch die Variable MAX_RPMDB_BACKUPS
(Standard: 5
) in /etc/sysconfig/backup
gesteuert. Die Größe einer einzelnen Sicherungskopie beträgt ungefähr 1 MB für 1 GB in /usr
.
9.2.5 Installieren und Kompilieren von Quellpaketen #
Alle Quellpakete haben die Erweiterung .src.rpm
(Source-RPM).
Quellpakete können vom Installationsmedium auf die Festplatte kopiert und mit YaST entpackt werden. Sie werden im Paket-Manager jedoch nicht als installiert ([i]
) gekennzeichnet. Das liegt daran, dass die Quellpakete nicht in der RPM-Datenbank eingetragen sind. Nur installierte Betriebssystemsoftware wird in der RPM-Datenbank aufgeführt. Wenn Sie ein Quellpaket „installieren“, wird dem System nur der Quellcode hinzugefügt.
Die folgenden Verzeichnisse müssen für rpm
und rpmbuild
in /usr/src/packages
verfügbar sein (sofern Sie keine benutzerdefinierten Einstellungen in einer Datei wie /etc/rpmrc
angegeben haben):
SOURCES
für die ursprünglichen Quellen (oder
.tar.bz2
- und.tar.gz
-Dateien usw.) und für distributionsspezifische Anpassungen (meist.diff
- oder.patch
-Dateien)SPECS
für die
.spec
-Dateien, die ähnlich wie Meta-Makefiles den build-Prozess steuernBUILD
Alle Quellen in diesem Verzeichnis werden entpackt, gepatcht und kompiliert.
RPMS
Speicherort der fertigen Binärpakete
SRPMS
Speicherort der Quell-RPMs
Wenn Sie ein Quellpaket mit YaST installieren, werden alle notwendigen Komponenten in /usr/src/packages
installiert: die Quellen und Anpassungen in SOURCES
und die relevante .spec
-Datei in SPECS
.
Experimentieren Sie nicht mit Systemkomponenten (glibc
, rpm
usw.), da Sie damit die Stabilität Ihres Systems riskieren.
Das folgende Beispiel verwendet das wget.src.rpm
-Paket. Nach der Installation des Quellpakets sollten Dateien wie in der folgenden Liste vorhanden sein:
/usr/src/packages/SOURCES/wget-1.19.5.tar.bz2 /usr/src/packages/SOURCES/wgetrc.patch /usr/src/packages/SPECS/wget.spec
rpmbuild
-bX
/usr/src/packages/SPECS/wget.spec
startet die Kompilierung. X ist ein Platzhalter für verschiedene Stufen des build-Prozesses (Einzelheiten erhalten Sie in der Ausgabe von --help
oder in der RPM-Dokumentation). Nachfolgend wird nur eine kurze Erläuterung gegeben:
-bp
Bereiten Sie die Quellen in
/usr/src/packages/BUILD
vor: entpacken und patchen.-bc
Wie
-bp
, jedoch zusätzlich kompilieren.-bi
Wie
-bp
, jedoch zusätzlich die erstellte Software installieren. Vorsicht: Wenn das Paket die Funktion Buildroot nicht unterstützt, ist es möglich, dass Konfigurationsdateien überschrieben werden.-bb
Wie
-bi
, jedoch zusätzlich das Binärpaket erstellen. Nach erfolgreicher Kompilierung sollte sich das Binärpaket in/usr/src/packages/RPMS
befinden.-ba
Wie
-bb
, jedoch mit der Erstellung des zusätzlichen Quell-RPM. Nach erfolgreicher Kompilierung sollte sich das Binärpaket in/usr/src/packages/SRPMS
befinden.--short-circuit
Einige Schritte überspringen.
Der erstellte Binär-RPM kann nun mit rpm
-i
oder vorzugsweise mit rpm
-U
erstellt werden. Durch die Installation mit rpm
wird er in die RPM-Datenbank aufgenommen.
Denken Sie daran, dass die BuildRoot
-Direktive in der spec-Datei nicht mehr verwendet wird. Benötigen Sie die Funktion weiterhin, verwenden Sie die Option --buildroot
als Alternative.
9.2.6 Kompilieren von RPM-Pakten mit „build“ #
Bei vielen Paketen besteht die Gefahr, dass während der Erstellung ungewollt Dateien in das laufende System kopiert werden. Um dies zu vermeiden, können Sie build
verwenden, das eine definierte Umgebung herstellt, in der das Paket erstellt wird. Zum Aufbau dieser chroot-Umgebung muss dem build
-Skript ein kompletter Paketbaum zur Verfügung stehen. Dieser kann auf Festplatte, über NFS oder auch von DVD bereitgestellt werden. Legen Sie die Position mit build --rpms
DIRECTORY fest. Im Unterschied zu rpm
sucht der Befehl build
die .spec
-Datei im Quellverzeichnis. Wenn Sie, wie im obigen Beispiel, wget
neu erstellen möchten und die DVD unter /media/dvd
im System eingehängt ist, verwenden Sie als Benutzer root
folgende Befehle:
#
cd /usr/src/packages/SOURCES/#
mv ../SPECS/wget.spec .#
build --rpms /media/dvd/suse/ wget.spec
Anschließend wird in /var/tmp/build-root
eine minimale Umgebung eingerichtet. Das Paket wird in dieser Umgebung erstellt. Danach befinden sich die resultierenden Pakete in /var/tmp/build-root/usr/src/packages/RPMS
.
Das Skript build
bietet mehrere zusätzliche Optionen. Beispielsweise können Sie das Skript veranlassen, Ihre eigenen RPMs bevorzugt zu verwenden, die Initialisierung der build-Umgebung auszulassen oder den Befehl rpm
auf eine der oben erwähnten Stufen zu beschränken. Greifen Sie mit build
--help
und durch Lesen der Manpage für build
auf zusätzliche Informationen zu.
9.2.7 Werkzeuge für RPM-Archive und die RPM-Datenbank #
Midnight Commander (mc
) kann den Inhalt von RPM-Archiven anzeigen und Teile daraus kopieren. Archive werden als virtuelle Dateisysteme dargestellt und bieten alle üblichen Menüoptionen von Midnight Commander. Zeigen Sie den HEADER
mit F3 an. Zeigen Sie die Archivstruktur mit den Cursortasten und der Eingabetaste an. Kopieren Sie Archivkomponenten mit F5.
Ein Paket-Manager mit allen Funktionen ist als YaST-Modul verfügbar. Weitere Informationen finden Sie unter Kapitel 8, Installieren bzw. Entfernen von Software.