Почему некоторые пакеты имеют дополнительные числа перед двоеточием в начале строки версии?
Я только что заметил, что Wine (и ряд других пакетов) изменили схему управления версиями примерно так:
1:1.6.2-0ubuntu3
Я все понимаю после 1:
... а что значит 1:
Ссылаться на?
Кажется, он не отражает основную версию. Глядя на список ожидающих обновлений, есть версии, такие как: 2:4.1.3...
и есть много пакетов без #:
префикс.
В чем дело?
2 ответа
От man deb-version
:
NAME deb-version - Debian package version number format SYNOPSIS [epoch:]upstream-version[-debian-revision] DESCRIPTION Version numbers as used for Debian binary and source packages consist of three components. These are: epoch This is a single (generally small) unsigned integer. It may be omitted, in which case zero is assumed. If it is omitted then the upstream-version may not contain any colons. It is provided to allow mistakes in the version numbers of older versions of a package, and also a package's previous version numbering schemes, to be left behind.
Итак, этот дополнительный номер (в вашем случае 1
) относится к компоненту эпохи, который может быть опущен, и в этом случае предполагается 0. И так, если вы видите строку версии, которая выглядит как 1.6.2-0ubuntu3
Вы можете думать, что на самом деле это выглядит так 0:1.6.2-0ubuntu3
, Чем это полезно и как это происходит: оно позволяет оставить ошибки в номерах версий более старых версий пакета, а также в схемах нумерации предыдущих версий пакета. Чтобы лучше понять, внимательно посмотрите на следующие пояснительные абзацы из Руководства по политике Debian - Управляющие файлы и их поля:
При сравнении двух номеров версий сначала сравниваются эпохи каждого из них, затем upstream_version, если эпоха равна, и затем debian_revision, если upstream_version также равна. эпоха сравнивается численно.
А также:
Обратите внимание, что цель эпох состоит в том, чтобы позволить нам оставить ошибки в нумерации версий и справиться с ситуациями, когда меняется схема нумерации версий. Он не предназначен для работы с номерами версий, содержащими строки букв, которые система управления пакетами не может интерпретировать (например,
ALPHA
или жеpre-
) или с глупыми порядками.
Это эпоха. Он переопределяет версию при определении, какой из двух пакетов новее:
От deb-version
справочная страница:
epoch This is a single (generally small) unsigned integer. It may be
omitted, in which case zero is assumed. If it is omitted then
the upstream-version may not contain any colons.
It is provided to allow mistakes in the version numbers of older
versions of a package, and also a package's previous version
numbering schemes, to be left behind.
Конкретный пример
Вот конкретный пример, чтобы максимально увеличить скорость вашего понимания.
Предположим, что у исходного пакета были версии:
2019.1
2019.2
1.2
(исходный пакет решил случайным образом изменить схему именования релизов)1.3
Затем Debian рассматривает их как:
0:2019.1
(широко известный как2019.1
потому что ведущий0:
можно опустить)0:2019.2
1:1.2
(Debian перемещает эпоху с 0 на 1, чтобы иметь дело с новой схемой именования)1:1.3
Таким образом, мы по-прежнему можем четко знать порядок версий из строки версии пакета или вообще различать их, если исходный пакет совершает кардинальный грех фактического повторного использования старого выпуска имени в новой схеме.
Можете ли вы представить себе, какие адские вещи пришлось приспособить разработчикам Debian?:-)