Что является более надежным - apt-mark или APT-pin (/etc/apt/preferences.d/pin) для блокировки версии?

Обычно на моем Ubuntu 16.04 LTS я блокирую версии пакетов с функциональностью APT-pin.

Например, если я хочу закрепить meld до версии 1.5.3-1ubuntu1 создаю следующий пин-файл:

cat <<EOF | sudo tee /etc/apt/preferences.d/pin-meld
Package: meld
Pin: version 1.5.3-1ubuntu1
Pin-Priority: 1337
EOF

Этот файл применяет настройки всей системы: apt, apt-get, aptitude и инструменты GUI, такие как synaptic а также muon уважает это.

Я знаю другой механизм - apt-mark, Давайте предположим. Моя отправная точка - я вручную установил meld_1.5.3-1ubuntu1, его пин-код удален.

$ apt-mark showhold
$ apt-cache policy meld 
meld:
  Installed: 1.5.3-1ubuntu1
  Candidate: 3.14.2-1
  Version table:
     3.14.2-1 500
        500 http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages
        500 http://archive.ubuntu.com/ubuntu xenial/universe i386 Packages
 *** 1.5.3-1ubuntu1 100
        100 /var/lib/dpkg/status

Тогда держу установленную версию.

$ sudo apt-mark hold meld
meld set on hold.

$ dpkg -l | grep meld
hi  meld                                          1.5.3-1ubuntu1                               all          graphical tool to diff and merge files

APT-знак показывает, что он находится в режиме ожидания. Но apt-cache policy meld без изменений

$ apt-cache policy meld 
meld:
  Installed: 1.5.3-1ubuntu1
  Candidate: 3.14.2-1
  Version table:
     3.14.2-1 500
        500 http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages
        500 http://archive.ubuntu.com/ubuntu xenial/universe i386 Packages
 *** 1.5.3-1ubuntu1 100
        100 /var/lib/dpkg/status

apt-get upgrade сообщает, что meld хранится обратно:

$ sudo apt-get upgrade 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
  meld
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.

Но если я запускаю aptitude в интерактивном режиме у меня есть meld в обновляемых пакетах:

Actions  Undo  Package  Resolver  Search  Options  Views  Help
C-T: Menu  ?: Help  q: Quit  u: Update  g: Preview/Download/Install/Remove Pkgs
aptitude 0.7.4
--\ Upgradable Packages (1)
  --\ gnome - The GNOME Desktop Environment (1)
    --\ universe - Unsupported Free Software. (1)                                                                                                    
ih    meld    1.5.3-1ubuntu1 3.14.2-1      

и если я случайно выберу Действия -> Отменить ожидающие действия, удержание будет удалено.

Насколько я могу понять synaptic игнорируемых apt-mark маркировки, его функциональность Lock Version работает по-другому.
meld отображается здесь как Установлено (обновляемо). Кнопка " Отметить все обновления" не выбирает ее автоматически, но пакет может быть случайно обновлен программой " Mark for Upgrade".

Муон работает так же, как с apt-mark, Но что интересно, его опция Lock at Current Version записывает пин-файл в /etc/apt/preferences.d/meld,

Правильно ли я понимаю, что APT-пин более надежен, чем apt-mark?

1 ответ

Решение

Да, пиннинг надежнее, чем apt-mark,

Что я обнаружил:

  • последние 12-14 лет Synaptic использует собственный файл закрепления (/var/lib/synaptic/ предпочтения) - см. ошибку 42178 на панели запуска. Для всей системы можно установить символическую ссылку между /etc и синаптические

    sudo ln -s /etc/apt/preferences.d/synaptic /var/lib/synaptic/preferences
    

    так что это обходной путь, блокировка версий в Synaptic не рекомендуется (этот файл не читается apt-get а также aptitude).

  • Muon использует системные пин-файлы для каждого приложения в /etc/apt/preferences.d,

  • aptitude имеет две ошибки:

    1. 14.04 LTS это не уважает apt-mark полностью (см. мой баг 1747189 на панели запуска).
    2. 16.04 LTS держит, которые были установлены apt-mark теряются после нажатия на Действия -> Отмена ожидающих действий (см. мою ошибку 1747191 на панели запуска).

    но в 18.04 LTS aptitude нет таких багов, это здорово.

Итак, мой вывод следующий: apt-mark можно использовать, только если вы устанавливаете / удаляете / обновляете программное обеспечение только с apt-get иначе вы должны использовать пиннинг (т.е. /etc/apt/preferences.d/ ), это более надежно и просто.


Примечание: для предотвращения установки пакета приоритет вывода должен быть отрицательным:

P <0:
предотвращает установку версии

например Pin-Priority: -10,

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