RPM-VERSION(7)

BEZEICHNUNG
rpm-version - RPM-Versionssystem

ÜBERSICHT
[EPOCHE:]VERSION[-VERÖFFENTLICHUNG]

BESCHREIBUNG
Die Bezeichnung EVR wird zur Bezeichnung von Softwareversionen in RPM verwendet und besteht aus bis zu drei Komponenten:

•   VERSION gibt die tatsächliche Version der paketierten Software an.
•   VERÖFFENTLICHUNG gibt Paketrevisionen innerhalb dieser Softwareversion an.
•   Die EPOCHE ist eine künstliche Außerkraftsetzung, um Versionierungsanomalien zu umgehen.

Nur die Komponente VERSION ist in einer EVR-Bezeichnung zwingend erforderlich. Jedoch haben alle RPM-Pakete eine VERSION und eine VERÖFFENTLICHUNG.

  Version
Die Zeichenkette VERSION gibt die tatsächliche Version der paketierten Software an.

Diese Zeichenkette besteht aus alphanumerischen ASCII-Zeichen, die optional durch einen Punkt (.), einen Unterstrich (_) und das Plus-Zeichen (+) als Trenner sowie die Operatoren Tilde (~) und Caret (^) unterteilt sein können.

Die Operatoren werden verwendet, um Zeichenketten von Vor- und Nachveröffentlichungsversionen in eine stimmige Aktualisierung abzubilden.

Zu beachten ist, dass der Bindestrich (-) NICHT innerhalb von VERSION oder VERÖFFENTLICHUNG verwendet werden darf, da er als Komponententrennzeichen dient.

  Veröffentlichung
Die VERÖFFENTLICHUNG spiegelt eine Revision innerhalb einer einzelnen Softwareversion wider. Idealerweise ist die VERÖFFENTLICHUNG eine einfache Ganzzahl, die bei Änderungen an einem Paket erhöht wird und bei Änderungen der Softwareversion (auf 1) zurückgesetzt werden sollte.

Technisch betrachtet ist das Format exakt das selbe wie für VERSION.

  Epoche
Die EPOCHE ist eine nichtnegative Ganzzahl, die durch einen Doppelpunkt (:) von der Version getrennt ist. Es ist der wichtigste Teil eines EVR und korrigiert den Versionsvergleich dahingehend, dass eine ältere Version neuer erscheint. Es ist manchmal notwendig, Versionsanomalien zu umgehen, z.B. wenn ein Softwareprojekt sein Versionsschema ändert, aber auch um Paketierungsfehler zu korrigieren.

Wenn die Angabe der EPOCHE weggelassen wird, wird diese implizit als 0 angenommen.

Die Epoche sollte nur als eine Art »letzter Ausweg« angegeben werden. Eine solche Angabe verstößt gegen das Prinzip der geringsten Überraschung, und eine Änderung erfordert die entsprechende Aktualisierung aller zugehörigen versionierten Abhängigkeiten in anderen Paketen.

  Vergleichen
Zwei EVRs werden komponentenweise von links nach rechts verglichen. Die Komponenten werden segmentweise von links nach rechts verglichen. Der Vergleich wird beendet, sobald ein Unterschied auf Segment- oder Komponentenebene festgestellt wird. Wenn sich also beispielsweise schon die Angaben der Epoche unterscheiden, wird der Rest des EVR überhaupt nicht berücksichtigt.

Innerhalb von Komponenten bilden aufeinanderfolgende alphabetische Zeichen und aufeinanderfolgende Zahlen implizite Segmente. Explizite Segmente werden durch Trennzeichen und Operatoren gekennzeichnet. Numerische Segmente werden numerisch verglichen, als Ganzzahlen, wobei führende Nullen ignoriert werden, andernfalls wird ein lexikografischer Vergleich verwendet. Das heißt, abc123 besteht aus zwei Segmenten: abc und 123 und ist trotz unterschiedlicher Darstellung gleich abc0123, abc.123 und abc.000123.

Ungeachtet ihres tatsächlichen Inhalts werden numerische Segmente stets als neuer als alphabetische Segmente angesehen. Wenn sie ansonsten gleich sind, wird die Komponente mit mehr Segmenten als neuer angesehen, und analog dazu ist eine EVR-Angabe mit mehr Komponenten neuer. Zum Beispiel ist 0.0 neuer als 0 und 1.xyz älter als 1.0, aber neuer als 1.

Die Zeichen des Segment-Trennzeichens werden nicht verglichen, so dass sie gegeneinander austauschbar verwendet werden können. Mehrere aufeinanderfolgende Trennzeichen werden so behandelt, als ob nur ein Trennzeichen verwendet würde. Somit ist 1.0 gleich 1+0 und 1+.+0.

Der Tilde-Operator, der für Vorabversionen verwendet wird, bewirkt, dass ein Segment als älter einsortiert wird. Beispielsweise ist 2.0~beta1 älter als 2.0 oder2.0~rc1 und neuer als 1.0. Der Caret-Operator ist im Wesentlichen das Gegenteil der Tilde. Er bewirkt, dass ein Segment nach neueren Versionen sortiert wird und wird für Nachveröffentlichungs-Schnappschüsse verwendet, die zwischen aktuellen Software-Veröffentlichungen existieren. Beispielsweise ist 2.0^150825 neuer als 2.0, aber älter als 2.0.1.

BEISPIELE
123
    Eine einfache, nicht segmentierte Version 123. Neuer als 99, älter als 321.

1.0.1
    Eine segmentierte Versionszeichenkette 1.0.1, wie sie häufig in Softwareprojekten verwendet wird, um die »Haupt-.Neben-.Mikro«-Semantik anzugeben. Neuer als 1.0, älter als 1.0.2.

2.60.1-1
    Erste Veröffentlichung der Version 2.60.1. Neuer als 2.0 oder 2.60, aber älter als 3.0.

1.0-5
    Fünfte Veröffentlichung der Version 1.0, neuer als 1.0 oder 1.0-1, älter als 1.0.1.

5:3.0-1
    Erste Veröffentlichung der Version 3.0, mit Epoche 5. Neuer als 6.0-1 oder 4:6.0-1, älter als 5:3.1-1.

1.0~beta2
    Vorabveröffentlichung beta2 der Version 1.0. Neuer als 0.99 und 1.0~beta1, älter als 1.0.

2.0^20250611
    Nachveröffentlichungs-Schnappschuss 20250611 der Version 2.0. Neuer als 2.0, älter als 2.0.1.

FEHLER
Der Algorithmus des Versionsvergleichs zeigt zuweilen unerwartetes Verhalten – und es gibt diverse »dunkle Ecken«. Diese sind jedoch schwierig zu adressieren, da ein hohes Risiko besteht, existierende Pakete zu beeinträchtigen:

•   Nicht-ASCII-Zeichen werden ignoriert und sind daher gleich: 1.1.α ist gleich 1.1.β und sogar 1.1.ββ. rpmbuild(1) lehnt solche EVRs ab, aber es ist möglich, dass Sie durch API-Nutzung, sehr alte und mit Drittanbieter-Software erstellte Pakete auf solche »unzulässigen« Werte stoßen.
•   Implizite Segmente können trügerisch sein: 1.f ist neuer als 1c.f. Das Ergebnis wird deutlicher, wenn die Segmente explizit gemacht werden: 1.f ist neuer als 1.c.f, da die Segmente einzeln verglichen werden, und c ist lexikografisch weiter hinten als f einsortiert.

rpm(8), rpmbuild(1), rpmsort(1)

http://www.rpm.org/

ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Mario Blättermann <mario.blaettermann@gmail.com> erstellt.

Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 (https://www.gnu.org/licenses/gpl-3.0.html) oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.

Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Übersetzer: debian-l10n-german@lists.debian.org.