„Następujące pakiety zostały wycofane:” Dlaczego i jak je rozwiązać?

877

Właśnie dodałem repozytorium PPA dla wersji programistycznej GIMP, ale pojawia się ten błąd:

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

Dlaczego i jak mogę to rozwiązać, aby móc używać najnowszej wersji zamiast tej, którą mam teraz?

jfoucher
źródło
17
Ściśle mówiąc, powiedziałbym, że to ostrzeżenie, a nie błąd.
Kazark

Odpowiedzi:

903

Zgodnie z artykułem na debian-administration.org ,

Jeśli zależności uległy zmianie w jednym z zainstalowanych pakietów, konieczne jest zainstalowanie nowego pakietu w celu przeprowadzenia aktualizacji, wówczas zostanie on wymieniony jako „wstrzymany”.

Ostrożne rozwiązanie 1:

Zgodnie z odpowiedzią Pablo możesz uruchomić sudo apt-get --with-new-pkgs upgrade, a on zainstaluje pakiety, które pozostały z powrotem.

Ma to tę zaletę, że nie oznacza zatrzymanych pakietów jako „ręcznie zainstalowanych”, co może zmusić więcej interwencji użytkownika w dół linii (patrz komentarze).

Jeśli rozwiązanie Pablo działa dla Ciebie, proszę go głosować. Jeśli nie, proszę skomentować, co poszło nie tak.

Ostrożne rozwiązanie 2:

Ostrożnym rozwiązaniem jest uruchomienie sudo apt-get install <list of packages kept back>. W większości przypadków zapewni to zatrzymanym pakietom to, czego potrzebują do udanej aktualizacji.

Agresywne rozwiązanie:

Uruchomione zostanie bardziej agresywne rozwiązanie sudo apt-get dist-upgrade, które wymusi instalację tych nowych zależności.

Ale dist-upgrade może być dość niebezpieczne . W przeciwieństwie do aktualizacji może usuwać pakiety w celu rozwiązania złożonych sytuacji zależności. W przeciwieństwie do ciebie, APT nie zawsze jest wystarczająco inteligentny, aby wiedzieć, czy te dodatki i usunięcia mogą siać spustoszenie.

Jeśli więc znajdziesz się w miejscu, w którym „ostrożne rozwiązanie” nie działa, dist-upgrade może działać ... ale prawdopodobnie lepiej jest dowiedzieć się nieco więcej o APT i rozwiązać problemy z zależnościami „ręcznie”, instalując i usuwając pakiety na zasadzie indywidualnej.

Pomyśl o tym jak o naprawie samochodu ... jeśli masz czas i poradzisz sobie z kluczem, poczujesz spokój, czytając i wykonując naprawę samodzielnie. Jeśli masz szczęście, możesz zostawić samochód z kuzynem dist-upgradei mieć nadzieję, że zna się na rzeczy.

Michael Crenshaw
źródło
180
Ponieważ jest to odpowiedź zaakceptowana, naprawdę wymaga aktualizacji, aby ostrzec o używaniu dist-upgradew stabilnym systemie, jak wskazało wiele innych odpowiedzi poniżej. Osobiście uważam, że istnieje prostsza / bezpieczniejsza odpowiedź, która wymaga wypromowania: apt-get install <lista pkgs>
Cas
7
Cas, czy powinienem dodać, że uruchomienie aktualizacji dist na stabilnym systemie może być niebezpieczne? Dlaczego to takie niebezpieczne? (Szczerze mówiąc, nie wiem aż tak dobrze.)
Michael Crenshaw,
17
Istnieje odpowiedź na błąd serwera, która wyjaśnia bardziej szczegółowo dist-upgrade. Myślę, że warto wyjaśnić (nie jest to niebezpieczne), że może uaktualnić cały system, co może wykraczać poza to, czego użytkownik oczekuje / chce, tzn. W przykładzie OP zastanawiają się, dlaczego gimp jest powstrzymywany.
Cas
19
Pamiętaj, że sudo apt-get dist-upgrademożna również usuwać pakiety. W związku z tym najlepiej zawsze sprawdzać listę zmian, które zostaną wprowadzone przed ich wyrażeniem zgody podczas działania sudo apt-get dist-upgrade.
Eliah Kagan
6
@EliahKagan Czy mogę dodać, że nawet apt-get upgrademogę usunąć pakiety? Zawsze tak będzie, gdy w przeciwnym razie wystąpi konflikt wersji. Pomyśl o llvm3.6vs. llvm3.6v5(z „v5” oznacza, że ​​został skompilowany gcc 5). Te dwa nie mogą współistnieć , tylko jedno z nich może być przechowywane w systemie. Tak, więc dist-upgrademoże również usunąć niektóre pakiety, ale nie tylko dist-upgradeto by to zrobiło; w pewnych okolicznościach upgraderównież.
składniaerr.
500

Ilekroć otrzymasz od polecenia apt-get upgradewiadomość

The following packages have been kept back:

następnie, aby zaktualizować jeden lub wszystkie zatrzymane pakiety, bez przeprowadzania aktualizacji dystrybucji (to jest to dist-upgrade, o ile dobrze pamiętam), wydaje polecenie:

apt-get install <list of packages kept back>

rozwiąże to problemy z wycofaniem i poprosi o zainstalowanie dodatkowych pakietów itp., jak wyjaśniono w innych odpowiedziach.

użytkownik88285
źródło
3
Gdy pakiety zostaną w ten sposób zatrzymane, a ja ręcznie apt-get upgrade <list of packages>, jeśli je powtórzę apt-get upgrade, wyświetli listę tych pakietów, które nie są już wymagane, i których mogę użyć apt autoremovedo ich usunięcia, co robię, a następnie jeden ostatni apt-get upgradei nie są one już wymienione jako powstrzymywane ... Bardzo dziwne. jakieś pomysły?
cram2208
Czy apt-get installusuwa również pakiety, gdy jest to konieczne do rozwiązania poważnych zależności, czy też musiałbyś uruchomić osobne apt-get removepolecenie, aby wykonać tę część procesu aktualizacji?
Michael Crenshaw,
@ cram2208 Wierzę, że takie jest oczekiwane zachowanie. Pakiety, które zostały „automatycznie zainstalowane i [...] nie są już wymagane”) to poprzednie wersje uaktualnionych pakietów, które nie są już potrzebne. apt autoremovenastępnie usuwa te nieużywane zależności.
Alex
3
Jeśli aktualizacja wymagałaby zainstalowania nowego pakietu, pakiet zostanie „cofnięty”. Najpierw rozważ użycie: sudo apt-get --with-new-pkgs upgradeco nie miałoby skutków ubocznych powodujących oznaczanie pakietów jako zainstalowane ręcznie
l --marc l
@ mac9416 tak to robi.
jarno
174

apt-get dist-upgrade jest niebezpieczny dla stabilnego środowiska,

  1. złe ustawienie source.list i kończysz się zepsutym ubuntu.
  2. możesz zaktualizować całą aplikację do wersji, której nie chcesz.

Przypadek użycia: aktualizacja jądra nie jest przechowywana, po prostu chcesz zaktualizować jądro, nie chcesz aktualizować całej dystrybucji.

Lepszy sposób obsługi zatrzymanego pakietu:

sudo aptitude

Jeśli zatrzymałeś pakiet, powinieneś zobaczyć pakiety z możliwością aktualizacji na górze listy.

  • Naciśnij + na tej liście
  • Naciśnij g dwa razy
  • Odpowiedz na pytania debconf, jeśli zostaniesz o to poproszony
  • Naciśnij klawisz Return, aby kontynuować
  • Naciśnij Q
  • Naciśnij tak

Zainstalowano Twój pakiet wycofany.

Michael Crenshaw
źródło
34
apt-get dist-upgradejest niebezpieczne tylko wtedy, gdy masz złe repozytoria /etc/apt/sources.list*. Warto wiedzieć, że dist-upgradeuaktualnia wszystkie pakiety, ale przy domyślnych repozytoriach powinno to być w porządku. Nie używając dist-upgrademoże być niebezpieczne, ponieważ może pominięcia aktualizacji zabezpieczeń.
Flimm,
6
apt-get dist-upgrademożna usuwać i dodawać pakiety, ale nie jest to naprawdę niebezpieczne. Każde polecenie instalacji pakietu może spowodować poważne szkody, jeśli masz problemy z sources.listplikiem ! Zwykłe apt-get upgradepolecenie zainstaluje dowolny pakiet z dowolnego włączonego źródła oprogramowania; dist-upgradenie jest w ten sposób wyjątkowy. Ponadto używanie aptitudedo wykonywania dowolnej operacji, przynajmniej na amd64, jest znacznie bardziej niebezpieczne niż uruchamianie apt-get dist-upgradew wydaniu, w którym błąd 831768 nie został naprawiony.
Eliah Kagan
Dla mnie łatwiej było (lokalna maszyna z uruchomionym X) po prostu otworzyć synaptic i wymusić aktualizację pakietu. Z jakiegoś powodu wydaje się, że w ogóle nie pojawił się tam, gdzie opisałeś w synaptic.
djvs
3
Takżesudo aptitude safe-upgrade
msanford
146

Dlaczego nie wypróbujesz tej odpowiedzi na Unix SE :

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

Umożliwia to instalowanie nowych pakietów. Poinformuje Cię, które pakiety zostaną zainstalowane i wyświetli monit przed faktyczną instalacją.

aptpolecenie ( przyjazna alternatywa dla apt-get) udostępnij tę opcję.

Użycie apt install <pkg>zamiast tego oznaczy pkg jako „ręcznie zainstalowany” !! Aby oznaczyć go ponownie jako „automatycznie zainstalowany”, użyj apt-mark auto <pkg>(zobacz także podkomendę showmanual). Więcej informacji na temat tej odpowiedzi .

Pablo A.
źródło
20
+1, ponieważ nie ma skutków ubocznych powodujących oznaczanie pakietów jako zainstalowane ręcznie.
ctrl-alt-delor
1
Uwaga dla każdego, kto kiedykolwiek czyta mój komentarz powyżej: brak efektu ubocznego oznaczania jako instalowanego ręcznie jest dobrą rzeczą. Podoba mi się ta odpowiedź.
ctrl-alt-delor
1
Tak. apt-mark auto <pkg>powinno być konieczne jedynie do oznaczenia pakietu jako automatycznie zainstalowanego ( tutaj strona man ).
Pablo A,
11
Z jakiegoś powodu sudo apt-get --with-new-pkgs upgradenadal wyświetla paczki jako „cofnięte”. Brak komunikatu o błędzie.
Franklin Yu,
2
Chcę tylko dodać, że dla wielu aktualnych instancji serwera debian 9.6 było to absolutnie najbezpieczniejsze rozwiązanie bez zepsucia. Dziękuję za to, Pablo, ponieważ wcześniej na szczęście przetestowałem inne opcje w środowiskach pomostowych i mogłem administrować wieloma serwerami zgodnie ze standardami bezpieczeństwa dzięki włączeniu opcji --with-new-pkgs z znacznie czystszymi wynikami dla ogólnego zarządzania przyszłymi pakietami. Naprawdę, ta odpowiedź na UNIX SE powinna zostać oceniona!
Julius
34

Zwykle są dwa powody, dla których możesz zobaczyć tę wiadomość.

Jeśli aktualizacja programu (przez sudo apt-get upgrade) spowoduje dodanie lub usunięcie pakietów, program zostanie wstrzymany. Możesz użyć sudo apt-get dist-upgradew tym przypadku, który następnie zaoferuje dodanie lub usunięcie dodatkowych programów.

Jest to dość powszechne i zwykle nie stanowi problemu. Czasami (szczególnie podczas Ubuntu alpha) dist-upgradezaoferuje usunięcie wielu innych programów, w którym to przypadku prawdopodobnie chcesz je anulować.

Jeśli program zależy od pakietów lub wersji, które nie są dostępne, program zostanie wstrzymany. Naprawdę nie możesz nic zrobić, tylko czekać w takich okolicznościach, ponieważ pakiet zasadniczo nie nadaje się do odinstalowania. Może się to zdarzyć, gdy pakiety zostaną dodane do repozytorium w niewłaściwym porządku, gdy nazwa pakietu zostanie zmieniona lub gdy pakiet przestanie zapewniać pakiet wirtualny.

jbowtie
źródło
5
Czy istnieje sposób ustalenia, czy wstrzymany pakiet wymaga zależności, której nie można zainstalować, czy też jest on wstrzymywany, ponieważ zależą od niego inne pakiety. Mam wiele wstrzymanych pakietów i uważam, że oba te przypadki mogą mieć zastosowanie w moim systemie.
Jake
Dzięki, drugi powód był dla mnie problemem. Nawet apt-get dist-upgradeodmówił instalacji. Sprawdzanie pakietu za pomocą aptitude wykazało, że zależy to od pakietu, który nie jest dostępny. Chyba będę musiał poczekać.
jlh
23

Możesz także spróbować:

sudo aptitude safe-upgrade.

Jest to bezpieczniejsze niż full-upgrade(pierwotnie nazwana dist-upgrade), ponieważ „pakiety nie zostaną usunięte, chyba że nie będą używane”.

Od man aptitude:

bezpieczna aktualizacja

Uaktualnia zainstalowane pakiety do ich najnowszej wersji. Zainstalowane pakiety nie zostaną usunięte, chyba że nie będą używane /.../ Pakiety, które nie są aktualnie zainstalowane, mogą zostać zainstalowane w celu rozwiązania zależności, chyba że podano opcję wiersza polecenia --no-new-installs.

Afilu
źródło
21

Najprawdopodobniej pakiety te są wstrzymywane, ponieważ ich instalacja spowodowałaby niespójności zależności. Może się to zdarzyć, ponieważ używasz archiwów w ramach aktywnego programowania, ppas, lub ponieważ używane lustro nie jest w pełni zaktualizowane.

W ostatnim przypadku wystarczy poczekać, gdy zależności zostaną rozwiązane, zostanie ono zainstalowane następnym razem.

Edytować:

Istnieje inna możliwość, pakiety mogą zostać wstrzymane, jeśli zostaną na nich wstrzymane lub zostaną przypięte.

txwikinger
źródło
Na czym opieracie to prawdopodobieństwo, nie wiedząc, na czym polegał upgrade apt-get lub apt-get dist-upgrade (alternatywnie odpowiedniki umiejętności)?
andol
jest to najczęściej występujący problem w pytaniach i błędach wsparcia
txwikinger
Zgoda. Prawdopodobnie powinieneś poczekać i sprawdzić apt_preferences. Jest to często spowodowane archiwami programistycznymi, w których zależności i dostępne pakiety zmieniają się bardzo szybko. Poczekaj, aż się uspokoją, a może wcale nie będziesz musiał dist-upgrade. Jeśli nadal chcesz dist-upgrade, przejrzyj NOWE pakiety do zainstalowania i pakiety do usunięcia, zanim przejdziesz dalej.
Umang
Tak jest w moim przypadku, ponieważ dostaję komunikat „cofnięty” za pomocą dist-upgrade
Postadelmaga,
W przypadkach, gdzie ten problem jest spowodowany messup z mieszkaniem preferencji (przypinanie), znalazłem zakładanie przechowywanych pakietów pomógł mi: apt-get install --reinstall <packages>.
tanius
9

Dzieje się tak zwykle dlatego, że pakiet dodał zależność, a aktualizacja nie chce dodawać go bez pozwolenia.

Jeśli uruchomisz:

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

Następnie nowe wersje powinny zostać zainstalowane wraz z ich nową zależnością.

John Lawrence Aspden
źródło
Uaktualnia określone pakiety (i ich zależności) bez zobowiązań (ryzyka) aktualizacji.
John Mee,
8

To zadziałało dla mnie

sudo aptitude full-upgrade
Singh
źródło
Nawet aptitude upgradedla mnie pracował.
Bibhas
Używam Ubuntu 14.04i nie mam aptitudewiersza polecenia
Ahmed Hamdy
apt-get dist-upgradeprzekazał mi tę samą wiadomość, ale to dla mnie rozwiązało. Miałem pakiet, który łamał aktualizację innego pakietu. Nie potrzebowałem tego, który zainstalowałem, więc aptitude full-upgradedałem mi możliwość usunięcia go, aby mógł zaktualizować wszystko inne.
f.ardelian
6

Przekonałem się, że aptitude lepiej radzi sobie z aktualizacją pakietów, jeśli wersje różnią się tylko nieznacznie. Miałem taką sytuację:

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

To spowodowało, że apt-get wstrzymał aktualizację, ale aptitude zaktualizował ją w porządku. Nie jestem pewien, którego algorytmu używa się do ustalenia, czy pakiet powinien zostać zaktualizowany, czy nie. Myślę, że ci dwaj mieli tę samą wersję, tylko inny „kwalifikator”. Ale w każdym razie apt-get nie zaktualizowałby go, ale aptitude zrobiłby to.

Alexander Torstling
źródło
4

W moim przypadku wstrzymywane były pakiety związane z nagłówkami Linuksa i jądrem. Doszedłem do tego, próbując rozwiązać problem z czerwonym wykrzyknikiem w obszarze powiadomień i niemożnością aktualizacji pakietów.

Aby go rozwiązać, nie musiałem używać ani dist-upgrade ani manual apt-get install xxx .

To, co zrobiłem i pomogłem, było proste i czyste :

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

Musiałem ręcznie potwierdzić aktualizację Grub i jej konfigurację.

Potem przez chwilę pracowałem z komputerem, a potem znów pojawiło się standardowe okno dialogowe aktualizacji zawierające sekcję „Ubuntu base” z jądrem i powiązane. Aktualizacja została wykonana bez żadnych problemów i nie widzę już żadnych wstrzymanych pakietów.

Ponadto bardzo ważne jest, aby pamiętać, że te * aktualizacje buntu, w tym aktualizacje jądra, są wrażliwe na hibernację - mam ten problem kilka razy i zawsze rozwiązuję go poprzez ponowne uruchomienie komputera i wykonanie powyższych kroków.

Więc może to wystarczy ?!

(opisana tutaj sytuacja dotyczy mojego Xubuntu 15.10 pod koniec grudnia 2015 r.)

Crysman
źródło
3

Natknąłem się na ten problem, gdy wydano nowe jądro. (Być może dlatego, że mam włączone aktualizacje niestabilne.) Znalazłem najprostszy sposób, aby przeprowadzić instalację za pomocą graficznego instalatora Ubuntu ( update-manager).

Kazark
źródło
2

Natknąłem się na ten problem za pomocą synaptic, ponieważ wydawało się, że się zawiesił i aby spróbować naprawić, uruchomiłem ponownie i spróbowałem ponownie.

Potem odkryłem wiadomość informacyjną jako część pakietu z instrukcjami dla mnie po instalacji.

Musiałem nacisnąć „ szczegóły ”, a następnie „ q ”, aby wyjść po przeczytaniu wiadomości, a potem wszystko poszło normalnie.

Widok eliptyczny
źródło
2

Wygląda to na prawidłowy sposób ponownej instalacji zatrzymanego pakietu:

apt-get install --reinstall libjpeg-progs

Przynajmniej działało to dla mnie, kiedy libjpeg-progsutknąłem po aktualizacji z Ubuntu 14.04 do 16.04. Jestem pewien, że możesz zrobić to samo z każdą inną aplikacją, która została cofnięta, np gimp.

Źródło: https://ubuntuforums.org/showthread.php?t=2321702&p=13476183#post13476183

Stephan Henningsen
źródło
1
Ty też możesz to zrobić bez --reinstall.
jarno
Zabawne jest to, że usuwa pakiet libjpeg-turbo-progs.
jarno
1

W rzeczywistości potrzebny jest przełącznik, dselect-upgradektóry instaluje / usuwa zależności dla danego zestawu pakietów.

Jasio
źródło
1

Przeczytałem wszystkie posty i odkryłem, że istnieje wiele interesujących wyjaśnień. Próbowałem ich wszystkich, ale nie przyniosłem żadnych rezultatów. Mam problem z narzędziami mysql, których nie mogłem zaktualizować. Aktualizacja została zaproponowana przez system. Więc chcę pokazać kilka kroków, aby to zrobić. Oczywiście powtórzę za chwilę wszystkie wyżej wymienione posty. Oto mój błąd, tak, znalazłem go już w istniejących postach, ale co powinienem zrobić dalej? wprowadź opis zdjęcia tutaj

Następnym krokiem jest:

sudo apt-get --purge remove mysql-utilities

Wyniki możemy zobaczyć na obrazku poniżej. Usuwam pakiet i sprawdzam to za pomocą polecenia:

sudo apt-get -f install

Wyniki - w porządku! Później poprawnie zainstalowałem nową wersję pakietu. wprowadź opis zdjęcia tutaj

W ten sposób myślę, że może pomóc większej liczbie nowych osób, ponieważ mając inne pakiety, możemy wykonać te same kroki.

Raz przepraszam, kiedy powtórzyłem w niektórych miejscach inne posty.

Wasyl Lyashkevych
źródło
5
Nie używaj zrzutów ekranu do tekstu terminala, ponieważ powoduje to, że Google nie może go przeszukiwać i jest nieczytelny dla niektórych osób. Zamiast tego wklej tekst terminala do swojej odpowiedzi, zaznacz ten tekst i naciśnij {}przycisk w edytorze, aby go poprawnie sformatować.
Chai T. Rex,
@ ChaiT.Rex Dziękuję za uwagi, wezmę to do opinii na przyszłość.
Vasyl Lyashkevych
1

Ubuntu 18.04 zapewnia nowszą, usprawnioną składnię, dzięki aptktórej można zamiast tego użyć apt-get.

sudo apt full-upgrade

sudo apt upgradesłuży do instalowania dostępnych aktualizacji wszystkich pakietów aktualnie zainstalowanych w systemie ze źródeł skonfigurowanych przez sources.list (5). Nowe pakiety zostaną zainstalowane, jeśli będzie to wymagane w celu spełnienia zależności, ale istniejące pakiety nigdy nie zostaną usunięte. Jeśli aktualizacja pakietu wymaga usunięcia zainstalowanego pakietu, aktualizacja tego pakietu nie zostanie wykonana.

sudo apt full-upgrade wykonuje funkcję aktualizacji, ale usunie aktualnie zainstalowane pakiety, jeśli będzie to konieczne do aktualizacji systemu jako całości.

l - marc l
źródło