„Ale wspomina o tym inny pakiet.” - Znalezienie tego pakietu

24

Nie jest niczym niezwykłym, że użytkownik Ubuntu (lub innej dystrybucji z zarządzaniem pakietami apt) napotyka błąd:

user@box ~ $ sudo apt-get install x
[sudo] password for user: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package x is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'x' has no installation candidate

Zostało zadanych kilka pytań na ten temat na różnych stronach StackExchange, na przykład openvpn na AskUbuntu, ale ogólnie dotyczą one sposobu uzyskania określonego pakietu pomimo błędu.

Nie znalazłem żadnego pakietu, który nie zostałby znaleziony po prostu (choć nie zawsze łatwo), poprzez określenie, czy jest on nadal dystrybuowany, i pod którym repozytorium, jeśli tak, i upewnienie się, że repozytorium znajduje się w apt.sources, lub najgorsze przychodzi najgorsze pobranie .deb lub source do skompilowania.

Więc moje pytanie jest bardziej ogólne i chociaż wydaje mi się, że ma dość prostą i dlatego nie ekscytującą odpowiedź, nie mogę wymyślić, jak je znaleźć za pomocą konwencjonalnych metod wyszukiwarek, więc zwracam się do AskUbuntu: Czy istnieje polecenie lub opcja, które mogę użyj, aby określić, który pakiet / które pakiety odnoszą się do brakującego pakietu?

Arlo James Barnes
źródło

Odpowiedzi:

13

Możesz wyszukać pakiet za pomocą apt-cache:

apt-cache search x

Spowoduje to wyświetlenie wszystkich pakietów, które w taki czy inny sposób odnoszą się do x.

Henrique Ferreira
źródło
2
Cóż, to brzmi rozsądnie ... tyle że nie działa dla mnie. apt-get install libtinfo6raporty niedostępne, ale do których odwołuje się inny pakiet, ale apt-cache search libtinfo6nie dają żadnych wyników. Czy jest jakiś inny sposób na zrobienie podobnej rzeczy?
Erhannis,
@Erhannis Czy „terminfo” coś przywołuje? Myślę, że czasami ten błąd pojawia się, gdy nazwa pakietu jest niechlujnie zmieniana.
Arlo James Barnes
Nie jestem pewny. Uaktualniłem do następnej wersji Debiana i ten pakiet najwyraźniej nie daje już tego błędu. Spróbuję terminfojednak następnym razem; zdarzyło się to wcześniej i prawdopodobnie powtórzy się.
Erhannis,
23

Czasami dzieje się tak, ponieważ APT po prostu nic nie wie o tym, o czym mówisz, ale można to rozwiązać, uruchamiając:

sudo apt-get update

Po uruchomieniu tego zazwyczaj błąd znika, ponieważ apti apt-getwiem, jak zrobić to, o co teraz pytam.

Wayne Workman
źródło
4
Prawdopodobnie oznaczało to, że apt-get updatenastępuje, apt-get upgrade -yponieważ -ypomija potwierdzenie użytkownika. Nie ma sensu używać go z apt-get update. Mimo to wcale nie odpowiada to na pytanie.
4
@CelticWarrior: Zasadniczo zgadzam się z tą odpowiedzią, ponieważ aktualizacja informacji o repozytorium pakietów może rozwiązać ten problem, jeśli ktoś spróbuje zainstalować pakiet z ostatnio dodanego PPA i zapomni o uruchomieniu apt-get update.
David Foerster
7
@ user589808 Nie sądzę, że to w ogóle bardzo dobra rada. Ulepszenie apt-get nie jest konieczne, a ślepe trafienie -y we wszystko może zepsuć więcej rzeczy niż naprawia. więc Wayne miał poprawną składnię.
szalone fajne
1
apt-get updateodpowiada na pytanie AB (pakiet istnieje w repo ale apt-get installi apt-cachenie wiem na ten temat.)
dcorking
1
W przypadku późniejszych przyjazdów powyższe komentarze omawiają starszą wersję tej odpowiedzi. Obecna odpowiedź sudo apt-get updatejest po prostu wolna od kontrowersji i była dla mnie właściwym rozwiązaniem.
Daryn