O Apt não remove o kernel parcialmente instalado e não pode instalar nenhum outro pacote

5

O apt não está atualizando ou instalando novos pacotes após uma atualização parecida do kernel. Eu tentei apt-get purge -f linux-image-extra-3.19.0-22-generic , que falha com uma mensagem de erro muito semelhante. A máquina também falha ao inicializar a versão mais recente do kernel (padrão no grub), mas as versões anteriores funcionam bem.

$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages will be REMOVED:
  linux-image-3.19.0-22-generic linux-image-extra-3.19.0-22-generic
The following packages will be upgraded:
  linux-cloud-tools-common
1 upgraded, 0 newly installed, 2 to remove and 0 not upgraded.
2 not fully installed or removed.
Need to get 0 B/24.3 kB of archives.
After this operation, 208 MB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 453815 files and directories currently installed.)
Removing linux-image-extra-3.19.0-22-generic (3.19.0-22.22) ...
depmod: FATAL: could not load /boot/System.map-3.19.0-22-generic: No such file or directory
run-parts: executing /etc/kernel/postinst.d/apt-auto-removal 3.19.0-22-generic /boot/vmlinuz-3.19.0-22-generic
run-parts: executing /etc/kernel/postinst.d/dkms 3.19.0-22-generic /boot/vmlinuz-3.19.0-22-generic
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.19.0-22-generic /boot/vmlinuz-3.19.0-22-generic
update-initramfs: Generating /boot/initrd.img-3.19.0-22-generic
grep: /boot/config-3.19.0-22-generic: No such file or directory
depmod: WARNING: could not open /tmp/mkinitramfs_6gldfB/lib/modules/3.19.0-22-generic/modules.order: No such file or directory
depmod: WARNING: could not open /tmp/mkinitramfs_6gldfB/lib/modules/3.19.0-22-generic/modules.builtin: No such file or directory
run-parts: executing /etc/kernel/postinst.d/pm-utils 3.19.0-22-generic /boot/vmlinuz-3.19.0-22-generic
run-parts: executing /etc/kernel/postinst.d/unattended-upgrades 3.19.0-22-generic /boot/vmlinuz-3.19.0-22-generic
run-parts: executing /etc/kernel/postinst.d/update-notifier 3.19.0-22-generic /boot/vmlinuz-3.19.0-22-generic
run-parts: executing /etc/kernel/postinst.d/zz-update-grub 3.19.0-22-generic /boot/vmlinuz-3.19.0-22-generic
Generating grub configuration file ...
ERROR: cannot determine partition label for rootfs /dev/sda9
run-parts: /etc/kernel/postinst.d/zz-update-grub exited with return code 1
dpkg: error processing package linux-image-extra-3.19.0-22-generic (--remove):
 subprocess installed post-removal script returned error exit status 1
Removing linux-image-3.19.0-22-generic (3.19.0-22.22) ...
Examining /etc/kernel/postrm.d .
run-parts: executing /etc/kernel/postrm.d/initramfs-tools 3.19.0-22-generic /boot/vmlinuz-3.19.0-22-generic
update-initramfs: Deleting /boot/initrd.img-3.19.0-22-generic
run-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.19.0-22-generic /boot/vmlinuz-3.19.0-22-generic
Generating grub configuration file ...
ERROR: cannot determine partition label for rootfs /dev/sda9
run-parts: /etc/kernel/postrm.d/zz-update-grub exited with return code 1
Failed to process /etc/kernel/postrm.d at /var/lib/dpkg/info/linux-image-3.19.0-22-generic.postrm line 328.
dpkg: error processing package linux-image-3.19.0-22-generic (--remove):
 subprocess installed post-removal script returned error exit status 1
Errors were encountered while processing:
 linux-image-extra-3.19.0-22-generic
 linux-image-3.19.0-22-generic
E: Sub-process /usr/bin/dpkg returned an error code (1)

Eu preciso começar a trabalhar de novo e entrar em um estado em que possa instalar futuros kernels. Purgar corretamente o kernel 3.19.0-22 seria bom, mas desnecessário. Sinta-se à vontade para pedir mais informações e agradecemos antecipadamente

- Edições -

A resposta do 0x450 funciona para qualquer pacote não relacionado ao kernel. As atualizações do kernel e do grub retornam apt e dpkg a um estado quebrado. Eu notei esta mensagem de erro recorrente:

Generating grub configuration file ... ERROR: cannot determine partition label for rootfs /dev/sda9

Este poderia ser um problema relacionado aos arquivos de configuração do grub?


sudo apt-get install --reinstall linux-image-extra-3.19.0-22-generic resulta em um erro muito semelhante (que pode ser visto aqui )

sudo dpkg --configure -a cria este erro

sudo apt-get purge linux-image-extra-3.19.0-22-generic cria este erro

    
por daweim0 21.07.2015 / 00:37

5 respostas

0

Acontece que o problema foi causado pelo grub-mkconfig travando com a mensagem de erro Generating grub configuration file ... ERROR: cannot determine partition label for rootfs /dev/sda9 (sda9 segurou minha raiz fs).

O Apt travou porque, quando tentou instalar novos kernels, correu o grub-mkconfig para adicioná-los ao menu de inicialização. Não foi realmente um problema com o apt, mas com o grub.

Eu o consertei reinstalando o Ubuntu e usando o ext3 ao invés do ext4 para a partição que contém a raiz do meu sistema de arquivos. Meu diretório pessoal ainda está em sua própria partição ext4, portanto ele não parece ser afetado.

A resposta do 0x450 funciona bem como uma correção temporária para que se possa usar o apt novamente. Não resolve o problema da raiz.

    
por daweim0 28.07.2015 / 01:57
10

Eu lutei com o mesmo problema, mas os pacotes quebrados do kernel eram da versão 3.13.0.57.

Inspecione o problema:

Verifique o dpkg status dos pacotes:

dpkg --status linux-image-3.19.0-22-generic
dpkg --status linux-image-extra-3.19.0-22-generic

Se a saída indicar que os pacotes estão em mau estado, ou seja, meio instalados ou não totalmente instalados , isso significa que eles quebraram apt-get e dpkg respectivamente.

A solução:

As entradas dos pacotes do kernel infectados devem ser excluídas manualmente do arquivo de status de dpkg em ordem apt-get e dpkg para funcionar normalmente mais uma vez. As etapas são as seguintes:

  1. Certifique-se de criar um backup do arquivo de status apenas no caso de algo dar errado.

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

  2. Abra /var/lib/dpkg/status com seu editor de texto preferido e pesquise e exclua SOMENTE as referências dos pacotes quebrados. Você não deve excluir mais nada!

  3. Execute sudo apt-get update e sudo apt-get upgrade para garantir que tudo esteja corrigido.

  4. Esta etapa é opcional, pois os pacotes não são mais rastreados a partir dos gerenciadores de pacotes, mas se você desejar, pode liberar algum espaço em disco excluindo-os. Você pode remover manualmente com segurança todas as entradas dos pacotes quebrados do kernel em /boot e em /usr/src , mas seja MUITO CUIDADO . Certifique-se de tocar apenas nos arquivos / pastas, que correspondem à versão do 3.19.0-22 no seu caso.

por 0x450 24.07.2015 / 09:26
1

Causa raiz

O problema raiz parece ser que /boot/System.map-3.19.0-22-generic está faltando, o que impede a reconfiguração / remoção do pacote.

Soluções sugeridas

Minha sugestão inicial foi sudo apt-get install --reinstall linux-image-extra-3.19.0-22-generic

Como isso aparentemente falha ("não é possível configurar o half-installed"), sugiro fazer isso um pouco mais forceful , por exemplo com as seguintes opções

sudo dpkg --remove --force-remove-reinstreq linux-image-extra-3.19.0-22-generic

Essa sugestão é baseada em esta resposta.

Alternativa: reparo manual?

Como alternativa, você também pode tentar reparar manualmente esse arquivo? Talvez seja descompactado pelo apt-get ao tentar reinstalar? É um pouco difícil para mim replicar no meu sistema agora

    
por noleti 24.07.2015 / 08:57
0

Eu acho que você deveria correr

sudo dpkg --configure -a

seguido pelo que já foi mencionado:

sudo apt-get purge linux-image-extra-3.19.0-22-generic
    
por JEL 23.07.2015 / 07:31
-1

Você poderia usar remover em vez de limpar e, em seguida, atualizar o kernel e inserir isso no terminal:

 sudo apt-get -f remove linux-image-extra-3.19.0-22-generic

e, em seguida, exclua o arquivo sources.list, insira as configurações e atualize, choqueie toda a lista chaotic e feche-a novamente.

e, em seguida, reinstale o kernel mais recente e insira isso no terminal:

sudo apt-get install linux-amd64_ linux-efi
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo apt-get install aptitude
sudo aptitude linux-efi

e pode funcionar bem assim.

    
por Michael 25.07.2015 / 21:01