Что является более надежным - 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,