Что является более надежным - 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
имеет две ошибки:- 14.04 LTS это не уважает
apt-mark
полностью (см. мой баг 1747189 на панели запуска). - 16.04 LTS держит, которые были установлены
apt-mark
теряются после нажатия на Действия -> Отмена ожидающих действий (см. мою ошибку 1747191 на панели запуска).
но в 18.04 LTS
aptitude
нет таких багов, это здорово.- 14.04 LTS это не уважает
Итак, мой вывод следующий: apt-mark
можно использовать, только если вы устанавливаете / удаляете / обновляете программное обеспечение только с apt-get
иначе вы должны использовать пиннинг (т.е. /etc/apt/preferences.d/
), это более надежно и просто.
Примечание: для предотвращения установки пакета приоритет вывода должен быть отрицательным:
P <0:
предотвращает установку версии
например Pin-Priority: -10
,