APT zaklinowany przez niedopasowanie wersji jądra

18

Apt najwyraźniej nie jest w stanie zrobić dla mnie nic użytecznego, wielokrotnie przekazując wiadomości w tej formie:

dpkg: dependency problems prevent configuration of linux-server:
 linux-server depends on linux-image-server (= 3.2.0.37.44); however:
  Version of linux-image-server on system is 3.2.0.37.45.
 linux-server depends on linux-headers-server (= 3.2.0.37.44); however:
  Version of linux-headers-server on system is 3.2.0.37.45.
dpkg: error processing linux-server (--configure):
 dependency problems - leaving unconfigured

Jest to w zasadzie ten sam problem, ponieważ nie mogę zainstalować żadnego pakietu (błędy obrazu linux-server, błędy zależności linux-server), który został zamknięty. Duplikuj odpowiedź, która jest całkowicie bezużyteczna w tej sytuacji. Żadna rada w tej bardzo ogólnej odpowiedzi na temat zależności nie pomaga.

Wyraźnie:

sudo apt-get clean
sudo apt-get autoclean
sudo apt-get update

wszystko nie ma wpływu. Podczas

sudo apt-get -f install
sudo dpkg --configure -a
sudo apt-get -u dist-upgrade
sudo apt-get -o Debug::pkgProblemResolver=yes dist-upgrade

wszystkie dają jakąś formę powyższego komunikatu o błędzie.

Leopd
źródło

Odpowiedzi:

20

Pobiegłeś sudo apt-get update, a problem nadal się pojawia. Więc chyba tylko mieć nowszą wersję linux-image-serveri linux-headers-serverniż jakiegokolwiek linux-serverdostępnego pakietu ze skonfigurowanych źródeł oprogramowania .

Może się to zdarzyć przez bardzo krótki czas, nawet jeśli używasz centralnego serwera (lub dłużej, jeśli wystąpił problem z jego aktualizacją). Rozumiem, że może się zdarzyć przez dłuższy czas, jeśli użyjesz lustra. Nie oznacza to, że nie powinieneś używać http://archive.ubuntu.comkopii lustrzanej - serwer centralny ( ) jest zwykle bardzo wolny, a kopie krajowe, regionalne lub inne są znacznie szybsze.

Wyszukiwania pakietu ukazuje, że zarówno wersja 3.2.0.37.45 linux-image-serveri linux-serveristnieją dla Ubuntu 12.04. Prawdopodobnie jest to związane z twoim lustrem.

Oto kilka alternatyw:

Zignoruj ​​to

Jeśli możesz użyć menedżera pakietów do innych celów, na przykład do zainstalowania innych pakietów, możesz to zignorować. Kiedy twoje lustro zostanie zaktualizowane, prawdopodobnie po prostu dostaniesz pakiet.

Nie jest problemem nie mieć najnowszego linux-serverpakietu, ponieważ jest to metapakiet , który nie zapewnia żadnego rzeczywistego oprogramowania. Istnieje tylko, aby mógł wymienić trzy pakiety jako zależności , upewniając się, że pozostaną zainstalowane:

Masz już najnowsze wersje linux-headers-serveri linux-image-server. Domyślam się, że jest to system 64-bitowy, dlatego żaden komunikat o nim nie linux-generic-paezostał wyświetlony. Wygląda na to, że wszystko jest w porządku.

Jednak:

  • Jeśli problem uniemożliwia aktualizowanie i instalowanie innych pakietów (w przeciwieństwie do pokazywania tych wiadomości za każdym razem, gdy to robisz, ale nie ingerujesz w nie), powinieneś zastosować inne rozwiązanie.
  • Możesz także to zrobić, jeśli po prostu nie lubisz oglądać tych wiadomości przez cały czas i chcesz się ich pozbyć.
  • To trochę dziwne, że nie dostajesz tego pakietu, nawet jeśli używasz kopii lustrzanej, która jest nieco w tyle za głównym serwerem pobierania, ponieważ ten pakiet jest również dostarczany http://security.ubuntu.com. Ten serwer powinien być zawsze włączony w /etc/apt/sources.list. Zalecam więc sprawdzenie, aby upewnić się, że jest włączony. Możesz wykonać kopię zapasową sources.listprzed edycją ( sudo cp /etc/apt/sources.list /etc/apt/sources.list.old). Problem może być również konsekwencją buforowania serwera proxy sieci Web (jeśli go używasz) ze starymi danymi. (Poniższe rozwiązania też to obejdą).

Zmień na inny serwer pobierania

Domyślam się, że używasz systemu Ubuntu Server i prawdopodobnie nie masz zainstalowanego GUI. Zobacz więc:

Po zmianie lustra uruchom:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade

Jeśli chcesz, możesz zmienić serwer po linux-serveraktualizacji.

Ręcznie pobierz i zainstaluj .debplik pakietu

Możesz ręcznie pobrać i zainstalować .debplik najnowszej wersji linux-servermetapakietu w Ubuntu 12.04.

cd gdziekolwiek chcesz pobrać pakiet.

Jeśli jest to system 64-bitowy, uruchom:

wget https://launchpad.net/ubuntu/+archive/primary/+files/linux-server_3.2.0.23.25_amd64.deb

Jeśli jest to system 32-bitowy, uruchom to zamiast tego:

wget https://launchpad.net/ubuntu/+archive/primary/+files/linux-server_3.2.0.23.25_i386.deb

(Otrzymałem oba te linki na stronie Launchpad dla linux-metapakietu źródłowego w Ubuntu .)

Teraz (zarówno dla wersji 64-bitowej, jak i 32-bitowej) uruchom tę komendę, aby zainstalować pakiet:

sudo dpkg -i linux-server_3.2.0.23.25_*.deb

(Lub po prostu zacznij wpisywać nazwę pakietu i użyj go, Tababy go wypełnić.)

Usuń pakiet

Ponieważ jest to metapakiet zawierający oprogramowanie, które już masz, możesz usunąć pakiet. Wtedy już nie dostaniesz błędu. Możesz go zainstalować później, jeśli chcesz (możesz okresowo uruchamiać, apt-get update && apt-cache policy linux-serveraby sprawdzić, czy nowa wersja jest dostępna).

Istnieją dwa kroki, jeśli chcesz je usunąć. Pierwszym z nich jest odinstalowanie linux-server. po drugie, aby upewnić się, że pakiety nie zostaną automatycznie usunięte później.

Zależności nie zostaną natychmiast usunięte . Więc nie ma znaczenia, który z tych kroków wykonasz jako pierwszy.

1. Odinstaluj linux-server.

Aby odinstalować linux-server, wystarczy uruchomić:

sudo apt-get remove linux-server

2. Oznacz swoje zależności jako zainstalowane ręcznie

Aby poinformować APT (menedżera pakietów) o pakietach, które zamierzasz zainstalować, nawet jeśli nie pozostanie nic, co zadeklaruje ich zależność, oznacz je jako zainstalowane ręcznie.

Aby to zrobić, uruchom tę komendę, jeśli jest to system 64-bitowy:

sudo apt-mark manual linux-image-server linux-headers-server

Jeśli jest to system 32-bitowy, uruchom to zamiast tego:

sudo apt-mark manual linux-image-server linux-headers-server linux-generic-pae

(Powinieneś, apt-markale jeśli tego nie zrobisz i nie możesz zainstalować oprogramowania, możesz użyć apt-get installzamiast - apt-mark manualręczne określenie pakietu do instalacji powoduje, że zostanie on oznaczony jako zainstalowany ręcznie, nawet jeśli został już zainstalowany).

Źródło: Oznacz pakiet deb jako używany, więc nie jest sugerowany autoroval
(w szczególności odpowiedź Lekensteyn .)

Eliah Kagan
źródło
3
Dziękuję za szczegółową odpowiedź. Zmiana lusterek w ogóle nie zmieniła sytuacji. Ale ręczne zainstalowanie nowszej wersji linux-server ( linux-server_3.2.0.37.45) naprawiło problem.
Leopd
2
W moim przypadku nie mogłem użyć apt-get do niczego. Zawsze otrzymywałem niespełniony błąd zależności dla serwera linux. Zainspirowany twoją radą, wypróbowałem następujące, które działały i były znacznie prostsze:sudo apt-get remove linux-server && sudo apt-get install linux-server
Andrew Ensley
4

Jeśli miałeś pełny / boot i automatyczne instalacje aktualizacji bezpieczeństwa popsuły, możesz być w tej samej łodzi co ja.

Nie mogłem zmusić apt-get do zrobienia czegokolwiek, więc tradycyjne porady dotyczące pełnego / bootowania nie działały. Ręcznie usunąłem stare dane jądra. Nie usuwaj aktualnie działającego jądra, zaznacz „uname -a”. Usunąłem za pomocą 'sudo rm / boot / -3.2.0- {23,24,25,26} - .

Następnie musiałem uruchomić polecenie „sudo apt-get remove linux-server” i „sudo apt-get install linux-server”, aby naprawić bałagan z powodu problemu z 1/2 zainstalowanym jądrem. Po tym wszystkim mogłem wreszcie „sudo apt-get upgrade” i znów zacząć działać.

Dla pewności wrzuciłem „sudo update-grub” i „sudo apt-get autorove”, aby upewnić się, że menu startowe jest dokładne i że inne pakiety zostały wyczyszczone.

Flickerfly
źródło
Więcej o tym procesie napisałem tutaj: askubuntu.com/a/430944/47461 Jako kontrahent często napotykam ten problem.
flickerfly