«Следующие пакеты были сохранены:» Почему и как я могу это решить?

877

Я только что добавил PPA-репозиторий для версии разработки GIMP, но я получаю эту ошибку:

$ apt-get update && apt-get upgrade
...
The following packages have been kept back:
  gimp gimp-data libgegl-0.0-0 libgimp2.0

Почему и как я могу решить эту проблему, чтобы я мог использовать последнюю версию вместо той, которая у меня есть сейчас?

jfoucher
источник
17
Строго говоря, я бы сказал, что это предупреждение, а не ошибка.
Казарк

Ответы:

905

Согласно статье на debian-administration.org ,

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

Осторожное решение 1:

Согласно ответу Пабло , вы можете запустить sudo apt-get --with-new-pkgs upgrade, и он установит скрытые пакеты.

Преимущество этого состоит в том, что вы не помечаете скрытые пакеты как «установленные вручную», что может вызвать дальнейшее вмешательство пользователя (см. Комментарии).

Если решение Пабло работает для вас, пожалуйста, подпишите его. Если нет, пожалуйста, прокомментируйте, что пошло не так.

Осторожное решение 2:

Осторожное решение - бежать sudo apt-get install <list of packages kept back>. В большинстве случаев это даст скрытым пакетам то, что им нужно для успешного обновления.

Агрессивное решение:

Более агрессивным решением является запуск sudo apt-get dist-upgrade, который заставит установить эти новые зависимости.

Но dist-upgrade может быть довольно опасно . В отличие от обновления, он может удалять пакеты для разрешения сложных ситуаций зависимости. В отличие от вас, APT не всегда достаточно умен, чтобы знать, могут ли эти добавления и удаления нанести ущерб.

Так что, если вы оказались в месте, где «осторожное решение» не работает, dist-upgrade может работать… но вам, вероятно, лучше узнать немного больше о APT и решить проблемы с зависимостями «вручную», установив и удалив пакеты на индивидуальной основе.

Подумайте об этом, как починить машину ... если у вас есть время и вам пригодится гаечный ключ, вы немного успокоитесь, прочитав и выполнив ремонт самостоятельно. Если вам повезет, вы можете отвезти свою машину к двоюродной сестре dist-upgradeи надеяться, что она знает свои вещи.

Майкл Креншоу
источник
180
Поскольку это общепринятый ответ, он действительно нуждается в обновлении, чтобы предупредить об использовании dist-upgradeв стабильной системе, как указывалось во многих других ответах ниже. Лично я думаю, что есть более простой / безопасный ответ, который нужно продвигать: apt-get install <список pkgs>
Cas
7
Кас, мне просто добавить, что запускать dist-upgrade в стабильной системе может быть опасно? Почему именно это опасно? (Честно говоря, я не знаю, насколько это хорошо.)
Майкл Креншоу,
17
Существует ответ Server Fault, который объясняет dist-upgrade более подробно. Я думаю, что стоит просто уточнить (не опасно как таковое), что он может обновить всю систему, которая может оказаться за пределами того, что пользователь ожидает / хочет, т.е. в примере с OP они задаются вопросом, почему gimp сдерживается.
Cas
19
Обратите внимание, что sudo apt-get dist-upgradeтакже можно удалить пакеты. Следовательно, лучше всегда проверять список изменений, которые будут внесены, прежде чем соглашаться с ними, при запуске sudo apt-get dist-upgrade.
Элия ​​Каган,
6
@EliahKagan Могу ли я добавить, что даже apt-get upgradeможно удалить пакеты? Это всегда будет происходить, если в противном случае возникнет конфликт версий. Подумайте о llvm3.6против llvm3.6v5(с "v5" означает, что он был скомпилирован gcc 5). Эти два не могут сосуществовать , только один из них может быть сохранен в системе. Так что yes dist-upgradeможет также удалить некоторые пакеты, но не только dist-upgradeэто будет сделано; при определенных обстоятельствах upgrade, также.
синтаксическая ошибка
500

Всякий раз, когда вы получаете от команды apt-get upgradeсообщение

The following packages have been kept back:

затем обновить один или все скрытые пакеты без обновления дистрибутива (вот что dist-upgradeделает, если я правильно помню) , выполнив команду:

apt-get install <list of packages kept back>

это решит скрытые проблемы и попросит установить дополнительные пакеты и т. д., как было объяснено другими ответами.

user88285
источник
3
Когда пакеты сохраняются таким образом, и я вручную apt-get upgrade <list of packages>, если я повторяю apt-get upgrade, он перечислит рассматриваемые пакеты как ненужные и которые я могу использовать apt autoremoveдля их удаления, что я делаю, и затем один последний, apt-get upgradeи они больше не перечислены как сдержался ... Очень странно. есть идеи?
cram2208
apt-get installТакже удаляет ли пакеты пакеты, когда это необходимо для разрешения проблемных зависимостей, или вам нужно будет выполнить отдельную apt-get removeкоманду для выполнения этой части процесса обновления?
Майкл Креншоу
@ cram2208 Я считаю, что это ожидаемое поведение. Пакеты, которые были «автоматически установлены и [...] больше не требуются», являются предыдущими версиями обновленных пакетов, которые больше не нужны. apt autoremoveзатем удаляет эти неиспользуемые зависимости.
Алекс
3
Если для обновления потребуется установить новый пакет, он будет «сохранен». Сначала рассмотрите возможность использования: sudo apt-get --with-new-pkgs upgradeчто не
эффектов, так
@ mac9416 да, это так.
Ярно
174

apt-get dist-upgrade опасен для стабильной окружающей среды,

  1. неправильная настройка source.list и вы в итоге получите неработающую Ubuntu.
  2. Вы можете обновить все приложение до версии, которая вам не нужна.

Вариант использования: обновление ядра отложено, вы просто хотите обновить ядро, не хотите обновлять весь дистрибутив.

Лучший способ обработать сохраненную упаковку:

sudo aptitude

Если вы сохранили обратно пакет, вы должны увидеть Обновляемые пакеты вверху списка.

  • Хит + в этом списке
  • Хит г дважды
  • Ответьте на вопросы debconf, если спросите
  • Нажмите возврат, чтобы продолжить
  • Нажмите Q
  • Нажмите да

Ваш сохраненный пакет установлен.

Майкл Креншоу
источник
34
apt-get dist-upgradeопасно только если у вас плохие репозитории в /etc/apt/sources.list*. Хорошо знать, что dist-upgradeобновляются все пакеты, но с репозиториями по умолчанию это должно быть хорошо. Не использовать dist-upgradeможет быть опасно, так как вы можете пропустить обновления безопасности.
Flimm 27.12.12
6
apt-get dist-upgradeМожно удалять и добавлять пакеты, но это не очень опасно. Любая команда установки пакета может привести к серьезному повреждению, если у вас есть проблемы в вашем sources.listфайле ! Обычная apt-get upgradeкоманда установит любой пакет из любого программного источника, который включен; dist-upgradeне уникален в этом смысле. Кроме того, использование aptitudeдля выполнения какой-либо операции вообще, по крайней мере на amd64, намного более опасно, чем запуск apt-get dist-upgrade, в выпуске, где ошибка 831768 не исправлена.
Элия ​​Каган
Для меня было проще (локальная машина с запущенным X) просто открыть synaptic и запустить обновление пакета. По какой-то причине это, похоже, вообще не появилось там, где вы описали в синаптике.
DJVS
3
Такжеsudo aptitude safe-upgrade
мсанфорд
146

Почему бы вам не попробовать этот Unix SE ответ :

sudo apt-get --with-new-pkgs upgrade

Это позволяет устанавливать новые пакеты. Он сообщит вам, какие пакеты будут установлены, и подскажет, прежде чем делать установку.

aptКоманда ( дружественная альтернатива для apt-get) разделяет эту опцию.

Использование apt install <pkg>вместо этого пометит pkg как «установленный вручную» !! Чтобы снова пометить его как «автоматически установленный» apt-mark auto <pkg>(см. Также подкоманду showmanual). Подробнее об этом ответе .

Пабло А
источник
20
+1, потому что это не имеет побочного эффекта от того, что пакеты помечаются как установленные вручную.
Ctrl-Alt-Delor
1
Примечание для тех, кто когда-либо читал мой комментарий выше: не иметь побочного эффекта маркировки как установленной вручную - это хорошо. Мне нравится этот ответ.
Ctrl-Alt-Delor
1
Да. apt-mark auto <pkg>необходимо только пометить пакет как автоматически устанавливаемый ( здесь страница руководства ).
Пабло А
11
По какой-то причине sudo apt-get --with-new-pkgs upgradeвсе еще показывает пакеты как "хранящиеся обратно". Нет сообщения об ошибке.
Франклин Ю
2
Просто хочу добавить, что для многих современных экземпляров сервера Debian 9.6 это было абсолютно безопасное решение без каких-либо проблем. Спасибо вам за это, Пабло, поскольку я, к счастью, заранее протестировал другие варианты в промежуточных средах и смог администрировать многие серверы в соответствии со стандартами безопасности благодаря включению --with-new-pkgs с гораздо более чистыми результатами для общего управления пакетами в будущем. Действительно, за этот ответ UNIX SE нужно проголосовать!
Юлий
34

Обычно есть две причины, по которым вы можете увидеть это сообщение.

Если обновление программы (через sudo apt-get upgrade) приведет к добавлению или удалению пакетов, программа будет отложена. Вы можете использовать sudo apt-get dist-upgradeв этом случае, который затем предложит добавить или удалить дополнительные программы.

Это довольно часто и обычно не проблема. Иногда (особенно во время альфа- dist-upgradeверсии Ubuntu) a предлагает удалить множество других программ, и в этом случае вы, вероятно, захотите отменить ее.

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

jbowtie
источник
5
Есть ли способ определить, нужна ли удерживаемому пакету зависимость, которую нельзя установить, или она удерживается, потому что другие пакеты зависят от нее. У меня много удерживаемых пакетов, и я считаю, что оба этих случая могут применяться в моей системе.
Джейк
Спасибо, вторая причина была проблема для меня. Даже apt-get dist-upgradeотказался устанавливать его. Проверка пакета с помощью aptitude показала, что это зависит от пакета, который недоступен. Я думаю, мне придется подождать.
JLH
23

Вы также можете попробовать:

sudo aptitude safe-upgrade,

Это безопаснее, чем full-upgrade(первоначально называлось dist-upgrade), потому что «пакеты не будут удалены, если они не используются».

От man aptitude:

безопасное обновление

Обновляет установленные пакеты до последней версии. Установленные пакеты не будут удалены, если они не используются /.../ Пакеты, которые в данный момент не установлены, могут быть установлены для разрешения зависимостей, если не указана опция командной строки --no-new-installs.

Afilu
источник
21

Скорее всего, эти пакеты задерживаются, потому что их установка создаст несоответствия зависимостей. Это может произойти либо потому, что вы используете архивы в активной разработке, ppas, либо потому, что используемое вами зеркало не полностью обновлено.

В последнем случае просто подождите, когда зависимости будут разрешены, он будет установлен в следующий раз.

Редактировать:

Существует еще одна возможность, пакеты могут быть задержаны, если их задержать или они закреплены.

txwikinger
источник
На чем вы основываете эту вероятность, не зная, запускал ли он обновление apt-get или apt-get dist-upgrade (или эквиваленты aptitude)?
андол
это самая
частая
Согласовано. Вы, вероятно, должны подождать и проверить свои apt_preferences. Это часто вызывается архивами разработки, в которых зависимости и доступные пакеты меняются очень быстро. Подождите, пока они успокоятся, и вам это вообще может не понадобиться dist-upgrade. Если вы все еще хотите dist-upgrade, посмотрите на НОВЫЕ пакеты, которые будут установлены, и пакеты, которые нужно удалить, прежде чем идти дальше.
Уманг
Это мой случай, потому что я получаю сообщение «сдержано», используя dist-upgrade
Postadelmaga
В тех случаях , когда эта проблема обусловлена messup с меткими предпочтениями (скалывания), я нашел Переустановку сохраненных пакетов помогла мне: apt-get install --reinstall <packages>.
Таниус
9

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

Если вы запускаете:

sudo apt-get install gimp gimp-data libgegl-0.0-0 libgimp2.0

Затем новые версии должны быть установлены вместе с их новой зависимостью.

Джон Лоуренс Аспден
источник
Обновляет определенные пакеты (и их зависимости) без обязательств (рисков) dist-upgrade.
Джон Ми
8

Это сработало для меня

sudo aptitude full-upgrade
Singh
источник
Даже aptitude upgradeработал на меня.
Бибхас
Я пользуюсь Ubuntu 14.04и у меня нет aptitudeкомандной строки
ахмед хамди
apt-get dist-upgradeдал мне то же сообщение, но это решило это для меня. У меня был пакет, который ломал обновление другого пакета. Мне не нужен тот, который я установил, поэтому aptitude full-upgradeдал мне возможность удалить его, чтобы он мог обновить все остальное.
f.ardelian
6

Я обнаружил, что aptitude лучше выполняет обновление пакетов, если версии отличаются незначительно. У меня была такая ситуация:

me@compy:/etc/apt$ apt-cache policy gzip
gzip:
  Installed: 1.3.5-15
  Candidate: 1.3.5-15+etch1
  Version table:
     1.3.5-15+etch1 0
        500 http://archive.debian.org etch/main Packages
 *** 1.3.5-15 0
        100 /var/lib/dpkg/status

Это заставило apt-get задержать обновление, но aptitude обновил его просто отлично. Я не уверен, какой алгоритм используется, чтобы определить, должен ли пакет обновляться или нет. Полагаю, у этих двоих была одна и та же версия, но разный «классификатор» Но в любом случае, apt-get не обновит его, а aptitude.

Александр Торстлинг
источник
4

В моем случае сдерживались пакеты, связанные с linux-заголовками и ядром. Я пришел к этому, пытаясь решить проблему с красным восклицательным знаком в области уведомлений и невозможностью обновления пакетов.

Чтобы решить эту проблему, мне не пришлось использовать ни dist-upgrade, ни ручную установку apt-get xxx .

То, что я сделал и помогло, было просто и чисто :

sudo apt-get update
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get upgrade

Мне пришлось вручную подтвердить обновление Grub и его конфигурацию.

Потом я просто поработал некоторое время с компьютером, а затем снова появилось стандартное диалоговое окно обновления, включающее раздел «Ubuntu base» с ядром и прочим. Обновление было выполнено без каких-либо проблем, и я больше не вижу задержанных пакетов.

Кроме того, очень важно помнить, что эти обновления * buntu, включая обновления ядра, чувствительны к гибернации - я сталкивался с этой проблемой несколько раз и всегда решаю ее, перезагружая машину и выполняя описанные выше действия.

Так что, может быть, этого будет достаточно ?!

(описанная здесь ситуация связана с моим Xubuntu 15.10 в конце декабря 2015 г.)

crysman
источник
3

Я столкнулся с этой проблемой, когда было выпущено новое ядро. (Возможно, потому что у меня включены нестабильные обновления.) Я обнаружил, что самый простой способ выполнить установку - это графический установщик Ubuntu ( update-manager).

Kazark
источник
2

Я столкнулся с этой проблемой, используя synaptic, потому что она зависла, и, чтобы попытаться это исправить, я перезагрузился и попытался снова.

Затем я обнаружил информативное сообщение как часть пакета с некоторыми инструкциями после установки для меня.

Мне пришлось нажать « детали », а затем « q » для выхода после прочтения сообщения, и затем все пошло нормально.

Эллиптический вид
источник
2

Это выглядит как правильный способ переустановить сохраненный обратно пакет:

apt-get install --reinstall libjpeg-progs

По крайней мере, это работало для меня, когда libjpeg-progsзастрял после обновления с Ubuntu 14.04 до 16.04. Я уверен, что вы можете сделать то же самое с любым другим приложением, например gimp.

Источник: https://ubuntuforums.org/showthread.php?t=2321702&p=13476183#post13476183

Стефан Хеннингсен
источник
1
Вы могли бы сделать это и без --reinstall.
Ярно
Самое смешное, что он удаляет пакет libjpeg-turbo-progs.
Ярно
1

На самом деле вам нужен переключатель, dselect-upgradeкоторый устанавливает / удаляет зависимости для конкретного набора пакетов.

Джонни
источник
1

Я прочитал все посты и обнаружил, что есть много интересных объяснений. Я пытался все из них, но не дал никаких результатов полностью. У меня проблема с утилитами mysql, которые я не смог обновить. Обновление было предложено системой. Итак, я хочу показать некоторые шаги, чтобы сделать это. Конечно, я повторю в некоторых моментах все вышеупомянутые посты. Вот моя ошибка, да я нашел ее по уже существующим постам, но что мне делать дальше? введите описание изображения здесь

Следующий шаг:

sudo apt-get --purge remove mysql-utilities

Результаты, которые мы можем видеть на изображении ниже. Я удаляю пакет и проверяю это командой:

sudo apt-get -f install

Результаты - отлично! Позже я правильно установил эту новую версию пакета. введите описание изображения здесь

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

Однажды, извините, когда я повторил в некоторых местах другие посты.

Василий Ляшкевич
источник
5
Пожалуйста, не используйте скриншоты для терминального текста, так как это делает его неисследимым для Google и нечитаемым для некоторых людей. Вместо этого вставьте текст терминала в свой ответ, выделите этот текст и нажмите {}кнопку в редакторе, чтобы правильно отформатировать его.
Чай Т. Рекс
@ ChaiT.Rex Спасибо за замечания, я приму это во внимание на будущее.
Василий Ляшкевич
1

Ubuntu 18.04 предоставляет новый, оптимизированный синтаксис, с помощью aptкоторого можно использовать вместо apt-get.

sudo apt full-upgrade

sudo apt upgradeиспользуется для установки доступных обновлений всех пакетов, установленных в настоящее время в системе, из источников, настроенных с помощью sources.list (5). Новые пакеты будут установлены, если это необходимо для удовлетворения зависимостей, но существующие пакеты никогда не будут удалены. Если для обновления пакета требуется удалить установленный пакет, обновление для этого пакета не выполняется.

sudo apt full-upgrade выполняет функцию обновления, но удаляет установленные в данный момент пакеты, если это необходимо для обновления системы в целом.

л - знак л
источник