"Зберігаються такі пакети:" Чому і як це вирішити?


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

Чому і як я можу це вирішити, щоб я міг використовувати останню версію замість тієї, яку я маю зараз?


17
Строго кажучи, я б сказав, що це попередження, а не помилка.
Казарк

Відповіді:


903

Згідно зі статтею на 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
Існує відповідь про помилку сервера, яка трохи детальніше пояснює оновлення dist. Я думаю, що його просто варто уточнити (не небезпечно як таке), що він може модернізувати всю систему, що може перевищувати те, що користувач очікує / хоче, тобто в прикладі ОП вони цікавляться, чому стримується стрибок.
Cas

19
Зверніть увагу, що sudo apt-get dist-upgradeтакож можна видалити пакунки. Отже, найкраще завжди перевіряти перелік змін, які будуть внесені, перш ніж погодитись на них, під час запуску sudo apt-get dist-upgrade.
Елія Каган

6
@EliahKagan Чи можу додати, що навіть apt-get upgradeможна видалити пакунки? Це буде завжди так, коли інакше буде конфлікт версій. Подумайте про llvm3.6vs. llvm3.6v5(з "v5", що означає, що воно було складено gcc 5). Ці два не можуть співіснувати , в системі може зберігатися лише обидва. Так, так, 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>

це вирішить проблеми, що зберігаються, і попросить встановити додаткові пакети тощо, як було пояснено в інших відповідях.


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що не вплине на спричинення того, що пакети будуть позначені як встановлені вручну
l --marc l

@ mac9416 так, це так.
jarno

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

6
apt-get dist-upgradeможна видаляти , а також додавати пакети, але це не дуже небезпечно. Будь-яка команда установки пакета може завдати серйозної шкоди, якщо у вас є проблеми у вашому sources.listфайлі ! Звичайна apt-get upgradeкоманда встановлюватиме будь-який пакет із будь-якого включеного джерела програмного забезпечення; dist-upgradeне є унікальним таким чином. Крім того, використовувати aptitudeдля виконання будь-якої операції взагалі, принаймні, на amd64, набагато небезпечніше запуску apt-get dist-upgrade, у випуску, де помилка 831768 не виправлена.
Елія Каган

Для мене було легше (локальна машина з X працює) просто відкрити синаптик і змусити оновити пакет. Чомусь, здавалося, це взагалі не відображалося там, де ви описали синаптично.
djvs

3
Такожsudo aptitude safe-upgrade
msanford

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 це було абсолютно безпечним рішенням, не порушуючи нічого. Дякую вам за це, Pablo, оскільки я щасливо попередньо перевірив інші параметри для постановки середовищ, і міг адмініструвати багато серверів відповідно до стандартів безпеки завдяки включенню - із новими pkgs із значно чіткішими результатами для загального майбутнього управління пакетами. Дійсно, ця відповідь UNIX SE має бути схваленою!
Юлій

34

Зазвичай це дві причини, з яких ви можете бачити це повідомлення.

Якщо оновлення програми (через sudo apt-get upgrade) призведе до додавання або видалення пакунків, програма буде відключена. Ви можете використовувати sudo apt-get dist-upgradeв цьому випадку, який потім запропонує додати або видалити додаткові програми.

Це досить часто, і зазвичай це не проблема. Інколи (особливо під час альфа Ubuntu) dist-upgradeпропонується видалити безліч інших програм, і в цьому випадку ви, ймовірно, хочете скасувати її.

Якщо програма залежить від пакетів або версій, які недоступні, програма буде затримана. Ви дійсно нічого не можете зробити, але зачекати в цій обставині, оскільки пакет в основному не можна встановити. Це може статися, коли пакети додаються до сховища поза порядком, коли пакет перейменований або коли пакет припиняє надавати віртуальний пакет.


5
Чи є спосіб визначити, чи потрібен пакет, що утримується, залежність, яку неможливо встановити, чи він утримується, оскільки від цього залежать інші пакети. У мене є багато пакетів, що зберігаються, і я вважаю, що обидва ці випадки можуть застосовуватися у моїй системі.
Джейк

Дякую, друга причина була для мене проблемою. Навіть apt-get dist-upgradeвідмовився його встановлювати. Огляд пакету з придатністю показав, що він залежить від пакету, який недоступний. Гадаю, мені доведеться почекати.
jlh

23

Ви також можете спробувати:

sudo aptitude safe-upgrade.

Це безпечніше full-upgrade(спочатку названо dist-upgrade), оскільки "пакети не будуть видалені, якщо вони не будуть використані".

Від man aptitude:

безпечне оновлення

Оновлення встановлених пакетів до їх останньої версії. Встановлені пакети не будуть видалені, якщо вони не використовуються /.../ Пакети, які наразі не встановлені, можуть бути встановлені для вирішення залежностей, якщо не вказано опцію командного рядка --no-new-install.


21

Швидше за все, ці пакети стримуються, оскільки їх установка створить невідповідності залежностей. Це може статися тому, що ви використовуєте архіви під активним розвитком, ppas, або тому, що дзеркало, яке ви використовуєте, не оновлюється повністю.

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

Редагувати:

Є й інша можливість, що пакети можуть бути відсторонені, якщо на них буде затримано або якщо вони прикріплені.


На чому ви базуєте цю ймовірність, не знаючи, на чому він запустив оновлення apt-get або apt-get dist-upgrade (альт. Еквіваленти придатності)?
andol

це найпоширеніша проблема у питаннях підтримки та помилках
txwikinger

Домовились. Вам, мабуть, варто почекати і перевірити, чи є у вас налаштування. Це часто викликано архівами розробок, де залежність від наявних пакетів і пакетів змінюється дуже швидко. Зачекайте, поки вони осядуть, і вам може не знадобитися 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

Тоді нові версії повинні бути встановлені разом із їх новою залежністю.


Оновлення конкретних пакетів (та їх залежностей) без зобов'язань (ризиків) дистрибутиву.
Джон Мі

8

Це працювало для мене

sudo aptitude full-upgrade

Навіть aptitude upgradeпрацював на мене.
Бібхас

Я використовую Ubuntu 14.04і у мене немає aptitudeкомандного рядка
Ахмед Хамді

apt-get dist-upgradeдав мені те саме повідомлення, але це вирішило це для мене. У мене був пакет, який порушував оновлення іншого пакету. Мені не потрібен той, який я встановив, тому aptitude full-upgradeдав мені можливість його видалити, щоб він міг оновити все інше.
f.ardelian

6

Я виявив, що здатність виконує кращу роботу при модернізації пакетів, якщо версії відрізняються незначно. У мене була така ситуація:

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 стримувати оновлення, але здатність оновила його просто чудово. Я не впевнений, який алгоритм використовується для визначення, чи слід оновити пакет чи ні. Я думаю, ці двоє мали однакову версію, лише інший "класифікатор". Але в будь-якому випадку, apt-get не оновив би його, а здатність зробив би.


4

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

Щоб вирішити це, мені не довелося використовувати ні dist-upgrade, ні ручну apt-get install 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 року)


3

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


2

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

Тоді я виявив інформаційне повідомлення у складі пакета з деякими інструкціями після встановлення.

Мені довелося натиснути " подробиці ", а потім " 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.
jarno

Найсмішніше, що він видаляє пакет libjpeg-turbo-progs.
jarno

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використовується для встановлення доступних оновлень усіх пакетів, які зараз встановлені в системі, з джерел, налаштованих через source.list (5). Нові пакети будуть встановлені, якщо це потрібно для задоволення залежностей, але існуючі пакети ніколи не будуть видалені. Якщо оновлення пакета вимагає видалення встановленого пакету, оновлення цього пакету не проводиться.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.