Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

4.4.6. Aktualisierungen am RPM Package Manager (RPM)

Red Hat Enterprise Linux 7 enthält eine aktualisierte Version des RPM Package Managers. Diese Aktualisierung bringt eine Reihe von Änderungen mit sich, die sich auf die Migration auswirken können.
  • Die Konflikterkennung ist nun strenger und korrekter. Einige Pakete, die unter Red Hat Enterprise Linux 6 installiert werden konnten, können aufgrund dieser erhöhten Konflikterkennung möglicherweise nicht unter Red Hat Enterprise Linux 7 installiert werden.
  • Pakete, dessen verschiedene Versionen miteinander im Konflikt stehen, können nun installiert werden. Dies ermöglicht es Benutzern, ein Singleton-Verhalten zwischen diesen Alternativen zu konfigurieren.
  • Falls ein installiertes Paket ein anderes Paket als obsolet auflistet, dann wird dieses andere Paket nicht installiert.
  • Die Regeln zur Erkennung von veralteten Paketen ziehen nun alle passenden Pakete in Betracht, unabhängig von anderen Attributen wie z.B. der Architektur.
  • Die Berechnung von Abhängigkeiten betrachtet solche Dateien nicht länger als vorhanden, die ersetzt oder nicht installiert wurden, weil zum Beispiel die Optionen --nodocs, --noconfig oder --force verwendet wurden.
  • Es ist nicht mehr nötig, manuell rm -f /var/lib/rpm/__db. auszuführen, wenn eine RPM Package Manager Datenbank neu erstellt wird, auf der eine Panik auftrat (DB_RUNRECOVER).
  • Öffentliche Schlüssel, die mit OpenPGP 3 erstellt wurden, werden nicht mehr unterstützt.
  • Die --info Option gibt nun einzelne Schlüssel-Wert-Paare pro Zeile aus, um die Lesbarkeit zu verbessern. Skripte, die auf dem früheren --info Format basieren, müssen umgeschrieben werden.
  • Der Spec-Parser ist nun strenger und korrekter, weshalb einige bislang akzeptierte Spec-Dateien unter Umständen nicht mehr analysiert werden können oder Warnungen generieren.
  • %license kann nun dazu verwendet werden, um Dateien im %files Abschnitt einer Spec-Datei zu kennzeichnen, die installiert werden müssen, selbst wenn --nodocs angegeben ist.
  • Der Versionsvergleich unterstützt nun wie dpkg den Tilde-Operator (~), um Pre-Release-Software besser zu handhaben. Beispielsweise gilt foo-2.0~beta1 als älter als foo-2.0. Auf diese Weise sind keine Tricks mehr mit dem Release-Feld erforderlich, um diese üblichen Upstream-Versionierungspraktiken zu handhaben.
  • Der automatische Abhängigkeitsgenerator wurde neu geschrieben als erweiterbares, anpassbares und regelbasiertes System mit integrierter Filterung.
Diese Aktualisierung umfasst zudem die folgenden Verbesserungen:
  • Es ist nun möglich abzufragen, welche Dateien von einem Paket installiert wurden (INSTFILENAMES), wie viele Hard-Links auf eine Datei verweisen (FILENLINKS), sowie Details des Paket-Versionskontrollsystems (VCS) und formatierte Shortcuts von Abhängigkeitsstrings (PROVIDENEVRS, REQUIRENEVRS, CONFLICTNEVRS, OBSOLETENEVRS).
  • Eine Reihe neuer Befehle sind enthalten, unter anderem:
    • rpmkeys
    • rpmdb
    • rpmspec
    • rpmsign
  • RPM Package Manager enthält nun neue Switches für Skriptlets, die Makroerweiterung zur Laufzeit und Queryformat-Erweiterung zur Laufzeit ermöglichen.
  • Prä- und Posttransaktions-Skriptlet-Abhängigkeiten können nun korrekt mit Requires(pretrans) und Requires(posttrans) ausgedrückt werden.
  • RPM Package Manager enthält nun den OrderWithRequires Tag, der Benutzern die Angabe zusätzlicher Informationen zur Reihenfolge ermöglicht. Dieser neue Tag verwendet dieselbe Syntax wie der Requires-Tag, generiert jedoch keine Abhängigkeiten. Falls genannte Pakete in derselben Transaktion vorhanden sind, werden die Hinweise zur Reihenfolge bei der Berechnung der Transaktionsreihenfolge wie Requires gehandhabt.
  • Zeilenfortsetzungen und Makroerweiterungen in Spec-Dateien sind nicht mehr auf eine bestimmte Länge beschränkt.
  • RPM Package Manager ermöglicht es Benutzern nun, Informationen zum Upstream-Versionskontroll-Repository anzugeben.
  • RPM Package Manager enthält nun ein %autosetup Makro, das dabei hilft, das Anwenden von Patches zu automatisieren.