Como pular a atualização do kernel?


25

Estou executando o Ubuntu 12.04.1 LTS i686 no VirtulBox. Toda vez que verifico as atualizações, há um novo kernel do Linux. Se eu instalar o novo kernel, tenho que instalar o Virtulbox Guest Additions novamente e reiniciar o servidor. Eu não quero fazer isso toda semana. Sei que posso desmarcar manualmente os pacotes do kernel do gerenciador de atualizações, mas existe uma maneira de pular a atualização do kernel automaticamente? Encontrei uma resposta aqui, mas é para o Ubuntu 10. Obrigado.

Respostas:


18

O APT (Advanced Packaging Tool) é o sistema que o Ubuntu usa para gerenciar todo o software instalado em um sistema. Ele permite que você "fixe" um pacote em uma determinada versão, para que não seja atualizado quando o Gerenciador de Atualizações for executado.

Para fixar seus pacotes de kernel, primeiro você deve determinar qual versão é seu kernel. Uma maneira de fazer isso é abrir o Synaptic Package Manager em Sistema> Administração.

insira a descrição da imagem aqui

Digite "linux-generic" no campo de texto Pesquisa Rápida e pressione Enter.

insira a descrição da imagem aqui

Anote o número listado na coluna "Versão instalada". Vamos usá-lo na próxima etapa.

Em seguida, precisamos editar o arquivo / etc / apt / preferências. Abra-o pressionando Alt + F2 para abrir a janela Executar Aplicativo e entrar em:

gksudo gedit /etc/apt/preferences

insira a descrição da imagem aqui

Isso abrirá uma janela do gedit. Provavelmente a janela ficará em branco, a menos que você tenha brincado com o APT antes.

Na janela, digite o seguinte, substituindo o número da versão pelo número da versão encontrado no Synaptic Package Manager.

Package: linux-generic linux-headers-generic linux-image-generic linux-restricted-modules-generic
Pin: version <insert version here>
Pin-Priority: 1001

insira a descrição da imagem aqui

Salve o arquivo e feche o gedit. Se você abrir o Gerenciador de Atualizações, verá que as atualizações do kernel do Linux estão ocultas!

insira a descrição da imagem aqui

Fonte

Bloqueando pacotes com APT / DPKG

Lembre-se do nome do pacote do seu kernel de cima.

Abra um terminal e execute:

sudo -s

E bateu enter.

Digite sua senha para sudo:

echo kernel_package_name hold | dpkg --set-selections

Substitua kernel_package_namepelo nome do kernel que você deseja fixar.

Agora execute:

sudo apt-get update && sudo apt-get upgrade

Para remover o pino do Apt / Dpkg:

Abra um terminal

sudo -s
echo kernel_package install | dpkg --set-selections

Substitua kernel_package pelo pacote que você deseja fixar.

Agora execute:

sudo apt-get update &&  sudo apt-get upgrade

Fonte

O que você está tentando fazer é chamado de fixação. As fontes que eu lhe dei acima têm o essencial sobre o que você deve fazer para realizar suas tarefas em mãos.


1
Obrigado pela sua resposta. Parece que estamos usando uma versão diferente. Não tenho o Gerenciador de Pacotes Synaptic e / etc / apt / preferências no meu Ubuntu 12.04.
precisa saber é o seguinte

2
Sim, o Synaptic não é mais instalado por padrão.
Ish

1
@garconcn, você pode instalar Synaptic e instalar a correção eu lhe disse, ou ler a pergunta novamente, como eu colocar mais informação sobre ele
LnxSlck

2
@LnxSlck, instalei o Synaptic e segui suas instruções. Funciona. Obrigado.
garconcn

16

Em uma linha é:

echo $(dpkg -l "*$(uname -r)*" | grep image | awk '{print $2}') hold | dpkg --set-selections

Isso definirá o estado da imagem do kernel da instalação para manter e, assim, evitará atualizações.


8

O one-liner de Christoph não leva em conta o pacote extra (por exemplo, linux-image-extra-3.13.0-45-generic). Em vez disso, use este:

para i em $ (dpkg -l "* $ (uname -r) *" | grep image | awk '{print $ 2}'); echo $ i hold | dpkg --set-selections; feito

4

Em relação à sugestão do superlexx: essa linha perderá o pacote "headers":

dpkg -l "*$(uname -r)*" | grep image | awk '{print $2}'
linux-image-3.13.0-48-generic
linux-image-extra-3.13.0-48-generic

Então, que tal simplesmente usar o seguinte:

dpkg -l "*$(uname -r)*" | grep kernel | awk '{print $2}'
linux-headers-3.13.0-48-generic
linux-image-3.13.0-48-generic
linux-image-extra-3.13.0-48-generic

1
Se os pacotes extras / headers / etc não estiverem marcados, há problemas? Ou você está sugerindo marcá-las também para garantir a integridade? Eu esperaria que o Ubuntu não tentasse instalar um pacote de cabeçalhos atualizado até que o linux-image fosse instalado (os cabeçalhos são uma dependência da imagem). Ainda tenho que verificar isso.
whitehat101

2
Vocês poderiam colaborar em uma única linha, em vez de empilhar três respostas uma na outra. = P Apenas dizendo
cubuspl42

1
Não é necessário invocar o grep se você já estiver usando o awk:dpkg -l "*$(uname -r)*" | awk '/kernel/{print $2}'
Javier López

1

Isso elimina os pacotes de meta-kernel que permitem atualizações do kernel:

sudo apt purge $(apt-cache rdepends -i --installed linux-{headers,image}-$(uname -r)|awk '!/[0-9]/ && /^[ ]/{print $1}')

(Se você acabou de atualizar o kernel, é necessário reiniciar primeiro com o novo kernel ou encontrar a versão mais recente do kernel e usá-la acima, em vez de "$ (uname -r)".)

Recomenda-se instalar as atualizações de kernels, já que são na maioria atualizações de segurança.


0

No Ubuntu 16.04.1, o seguinte código funciona

for i in $(dpkg -l "*$(uname -r)*" | grep image | awk '{print $2}'); do echo $i hold | sudo dpkg --set-selections; done

o é uma melhoria do código do Superlexx, o sudoé adicionado

dpkg -l | grep linux-image

Você encontrará:

oi linux-image-4.4.0-34-genérico ...

oi linux-image-extra-4.4.0-34-genérico ...

observe que a tag agora lê hi, nãoii

remover pino

for i in $(dpkg -l "*$(uname -r)*" | grep image | awk '{print $2}'); do echo $i install | sudo dpkg --set-selections; done

Resposta Nice, mas você colocar sudono comentário não o comando ...
WinEunuuchs2Unix

0

Versão mais curta: (Substitua "hold" por "install" para remover o pino)

 dpkg -l "*$(uname -r)*" | grep kernel | awk '{print $2,"hold"}' | sudo dpkg --set-selections

Para ver o estado de todas as imagens e cabeçalhos do kernel, execute:

 dpkg --get-selections | grep "linux-"
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.