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

331

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

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

    
задан Ivan 23.12.2010 в 18:29
источник

12 ответов

484

Холдинг

Существует четыре способа сдерживания пакетов: с 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>"

склонный

Удерживайте пакет:

sudo apt-mark hold <package-name>

Снимите трюм:

sudo apt-mark unhold <package-name>

Dselect

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

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

уместность

Удерживайте пакет:

sudo aptitude hold <package-name>

Снимите трюм:

sudo aptitude unhold <package-name>

Блокировка с помощью диспетчера пакетов Synaptic

Перейдите в диспетчер синаптических пакетов (System > Administration > диспетчер пакетов Synaptic).

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

Когда вы найдете пакет, выберите его и перейдите в меню Пакет и выберите Блокировать версию .

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

    
ответ дан hhlp 23.12.2010 в 19:04
источник
43

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

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

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

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

Чтобы удалить трюм:

sudo -i
echo "wine install" | dpkg --set-selections
    
ответ дан Panther 08.12.2011 в 21:15
28

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

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

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

    
ответ дан soger 22.07.2013 в 13:13
19

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

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

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

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

    
ответ дан Bruno Pereira 08.12.2011 в 21:06
16

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

echo package_name hold | dpkg --set-selections

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

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

    
ответ дан RobotHumans 05.02.2011 в 02:18
5

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

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

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

sudo apt-mark hold firefox firefox-locale-*

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

sudo apt-mark unhold firefox firefox-locale-*
    
ответ дан rubo77 19.11.2017 в 08:45
4

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

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

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

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

    
ответ дан Allan 23.12.2010 в 18:35
3

Все, что вам когда-либо хотелось узнать о пакетах «держать» и «привязывать» к определенным версиям: Ссылка

    
ответ дан Jeff Ferland 23.12.2010 в 22:09
3

Смотрите ошибки # 75332 , # 158981 и # 72806 .

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

обходной путь запускается как root: echo "package hold" | dpkg --set-selections

    
ответ дан jasper 26.11.2012 в 08:24
1

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

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

ответ дан dinchamion 08.12.2011 в 21:06
1

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

aptitude reinstall ~i oracle-java8-jre:

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

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

Очень хорошая вещь, если вы считаете, что ваша система была скомпрометирована каким-то образом.

    
ответ дан cabonamigo 18.05.2017 в 18:27
0

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

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

dpkg --get-selections > current_selections.txt

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

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

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

dpkg --set-selections < current_selections.txt

Одним из вариантов использования может быть создание моментального снимка VM или Amazon AMI для переноса из QA в производственную среду.

    
ответ дан JVW 14.01.2015 в 20:46