[[Vorlage(Getestet, general)]] [[Inhaltsverzeichnis()]] {{{#!vorlage Wissen [:Terminal: 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 [:Trusty:Ubuntu 14.04] betrachtet werden. Dieses liegt im Pool des Paketmirrors als Datei '''python_2.7.5-5ubuntu3_amd64.deb''' vor. = Der Name = {{{#!vorlage Tabelle '''python_2.7.5-5ubuntu3_amd64.deb''' }}} Der String gibt den Namen des Programmes an. Hier also: python = Versionierung = == Die Version des Programmes == {{{#!vorlage Tabelle 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 == {{{#!vorlage Tabelle python_2.7.5-'''5'''ubuntu3_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 == {{{#!vorlage Tabelle python_2.7.5-5'''ubuntu3'''_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 == {{{#!vorlage Tabelle 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 [mark]1:[/mark]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 = {{{#!vorlage Tabelle pidgin-data_2.10.0-0ubuntu2_'''all'''.deb }}} Damit ein Paket eindeutig einer [wikipedia: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: {{{#!vorlage Befehl dpkg --compare-versions VERSION1 OPERATOR VERSION2 }}} {{{#!vorlage Tabelle <-2 rowclass="titel"> 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 [:man: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 == {{{#!vorlage Befehl 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. 1. 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. 1. 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: {{{#!vorlage Befehl dpkg-query -W PAKET }}} Bzw. unter allen lokal von [:APT:] erfassten Paketen: {{{#!vorlage Befehl apt-cache policy PAKET }}} Oder bei einer vorliegenden Paketdatei: {{{#!vorlage Befehl dpkg-deb -W PAKET.deb }}} Für `PAKET` ist der entsprechende [#Der-Name Paketname] einzusetzen. = Links = * [http://people.canonical.com/~cjwatson/ubuntu-policy/policy.html/ch-controlfields.html#s-f-Version Ubuntu-Versionierung] {en} * [:Kernel/Linux-Versionsnummern:] * [:Grundlagen_der_Paketerstellung:] # tag: Ubuntu, Programmierung, Paketverwaltung