Uszkodzone pakiety jądra Ubuntu 16.04 nie pozwalają mi instalować ani usuwać niczego za pomocą apt-get

11

Ilekroć próbuję zrobić cokolwiek z apt-get, czy to instaluje, usuwa, czyści, aktualizuje, aktualizuje, zawsze trafia mnie ten sam błąd.

ses@ses-VirtualBox:~/Downloads$ sudo apt-get install ssh
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  linux-headers-4.4.0-45 linux-headers-4.4.0-45-generic linux-image-4.4.0-45-generic linux-image-extra-4.4.0-45-generic
Use 'sudo apt autoremove' to remove them.
The following additional packages will be installed:
  ncurses-term openssh-server openssh-sftp-server ssh-import-id
Suggested packages:
  ssh-askpass rssh molly-guard monkeysphere
The following packages will be REMOVED:
  linux-image-extra-4.4.0-38-generic linux-image-extra-4.4.0-42-generic
The following NEW packages will be installed:
  ncurses-term openssh-server openssh-sftp-server ssh ssh-import-id
0 upgraded, 5 newly installed, 2 to remove and 0 not upgraded.
10 not fully installed or removed.
Need to get 0 B/643 kB of archives.
After this operation, 320 MB disk space will be freed.
Do you want to continue? [Y/n] y
Preconfiguring packages ...
(Reading database ... 308434 files and directories currently installed.)
Removing linux-image-extra-4.4.0-38-generic (4.4.0-38.57) ...
run-parts: executing /etc/kernel/postinst.d/apt-auto-removal 4.4.0-38-generic /boot/vmlinuz-4.4.0-38-generic
run-parts: executing /etc/kernel/postinst.d/dkms 4.4.0-38-generic /boot/vmlinuz-4.4.0-38-generic
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 4.4.0-38-generic /boot/vmlinuz-4.4.0-38-generic
update-initramfs: Generating /boot/initrd.img-4.4.0-38-generic
run-parts: executing /etc/kernel/postinst.d/pm-utils 4.4.0-38-generic /boot/vmlinuz-4.4.0-38-generic
run-parts: executing /etc/kernel/postinst.d/unattended-upgrades 4.4.0-38-generic /boot/vmlinuz-4.4.0-38-generic
run-parts: executing /etc/kernel/postinst.d/update-notifier 4.4.0-38-generic /boot/vmlinuz-4.4.0-38-generic
run-parts: executing /etc/kernel/postinst.d/vboxadd 4.4.0-38-generic /boot/vmlinuz-4.4.0-38-generic
run-parts: failed to exec /etc/kernel/postinst.d/vboxadd: Exec format error
run-parts: /etc/kernel/postinst.d/vboxadd exited with return code 1
dpkg: error processing package linux-image-extra-4.4.0-38-generic (--remove):
 subprocess installed post-removal script returned error exit status 1
Removing linux-image-extra-4.4.0-42-generic (4.4.0-42.62) ...
run-parts: executing /etc/kernel/postinst.d/apt-auto-removal 4.4.0-42-generic /boot/vmlinuz-4.4.0-42-generic
run-parts: executing /etc/kernel/postinst.d/dkms 4.4.0-42-generic /boot/vmlinuz-4.4.0-42-generic
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 4.4.0-42-generic /boot/vmlinuz-4.4.0-42-generic
update-initramfs: Generating /boot/initrd.img-4.4.0-42-generic
run-parts: executing /etc/kernel/postinst.d/pm-utils 4.4.0-42-generic /boot/vmlinuz-4.4.0-42-generic
run-parts: executing /etc/kernel/postinst.d/unattended-upgrades 4.4.0-42-generic /boot/vmlinuz-4.4.0-42-generic
run-parts: executing /etc/kernel/postinst.d/update-notifier 4.4.0-42-generic /boot/vmlinuz-4.4.0-42-generic
run-parts: executing /etc/kernel/postinst.d/vboxadd 4.4.0-42-generic /boot/vmlinuz-4.4.0-42-generic
run-parts: failed to exec /etc/kernel/postinst.d/vboxadd: Exec format error
run-parts: /etc/kernel/postinst.d/vboxadd exited with return code 1
dpkg: error processing package linux-image-extra-4.4.0-42-generic (--remove):
 subprocess installed post-removal script returned error exit status 1
Errors were encountered while processing:
 linux-image-extra-4.4.0-38-generic
 linux-image-extra-4.4.0-42-generic
E: Sub-process /usr/bin/dpkg returned an error code (1)

Próbowałem wykonać następujące pytanie, ale bez powodzenia: Apt nie usuwa częściowo zainstalowanego jądra i nie może zainstalować żadnych innych pakietów

sprawdzanie pliku statusu dpkg Widzę, że oba pakiety są w połowie zainstalowane

Package: linux-image-extra-4.4.0-38-generic
Status: deinstall ok half-installed
Priority: optional
Section: kernel
Installed-Size: 158607
Maintainer: Ubuntu Kernel Team <[email protected]>
Architecture: amd64
Source: linux
Version: 4.4.0-38.57
Depends: linux-image-4.4.0-38-generic, crda | wireless-crda
Description: Linux kernel extra modules for version 4.4.0 on 64 bit x86 SMP
 This package contains the Linux kernel extra modules for version 4.4.0 on
 64 bit x86 SMP.
 .
 Also includes the corresponding System.map file, the modules built by the
 packager, and scripts that try to ensure that the system is not left in an
 unbootable state after an update.
 .
 Supports Generic processors.
 .
 Geared toward desktop and server systems.
 .
 You likely do not want to install this package directly. Instead, install
 the linux-generic meta-package, which will ensure that upgrades work
 correctly, and that supporting packages are also installed.

** Edycje

po ręcznym usunięciu pakietów jądra zgodnie z instrukcjami user.dz paste.ubuntu.com/23487716

tymczasem podczas sudo apt-get install -f Ubuntu ostrzegł mnie o błędzie systemowym wprowadź opis zdjęcia tutaj

dses
źródło
Co się stanie, gdy wybiegniesz sudo apt-get install -f?
negusp
Mam ten sam problem
dses
1
Czy ostatnio zainstalowałeś VirtualBox? Problemem jest linia run-parts: failed to exec /etc/kernel/postinst.d/vboxadd: Exec format error. vboxaddbędzie uruchamiany za każdym razem, gdy dodasz lub usuniesz jądro, i będzie nadal przerywał instalację lub usuwanie za każdym razem. Exec format errorzwykle oznacza, że ​​wspomniany plik wykonywalny został skompilowany dla niewłaściwej architektury. Jaka jest wydajność file /etc/kernel/postinst.d/vboxadd?
Chai T. Rex,
/etc/kernel/postinst.d/vboxadd: empty
dses
Zastanawiam się, dlaczego sudo apt-get install sshpróbuje usunąć te dodatkowe pakiety linux-image-extra.
jarno

Odpowiedzi:

11

Uwaga: Jak skomentował ChaiT.Rex, tylko kroki 4 i 5 są wymagane do rozwiązania problemu.

Zostawiam udokumentowane kroki 1,2 i 3 dla każdego, kto może potrzebować ręcznie usunąć niektóre paczki. Ale najpierw spróbuj /ubuntu//a/490677/26246, który wygląda łatwiej.

  1. Usuń je ręcznie, bądź ostrożny, jeśli wpisujesz poniższe polecenia, rm -rfjest to niebezpieczne polecenie, gdy jest uruchamiane jako root.

    sudo rm -rf /lib/modules/4.4.0-38-generic /lib/modules/4.4.0-42-generic
    sudo rm -rf /usr/share/doc/linux-image-extra-4.4.0-38-generic /usr/share/doc/linux-image-extra-4.4.0-42-generic
    sudo rm /var/lib/dpkg/info/linux-image-extra-4.4.0-38-generic* /var/lib/dpkg/info/linux-image-extra-4.4.0-42-generic*
    
  2. Zmień ich status w pliku statusu dpkg.

    Wykonaj kopię zapasową na wszelki wypadek

    sudo cp /var/lib/dpkg/status /var/lib/dpkg/status.backup0
    

    Znajdź powiązane wpisy (polecenie z oczekiwanym wynikiem, numer wiersza będzie inny):

    ~$ grep -n -e "linux-image-extra-4.4.0-38-generic" -e "linux-image-extra-4.4.0-42-generic" /var/lib/dpkg/status
    18488:Package: linux-image-extra-4.4.0-42-generic
    77123:Package: linux-image-extra-4.4.0-38-generic
    

    Otwórz plik statusu do edycji i zmień status pakietu:

    sudo nano +18488 /var/lib/dpkg/status
    

    od:

    Package: linux-image-extra-4.4.0-38-generic
    Status: install ok installed
    

    do:

    Package: linux-image-extra-4.4.0-38-generic
    Status: deinstall ok config-files
    

    Ctrl+, oaby zapisać. Ctrl+, xaby wyjść.

    Dokonaj tych samych zmian w programie Linux-image-extra-4.4.0-42-generic.

  3. Ręcznie usuń także linux-image-4.4.0-38-generic i linux-image-4.4.0-42-generic

    sudo rm -f *4.4.0-38-generic *4.4.0-42-generic
    sudo rm -rf /usr/share/doc/linux-image-4.4.0-38-generic /usr/share/doc/linux-image-4.4.0-42-generic
    

    Tak samo jak poprzednio, edytuj ich status do deinstall ok config-files

    $ grep -n -e "Package: linux-image-4.4.0-38-generic" -e "Package: linux-image-4.4.0-42-generic" /var/lib/dpkg/status
    61217:Package: linux-image-4.4.0-38-generic
    98051:Package: linux-image-4.4.0-42-generic
    
  4. Usuń ten kłopotliwy plik virtualbox

    sudo rm /etc/kernel/postinst.d/vboxadd
    
  5. Zaktualizuj status dpkg i menu grub

    sudo dpkg --audit
    sudo apt-get install -f
    sudo update-grub
    
user.dz
źródło
Ok udało mi się pomyślnie zainstalować i usunąć pakiet po wykonaniu instrukcji. Jednak po uruchomieniu sudo apt-get install -f
wyświetla
@dses, zaktualizowałem moją odpowiedź, można zacząć od początku.
user.dz
więc znowu wykonanie twoich kroków pozwoliło mi normalnie używać apt. Jest tylko problem, że teraz dostaję dodatkowe błędy pakietu jądra, a Ubuntu wyświetlał błąd systemu podczas „apt install -f”, jak pokazano w sekcji edycji pytania.
dses
1
@ user.dz Myślę, że jeśli usunięcie /etc/kernel/postinst.d/vboxadddziała, to wszystko, co jest naprawdę potrzebne. Wszystko w tym katalogu jest uruchamiane za każdym razem, gdy jądro jest instalowane lub usuwane, a ten plik Exec format errorprzerywa usuwanie tych jąder za każdym razem.
Chai T. Rex,
1
@ ChaiT.Rex, masz rację, nie zauważyłem tego na początku.
user.dz