Gerenciar pacotes do Azure Linux com o DNF5

Este artigo aborda tarefas comuns de gerenciamento de pacotes no Azure Linux, incluindo:

  • Onde fica a configuração do repositório.
  • Como os comandos legados do gerenciador de pacotes são mapeados para o DNF5.
  • Como o DNF armazena em cache metadados e resolve pacotes.
  • Como são tratados os kernels e outros pacotes somente para instalação.
  • Como habilitar atualizações autônomas.
  • Os comandos DNF mais usados.

Note

Azure Linux 4.0 agora está em preview e está estritamente limitado às finalidades de avaliação e teste. Não é adequado para uso em produção.

Configuração do repositório

DNF5 lê definições de repositório de /etc/yum.repos.d/. O nome do diretório é mantido do YUM para compatibilidade; o DNF5 lê deste diretório.

Cada .repo arquivo nesse diretório é um arquivo de configuração de texto sem formatação que informa à DNF onde encontrar pacotes, se deve verificá-los com GPG e se o repositório está habilitado por padrão. O arquivo de configuração DNF principal é /etc/dnf/dnf.conf, que controla o comportamento global, como configurações de cache, o limite somente instalação e a configuração de proxy.

O Azure Linux inclui links simbólicos de compatibilidade para que os comandos legados (yum, dnf (DNF4), microdnf, tdnf) sejam todos direcionados ao DNF5:

lrwxrwxrwx.  1 root root       4  yum -> dnf5
lrwxrwxrwx.  1 root root       4  microdnf -> dnf5
-rwxr-xr-x.  1 root root 1614408  dnf5
lrwxrwxrwx.  1 root root       4  dnf -> dnf5
lrwxrwxrwx.  1 root root       4  tdnf -> dnf5

Os subcomandos comuns funcionam por meio dos symlinks. Casos de borda que dependiam de componentes internos do DNF4 ou de comportamentos específicos de microdnf talvez não funcionem. Para obter detalhes sobre o que foi alterado, consulte os seguintes recursos:

Como o DNF5 resolve pacotes

Quando você executa um comando DNF, o DNF5 executa as seguintes etapas para determinar quais pacotes instalar, atualizar ou remover:

  1. Carrega todos os .repo arquivos /etc/yum.repos.d/ e seleciona os repositórios marcados como habilitados.
  2. Atualiza os metadados do repositório, armazenando-os em cache localmente em /var/cache/libdnf5. Os metadados armazenados em cache incluem a lista de pacotes, informações de versão e dependência, somas de verificação e assinaturas.
  3. Resolve a instalação, a remoção ou a atualização solicitada nos repositórios habilitados, escolhe versões do pacote e verifica a integridade e as assinaturas antes de aplicar a transação.

Os repositórios desabilitados são ignorados, a menos que você os habilite explicitamente com --enablerepo=<repo-id> em um único comando.

O /var/cache/libdnf5 cache existe para que a DNF não precise baixar novamente os metadados em cada invocação. Execute dnf clean all para esvaziá-lo (consulte comandos do DNF usados com frequência).

Pacotes apenas para instalação e múltiplas versões instaladas

Alguns pacotes, em especial o kernel, são instalados lado a lado em vez de serem atualizados substituindo a instalação existente. O DNF5 controla isso por meio de duas configurações em /etc/dnf/dnf.conf:

  • installonlypkgs: lista de pacotes que nunca são atualizados no local. Os pacotes do kernel são a forma canônica de entrada.
  • installonly_limit: número máximo de versões de um pacote somente de instalação que podem coexistir no sistema. O padrão é 3.

Quando uma nova versão é instalada e o limite é excedido, o DNF remove a versão mais antiga automaticamente.

Para o kernel, isso resulta em:

  • Fallback: se um novo kernel não for inicializado, o GRUB ainda poderá iniciar um kernel de trabalho conhecido anterior.
  • Validação: você pode instalar e testar um novo kernel sem remover o que está em execução.
  • Coexistência de variantes: Você pode instalar compilações diferentes do kernel (por exemplo, com diferentes conjuntos de recursos) ao mesmo tempo.

Cada versão do kernel é um RPM separado, portanto, o DNF rastreia e remove-os como qualquer outro pacote.

Atualizações sem supervisão com dnf-automatic

dnf-automatic é um serviço que verifica periodicamente, baixa e, opcionalmente, aplica atualizações de pacote. Ele é acionado por um temporizador do systemd, em vez de ser executado continuamente como um daemon.

Instalar o dnf-automatic

Instale dnf-automatic usando o seguinte comando:

sudo dnf install -y dnf-automatic

Habilitar o dnf-automatic temporizador

Habilite o dnf-automatic temporizador imediatamente e entre reinicializações usando o seguinte comando:

sudo systemctl enable --now dnf-automatic.timer
  • enable configura o temporizador a ser iniciado na inicialização.
  • --now inicia o temporizador na sessão atual.

Verificar o status do dnf-automatic temporizador

Verifique se o temporizador está ativo e veja quando ele foi executado pela última vez usando o seguinte comando:

systemctl status dnf-automatic.timer

A saída típica se parece com o seguinte exemplo:

● dnf5-automatic.timer - dnf-automatic timer
     Loaded: loaded (/usr/lib/systemd/system/dnf5-automatic.timer; enabled; preset: disabled)
     Active: active (waiting) since Thu 2026-03-26 14:36:54 UTC; 13min ago
 Invocation: f6984eeceb7c40df99bca243f3da728c
    Trigger: Fri 2026-03-27 06:34:18 UTC; 15h left
   Triggers: ● dnf5-automatic.service

Active: active (waiting) é o esperado: o serviço subjacente é um serviço de execução única que é executado apenas quando o temporizador dispara e, em seguida, é encerrado. A Trigger: linha mostra a próxima execução agendada.

Listar a próxima execução agendada do dnf-automatic temporizador

Liste a próxima execução junto com outros temporizadores usando o seguinte comando:

systemctl list-timers dnf-automatic.timer

Exemplo de saída:

NEXT                        LEFT LAST PASSED UNIT                 ACTIVATES
Fri 2026-03-27 06:34:18 UTC  15h -         - dnf5-automatic.timer dnf5-automatic.service

1 timers listed.
Pass --all to see loaded but inactive timers, too.

Configuração opcional de dnf-automatic

Você pode configurar o comportamento de atualização automática adicionando o /etc/dnf/automatic.conf arquivo. Esse arquivo controla se as atualizações são baixadas, aplicadas automaticamente ou restritas a atualizações somente de segurança. Para obter detalhes completos de configuração, consulte a documentação do dnf5-automatic

Note

As atualizações automáticas são instaladas por meio de dnf-automatic, mas o sistema não é reinicializado automaticamente. Se um kernel (ou outro pacote necessário para reinicialização) for atualizado, a nova versão não terá efeito até a próxima reinicialização. Após as atualizações, verifique se uma reinicialização é necessária e agende uma conforme apropriado.

Comandos DNF usados com frequência

Os comandos a seguir abrangem a maior parte do gerenciamento de pacotes diários no Azure Linux.

dnf clean all

dnf clean all remove tudo o que o DNF armazenou em cache em /var/cache/libdnf5. Use-o para:

  • Recupere-se de metadados corrompidos ou obsoletos que estão causando erros de transação.
  • Reduza as imagens de contêiner removendo o cache dos pacotes após as instalações na mesma camada RUN.
  • Recuperar espaço em disco.

Exemplo de contêiner:

RUN dnf install -y package1 package2 \
    && dnf clean all

dnf search compara palavras-chave com nomes e resumos de pacotes. Por exemplo:

dnf search lsof

Exemplo de saída:

Updating and loading repositories:
 Azure Linux 4.0 - x86_64 - Microsoft                        100% |   7.6 KiB/s |   4.8 KiB |  00m01s
Repositories loaded.
Matched fields: name (exact)
 lsof.x86_64   A utility which lists open files on a Linux/UNIX system

dnf provides

dnf provides localiza o pacote que possui um determinado arquivo, comando ou funcionalidade. Por exemplo:

dnf provides lsof

Exemplo de saída:

Updating and loading repositories:
Repositories loaded.
lsof-4.98.0-8.azl4.20260303.x86_64 : A utility which lists open files on a Linux/UNIX system
Repo         : @System
Matched From :
Provide      : lsof = 4.98.0-8.azl4.20260303

dnf install

dnf install instala um ou mais pacotes junto com suas dependências de runtime:

sudo dnf install lsof

Exemplo de saída:

Updating and loading repositories:
Repositories loaded.
Package           Arch     Version                  Repository    Size
Installing:
 lsof             x86_64   4.98.0-8.azl4.20260303   azurelinux  578.5 KiB

Transaction Summary:
 Installing:         1 package

Total size of inbound packages is 226 KiB. Need to download 226 KiB.
After this operation, 579 KiB extra will be used (install 579 KiB, remove 0 B).
Is this ok [y/N]: y
[1/1] lsof-0:4.98.0-8.azl4.20260303.x86_64                100% | 641.9 KiB/s | 226.0 KiB |  00m00s
[1/1] Total                                               100% | 640.1 KiB/s | 226.0 KiB |  00m00s
Running transaction
[1/3] Verify package files                                100% | 500.0   B/s |   1.0   B |  00m00s
[2/3] Prepare transaction                                 100% |  23.0   B/s |   1.0   B |  00m00s
[3/3] Installing lsof-0:4.98.0-8.azl4.20260303.x86_64     100% |   3.0 MiB/s | 580.2 KiB |  00m00s
Complete!

dnf remove

dnf remove desinstala um pacote junto com quaisquer dependências que foram instaladas exclusivamente para ele:

sudo dnf remove -y lsof

Exemplo de saída:

Package           Arch     Version                  Repository    Size
Removing:
 lsof             x86_64   4.98.0-8.azl4.20260303   azurelinux  578.5 KiB

Transaction Summary:
 Removing:           1 package

After this operation, 579 KiB will be freed (install 0 B, remove 579 KiB).
Is this ok [y/N]: y
Running transaction
[1/2] Prepare transaction                                 100% |  27.0   B/s |   1.0   B |  00m00s
[2/2] Removing lsof-0:4.98.0-8.azl4.20260303.x86_64       100% |  72.0   B/s |  11.0   B |  00m00s
Complete!

dnf upgrade

dnf upgrade atualiza os pacotes instalados para suas versões mais recentes disponíveis.

sudo dnf upgrade

Quando tudo está atualizado, a saída é curta. Por exemplo:

Updating and loading repositories:
Repositories loaded.
Nothing to do.

Dica

Passe -y para install, removeou upgrade em contextos não interativos, como scripts, pipelines de CI e builds de contêiner. Qualquer operação do DNF que modifique o sistema requer privilégios de root, então execute-a usando sudo ou como root.