Uwaga na temat możliwego duplikatu:
AFAIK, To nie jest duplikat Jak rozwiązać niezaspokojone zależności po dodaniu PPA? w przeciwnym razie proszę to udowodnić, rozwiązując problem testowy, o którym wspomniałem poniżej, używając jakiejkolwiek odpowiedzi z tego miejsca.
Tło:
Napotkałem ten problem przed Jak naprawić wino instalacyjne na 64-bitowym Ubuntu 14.04.3LTS . Zostało to rozwiązane przez ręczny / ludzki przegląd wszystkich rekurencyjnych zależności pakietu docelowego ( wine
).
Odtwórz problem (przypadek testowy):
Stwórzmy tę samą sytuację cichą uproszczoną za pomocą tylko 1 pakietu problemów.
- Zainstaluj świeży Ubuntu 14.04 na VirtualBox.
- Otwórz
software-properties-gtk
i włączbackports
repozytorium. Pobierz listę ostatnich paczek
sudo apt-get update
Uruchom,
apt-get -s install wine
aby potwierdzić, żewine
można zainstalować.Zainstaluj problematyczny pakiet
libcgmanager0
z backportów$ apt-cache policy libcgmanager0 libcgmanager0: Installed: 0.24-0ubuntu5 Candidate: 0.24-0ubuntu7.5 Version table: 0.39-2ubuntu2~ubuntu14.04.1 0 100 http://dz.archive.ubuntu.com/ubuntu/ trusty-backports/main amd64 Packages 0.24-0ubuntu7.5 0 500 http://dz.archive.ubuntu.com/ubuntu/ trusty-updates/main amd64 Packages 0.24-0ubuntu7.1 0 500 http://security.ubuntu.com/ubuntu/ trusty-security/main amd64 Packages *** 0.24-0ubuntu5 0 500 http://dz.archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages 100 /var/lib/dpkg/status
Wymuś
apt
zainstalowanielibcgmanager0
wersji0.39-2ubuntu2~ubuntu14.04.1
sudo apt-get install libcgmanager0=0.39-2ubuntu2~ubuntu14.04.1
Teraz w tle znajduje się taka sama sytuacja użytkownika, jak w przypadku wspomnianego pytania: instalacja wina kończy się niepowodzeniem z niespełnioną zależnością, pokazując tylko pakiety zależności pierwszego poziomu.
apt-get -s install wine
Reading package lists... Done Building dependency tree Reading state information... Done Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help to resolve the situation: The following packages have unmet dependencies: wine : Depends: wine1.6 but it is not going to be installed E: Unable to correct problems, you have held broken packages.
apt-get -s install wine1.6
Reading package lists... Done Building dependency tree Reading state information... Done Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help to resolve the situation: The following packages have unmet dependencies: wine1.6 : Depends: wine1.6-i386 (= 1:1.6.2-0ubuntu4) E: Unable to correct problems, you have held broken packages.
apt-get -s install wine1.6-i386
Reading package lists... Done Building dependency tree Reading state information... Done Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help to resolve the situation: The following packages have unmet dependencies: wine1.6-i386:i386 : Depends: libglu1-mesa:i386 but it is not going to be installed or libglu1:i386 Depends: libgphoto2-6:i386 (>= 2.5.2) but it is not going to be installed Depends: libgphoto2-port10:i386 (>= 2.5.2) but it is not going to be installed Recommends: libsane:i386 but it is not going to be installed E: Unable to correct problems, you have held broken packages.
Nie jest praktyczne śledzenie zależności apt-get install
jedna po drugiej.
Idealne rozwiązanie:
Prawdziwy problem tutaj
apt
nie można zainstalowaćlibcgmanager0:i386
wersji,0.39-2ubuntu2~ubuntu14.04.1
ponieważ repozytorium backportów ma niższy priorytet100
niż wersja0.24-0ubuntu7.5
zupdates
repozytorium z500
apt
nie można zainstalowaćlibcgmanager0:i386
wersji,0.24-0ubuntu7.5
ponieważlibcgmanager0:amd64
jest instalowany z inną wersją0.39-2ubuntu2~ubuntu14.04.1
Najszybszą poprawką jest wymuszenie instalacji tej samej wersji i386 z backportów
sudo apt-get install libcgmanager0:i386=0.39-2ubuntu2~ubuntu14.04.1
lub obniż go (amd64) do dowolnej wersji ze zwykłych repozytoriów
sudo apt-get install libcgmanager0=0.24-0ubuntu7.5
Sposoby / narzędzia, które wypróbowałem:
- Wyłączenie PPA nie ma związku z problemem.
- Używanie
aptitude
w trybie interaktywnym przynosi tylko rozwiązania z wieloma usunięciami ( > 200 !!! ). - Użyj
apt-get install
ręcznie, postępując zgodnie z drzewem zależności. Niepraktyczne, ponieważ zależności pierwszego i drugiego poziomu nie wywołały znaczącego komunikatu o konflikcie. debfoster
może generować zależności rekurencyjne, ale tylko dla już zainstalowanego pakietu. Jednakwine
nie jest jeszcze zainstalowany.
Temat / Moje zainteresowania:
Powiedzmy, że chcę zainstalować wino, nie wiedząc o problemie z libcgmanager0
pakietem (lub dokładnie libcgmanager0:amd64=0.39-2ubuntu2~ubuntu14.04.1
tym , który już został zainstalowany).
Szukam metody debugowania lub sposobu, aby poznać nazwę pakietu powodującego problemy i szybko zrozumieć, co się dzieje.
Jak ogólnie debugować problemy z niezaspokojonymi zależnościami?
Mogą znajdować się nowe opcje w
dpkg
/apt
/,aptitude
które śledzą wewnętrzny mechanizm rozwiązywania zależności. To może pokazaćlibcgmanager0
w swoich wynikach.Jeśli nie ma kanonicznej odpowiedzi na to pytanie, czy ktoś mógłby mi pokazać lepszy sposób na wygenerowanie listy rekurencyjnych zależności lub zasymulować przelicznik zależności z większą ilością szczegółów, które mogą pomóc rozwiązać problem?
Dlaczego wszystkie zależności? Ponieważ chcę sprawdzić dane wyjściowe poniższych poleceń dla wszystkich pakietów jednocześnie.
apt-cache policy <all-dependencies>
apt-get -s install <all-dependencies>
źródło
backports
wersji?libcgmanager
, ale o zależność? Wspomniałeś rekurencyjnie wymieniając zależności. Próbowałeśapt-rdepends
?wine
(lub inny pakiet, którego dotyczy problem)-o Debug::pkgProblemResolver=yes
?Odpowiedzi:
Podziękowania i podziękowania dla @muru .
Szukałem dowolnej opcji polecenia lub debugowania, która może pokazać mi nazwę pakietu problemów (
libcgmanager0
w tym przypadku testowym).apt-get -s -o Debug::pkgProblemResolver=yes install wine
Ma pełny przekaz, cichy trudny do zrozumienia. Powinno być dobrze, jeśli się z tym zapoznam.
echo q | aptitude -s install wine
Minimalna wydajność, ale wyraźne powiadomienie o konflikcie.
Kolejną kwestią, której szukałem, jest zminimalizowanie wydajności wymaganej od PO. Zamiast tego poprosić
apt-cache policy
o zależności tylko na poziomie 1/2. Poprosiłbym go o wszystkie rekurencyjne zależności naraz.apt-rdepends wine 2>/dev/null | grep "^[a-zA-Z]" | sort
Pamiętaj, że
apt-rdepends
emuluje,apt-cache
więc jego wynik może być inny niżdebfoster
. Inna kwestia: oba narzędzia nie rozróżniają arch (i386 lub amd64), po prostu pokazują nazwy.Ponieważ powyższy link może zostać później usunięty, oto pełne dane wyjściowe wszystkich powyższych poleceń.
źródło