“Следующие пакеты были удержаны:” Почему и как мне это исправить?

Вопрос или проблема

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

$ apt-get update && apt-get upgrade
...
Следующие пакеты были удержаны:
  gimp gimp-data libgegl-0.0-0 libgimp2.0

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

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

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

(Обратите внимание, что это не единственная причина, по которой вы можете видеть сообщение “пакеты были удержаны”. Другой причиной может быть то, что фазовые обновления могут быть включены, и обновления еще не были выпущены для вашего компьютера.)

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

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

Это имеет то преимущество, что удержанные пакеты не помечаются как “установленные вручную”, что может потребовать больше вмешательства пользователя в будущем (см. комментарии).

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

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

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

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

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

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

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

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

Когда бы вы ни получили от команды apt-get upgrade сообщение

Следующие пакеты были удержаны:

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

apt-get install <список удержанных пакетов>

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

Смотрите также: Почему использовать apt-get upgrade вместо apt-get dist-upgrade?

Я ответил на аналогичный вопрос здесь, объясняя немного больше о причинах, стоящих за этой проблемой.


Попробуйте этот ответ Unix SE:

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

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

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

Использование apt install <pkg> вместо этого пометит pkg как “установленный вручную”!! Чтобы снова пометить его как “установленный автоматически”, используйте apt-mark auto <pkg> (см. также подкоманду showmanual). Более подробная информация в этом ответе.

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

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

Случай использования: обновление ядра удержано, вы просто хотите обновить ядро, не хотите обновлять всю дистрибуцию.

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

sudo aptitude

Если у вас есть удержанный пакет, вы должны увидеть Upgradable Packages в верхней части списка.

  • Нажмите + на этом списке
  • Нажмите g дважды
  • Ответьте на вопросы debconf, если будет спрошено
  • Нажмите Enter для продолжения
  • Нажмите Q
  • Нажмите yes

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

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

Надеюсь, это поможет кому-то избежать слепого выполнения apt dist-upgrade в отчаянии!

Почему пакет удержан?

Насколько я знаю, есть 3 категории причин, почему пакеты удерживаются во время apt upgrade.

1) Он помечен как удержанный

apt-mark может сделать это:

sudo apt-mark hold <пакет>

hold используется для пометки пакета как удержанного, что предотвратит автоматическую установку, обновление или удаление пакета.

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

apt-mark showhold
apt-mark showhold <пакет>

Чтобы снять удержание с пакета и разрешить его обновление:

sudo apt-mark unhold <пакет>

2) apt обнаруживает изменение зависимости

Лучшая авторитативная информация, которую я смог найти по этому вопросу, помечена как устаревшая, но в ней говорится:

[Удержано] означает, что есть новые версии этих пакетов, которые не будут установлены по какой-то причине. Возможные причины — это сломанные зависимости (пакет, от которого он зависит, не имеет доступной версии для загрузки) или новые зависимости (пакет стал зависеть от новых пакетов с момента последней версии)

Это скажет вам текущие и кандидатные версии обновления пакета:

$ apt list <пакет>

# пример вывода:
vim/bionic-updates,bionic-security 2:8.0.1453-1ubuntu1.4 amd64 [обновляемый с: 2:8.0.1453-1ubuntu1.3]
N: Есть 2 дополнительных версии. Пожалуйста, используйте переключатель '-a', чтобы увидеть их.

С текущей версией (например, 2:8.0.1453-1ubuntu1.3) и новой версией (например, 2:8.0.1453-1ubuntu1.4), мы можем выяснить изменённые зависимости с помощью apt show:

apt show <пакет>=<старая версия> <пакет>=<новая версия>

# пример:
apt show vim=2:8.0.1453-1ubuntu1.3 vim=2:8.0.1453-1ubuntu1.4

(или просто используйте apt show -a, чтобы просмотреть все версии непосредственно, но, на мой взгляд, это усложняет сравнение версий)

Важные части — это списки пакетов Depends и Recommends. Если в этих списках есть новые пакеты в новой версии удержанного пакета, apt не обновит его автоматически.

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

  1. Чтобы обновить пакет и установить любые новые “Рекомендуемые” пакеты (т.е. как если бы они были установлены впервые с помощью apt install <пакет>, используйте --with-new-pkgs:

    sudo apt upgrade --with-new-pkgs <пакет>
    

    (Совет: добавьте --dry-run, чтобы увидеть, что произойдет перед выполнением)

  2. Чтобы обновить пакет без установки любых нововведенных “Рекомендуемых” пакетов, используйте --only-upgrade.

    sudo apt install --only-upgrade <пакет>
    

3) Фазовые обновления

PhasedUpdates

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

Вы можете проверить наличие фазовых обновлений с помощью:

sudo apt -o APT::Get::Always-Include-Phased-Updates=true upgrade --dry-run

Много дополнительной информации здесь: Что такое фазовые обновления и почему Ubuntu использует их?

Кейс: обновление пакета docker-ce

Обновление пакета docker-ce на Ubuntu 18.04 — это то, что привело меня сюда в первую очередь, поэтому я подумал, что было бы интересно иметь полный конкретный пример.

$ sudo apt upgrade
Чтение списков пакетов... Готово
Построение дерева зависимостей
Чтение информации о состоянии... Готово
Расчет обновления... Готово
Следующие пакеты были удержаны:
  docker-ce
0 обновлено, 0 вновь установлено, 0 для удаления и 1 не обновлено.

$ apt list docker-ce
Перечисление... Готово
docker-ce/bionic 5:20.10.3~3-0~ubuntu-bionic amd64 [обновляемый с: 5:19.03.12~3-0~ubuntu-bionic]
N: Есть 34 дополнительных версии. Пожалуйста, используйте переключатель '-a', чтобы увидеть их.

Хорошо, давайте посмотрим, что удерживает docker-ce:

$ apt show docker-ce=5:19.03.12~3-0~ubuntu-bionic docker-ce=5:20.10.3~3-0~ubuntu-bionic
Пакет: docker-ce
Версия: 5:19.03.12~3-0~ubuntu-bionic
Приоритет: опционально
Секция: администрирование
Содержатель: Docker <[email protected]>
Размер при установке: 107 МБ
Зависит: docker-ce-cli, containerd.io (>= 1.2.2-3), iptables, libseccomp2 (>= 2.3.0), libc6 (>= 2.8), libdevmapper1.02.1 (>= 2:1.02.97), libsystemd0
Рекомендует: aufs-tools, ca-certificates, cgroupfs-mount | cgroup-lite, git, pigz, xz-utils, libltdl7, apparmor
Конфликтует: docker (<< 1.5~), docker-engine, docker-engine-cs, docker.io, lxc-docker, lxc-docker-virtual-package
Заменяет: docker-engine
Домашняя страница: https://www.docker.com
Размер загрузки: 22.5 МБ
APT-Manual-Installed: да
APT-Sources: https://download.docker.com/linux/ubuntu bionic/stable amd64 Пакеты
Описание: Docker: движок контейнеров приложений с открытым исходным кодом
 Docker — это продукт, который позволяет вам создавать, отправлять и запускать любое приложение как
 легковесный контейнер
 .
 Контейнеры Docker являются аппаратно-независимыми и платформонезависимыми. Это означает, что
 они могут работать где угодно, от вашего ноутбука до крупнейшего облачного вычислительного инстанса и
 всего, что между ними — и они не требуют от вас использования определенного
 языка, фреймворка или системы упаковки. Это делает их отличными строительными блоками
 для развертывания и масштабирования веб-приложений, баз данных и серверных услуг без
 зависимости от определенного стека или поставщика.

Пакет: docker-ce
Версия: 5:20.10.3~3-0~ubuntu-bionic
Приоритет: опционально
Секция: администрирование
Содержатель: Docker <[email protected]>
Размер при установке: 121 МБ
Зависит: containerd.io (>= 1.4.1), docker-ce-cli, iptables, libseccomp2 (>= 2.3.0), libc6 (>= 2.8), libdevmapper1.02.1 (>= 2:1.02.97), libsystemd0
Рекомендует: apparmor, ca-certificates, docker-ce-rootless-extras, git, libltdl7, pigz, xz-utils
Предлагает: aufs-tools, cgroupfs-mount | cgroup-lite
Конфликтует: docker (<< 1.5~), docker-engine, docker-engine-cs, docker.io, lxc-docker, lxc-docker-virtual-package
Заменяет: docker-engine
Домашняя страница: https://www.docker.com
Размер загрузки: 24.8 МБ
APT-Sources: https://download.docker.com/linux/ubuntu bionic/stable amd64 Пакеты
Описание: Docker: движок контейнеров приложений с открытым исходным кодом
 Docker — это продукт, который позволяет вам создавать, отправлять и запускать любое приложение как
 легковесный контейнер
 .
 Контейнеры Docker являются аппаратно-независимыми и платформонезависимыми. Это означает, что
 они могут работать где угодно, от вашего ноутбука до крупнейшего облачного вычислительного инстанса и
 всего, что между ними — и они не требуют от вас использования определенного
 языка, фреймворка или системы упаковки. Это делает их отличными строительными блоками
 для развертывания и масштабирования веб-приложений, баз данных и серверных услуг без
 зависимости от определенного стека или поставщика.

Версия 5:20.10.3~3-0~ubuntu-bionic добавила docker-ce-rootless-extras как новую рекомендуемую зависимость. Мне бы хотелось, чтобы apt был более полезным и просто предложил установить его или что-то в этом роде, вместо того чтобы оставлять меня со старой версией… В любом случае, вот 2 возможных исправления (с --dry-run для иллюстративных целей):

$ sudo apt upgrade --with-new-pkgs --dry-run docker-ce
Чтение списков пакетов... Готово
Построение дерева зависимостей
Чтение информации о состоянии... Готово
Расчет обновления... Готово
Следующие пакеты будут обновлены:
  docker-ce
1 обновлено, 0 вновь установлено, 0 для удаления и 0 не обновлено.
Установить docker-ce [5:19.03.12~3-0~ubuntu-bionic] (5:20.10.3~3-0~ubuntu-bionic Docker CE:bionic [amd64])
Конфликт docker-ce (5:20.10.3~3-0~ubuntu-bionic Docker CE:bionic [amd64])

$ sudo apt install --only-upgrade --dry-run docker-ce
Чтение списков пакетов... Готово
Построение дерева зависимостей
Чтение информации о состоянии... Готово
Следующие дополнительные пакеты будут установлены:
  docker-ce-rootless-extras
Рекомендуемые пакеты:
  slirp4netns
Следующие НОВЫЕ пакеты будут установлены:
  docker-ce-rootless-extras
Следующие пакеты будут обновлены:
  docker-ce
1 обновлено, 1 вновь установлено, 0 для удаления и 0 не обновлено.
Установить docker-ce [5:19.03.12~3-0~ubuntu-bionic] (5:20.10.3~3-0~ubuntu-bionic Docker CE:bionic [amd64])
Установить docker-ce-rootless-extras (5:20.10.3~3-0~ubuntu-bionic Docker CE:bionic [amd64])
Конфликт docker-ce (5:20.10.3~3-0~ubuntu-bionic Docker CE:bionic [amd64])
Конфликт docker-ce-rootless-extras (5:20.10.3~3-0~ubuntu-bionic Docker CE:bionic [amd64])

Вы также можете попробовать aptitude. Сначала установите его:

sudo apt-get install aptitude -y

затем:

sudo aptitude safe-upgrade

Это безопаснее, чем full-upgrade (изначально названный dist-upgrade), потому что “пакеты не будут удалены, если они не неактивны”.

Из man aptitude:

safe-upgrade

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

Это происходило больше с тех пор, как я обновился до Ubuntu 22.04 jammy.

Причина этого обычно фазовые обновления. (Спасибо @louis-waweru за ссылку.)

  1. Решение заключается в том, чтобы игнорировать эти сообщения “были удержаны”. Когда администрация репозитория сочтет эти пакеты достаточно безопасными для установки, вы их получите.

  2. Если вам абсолютно необходимо получить эти обновления, вы можете создать файл /etc/apt/apt.conf.d/99-Phased-Updates с содержимым:

Update-Manager::Always-Include-Phased-Updates "1";
APT::Get::Always-Include-Phased-Updates "1";

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

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

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

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

Ubuntu 18.04 LTS Bionic и более новые версии Ubuntu … предоставляют упрощенный синтаксис через apt full-upgrade, который работает как apt-get dist-upgrade.

sudo apt full-upgrade

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

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

Примечание: sudo apt full-upgrade остается на текущей дистрибуции.

Смотрите: apt man страница: 18.04, 20.04, 22.04, 22.10

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

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

Правка:

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

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

sudo aptitude full-upgrade

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

Если вы выполните:

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

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

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

me@compy:/etc/apt$ apt-cache policy gzip
gzip:
  Установлено: 1.3.5-15
  Кандидат: 1.3.5-15+etch1
  Таблица версий:
     1.3.5-15+etch1 0
        500 http://archive.debian.org etch/main Пакеты
 *** 1.3.5-15 0
        100 /var/lib/dpkg/status

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

Обновление/апгрейд не работает
[последний ответ]

Удержанные пакеты (…) в данный момент находятся в фазовых обновлениях.

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

Ничего страшного. Ваша система НЕ сломана.

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

apt-get install --reinstall libjpeg-progs

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

Источник

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

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

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

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

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

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

Затем я просто поработал с компьютером какое-то время, и затем стандартный диалог обновления снова появился, включающий раздел “Базовый Ubuntu” с ядром и связанным. Обновление прошло без каких-либо проблем, и я больше не вижу удержанных пакетов.

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

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

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

Хотя другие ответы предупреждают, что apt dist-upgrade может удалить программы, обратите внимание, что вы можете просто выполнить команду, а затем ответить “нет” на вопрос “Хотите продолжить?”, чтобы исследовать, что сделает apt.


После обновления Raspberry Pi с buster на bullseye я получил сообщение от apt

Следующие пакеты были удержаны:
  sshfs

Так что я начал искать сообщение об ошибке, попал на эту страницу, прочитал несколько ответов и затем выполнил

$ apt-get dist-upgrade
Чтение списков пакетов... Готово
Построение дерева зависимостей... Готово
Чтение информации о состоянии... Готово
Расчет обновления... Готово
Следующие пакеты будут УДАЛЕНЫ:
  fuse
Следующие НОВЫЕ пакеты будут установлены:
  fuse3 libfuse3-3
Следующие пакеты будут обновлены:
  sshfs
1 обновлено, 2 вновь установлено, 1 для удаления и 0 не обновлено.
Необходимо получить 147 кБ архивов.
После этой операции будет использовано 196 кБ дополнительного дискового пространства.
Хотите продолжить? [Y/n] 

В этот момент стало очевидно, что fuse был заменен на fuse3, и я рад, что позволил apt его удалить.


Ваша ситуация может быть другой, но выполнение (потенциального) dry-run даст вам более детальную информацию и, возможно, ответит на вопрос “почему”.

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

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

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

sudo apt-get --purge remove mysql-utilities

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

sudo apt-get -f install

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

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

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

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

РЕШЕНИЕ: Затем я обнаружил информативное сообщение в составе пакета с некоторыми инструкциями по постустановке для меня.

Мне нужно было нажать “подробнее“, а затем ‘q‘, чтобы выйти после прочтения сообщения, и затем все пошло нормально.

Для меня и нескольких комментаторов к ответу Пабло,

sudo apt-get --with-new-pkgs upgrade  # Без эффекта

не оказало эффекта. Мне не важно, чтобы мой пакет был помечен как установленный вручную, поэтому я сделал следующее, используя удерживаемый пакет docker-ce в качестве примера:

sudo apt install docker-ce  # Ответьте нет, не устанавливайте

Отмените установку, ответив n. Обратите внимание на новые пакеты, которые могли бы быть установлены, и установите их:

sudo apt install docker-ce-rootless-extras

Теперь apt upgrade обновит ранее удерживаемый пакет:

sudo apt upgrade  # Обновляет docker-ce

Я всегда выполняю dist-upgrade на своем рабочем ноутбуке, потому что мне нравятся последние новшества, это не do-release-upgrade, которое на самом деле обновляет до новой версии,

На ubuntu 22.04 у меня была эта проблема и с

ubuntu@ubuntu-inspiron-5482:~$ sudo apt dist-upgrade 
Чтение списков пакетов... Готово
Построение дерева зависимостей... Готово
Чтение информации о состоянии... Готово
Расчет обновления... Готово
Следующие пакеты были удержаны:
  python3-distupgrade ubuntu-release-upgrader-core ubuntu-release-upgrader-gtk
0 обновлено, 0 вновь установлено, 0 для удаления и 3 не обновлено.

и

ubuntu@ubuntu-inspiron-5482:~$ sudo apt-get --with-new-pkgs upgrade
Чтение списков пакетов... Готово
Построение дерева зависимостей... Готово
Чтение информации о состоянии... Готово
Расчет обновления... Готово
Следующие пакеты были удержаны:
  python3-distupgrade ubuntu-release-upgrader-core ubuntu-release-upgrader-gtk
0 обновлено, 0 вновь установлено, 0 для удаления и 3 не обновлено.

Таким образом, оба решения из самого высоко оцененного ответа не сработали.
Что сработало — это установка пакета, он фактически имел два других в качестве зависимостей:

sudo apt install ubuntu-release-upgrader-core 

После этого 3 пакета были установлены, и все актуально.
Интересно, почему они были удержаны, я не заметил разницы в системе, но, возможно, есть проблема с новым релизом, запускающим инструменты.

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

Эта одна строка автоматически решает проблему для меня:

sudo apt-get install --only-upgrade `sudo apt-get upgrade | awk 'BEGIN{flag=0} /Следующие пакеты были удержаны:/ { flag=1} /^ /{if (flag) print}'`

Это запускает минимальное обновление с флагом –only-upgrade, так что не должно добавлять никаких ненужных пакетов к зависимости.

Как: вышеуказанная строка ищет сообщение “Следующие пакеты были удержаны” в apt update и, если оно найдено, передает список в apt-get install --only-upgrade

Примечание: будьте очень осторожны с любыми изменениями в вашей системе. Выполнение команд с apt может оставить вашу систему сломанной!

Я всегда выполняю apt update a&& apt upgrade, просто чтобы удостовериться, что обновление стабильно.

Некоторые недавно установленные пакеты могут требовать перезагрузки перед установкой новых (и последние из них удержаны), например:

$ sudo apt list --upgradable
Перечисление... Готово
distro-info-data/jammy-updates,jammy-updates 0.52ubuntu0.2 all [обновляемый с: 0.52ubuntu0.1]
gnome-shell-common/jammy-updates,jammy-updates 42.5-0ubuntu1 all [обновляемый с: 42.4-0ubuntu0.22.04.1]
gnome-shell/jammy-updates 42.5-0ubuntu1 amd64 [обновляемый с: 42.4-0ubuntu0.22.04.1]
grub-efi-amd64-bin/jammy-updates 2.06-2ubuntu10 amd64 [обновляемый с: 2.06-2ubuntu7]
grub-efi-amd64-signed/jammy-updates 1.182~22.04.1+2.06-2ubuntu10 amd64 [обновляемый с: 1.180+2.06-2ubuntu7]

Следующие пакеты были удержаны:
  clang-9 cpp g++ gcc gcc-10-base kali-linux-default lib32gcc-s1 lib32stdc++6 libatomic1 libcc1-0
  libclang-common-9-dev libclang-cpp9 libgcc-s1 libgfortran5 libgomp1 libitm1 libllvm9 liblsan0 libobjc4
  libpython2-stdlib libquadmath0 libstdc++6 libtsan0 libubsan1 linux-headers-amd64 llvm-9 llvm-9-dev llvm-9-runtime
  llvm-9-tools python2 python2-minimal python3-chardet python3-pandas python3-pandas-lib

apt upgrade; apt update просто продолжали возвращаться к этому и не устанавливали ничего. Также был огромный блок, который нужно было автозавершить, и это прошло нормально, но все равно не установило удержанные пакеты. Я пробовал простые варианты 1 и 2 в начале этой темы, но они не работали.

Так что я просто выполнил apt install /весь этот список удержанных пакетов/, и все начало работать.

На самом деле, я никогда раньше не сталкивался с этой проблемой. Я просто подумал, что это странно, чтобы apt update; apt upgrade не сработали, но apt install и затем копирование этого всего списка прошло без проблем, и теперь все работает хорошо.

И я извинюсь сейчас. Я не использовал дистрибутив ubuntu (я только что осознал это). Я на самом деле обновлял установку Kali, когда это все произошло. Я никогда не видел ничего подобного на Ubuntu.

Дайте мне знать, если я должен удалить этот пост (всё ещё новенький).

Рон

После do-release-upgrade ваши сторонние или частные репозитории (такие как PPA) могут быть отключены. Это может остановить обновление пакета, поскольку он больше не может найти необходимые зависимости и/или старые пакеты конфликтуют с новыми пакетами.

Просмотрите ваши файлы .list, обычно в /etc/apt/sources.list.d, чтобы увидеть, что нужно повторно включить.

Затем выполните apt update и попробуйте снова.

Это случилось со мной после do-release-upgrade на Google VM.

В моем случае я получил сообщение, потому что я запустил sudo apt upgrade без предварительного запуска sudo apt update.

$ sudo apt upgrade
Чтение списков пакетов... Готово
Построение дерева зависимостей... Готово
Чтение информации о состоянии... Готово
Расчет обновления... Готово
Следующие пакеты были удержаны:
  alsa-ucm-conf fonts-opensymbol libreoffice-base-core libreoffice-calc libreoffice-common libreoffice-core libreoffice-draw
  libreoffice-gnome libreoffice-gtk3 libreoffice-help-common libreoffice-help-en-gb libreoffice-help-en-us libreoffice-impress
  libreoffice-l10n-en-gb libreoffice-l10n-en-za libreoffice-math libreoffice-style-colibre libreoffice-style-elementary
  libreoffice-style-yaru libreoffice-uiconfig-calc libreoffice-uiconfig-common libreoffice-uiconfig-draw
  libreoffice-uiconfig-impress libreoffice-uiconfig-math libreoffice-uiconfig-writer libreoffice-writer libuno-cppu3
  libuno-cppuhelpergcc3-3 libuno-purpenvhelpergcc3-3 libuno-sal3 libuno-salhelpergcc3-3 python3-uno uno-libs-private ure
0 обновлено, 0 вновь установлено, 0 для удаления и 34 не обновлено.

Запуск sudo apt-get --with-new-pkgs upgrade alsa-ucm-conf fonts-opensymbol libreoffice-base-core libreoffice-calc libreoffice-common libreoffice-core libreoffice-drawlibreoffice-gnome libreoffice-gtk3 libreoffice-help-common libreoffice-help-en-gb libreoffice-help-en-us libreoffice-impresslibreoffice-l10n-en-gb libreoffice-l10n-en-za libreoffice-math libreoffice-style-colibre libreoffice-style-elementarylibreoffice-style-yaru libreoffice-uiconfig-calc libreoffice-uiconfig-common libreoffice-uiconfig-drawlibreoffice-uiconfig-impress libreoffice-uiconfig-math libreoffice-uiconfig-writer libreoffice-writer libuno-cppu3libuno-cppuhelpergcc3-3 libuno-purpenvhelpergcc3-3 libuno-sal3 libuno-salhelpergcc3-3 python3-uno uno-libs-private ure по предложению других ответов не помогло.

$ sudo apt-get --with-new-pkgs upgrade alsa-ucm-conf fonts-opensymbol libreoffice-base-core libreoffice-calc libreoffice-common libreoffice-core libreoffice-drawlibreoffice-gnome libreoffice-gtk3 libreoffice-help-common libreoffice-help-en-gb libreoffice-help-en-us libreoffice-impresslibreoffice-l10n-en-gb libreoffice-l10n-en-za libreoffice-math libreoffice-style-colibre libreoffice-style-elementarylibreoffice-style-yaru libreoffice-uiconfig-calc libreoffice-uiconfig-common libreoffice-uiconfig-drawlibreoffice-uiconfig-impress libreoffice-uiconfig-math libreoffice-uiconfig-writer libreoffice-writer libuno-cppu3libuno-cppuhelpergcc3-3 libuno-purpenvhelpergcc3-3 libuno-sal3 libuno-salhelpergcc3-3 python3-uno uno-libs-private ure
Чтение списков пакетов... Готово
Построение дерева зависимостей... Готово
Чтение информации о состоянии... Готово
E: Не удалось найти пакет libreoffice-drawlibreoffice-gnome
E: Не удалось найти пакет libreoffice-impresslibreoffice-l10n-en-gb
E: Не удалось найти пакет libreoffice-style-elementarylibreoffice-style-yaru
E: Не удалось найти пакет libreoffice-uiconfig-drawlibreoffice-uiconfig-impress
E: Не удалось найти пакет libuno-cppu3libuno-cppuhelpergcc3-3

Я запустил sudo apt update перед sudo apt upgrade, и это сработало.

$ sudo apt update
Hit:1 https://dl.winehq.org/wine-builds/ubuntu mantic InRelease
Hit:2 http://it.archive.ubuntu.com/ubuntu mantic InRelease                                                                      
Get:3 http://it.archive.ubuntu.com/ubuntu mantic-updates InRelease [109 kB]                                                     
Hit:4 http://security.ubuntu.com/ubuntu mantic-security InRelease
Hit:5 http://it.archive.ubuntu.com/ubuntu mantic-backports InRelease
Get:6 http://it.archive.ubuntu.com/ubuntu mantic-updates/main amd64 Packages [331 kB]
Get:7 http://it.archive.ubuntu.com/ubuntu mantic-updates/main i386 Packages [168 kB]
Get:8 http://it.archive.ubuntu.com/ubuntu mantic-updates/universe amd64 Packages [296 kB]
Get:9 http://it.archive.ubuntu.com/ubuntu mantic-updates/universe i386 Packages [123 kB]
Загружено 1,027 кБ за 1 с (792 кБ/с)                       
Чтение списков пакетов... Готово
Построение дерева зависимостей... Готово
Чтение информации о состоянии... Готово
34 пакета могут быть обновлены. Запустите 'apt list --upgradable', чтобы увидеть их.

Для очень специфичного варианта этой проблемы, когда проприетарные драйверы nvidia обновляются наполовину до новой версии, я переустановил их с помощью менеджера драйверов. Чтобы объяснить ситуацию: я застрял наполовину между 440 и 450 версиями драйвера, и целый пакет пакетов libnvidia 440 был удержан. Это привело к тому, что мой kubuntu застрял на экране загрузки после grub. Чтобы попасть в систему, мне пришлось добавить “nomodeset” к команде grub, как описано здесь.

В этом конкретном случае

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

не оказало эффекта. Однако, я смог переустановить драйвера через управление дополнительными драйверами. В моем случае, на Kubuntu, я начал

sudo kubuntu-driver-manager

На Ubuntu вы можете достичь того же через Настройки системы > Система > Программы и обновления > Дополнительные драйверы

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

Ответ или решение

Когда вы видите сообщение «Следующие пакеты были оставлены» после выполнения команды apt-get upgrade, это означает, что некоторые пакеты не были обновлены из-за изменений в зависимостях или других факторов. Рассмотрим причины и способы решения этой проблемы.

Причины, по которым пакеты могут быть оставлены

  1. Изменения в зависимостях:
    Когда программное обеспечение обновляется и для его новой версии требуются новые зависимости, apt может не выполнить автоматическое обновление. Это особенно актуально, если новая версия требует добавления пакета, что может вызвать конфликты с уже установленными версиями.

  2. Задержка обновлений:
    В некоторых системах могут применяться "фазированные обновления". Это значит, что обновления первыми получают только некоторые пользователи, и только после этого их получают остальные.

  3. Директива hold:
    Пакеты могут быть помечены как «удерживаемые», что также предотвратит их автоматическое обновление. Вы можете проверить это с помощью команды apt-mark showhold.

  4. Конфликты между пакетами:
    Если у вас установлены версии пакетов из различных источников (например, PPA), это может привести к несовместимости и, как следствие, к тому, что apt не сможет обновить пакеты.

Способы решения проблемы

Вот несколько подходов для обновления оставленных пакетов:

1. Использование apt-get install

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

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

Эта команда попытается установить необходимые зависимости и обновить пакеты.

2. Команда --with-new-pkgs

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

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

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

3. Команда dist-upgrade

Если все остальные методы не сработали, вы можете использовать более агрессивный способ:

sudo apt-get dist-upgrade

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

4. Использование aptitude

Если у вас установлен aptitude, он может лучше справляться с разрешением конфликтов зависимостей. Установите aptitude, если он еще не установлен:

sudo apt-get install aptitude

Затем выполните команду:

sudo aptitude safe-upgrade

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

5. Проверка фазированных обновлений

Если ваши пакеты находятся в статусе «уheld back» из-за фазированных обновлений, вы можете создать файл настроек:

sudo nano /etc/apt/apt.conf.d/99-Phased-Updates

И добавьте следующие строки:

Update-Manager::Always-Include-Phased-Updates "1";
APT::Get::Always-Include-Phased-Updates "1";

6. Проверка зависимостей и ручное разрешение

Если apt не может найти необходимые версии для зависимостей, попробуйте вручную проверить их и установить. Для этого используйте apt list и apt show для изучения информации о необходимых пакетах.

Заключение

Обновление пакетов может быть вызвано разными обстоятельствами, и понимание основ зависимости поможет вам принять правильное решение. Старайтесь избегать использования dist-upgrade, если не уверены в возможных последствиях, так как это может привести к нежелательным изменениям в вашей системе. Рекомендуется всегда делать резервные копии важных данных перед выполнением обновлений.

Оцените материал
Добавить комментарий

Капча загружается...