Как предотвратить обновление определенного пакета?

Потому что ошибка #693758 Я бы хотел предотвратить apt-get upgrade и диспетчер обновлений от обновления пакета "libgtk2.0-0".

Как этого можно достичь?

Удерживание

Существуют различные способы удержания пакетов: с помощью dpkg, apt, dselect, aptitude или Синаптический.

dpkg

Поставьте посылку на удержание:

echo "<package-name> hold" | sudo dpkg --set-selections

Снимите фиксатор:

echo "<package-name> install" | sudo dpkg --set-selections

Отображение статуса всех ваших пакетов:

dpkg --get-selections

Отображение статуса отдельного пакета:

dpkg --get-selections <package-name>

Показать все пакеты на удержании:

dpkg --get-selections | grep "\<hold$"

пригодный

Держите пакет:

sudo apt-mark hold <package-name>

Снимите фиксатор:

sudo apt-mark unhold <package-name>

Показать все пакеты на удержании:

sudo apt-mark showhold

dselect

С помощью dselect войдите в экран выбора [S], найдите пакет, который вы хотите сохранить в его текущем состоянии, и нажмите = или H. Изменения вступят в силу сразу после выхода из экрана выбора [S].


Следующие подходы ограничены тем, что блокировка / удержание пакета в aptitude или synaptic не влияет на apt-get/apt.

склонность

Держите пакет:

sudo aptitude hold <package-name>

Снимите фиксатор:

sudo aptitude unhold <package-name>

Блокировка с помощью Synaptic Package Manager

Идти к Synaptic Менеджер пакетов (Система > Администрирование > Synaptic Package Manager).

Нажмите кнопку поиска и введите название пакета.

Когда вы найдете нужный пакет, выберите его и перейдите к Пакет меню и выберите Версия блокировки.

Synaptic menu

Этот пакет теперь не будет отображаться в диспетчере обновлений и не будет обновляться.

Я искал то же самое, и после долгих исследований я обнаружил, что, используя следующий синтаксис, вы можете запретить одну конкретную версию, но разрешить следующее обновление:

Package: compiz-plugins-mainPin: version 1:0.9.7.0~bzr19-0ubuntu10.1Pin-Priority: -1

Это входит в /etc/apt/preferences файл.

Чтобы поставить пакет "foo" на удержание:

echo "foo hold" | dpkg --set-selections

В вашем случае мы собираемся приостановить производство вина:

sudo -iecho "wine hold" | dpkg --set-selections

Чтобы снять фиксатор:

sudo -iecho "wine install" | dpkg --set-selections

Устанавливать synaptic с помощью sudo apt-get install synaptic.

Запуск с помощью gksudo synaptic и в поле поиска найдите пакет, который вы хотите заблокировать, т.е.: gedit

enter image description here

В меню пакета выберите Версия блокировки:

enter image description here

И это все, версия, установленная в данный момент на момент блокировки, останется установленной даже во время обновления.

Предотвращение установки пакета называется "удержанием пакета", и это очень просто сделать:

эхо имя_пакета удержание | dpkg --набор-выбор

...где *package_name* - это имя пакета, установку которого вы хотите запретить.

Примечание: приведенная выше команда предполагает права суперпользователя. Другими словами, вам, вероятно, потребуется ввести sudo su перед его запуском.

С некоторых пор apt-get заменяется на apt, так, например, я хочу запретить Firefox обновляться до версии выше 56, потому что много дополнений, таких как "Группы вкладок" больше не работайте с новым Firefox 57 (см. "Обновление WebExtensions").

Можно хранить более одного пакета с помощью одной команды и использовать подстановочные знаки.

Запретить Firefox обновлять

sudo apt-mark hold firefox firefox-locale-*

Если вы решите распаковать их позже, это будет команда:

sudo apt-mark unhold firefox firefox-locale-*

Все, что вы когда-либо хотели знать о "удержании" и "привязке" пакетов к определенным версиям: https://help.ubuntu.com/community/PinningHowto

Я synaptic, вы можете заморозить версию определенного пакета, я не уверен на 100%, изменит ли это apt-get, но это определенно остановит диспетчер обновлений.

Чтобы заморозить пакет, выберите его в synaptic, затем откройте меню пакета и выберите заморозить версию.

Надеюсь, это поможет

редактировать: Это вопрос 16668 имеет дело с аналогичной ситуацией

Видите ошибки #75332, #158981 и #72806.

Итог заключается в том, что удержание на уровне apt-get / aptitude не вызывает статус удержания в dpkg (особенно см. ошибку 72806), а диспетчер обновлений считывает статус из dpkg.

обходной путь выполняется от имени root:echo "package hold" | dpkg --set-selections

Добавление деталей в @согеркомментарии относительно Ubuntu 16.04.

Ubuntu 16.04 по умолчанию не имеет существующего файла /etc/apt/preferences. Если у вас его сейчас нет, просто создайте новый файл и заполните его строфой, как описано выше @soger, чтобы исключить данный пакет и его зависимости из обновлений.

После этого запустите apt update и ты GTG. :0)

Например, у меня есть сервер Ubuntu 16.04.5 LTS со встроенной видеокартой Intel и картой NVidia. Используется только карта NVidia. Сервер также использует драйверы CUDA. У меня была проблема, когда apt продолжал настаивать

va-драйвер-все

(Драйверы Intel) требовалось обновление, но он не мог определить, какую версию установить. Это сводило меня с ума, и мне все равно не нужны были драйверы Intel. Я ввел этот текст в файл настроек и сбросил apt, проблема решена.

Package: va-driver-allPin: release *Pin-Priority: -1

@George Edison - Существует также функция удержания пакета, которая позволяет вам не обновлять пакет. таким образом, хранение пакета в основном означает, что вы говорите менеджеру пакетов сохранить текущую версию, несмотря ни на что. Это полезно, если более поздняя версия текущей рабочей программы выходит из строя после обновления. (вы не можете хранить пакет, который никогда не был установлен, также см. Мой вопрос тот же)… я проверил это прямо сейчас - видите, он сказал: "отключите пакеты от автоматического обновления`

@hhlp: Но этот вопрос касается пакета, который никогда не был установлен.