Linux · 8 min read · Dec 20, 2025

Como Bloquear Atualizações de Pacotes e Kernels no Debian / Ubuntu

APT é provavelmente a ferramenta mais útil para um usuário Linux. Você pode instalar, atualizar e remover qualquer software/pacote do seu sistema Linux com um único comando. Mas às vezes, você precisa de controle granular sobre qual pacote deseja instalar ou atualizar e qual pacote bloquear para não ser atualizado automaticamente. Por que você gostaria de fazer isso? Às vezes, você descobre que a versão atualizada de um pacote está com bugs. Você não quer que esse pacote seja atualizado na próxima vez que executar sudo apt upgrade. E é um incômodo atualizar cada pacote individualmente.

Este tutorial abordará como bloquear certos pacotes de serem instalados ou atualizados e como bloquear versões específicas de pacotes ou kernels de serem instalados.

Nota: É fácil esquecer quais pacotes você manteve após algum tempo, mesmo quando suas versões sem bugs estão disponíveis. Portanto, fique atento, pois manter pacotes por muito tempo pode introduzir problemas de segurança.

Discutiremos dois métodos aqui. O primeiro método bloqueará todas as instalações e atualizações para um determinado pacote. O segundo método oferece controle mais granular, permitindo que você bloqueie versões específicas de um pacote.

Pré-requisitos

  • Um servidor com o sistema operacional Ubuntu ou Debian. O Ubuntu 22.04 foi usado para este tutorial, mas os comandos aqui também devem funcionar bem com outros sistemas operacionais baseados em Debian e versões mais antigas.
  • Um usuário não-root com privilégios sudo.

Método 1 (apt-mark)

Para bloquear um pacote de ser instalado, atualizado ou removido, podemos usar o comando apt-mark.

Se você quiser manter um pacote, por exemplo, htop, de ser instalado, atualizado ou removido, use o seguinte comando.

$ sudo apt-mark hold htop

Você deve ver a seguinte saída.

htop set on hold.

O pacote bloqueado permanecerá na mesma versão, mesmo se você atualizar seu sistema. Isso é especialmente útil para reter drivers gráficos.

Para remover o bloqueio do pacote, emita o seguinte comando.

$ sudo apt-mark unhold htop

Você deve ver a seguinte saída.

Canceled hold on htop.

Há uma importante ressalva com isso. Embora o pacote não seja atualizado automaticamente ao usar o comando sudo apt upgrade ou ao atualizar o sistema, você ainda pode remover o pacote manualmente. sudo apt remove ainda funcionará em pacotes mantidos.

Este método apenas os bloqueia de serem alterados automaticamente. Mantê-los em espera os manterá em suas versões atuais, não importa o que aconteça, a menos que você decida removê-los manualmente.

Método 2 (/etc/apt/preferences)

Este método envolve editar o arquivo /etc/apt/preferences, onde você pode especificar exatamente qual versão de qual pacote de qual repositório está instalada.

Cada pacote recebe uma prioridade numérica com base na qual o APT decide se deve instalar o pacote ou não e, se sim, de qual repositório ele deve ser retirado.

Por exemplo, vamos verificar alguns detalhes sobre o pacote nginx. Emita o seguinte comando.

$ apt-cache policy nginx

Você deve ver uma saída semelhante.

nginx:
  Installed: (none)
  Candidate: 1.22.1-1~jammy
  Version table:
     1.22.1-1~jammy 500
        500 http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages
     1.22.0-1~jammy 500
        500 http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages
     1.20.2-1~jammy 500
        500 http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages
     1.18.0-6ubuntu14.3 500
        500 http://us.archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages
        500 http://us.archive.ubuntu.com/ubuntu jammy-security/main amd64 Packages
     1.18.0-6ubuntu14 500
        500 http://us.archive.ubuntu.com/ubuntu jammy/main amd64 Packages

Você verá que existem dois repositórios de onde o nginx é instalado. O primeiro é o repositório do Ubuntu e o segundo é o repositório do nginx.

Você pode ver 500 escrito contra todos os repositórios. Este número especifica a prioridade do pacote. Como é o mesmo para todos os repositórios, as chances de o nginx vir de qualquer um dos repositórios são as mesmas. Então, como o sistema decidirá qual pacote escolher? Ele escolherá a versão mais alta que existe. Neste caso, é 1.22.1. Para o Ubuntu, o número da versão completa se torna 1.22.1-1~jammy.

Se você não quiser atualizar para a versão 1.22.1 e quiser bloqueá-la, precisará editar o arquivo /etc/apt/preferences.

Abra o arquivo no editor nano.

$ sudo nano /etc/apt/preferences

Este comando também ajudará você a criar o arquivo se ele não existir no sistema anteriormente.

Cole o seguinte código no arquivo.

Package: nginx
Pin: version 1.22.1-1~jammy
Pin-Priority: -1

Definir a prioridade para qualquer coisa abaixo de 0 significa que o pacote não será instalado. Se você quiser que um pacote seja sempre instalado, defina sua prioridade para 1000 ou mais.

Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.

Vamos verificar o pacote novamente.

$ apt-cache policy nginx

Você verá a seguinte saída.

nginx:
  Installed: (none)
  Candidate: 1.22.0-1~jammy
  Version table:
     1.22.1-1~jammy -1
        500 http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages
     1.22.0-1~jammy 500
        500 http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages
     1.20.2-1~jammy 500
        500 http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages
     1.18.0-6ubuntu14.3 500
        500 http://us.archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages
        500 http://us.archive.ubuntu.com/ubuntu jammy-security/main amd64 Packages
     1.18.0-6ubuntu14 500
        500 http://us.archive.ubuntu.com/ubuntu jammy/main amd64 Packages

Note alguma diferença? A versão de lançamento candidata caiu de 1.22.1 para 1.22.0. Isso significa que a próxima versão mais alta que o sistema agora instalará é 1.22.0. Você também notará -1 escrito contra a versão mais recente, o que significa que o sistema deve ignorar essa versão.

Ignorar uma versão, mas permitir a outra

Você pode adicionar várias entradas para o mesmo pacote no arquivo. Por exemplo, adicione o seguinte código ao arquivo.

Package: nginx
Pin: version 1.22.1-1~jammy
Pin-Priority: -1

Package: nginx
Pin: version 1.20.2-1~jammy
Pin-Priority: 1000

Aqui estamos dizendo ao sistema para ignorar a versão 1.22.1, mas sempre instalar a versão 1.20.2.

Vamos verificar novamente usando o comando apt-cache policy.

nginx:
  Installed: (none)
  Candidate: 1.20.2-1~jammy
  Version table:
     1.22.1-1~jammy -1
        500 http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages
     1.22.0-1~jammy 500
        500 http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages
     1.20.2-1~jammy 1000
        500 http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages
     1.18.0-6ubuntu14.3 500
        500 http://us.archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages
        500 http://us.archive.ubuntu.com/ubuntu jammy-security/main amd64 Packages
     1.18.0-6ubuntu14 500
        500 http://us.archive.ubuntu.com/ubuntu jammy/main amd64 Packages

A versão candidata agora mudou para 1.20.2 em vez de 1.22.0.

Alterar a preferência do repositório

Vamos considerar mais um caso. E se quisermos bloquear o Nginx de ser instalado de seu repositório e escolher o repositório do Ubuntu em vez disso? Uma maneira seria remover o repositório do Nginx, mas você pode novamente usar o arquivo de preferências para escolher o repositório para você.

Insira o seguinte código no arquivo.

Package: nginx
Pin: release o=nginx
Pin-Priority: -1

A palavra-chave release apenas especifica a próxima versão mais alta. o=nginx refere-se à origem do pacote. Aqui é nginx. Isso significa que o sistema não deve instalar o pacote nginx de seu repositório. Outra maneira de alcançar o mesmo resultado é usar o seguinte código.

Package: nginx
Pin: release o=jammy
Pin-Priority: 1000

Desta vez, definimos a prioridade 1000 do pacote do repositório do Ubuntu (jammy). Isso garantirá que o Nginx seja sempre instalado a partir do repositório do Ubuntu e não de nenhum outro lugar.

Não só você pode especificar a origem do pacote, mas também pode adicionar o arquivo, componente, rótulo e arquitetura do pacote que o sistema deve escolher usando as seguintes palavras-chave na seção Pin.

  • c -> Componente
  • a -> Arquivo
  • o -> Origem
  • l -> Rótulo
  • n -> Arquitetura

Bloqueando Atualizações Específicas do Kernel

Vamos ver como podemos bloquear atualizações específicas do kernel. Liste todos os pacotes relacionados ao kernel no seu sistema.

$ dpkg -l "*$(uname -r)*" | grep kernel | awk '{print $2}'

Você verá uma saída semelhante.

linux-headers-5.15.0-33-generic
linux-image-5.15.0-33-generic
linux-modules-5.15.0-33-generic
linux-modules-extra-5.15.0-33-generic

Os seguintes métodos precisarão ser repetidos para todos os pacotes obtidos aqui.

Método 1 (apt-mark)

Primeiro, vamos verificar qual versão do kernel está ativa. Para fazer isso, execute o seguinte comando.

$ uname -r

Você deve ver uma saída semelhante.

5.15.0-53-generic

Para evitar que o kernel seja atualizado, podemos simplesmente usar o comando apt-mark.

$ sudo apt-mark hold linux-image-$(uname -r)

Você deve ver uma saída semelhante.

linux-image-5.15.0-53-generic set on hold.

Você pode seguir o mesmo método para bloquear os cabeçalhos do kernel bloqueando o pacote linux-headers-$(uname -r).

Método 2 (/etc/apt/apt.conf.d/50unattended-upgrades)

O segundo método envolve o arquivo /etc/apt/apt.conf.d/50unattended-upgrades.

Abra-o para edição.

$ sudo nano /etc/apt/apt.conf.d/50unattended-upgrades

Role para baixo até a seção Unattended-Upgrade::Package-Blacklist e edite da seguinte forma.

Unattended-Upgrade::Package-Blacklist {
"linux-generic";
"linux-image-generic";
"linux-headers-generic";
"linux-modules-generic";
"linux-modules-extra-generic";
};

Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.

Método 3 (dpkg)

Para manter a atualização do kernel usando dpkg, emita o seguinte comando. Este comando manterá todos os pacotes relacionados ao kernel ao mesmo tempo.

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

Para remover o bloqueio, use o seguinte comando.

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

Método 4 (/etc/apt/preferences)

Vamos verificar os detalhes sobre a versão atual do kernel primeiro.

$ apt-cache policy linux-image-$(uname -r)

Você deve ver a seguinte saída.

linux-image-5.15.0-53-generic:
  Installed: 5.15.0-53.59
  Candidate: 5.15.0-53.59
  Version table:
 *** 5.15.0-53.59 500
        500 http://us.archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages
        500 http://us.archive.ubuntu.com/ubuntu jammy-security/main amd64 Packages
        100 /var/lib/dpkg/status

Embora o kernel 5.15.0.53 esteja na sua versão mais recente ao escrever este tutorial, estamos supondo que a próxima versão já está disponível (5.15.0.56 é a versão estável atual do Linux).

Para bloquear a próxima versão do kernel, insira o seguinte código no arquivo /etc/apt/preferences.

Package: linux-image-5.15.0-53-generic linux-headers-5.15.0-33-generic linux-modules-5.15.0-33-generic linux-modules-extra-5.15.0-33-generic
Pin: version 5.15.0-53.59
Pin-Priority: -1

O código acima bloqueará o Ubuntu de instalar qualquer ou todas as atualizações do kernel.

Você pode seguir os métodos 2 e 3 para qualquer pacote regular, não apenas para o kernel.

Conclusão

É isso para este tutorial. Agora você deve ser capaz de bloquear qualquer ou versões específicas de quaisquer pacotes que não deseja que sejam instalados ou atualizados em seu sistema Ubuntu ou Debian. Se você tiver alguma dúvida, poste nos comentários abaixo.

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.