Versionsnummern von Ubuntu-Paketen

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Inhaltsverzeichnis
  1. Der Name
  2. Versionierung
    1. Die Version des Programmes
    2. Die Debian-Version
    3. Die Ubuntu-Version
    4. Epoch
  3. Die Architektur
  4. Vergleich von Paketversionen
    1. Beispiel
    2. Vergleich im Detail
  5. Paketversionen abfragen
  6. Links

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. Ein Terminal öffnen, optional

Dieser Artikel beschreibt die Bedeutung der Versionsnummer und die Benennung der Debian-Pakete in Ubuntu. Der Dateiname eines Debian-Pakets in Ubuntu besteht in der Regel aus fünf Teilen (ausgeschlossen der Dateiendung): Dem Namen des Programmes, der Version des Programmes, der Version des Paketes in Debian, der Version des Paketes in Ubuntu und der Architektur.

Als Beispiel kann das Python-Paket in Ubuntu 14.04 betrachtet werden. Dieses liegt im Pool des Paketmirrors als Datei python_2.7.5-5ubuntu3_amd64.deb vor.

Der Name

python_2.7.5-5ubuntu3_amd64.deb

Der String gibt den Namen des Programmes an. Hier also: python

Versionierung

Die Version des Programmes

python_2.7.5-5ubuntu3_amd64.deb

Diese Nummer besagt, was für eine Version des Programmes in den Paketquellen ist (auf englisch wird sie "upstream version" genannt). Hier ist es also Version 2.7.5 von Python.

Die Debian-Version

python_2.7.5-5ubuntu3_all.deb

Diese Nummer gibt die Version des Debian-Paketes an (auf englisch wird sie "debian revision" genannt). Existiert also die gleiche Version (in diesem Beispiel 2.7.5) des Programmes bereits in den Debianpaketquellen, wird die Nummer des entsprechenden Debianpaketes angegeben. Aus dem Beispiel lässt sich ablesen, dass es in den Debianpaketquellen ein Paket mit der Bezeichnung python-2.7.5-5 zu dem Zeitpunkt der Ubuntupaketisierung gab. Die Nummer wird angegeben, da viele Ubuntupakete aus Debianpaketen entwickelt werden und die meisten Steuerungsdateien aus den Debianpaketen kommen.

Existiert keine Debian-Version dieses Programmes, lautet diese Nummer immer 0. Die Nummer ist ebenfalls 0 wenn ein Ubuntuentwickler eine neuere Version des Programmes paketiert, als in den Debianpaketquellen ist.

Die Ubuntu-Version

python_2.7.5-5ubuntu3_all.deb

Dieses Suffix zeigt die Ubuntuversion eines Paketes an (auf englisch wird sie "ubuntu revision" genannt). Es handelt sich hier also um die dritte Version des Debianpaketes in den Ubuntupaketquellen. Eine neue Version eines Paketes wird zum Beispiel hochgeladen, weil es im alten irgendwelche Fehler gab. Die Zählung beginnt immer bei 1. Es gibt also kein Paket, welches auf ubuntu0 endet.

Fehlt dieses Suffix komplett, deutet dies darauf hin, dass es keinerlei Veränderungen an dem von Debian übernommenen Paket gab.

Epoch

pidgin-data_2.10.0-0ubuntu2_all.deb

Auf den ersten Blick sieht die Versionierung dieses Pakets geläufig aus. Betrachtet man dieses Paket allerdings direkt, z.B. mit dpkg-deb -W pidgin-data_2.10.0-0ubuntu2_all.deb, stellt man folgende Eigenart fest:

pidgin-data	1:2.10.0-0ubuntu2

Manchmal kann es vorkommen, dass ein Paket vor der Versionsnummer des Programmes noch eine Ziffer und einen Doppelpunkt stehen hat. Dies nennt man "Epoch". Die Epoch-Nummer wird verwendet um Fehler in der Versionierung zu beheben oder um sicherzustellen, dass immer diese Version eines Paketes installiert bleibt auch wenn sich die Upstream-Version ändern sollte.

Die Architektur

pidgin-data_2.10.0-0ubuntu2_all.deb

Damit ein Paket eindeutig einer Prozessorarchitektur zugeordnet werden kann und somit eine Verwechslung unterschiedlich kompilierter Binaries ausgeschlossen wird, findet eine Bezeichnung dieser vor der Dateiendung .deb statt. Am häufigsten sind die Architekturen amd64 und i386 für 64- und 32-Bit, sowie eine allgemeingültige Angabe all. Pakete mit dieser Angabe können mit allen Prozessoren genutzt werden, da nur architekturunabhängige Dateien, wie Bilder, Dokumentation, Übersetzungen, Konfigurationsdateien u.ä. bereitgestellt werden.

Vergleich von Paketversionen

Um zwei Versionsstrings zu vergleichen, kann man direkt dpkg mit der Option --compare-versions verwenden:

dpkg --compare-versions VERSION1 OPERATOR VERSION2 

Wichtigste Versionsoperatoren
Versionsoperator Bedeutung
eq gleiche Version
gt größere Version
ge größere oder gleiche Version
lt kleinere Version
le kleinere oder gleiche Version

Alternativ können u.a. noch die in den debian/control-Dateien verwendeten Operatoren =, >>, >=, <<, <= verwendet werden. Siehe dazu die Manpage dpkg(1).

Der Befehl erzeugt keine Ausgabe, sondern man muss nach dem Rückgabewert fragen. Bei Erfolg der Vergleiches, ist dieser 0, ansonsten 1.

Beispiel

dpkg --compare-versions "1.3.6-1ubuntu0.2" "ge" "1.3.6-1ubuntu0.2+de" && echo "höher oder gleich" || echo "niedriger" 

niedriger

Somit ist die Version 1.3.6-1ubuntu0.2 nicht höher oder gleich der Version 1.3.6-1ubuntu0.2+de, sondern niedriger.

Vergleich im Detail

Der Vergleich von Paketversionen folgt einem bestimmten Algorithmus. Es wird von links nach rechts verglichen und in der Reihenfolge Epochversion, Upstreamversion, Debian- und Ubuntuversion:

  1. Vergleich der Epochversionsziffern.

  2. Vergleich der Upstreamversionszeichenfolge:

    • Lexikaler Vergleich nach modifizierten ASCII-Werten, sodass Buchstaben aus dem Alphabet vor allen anderen Zeichen angeordnet sind, mit Ausnahme der Tilde "~", die vor allen anderen Zeichen eingeordnet ist.

  3. Vergleich der Debian- und Ubuntuversionszeichenfolge (getrennt durch letzten Trennstrich "-" in Versionsstring) (lexikaler Vergleich wie bei Upstreamversion).

Paketversionen abfragen

Wer wissen möchte, welche Version eines Pakets für welche Ubuntu-Version zur Verfügung steht, kann dies mit einem Browser über das Internet abfragen:

http://packages.ubuntu.com/PAKET

Alternativ kann man diese Abfrage auch in einem Terminal unter den bereits installierten Paketen durchführen:

dpkg-query -W PAKET 

Bzw. unter allen lokal von APT erfassten Paketen:

apt-cache policy PAKET 

Oder bei einer vorliegenden Paketdatei:

dpkg-deb -W PAKET.deb 

Für PAKET ist der entsprechende Paketname einzusetzen.