Obrigado por toda a ajuda e links. Passei algumas horas neste fim de semana e verifiquei o seguinte
Respostas curtas
- Sim, você pode limpar todos os pacotes
linux-signed*
, mas você precisa instalarlinux-generic
se quiser que as atualizações automáticas do kernel continuem funcionando adequadamente. Todas as reconfigurações do grub, kernel e initramfs são tratadas automaticamente. Os scripts de instalação do kernel realmente lidam com tudo sem problemas.apt-get purge linux-signed* linux-generic+
-
Sim, você pode se livrar dos kernels não assinados sem nenhum efeito negativo, mas eles continuarão retornando após as atualizações do kernel. Isso não pode ser resolvido com o gerenciamento de pacotes, mas é fácil de corrigir com um script curto.
#!/bin/sh # # user script: /etc/kernel/postinst.d/zzz-remove-unsigned-kernel # # after a new signed kernel image is installed, this script removes # the unsigned image # if [ -e ".efi.signed" ]; then echo "/etc/kernel/postinst.d/zzz-remove-unsigned-kernel: removing " rm ""; fi
Respostas mais longas
No primeiro caso, a solução é muito simples. Funciona da mesma forma que você imaginaria à primeira vista. Ainda aprendi algumas coisas úteis sobre a estrutura de pacotes do Ubuntu para os kernels. Eu queria ter certeza de que entendi os efeitos colaterais ou consequências, mas também gosto de ver como as coisas são construídas. Apenas como uma nota lateral, eu uso o kernel genérico, mas basta trocar generic
por lowlatency
ou virtual
se isso for sua coisa. Além disso, tudo aqui é baseado em 16.10 (yakkety). Aqui está a hierarquia do pacote do kernel:
-
linux-signed-generic
é um pacote , o que significa que não inclui nenhum código. Apenas tem uma lista de dependências, que sempre contém a instalação completa da mais nova atualização do kernel. "Completo" significa todos os cabeçalhos do kernel, a imagem do kernel, a assinatura da imagem (separada) e módulos extras do kernel para praticamente todos os dispositivos que o Ubuntu pode suportar. -
linux-generic
é outro pacote meta contendo todos os mesmos pacotes reais, exceto pela assinatura da imagem. A imagem real do kernel é somente contida no pacotelinux-image-x.x.x-yy
. O pacotelinux-signed-image-x.x.x-yy
contém apenas uma assinatura separada e o script de construção anexa esse sig a/boot/vmlinuz-x.x.x.yy-generic
e cria/boot/vmlinuz-x.x.x.yy-generic.efi.signed
. O script não limpa a imagem não assinada. -
Os pacotes de kernel têm scripts especiais em
/etc/kernel
que modificam o comportamento padrão do autoremove do apt. Normalmente, removerlinux-signed-generic
sinalizaria todos os pacotes downstream para autoremoval, mas isso não acontece para os pacotes do kernel até que haja duas versões mais recentes da mesma versão.
No segundo caso (tentando manter apenas a imagem do kernel assinada), parece não haver consequências para a exclusão de /boot/vmlinuz-x.x.x.yy-generic
após a conclusão da instalação. As duas imagens do kernel são exatamente as mesmas, exceto pela assinatura, e compartilham todos os mesmos módulos e arquivos de configuração. No entanto, assim que um kernel atualizado for instalado, ele deixará a imagem não assinada. Felizmente, houve ganchos fáceis para executar um script toda vez que um novo kernel é instalado. Todos os scripts em /etc/kernel/postinst.d
são executados por run-parts
com dois argumentos é a versão do kernel e
é o caminho completo da imagem (por exemplo,
/boot/vmlinuz-x.x.x-yy-generic
)
A única ressalva secundária é que a remoção da imagem não assinada deve ser feita depois que o grub terminar de atualizar grub.cfg
. Se /boot/vmlinuz-x.x.x-yy-generic.efi.signed
existir, o grub adicionará essa imagem a grub.cfg
e ignorará a imagem não assinada. No entanto, deve haver algum lugar no processo que ainda espere a imagem não assinada porque o grub não consegue configurar corretamente sem ela. O script que inicia a configuração do grub é /etc/kernel/postinst.d/zz-update-grub
. Eu nomeei meu script zzz-remove-unsigned-kernel
para que run-parts
o execute depois que tudo estiver concluído.
EDIT: Eu usei este script agora com algumas atualizações de compilação do kernel, e tudo parece funcionar bem. Eu estou usando a opção 2 acima (excluindo kernels não assinados). Vou marcar isso como a resposta correta.