Почему некоторые пакеты имеют дополнительные числа перед двоеточием в начале строки версии?

Я только что заметил, что 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?:-)

Другие вопросы по тегам