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

Из-за ошибки # 693758 Я бы хотел запретить apt-get upgrade и Update Manager обновлять пакет «libgtk2.0-0».

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

468
задан 4 May 2014 в 17:20

13 ответов

Холдинг

Есть четыре способа задержать пакеты: с dpkg, apt, aptitude или dselect.

dpkg

Удержание пакета:

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

Удаление удержания:

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

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

dpkg --get-selections

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

dpkg --get-selections | grep "<package-name>"

apt

Удержание пакета:

sudo apt-mark hold <package-name>

Удаление удержания:

sudo apt-mark unhold <package-name>

Отобразить все пакеты, находящиеся в режиме ожидания:

sudo apt-mark showhold

выбрать

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


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

aptitude

Hold a package:

sudo aptitude hold <package-name>

Remove the hold:

sudo aptitude unhold <package-name>

Locking with Synaptic Package Manager

Go to Synaptic Package Manager (System > Administration > Synaptic Package Manager).

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

Когда вы найдете пакет, выберите его и перейдите в меню Package и выберите Lock Version.

Synaptic menu

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

658
ответ дан 4 May 2014 в 17:20

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

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

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

sudo -i
echo "wine hold" | dpkg --set-selections

Чтобы снять блокировку:

sudo -i
echo "wine install" | dpkg --set-selections
44
ответ дан 4 May 2014 в 17:20

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

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

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

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

4
ответ дан 4 May 2014 в 17:20

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

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

Предотвращение обновления Firefox

sudo apt-mark hold firefox firefox-locale-*

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

sudo apt-mark unhold firefox firefox-locale-*
9
ответ дан 4 May 2014 в 17:20

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

echo package_name hold | dpkg --set-selections

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

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

16
ответ дан 4 May 2014 в 17:20

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

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

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

42
ответ дан 4 May 2014 в 17:20

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

5
ответ дан 4 May 2014 в 17:20

Установите synaptic , используя sudo apt-get install synaptic .

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

enter image description here

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

enter image description here

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

22
ответ дан 4 May 2014 в 17:20

Если у вас установлен Synaptic, вы можете выбрать пакет и использовать меню Пакет -> Заблокировать версию, чтобы предотвратить его обновление.

Вы можете установить Synaptic с помощью sudo apt-get install synaptic. Я лично считаю его более полезным, чем Центр программного обеспечения ... опять же, я придерживаюсь старой школы. :)

1
ответ дан 4 May 2014 в 17:20

Вы можете использовать aptitude «конкретное переопределение», например:

aptitude reinstall ~i oracle-java8-jre:

Это однократное использование (не сохраняется для будущих переустановок), сохранить конкретное переопределение, чтобы переустановить все пакеты в вашей системе, но не oracle- java8-jre.

Если вы используете переопределение для сохранения, пакет на мгновение перейдет в состояние сохранения, aptitude не будет пытаться его установить.

Очень хорошо, если вы считаете, что ваша система каким-то образом была взломана так как вы можете переустановить все с помощью одной перфокарты.

2
ответ дан 4 May 2014 в 17:20

См. Ошибки # 75332 , # 158981 и # 72806 .

Сводка состоит в том, что удержание на уровне apt-get / aptitude не запускает статус удержания в dpkg (особенно см. Ошибку 72806), а update-manager считывает статус из dpkg.

обходной путь. запускается как root: эхо «удержание пакета» | dpkg --set-selections

3
ответ дан 4 May 2014 в 17:20

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

Сначала сохраните текущее состояние, поэтому вы можете отменить:

dpkg --get-selections > current_selections.txt

Затем, чтобы задержать все пакеты:

dpkg --get-selections | sed -r "s/\tinstall/hold/" |dpkg --set-selections

Наконец, если вы хотите вернуться к предыдущему состоянию:

dpkg --set-selections < current_selections.txt

Одним из вариантов использования этого может быть создание виртуальной машины или снимка Amazon AMI для перехода из среды контроля качества в производственную среду.

0
ответ дан 4 May 2014 в 17:20

Добавление деталей в комментарии @ soger относительно 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-driver-all

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

Package: va-driver-all
Pin: release *
Pin-Priority: -1
3
ответ дан 4 May 2014 в 17:20

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

Похожие вопросы: