Nie można rozwiązać problemów, trzymałeś uszkodzone paczki

216

Po aktualizacji z 10.04 do 12.04 próbuję zainstalować różne pakiety. Na przykład ia32-libs i skype (4.0).

Podczas próby ich zainstalowania pojawia się komunikat o błędzie „Nie można rozwiązać problemów, wstrzymałeś uszkodzone pakiety”.

Wyjście poleceń:

sudo apt-get install -f
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Po uruchomieniu tego:

sudo dpkg --configure -a
foo@foo:~$ sudo apt-get install -f
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Trond
źródło
3
Może to pomóc, jeśli pokazałeś nam polecenie, którego faktycznie próbujesz (np. sudo apt-get install ia32-libs), Oraz wynik działania tego polecenia. Czy sudo apt-get dist-upgradepokazuje także dostępne aktualizacje?
thomasrutter
3
Nie wiem, co jest nie tak z twoim pytaniem, nie widzę żadnego rzeczywistego błędu ani tego, który opisujesz w tytule.
Braiam
możliwy duplikat Jak rozwiązać niezaspokojone zależności?
Eliah Kagan

Odpowiedzi:

237

Ten konkretny komunikat o błędzie może wskazywać, że trzymałeś paczki, ale może także oznaczać inny problem.

Możesz uzyskać listę faktycznie przechowywanych pakietów za pomocą:

dpkg --get-selections | grep hold

Jeśli nie ma żadnych lub żaden nie wygląda na związany, to prawdopodobnie jest to coś innego. Sprawdź dokładnie dane wyjściowe polecenia, które próbujesz uzyskać po otrzymaniu komunikatu o błędzie, ponieważ mogą być inne wskazówki w pełnym wyniku tego polecenia, oprócz komunikatu o błędzie.

Inną metodą rozwiązywania problemów może być użycie aptitude zamiast apt-get, aby spróbować zainstalować pakiet:

sudo aptitude install <packagename>

Aptitude rzuci się łatwiej i spróbuje znaleźć rozwiązania, które mogą wymagać modyfikacji innych pakietów. Może dać ci więcej wyjaśnień problemu i możliwości jego rozwiązania.

Czasami aptitude będzie zbyt chętny do usuwania lub obniżania liczby dużych pakietów, aby spełnić twoje żądanie, w takim przypadku ponowna próba -fzmiany priorytetów i pomoc w znalezieniu rozwiązań obejmujących usunięcie / obniżenie liczby mniejszych pakietów, nawet jeśli oznacza to, że nie wszystkie zmiany, o które prosiłeś można śmiało:

sudo aptitude -f install <packagename>
thomasrutter
źródło
6
Masz pomysł, jak zatrzymać pakiet? :-)
Eugene van der Merwe
6
To jest osobne pytanie .
thomasrutter
59
Aptitude była dla mnie bardziej pomocna niż apt-get, dzięki za podpowiedź.
szx
9
Należy zauważyć, że umiejętność może ułatwić wyrządzenie większych szkód w twoim systemie. Na przykład, jeśli apt-get nie zainstaluje czegoś z powodu sprzecznych zależności, zrezygnuje. Jednak aptitude może zaoferować kontynuację, ale odinstaluj całą masę innych pakietów, aby rozwiązać te konflikty - lub nawet obniżyć pakiety. Musisz tylko zdawać sobie sprawę z tego, co to sugeruje i kontynuować tylko wtedy, gdy jest to dobry pomysł.
thomasrutter
4
Pakiety „wstrzymane” nie mają nic wspólnego z komunikatem, tylko to, że uniknięto konfliktu poprzez przytrzymanie ich (nie instalowanie, uaktualnianie, obniżanie lub usuwanie).
Braiam
33

To też mi się przydarzyło. Wszystko, co zrobiłem, sudo apt-get updateto naprawiło mój problem. Powodzenia.

użytkownik2292711
źródło
9

Natrafiłem na podobny scenariusz dotyczący brakujących zależności. W moim przypadku próbowałem zainstalować curl na pyskaty salamandrze ubuntu 13.10 ...

Błąd stwierdził, że zależność wymagała wcześniejszej wersji biblioteki curl3.

Udało mi się zdegradować do wcześniejszej wersji, próbując zainstalować curl przy użyciu aptitude.

Kiedy zauważył brakującą zależność i przyczynę (wymagała wcześniejszej wersji pliku biblioteki), dał mi kilka opcji, jak odpowiedzieć ... y// n/q

Yprzerwałoby instalację, Nszukałoby innej opcji, Qpo prostu zamknęło się i nic więcej nie robiło, pozostawiając zepsuty pakiet.

Wybrałem Ni dało mi to opcję zmiany pliku biblioteki na wcześniejszą wersję. Tak właśnie zrobiłem i curl zakończył instalację bez żadnych błędów.

  • Mogę rozważyć aktualizację pliku biblioteki ponownie po instalacji, ale hej, jak dotąd tak dobrze.
Peopleunit
źródło
9

Miałem podobny scenariusz w nowej instalacji 14.04, bez plików wymienionych dpkg --get-selections | grep holdi bez radości później sudo apt-get update.

To, co to naprawiło, było dla mnie proste

sudo apt-get autoremove

Kiedy próbowałem ponownie zainstalować wadliwy pakiet, działało dobrze. Tak!

Jochanna
źródło
4

Miałem ten sam problem, uruchomiłem polecenie sprawdzania pakietu z drugiej odpowiedzi ( dpkg --get-selections | grep hold) i zobaczyłem

tomcat7                                         deinstall
tomcat7-common                                  install

więc użyłem „ apt-get remove tomcat7-common

Następnie mógłbym zainstalować Tomcat 6 (usuwałem Tomcat 7 i instalowałem Tomcat 6 tak jak ty).

Nollaig
źródło
Pakiety „wstrzymane” nie mają nic wspólnego z komunikatem, tylko to, że uniknięto konfliktu, przytrzymując je (nie instalując, nie aktualizując, nie obniżając ani nie usuwając)
Braiam
dodaj flag purge: apt-get remove --purge packet
Sergio Abreu
4

Są to szybkie i łatwe sposoby naprawienia you have held broken packagesbłędu.

  • Otwórz plik sources.list /etc/apt/sources.listi sprawdź, czy nie ma żadnych źródeł oprogramowania dla innej wersji Ubuntu niż wersja Ubuntu, której obecnie używasz. Jeśli znajdziesz niepoprawne wiersze wydania w sources.list, otwórz plik sources.list za pomocą sudoedit /etc/apt/sources.list, skomentuj nieprawidłowe wiersze w sources.list poprzedzając je #znakiem, zapisz plik sources.list i uruchom, sudo apt updateaby zaktualizować listę dostępne pakiety oprogramowania.

  • Wybierz opcję Napraw uszkodzone pakiety w menedżerze pakietów Synaptic. Uruchom następujące polecenia, aby zainstalować Synaptic.

    sudo apt update  
    sudo apt upgrade   
    sudo apt install synaptic  
    

    Otwórz Synaptic iw Synaptic wybierz Edycja -> Napraw uszkodzone pakiety, a następnie powtórz Edycja -> Napraw uszkodzone pakiety po raz drugi.

    W Synaptic w lewym okienku kliknij przycisk Filtry niestandardowe , który jest zaznaczony kursorem myszy na poniższym zrzucie ekranu. Z listy w lewym górnym rogu wybierz Broken . W środkowym okienku pojawi się lista uszkodzonych pakietów, które nadal wymagają naprawy.

    pokaż uszkodzone pakiety w Synaptic

    Wybierz uszkodzone pakiety pojedynczo. Wybierz uszkodzony pakiet, a następnie otwórz terminal i uruchom . Wyniki tego polecenia pokażą, czy ten uszkodzony pakiet został zainstalowany z domyślnych repozytoriów Ubuntu, czy z innego źródła. Jeśli uszkodzony pakiet został zainstalowany z innego źródła, być może ten pakiet może zostać usunięty wraz ze źródłem oprogramowania i zastąpiony inną wersją tego samego pakietu niż domyślne repozytoria Ubuntu. Zwykle oznacza to naprawienie uszkodzonego pakietu przez obniżenie tego pakietu do starszej wersji.apt policy <package-name>

  • Jeśli pojawi się ten komunikat o błędzie:

    Try 'apt-get -f install' with no packages (or specify a solution)  
    

    Uruchom następujące polecenia:

    sudo apt update  
    sudo apt upgrade   
    sudo apt-get -f install   
    
  • Ręcznie usuń zepsuty pakiet.

    1. Znajdź swój pakiet w /var/lib/dpkg/info

      ls -l /var/lib/dpkg/info | grep <package>
      
    2. Przenieś folder pakietu w inne miejsce.

      cd /tmp && sudo mkdir new-package-location  
      sudo mv /var/lib/dpkg/info/<package>.* /tmp/new-package-location/    
      
    3. Uruchom następujące polecenie:

      sudo dpkg --remove --force-remove-reinstreq <package>  
      

Jeśli wszystkie te metody nie działają, możliwe, że uszkodzone pakiety są spowodowane przez coś, co jest tak głęboko osadzone w systemie operacyjnym, że żadna z tych metod nie ma na to żadnego wpływu. Pierwszym oczywistym miejscem do poszukiwania tego głęboko osadzonego „czegoś” są źródła oprogramowania /etc/apt/sources.list. Sprawdź plik sources.list, aby zobaczyć, czy zawiera on niestandardowe linie, które mogą powodować błąd zepsutych pakietów. Standardowy plik sources.list Ubuntu wygląda jak pliki sources.list w tej odpowiedzi .

Prawidłowym sposobem na usunięcie podejrzanej linii ze źródeł.list jest skomentowanie jej poprzedzeniem #znakiem. Następnie uruchom, sudo apt updateaby odświeżyć listę dostępnego oprogramowania.

Karel
źródło
0

Dla mnie żadne z powyższych nie działało, ponieważ mój system nie został zaktualizowany. Zrobiłem

Home Key > Software Updater > Install

i zaktualizowałem mój system; potem mógłbym normalnie zainstalować pakiet apt.

nathangeorge1
źródło
0

Miałem ten sam problem z ponowną instalacją xsanepo nieudanej ppainstalacji. Tak jak stało się z Yochannah: „nie ma żadnych plików na liście dpkg --get-selections | grep holdi nie ma później radości sudo apt-get update”.

Wskazówka, która apt-getmi dała, to

xsane : Depends: libsane (>= 1.0.24) but it is not going to be installed

Z powodu odpowiedzi Yochannah miałem wrażenie, że muszę usunąć niektóre wcześniej zainstalowane pakiety. I tak było, musiałem ręcznie usunąć wszystkie powiązane pakiety sane, między innymi, xsane-commoni libsanektóre nadal były instalowane jako ppawersja.

Dlatego uważaj na to, co już zainstalowałeś i posprzątaj!

Lov.by.Jezus
źródło