konwencja wersji pakietów debian

35

Używam debian / Ubuntu i mylę się co do wersji pakietów. Korzystając z dpkg -lpolecenia, otrzymuję:

ii  vim                                 2:7.3.429-2ubuntu2.1                Vi IMproved - enhanced vi editor
ii  vim-common                          2:7.3.429-2ubuntu2.1                Vi IMproved - Common files
ii  vim-runtime                         2:7.3.429-2ubuntu2.1                Vi IMproved - Runtime files
ii  vim-tiny                            2:7.3.429-2ubuntu2.1                Vi IMproved - enhanced vi editor - compact version
ii  virt-what                           1.11-1                              detect if we are running in a virtual machine
ii  w3m                                 0.5.3-5ubuntu1                      WWW browsable pager with excellent tables/frames support
ii  watershed                           6                                   reduce superfluous executions of idempotent command
ii  wget                                1.13.4-2ubuntu1                     retrieves files from the web
ii  whiptail                            0.52.11-2ubuntu10                   Displays user-friendly dialog boxes from shell scripts
ii  whoopsie                            0.1.33                              Ubuntu crash database submission daemon
ii  wimlib9                             1.5.0-1~webupd8~precise             Library to extract, create, modify, and mount WIM files
ii  wimtools                            1.5.0-1~webupd8~precise             Tools to extract, create, modify, and mount WIM files
ii  wireless-tools                      30~pre9-5ubuntu2                    Tools for manipulating Linux Wireless Extensions
ii  wpasupplicant                       0.7.3-6ubuntu2.1                    client support for WPA and WPA2 (IEEE 802.11i)
ii  x11-common                          1:7.6+12ubuntu2                     X Window System (X.Org) infrastructure
ii  x11-utils                           7.6+4ubuntu0.1                      X11 utilities
ii  xauth                               1:1.0.6-1                           X authentication utility
ii  xbitmaps                            1.1.1-1                             Base X bitmaps
ii  xclip                               0.12-1                              command line interface to X selections
ii  xfonts-encodings                    1:1.0.4-1ubuntu1                    Encodings for X.Org fonts
ii  xfonts-utils                        1:7.6+1                             X Window System font utility programs
ii  xkb-data                            2.5-1ubuntu1.3                      X Keyboard Extension (XKB) configuration data
ii  xml-core                            0.13                                XML infrastructure and XML catalog file support
rc  xpdf                                3.02-21build1                       Portable Document Format (PDF) reader
ii  xterm                               271-1ubuntu2.1                      X terminal emulator
ii  xz-lzma                             5.1.1alpha+20110809-3               XZ-format compression utilities - compatibility commands
ii  xz-utils                            5.1.1alpha+20110809-3               XZ-format compression utilities
ii  zabbix-agent                        1:1.8.11-1                          network monitoring solution - agent
ii  zlib1g                              1:1.2.3.4.dfsg-3ubuntu4             compression library - runtime
ii  zlib1g-dev                          1:1.2.3.4.dfsg-3ubuntu4             compression library - development
ii  zsh                                 4.3.17-1ubuntu1                     shell with lots of features

Trzecia kolumna jest version, ale wszystko jest „pomieszane” w sposób, którego nie rozumiem. To znaczy, różne pakiety używają zupełnie innych specyfikacji nazewnictwa.

Oto główne pytania:

  1. Dlaczego niektóre numery wersji mają ubuntuw sobie, a niektóre nie?
  2. Co -~+oznaczają wszystkie specjalne znaki interpunkcyjne ?
  3. Jakie są alpha, buildi dfsg? Czy mogę po prostu z nich korzystać swobodnie?
  4. vimi inne pakiety mają 2:. Co to znaczy?
  5. Jak działa „porównanie wersji”, gdy formaty wersji mogą być tak różne?

Czy ktoś może mi to wyjaśnić? Lub gdzie mogę znaleźć oficjalny dokument?

Z góry dziękuję.

cizixs
źródło
Co masz na myśli mówiąc: „Dlaczego jest w nich ubuntu, a nie ma?”
Ciro Santilli 26 改造 中心 法轮功 六四 事件
1
@ CiroSantilli709 大 抓捕 六四 事件 法轮功 tj. Dlaczego niektóre numery wersji mają sufiks zawierający słowo, ubuntua niektóre nie.
rakslice

Odpowiedzi:

50

Debian Policy Manual ma do powiedzenia na temat tej dziedzinie wersja, która odpowiada na niektóre części swojego pytania:

Format

Format to: [epoch:]upstream_version[-debian_revision]

Oto trzy elementy:

epoka

Jest to pojedyncza (zazwyczaj mała) liczba całkowita bez znaku. Można go pominąć, w którym to przypadku przyjmuje się zero. Jeśli zostanie pominięty, wersja_w górę nie może zawierać dwukropków. Ma on na celu pozostawienie błędów w numerach wersji starszych wersji pakietu, a także schematów numeracji poprzednich wersji pakietu.

wersja upstream_version

To jest główna część numeru wersji. Zazwyczaj jest to numer wersji oryginalnego pakietu („nadrzędnego”), z którego utworzono plik .deb, jeśli ma to zastosowanie. Zwykle będzie on miał taki sam format, jak określony przez autora (autorów); może być jednak konieczne ponowne sformatowanie w celu dopasowania do formatu i schematu porównywania systemu zarządzania pakietami.

Zachowanie porównawcze systemu zarządzania pakietami w odniesieniu do wersji upstream_version opisano poniżej. Część wersja_wersji numeru wersji jest obowiązkowa.

Wersja w górę może zawierać tylko znaki alfanumeryczne [36] oraz znaki "."(kropka), "+"(plus), "-"(łącznik), ":"(dwukropek), "~"(tylda) i powinna zaczynać się cyfrą. Jeśli nie ma wersji debian_revision, łączniki nie są dozwolone; jeśli nie ma epoki, dwukropki nie są dozwolone.

wersja debian

Ta część numeru wersji określa wersję pakietu Debian opartą na poprzedniej wersji. Może zawierać tylko znaki alfanumeryczne i znaki "."(kropka), "+"(plus), "~"(tylda) i jest porównywany w taki sam sposób, jak wersja_w górę .

Jest opcjonalny; jeśli nie jest obecny, to wersja upstream_version nie może zawierać łącznika. Ten format reprezentuje przypadek, w którym oprogramowanie zostało napisane specjalnie jako pakiet Debiana, gdzie źródło pakietu Debian musi zawsze być identyczne z pierwotnym źródłem, a zatem nie jest wymagane żadne wskazanie wersji.

Standardowe jest ponowne uruchamianie wersji debian_revision na 1 za każdym razem, gdy zwiększana jest wersja upstream .

System zarządzania pakietami rozdzieli numer wersji na ostatni łącznik w ciągu (jeśli taki istnieje), aby określić wersję upstream i wersję debian . Brak wersji debian_revision jest równoznaczny z wersją debian_revision wynoszącą 0.

Porównanie

Porównując dwa numery wersji, najpierw porównuje się epokę każdej z nich, następnie wersję upstream_version, jeśli epoka jest równa, a następnie wersję debian_revision, jeśli wersja upstream jest również równa. epoka jest porównywana numerycznie. Części upstream_version i debian_revision są porównywane przez system zarządzania pakietami przy użyciu następującego algorytmu:

Ciągi znaków są porównywane od lewej do prawej.

Najpierw określana jest początkowa część każdego ciągu składającego się całkowicie z niecyfrowych znaków. Te dwie części (z których jedna może być pusta) są porównywane leksykalnie. Jeśli znaleziono różnicę, jest ona zwracana. Porównanie leksykalne to porównanie wartości ASCII zmodyfikowanych w taki sposób, że wszystkie litery są sortowane wcześniej niż wszystkie nieliterowe litery, a tylda sortuje się przed wszystkim, nawet na końcu części. Na przykład, następujące części są w posortowanych od najwcześniej do najpóźniej: ~~, ~~a, ~, pusta część, a.

Następnie określa się początkową część pozostałej części każdego łańcucha, która składa się wyłącznie z cyfr. Wartości liczbowe tych dwóch części są porównywane, a każda znaleziona różnica jest zwracana w wyniku porównania. W tym celu pusty ciąg (który może wystąpić tylko na końcu jednego lub obu porównywanych ciągów wersji) liczy się jako zero.

Te dwa etapy (porównywanie i usuwanie początkowych ciągów innych niż cyfry i początkowych ciągów cyfr) są powtarzane, aż do znalezienia różnicy lub wyczerpania obu ciągów.

Zauważ, że celem epok jest umożliwienie nam pozostawienia błędów w numeracji wersji i radzenia sobie w sytuacjach, w których zmienia się schemat numeracji wersji. Jego celem nie jest radzenie sobie z numerami wersji zawierającymi ciąg liter, których system zarządzania pakietami nie może zinterpretować (takich jak ALPHAlub pre-), lub z niemądrymi porządkami.

ubuntuwskaże, że pakiet został zbudowany specjalnie dla Ubuntu. Te alphai buildstruny wydają się nie mieć żadnego szczególnego znaczenia, lecz dfsgodnosi się do pakietu, który został zmodyfikowany pod kątem zgodności z DFSG .

Flup
źródło
1
Dzięki, to bardzo pomaga. Ale jak działa porównanie wersji? cyfry, litery i ~ +, które są pierwsze, a które ostatnie?
cizixs
Rozszerzyłem cytat w mojej odpowiedzi, aby uwzględnić sekcję instrukcji, która opisuje zachowanie porównawcze.
Flup,
2
Czy jest jakieś narzędzie online, w którym mogę przetestować sposób sortowania ciągów wersji?
Nick
Czy mógłbyś wkleić te same przykłady? Na przykład parsowanie niektórych powyższych wersji na osobne części. Jeśli zarówno wersja upstream, jak i wersja debian mogą zawierać - i +, skąd wiemy, gdzie jest separacja? Również pierwszy link wydaje się być zepsuty.
fersarr
@fersarr Pozostawię przykłady innym, ale naprawiłem link.
Flup
10

XubuntuY część wersji np. 1ubuntu1

  • Xjest wersją pakietu Debian. Większość pakietów Ubuntu opiera się na pakietach Debiana, które są dystrybucją „upstream”.

    Jeśli 0oznacza to, że nie ma pakietu Debian: istnieje tylko w Ubuntu.

    X resetuje się, gdy aktualizowana jest prawdziwa wersja nadrzędna, np. Binutils 2.25 do Binutils 2.26.

    Istnieją wersje Debiana, ponieważ Debian może wprowadzać łatki do pakietów, aby działało to lepiej w systemie Debian lub w wersjach bezpieczeństwa.

    Programiści Debiana oczywiście chętnie łączą łatki, aby uniknąć rozwidlenia.

    Za każdym razem, gdy tworzony jest nowy zestaw poprawek, liczba ta wzrasta.

  • ubuntuY jest opcjonalny.

    Jeśli nie jest obecny, oznacza to, że pakiet Debian był używany bezpośrednio.

    W przeciwnym razie oznacza to, że jest to łatka Yth Ubuntu nałożona na łatkę Debian, podobnie jak Debian na szczycie rzeczywistej wersji.

    Yresetuje się, gdy Xwzrasta.

Jeśli otrzymasz źródło pakietu z:

apt-get source gdb

zobaczysz łatki zastosowane przez Ubuntu i Debiana na:

debian/patches/

Co ciekawsze, możesz sklonować bzri zobaczyć listę wszystkich wersji Ubuntu z tym, co się między nimi zmieniło:

bzr branch ubuntu:gdb
cd gdb
bzr log | less

Zobacz także: https://askubuntu.com/questions/620533/what-is-the-meaning-of-the-xubuntuy-string-in-ubuntu-package-names

Co właściwie reprezentuje Epoka

https://askubuntu.com/questions/441879/why-do-some-packages-have-extra-numbers-on-the-front-of-their-version-string

Ciro Santilli
źródło