Bloqueando atualizações do kernel com o dpkg

16

Gostaria de bloquear todas as atualizações do kernel fornecidas pela distribuição devido a uma coisa desagradável que aconteceu recentemente comigo. (Estou usando um derivado do Ubuntu 12.04 amd64.)

Eu gostaria de bloquear todas as atualizações para kernels instalados do menor versão 3.2 para os linux-headers, linux-headers-generic, linux-image, e linux-image-extrapacotes. O problema que eu estou encontrando é que todos eles têm uma versão e se eu bloquear uma versão específica, não se ganha nada porque uma nova versão será instalada (por exemplo: se eu bloquear linux-image-3.2.0-35, linux-image-3.2.0-36não está bloqueado e ainda poderia potencialmente ser instalado com um dist-upgradedos apt.)

Naftuli Kay
fonte
Observe que isso não funciona mais no Ubuntu 16.04. Você precisa colocar os pacotes na lista negra usando este guia: help.ubuntu.com/lts/serverguide/automatic-updates.html
user199618

Respostas:

17

O que você precisa usar é um recurso do apt-get chamado holding

Você pode fazer isso via Synaptic ou Dpkg. Aqui está como eu manteria meu kernel usando o método dpkg.

Primeiro verifique o nome da imagem do seu kernel

dpkg -l | grep linux-image

saída para mim:

ii  linux-image-3.2.0-4-amd64              3.2.35-2                           amd64        Linux 3.2 for 64-bit PCs
ii  linux-image-amd64                      3.2+46                             amd64        Linux for 64-bit PCs (meta-package)

então diga ao dpkg para conter o metapacote (a versão genérica sem nenhum número de versão)

echo linux-image-amd64 hold | sudo dpkg --set-selections

Você pode então verificar isso funcionado via dpkg -l linux-image-amd64

Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                       Version            Architecture       Description
+++-==========================-==================-==================-==========================================================
hi  linux-image-amd64          3.2+46             amd64              Linux for 64-bit PCs (meta-package)

Observe o 'oi' na parte inferior, h significa em espera e i significa atualmente instalado. Este pacote está instalado, mas não será atualizado.

Você pode reverter isso via

echo linux-image-amd64 install | sudo dpkg --set-selections

e novamente pode verificar via dpkg -l linux-image-amd64

Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                       Version            Architecture       Description
+++-==========================-==================-==================-==========================================================
ii  linux-image-amd64          3.2+46             amd64              Linux for 64-bit PCs (meta-package)

Observe 'ii', o primeiro i significa que este pacote está configurado para instalação e o segundo i significa que está atualmente instalado. Este pacote está instalado e será atualizado.

Para obter mais informações sobre esses sinalizadores, consulte man dpkgespecificamente as seções 'estados de seleção de pacotes'.

cjh
fonte
11
Os nomes das minhas imagens estão aqui . Eu quero banir "linux-image-generic"?
Naftuli Kay
11
@TKKocheran yes; você deseja suspender o metapacote, em vez de uma versão específica.
CJH
Não funciona - dpkg: warning: pacote não está no status nem banco de dados disponível na linha 1: linux-image-amd64 dpkg: warning: encontrado pacotes desconhecidos; isso pode significar que o banco de dados disponível está desatualizado e precisa ser atualizado por meio de um método de front-end; consulte as perguntas frequentes < wiki.debian.org/Teams/Dpkg/FAQ >
Arturas M