Força a remoção de pacotes indesejados do linux-image-extra *

8

Para fazer uma longa história curta, eu sou preso a um punhado de pacotes de imagens indesejados e parcialmente configurados dos quais estou tentando me livrar:

$ dpkg -l |grep linux-im
iF  linux-image-3.13.0-100-generic       3.13.0-100.147 i386 Linux kernel image for version 3.13.0 on 32 bit x86 SMP
iF  linux-image-3.13.0-101-generic       3.13.0-101.148 i386 Linux kernel image for version 3.13.0 on 32 bit x86 SMP
iF  linux-image-3.13.0-92-generic        3.13.0-92.139  i386 Linux kernel image for version 3.13.0 on 32 bit x86 SMP
iF  linux-image-3.13.0-93-generic        3.13.0-93.140  i386 Linux kernel image for version 3.13.0 on 32 bit x86 SMP
iF  linux-image-3.13.0-96-generic        3.13.0-96.143  i386 Linux kernel image for version 3.13.0 on 32 bit x86 SMP
iH  linux-image-extra-3.13.0-100-generic 3.13.0-100.147 i386 Linux kernel extra modules for version 3.13.0 on 32 bit x86 SMP
iH  linux-image-extra-3.13.0-101-generic 3.13.0-101.148 i386 Linux kernel extra modules for version 3.13.0 on 32 bit x86 SMP
iH  linux-image-extra-3.13.0-92-generic  3.13.0-92.139  i386 Linux kernel extra modules for version 3.13.0 on 32 bit x86 SMP
iH  linux-image-extra-3.13.0-93-generic  3.13.0-93.140  i386 Linux kernel extra modules for version 3.13.0 on 32 bit x86 SMP
iH  linux-image-extra-3.13.0-96-generic  3.13.0-96.143  i386 Linux kernel extra modules for version 3.13.0 on 32 bit x86 SMP

Estas imagens são de fato inúteis, porque meu sistema 14.04 de 32 bits reside em um contêiner OpenVZ, que é o único responsável pelo kernel. Como você pode ver, muito mais antigo:

$ uname -r
2.6.32-042stab116.2

Assim, ao contrário da maioria das perguntas similares focando em como remover imagens do kernel antigas após atualizações de rotina, o que estou tentando fazer aqui é COMPLETAMENTE PURIR TODAS ESTAS 3.13 PACOTES , que não deveria estar lá em primeiro lugar.

Aqui está um resumo das minhas tentativas até agora.

Tentando remover / limpar os pacotes das formas usuais ( apt-get , apt , aptitude , não importa) parece não funcionar, devido a um círculo vicioso aparente.

sudo apt-get purge linux-image-3.13.0-100-generic linux-image-3.13.0-101-generic linux-image-3.13.0-92-generic linux-image-3.13.0-93-generic linux-image-3.13.0-96-generic linux-image-extra-3.13.0-100-generic linux-image-extra-3.13.0-101-generic linux-image-extra-3.13.0-92-generic linux-image-extra-3.13.0-93-generic linux-image-extra-3.13.0-96-generic

Como você pode ver na saída , nada é realmente removido. Por outro lado, aptitude consegue ir um pouco mais longe:

sudo aptitude purge linux-image-3.13.0-100-generic linux-image-3.13.0-101-generic linux-image-3.13.0-92-generic linux-image-3.13.0-93-generic linux-image-3.13.0-96-generic linux-image-extra-3.13.0-100-generic linux-image-extra-3.13.0-101-generic linux-image-extra-3.13.0-92-generic linux-image-extra-3.13.0-93-generic linux-image-extra-3.13.0-96-generic

No final de este processo , os *image-3.13* s desaparecerão, juntamente com os arquivos e pastas correspondentes normalmente encontrados em /boot e em /lib/modules , mas os image-extra s ainda são reportados como semi-instalados (mesmo que pareçam não conter arquivos, conforme verificado por dpkg -L ...)

Além disso, as dependências agora estão quebradas, já que repetir a limpeza neste estágio faz com que o apt reclame sobre arquivos / pastas ausentes em /boot e em /lib/modules . Eu tentei colocar arquivos fictícios nos locais esperados, como sugerido aqui , mas no final eu encontrei o original erros. O seguinte, creio eu, é o trecho crucial:

[...]
Removing linux-image-extra-3.13.0-101-generic (3.13.0-101.148) ...
run-parts: executing /etc/kernel/postinst.d/apt-auto-removal 3.13.0-101-generic /boot/vmlinuz-3.13.0-101-generic
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.13.0-101-generic /boot/vmlinuz-3.13.0-101-generic
update-initramfs: Generating /boot/initrd.img-3.13.0-101-generic
E: /usr/share/initramfs-tools/hooks/fixrtc failed with return 1.
update-initramfs: failed for /boot/initrd.img-3.13.0-101-generic with 1.
run-parts: /etc/kernel/postinst.d/initramfs-tools exited with return code 1
dpkg: error processing package linux-image-extra-3.13.0-101-generic (--purge):
subprocess installed post-removal script returned error exit status 1
[...]

Depois de tentar, sem sucesso, uma opção supostamente nuclear :

sudo dpkg --remove --force-remove-reinstreq package_name

Eu fiquei sem ideias.

    
por Giuseppe 01.12.2016 / 14:50

3 respostas

2

Dado que:

  • os linux-image-3.13.0-XXX-generic foram eliminados com sucesso
  • os linux-image-extra-3.13.0-XXX-generic ainda são reportados como semi-instalados
  • nenhum pacote atualmente instalado depende desses image-extra s
  • nenhuma dessas imagens deve estar lá em primeiro lugar (já que o kernel 2.6 é fornecido pelo contêiner host OpenVZ)
  • nenhuma das tentativas tradicionais consegue limpar o sistema

Em seguida, uma possível abordagem é eliminar com vigor as entradas pendentes do banco de dados dpkg , conforme sugerido aqui .

ATENÇÃO: esta é uma operação potencialmente perigosa e de baixo nível.

  • procure por arquivos pertencentes ao pacote que você deseja remover (tente $ dpkg -L linux-image-extra-3.13.0-XXX-generic ) e exclua-os
  • abra o arquivo /var/lib/dpkg/status , localize e exclua o (s) bloco (s) de texto que descreve o (s) pacote (s) que você deseja que o dpkg esqueça
  • seja extremamente cuidadoso ao preservar linhas em branco entre descritores de pacotes, espaços no início de linhas, etc. Eles dizem que o banco de dados do apt é implacável quanto a erros de digitação.
  • depois de salvar o arquivo de status, dpkg e todos os programas relacionados com apt devem voltar ao normal
por Giuseppe 12.12.2016 / 17:22
0

Fazer ls /boot deve mostrar alguns arquivos vmlinuz-X.XX.XX . Do apt-get purge linux-image-X.XX.XX-generic para cada um, mas NÃO REMOVA o kernel que você está executando. Você pode verificar qual com uname -r .

    
por Mark Yisri 01.12.2016 / 15:13
0

Eu uso o seguinte em um script para nuke tudo, mas o kernel ativo:

dpkg -l linux-* | awk '/^ii/{ print }' | grep -v -e "$(uname -r | cut -f1,2 -d"-")" | grep -e "[0-9]" | grep -E "(image|headers)" | xargs sudo apt-get -y purge

É bem parecido com o que você chamou, mas talvez dpkg seja a diferença necessária.

O conjunto completo de scripts está aqui se estiver interessado: link

    
por Mark 04.12.2016 / 23:12