Olá pessoal! Neste artigo procurarei descrever sobre alguns dos principais comandos do Dandified Yum, carinhosamente apelidado de DNF, espero ser útil àqueles que encontraram alguma dificuldade, não tiveram a oportunidade ou necessidade em usá-lo.
O DNF é um gerenciador de pacotes direcionado aos pacotes RPM e, à partir da versão 22 da distribuição do Fedora, passou a ser o gerenciador de pacotes oficial em substituição ao Yum. O DNF é um fork do Yum, que visa corrigir problemas sérios com a API, alguns algoritmos com mal funcionamento e falta de documentação. De acordo com o site oficial do projeto, isto era inevitável, o Yum não sobreviveria ao python 3 como padrão na distribuição, visto que o DNF deve ser compatível com python 2 e 3. Dentre as melhorias que o DNF trás estão, performance, uso de memória, resolução de dependência e velocidade.
Para que a transição do Yum ao DNF não fosse abrupta, causando demasiados problemas à distribuição e para a comunidade, os comandos que chamam o Yum serão automaticamente redirecionados para o DNF, pois o mesmo mantém compatibilidade em linha de comando, para continuar a lógica semântica do Yum. Atualmente a equipe de desenvolvimento se esforça para converter as APIs populares do Yum para o DNF, melhorar a experiência de usuário e o plugin migrate que ajuda na conversão dos pacotes.
Então, o Yum é um projeto considerado oficialmente morto, e caso esteja interessado em conhecer detalhes sobre o DNF, o fim do Yum e/ou as diferenças entre ambos, visite http://dnf.baseurl.org, onde há muita informação. Realmente capricharam, tudo está documentado.
Em minha opinião, a manpage mais organizada e enxuta é um dos sinais de que a documentação foi melhorada no DNF, muito do que vou dizer aqui é facilmente encontrado lá. Se você não é acostumado a ler uma manpage, após a leitura deste artigo, certamente ficará mais compreensível.
Para iniciarmos a parte dos comandos, a sintaxe geral do DNF é dnf [opções] […], lembrando que, os comandos que alteram o sistema devem ser acompanhados pelo sudo ou serem executados através do usuário root.
Pensando numa lógica de uso, um dos comandos que tem uma boa chance de ser necessário é o repolist, que apresenta a lista de repositórios instalados, podendo ser habilitados, desabilitados ou ambos. Em caso de omissão do argumento, serão listados somente os repositórios habilitados.
Exemplos:
$ dnf repolist enabled
$ dnf repolist disabled
$ dnf repolist all
O próximo comando é o list, que nos ajuda a verificar a existência de pacotes disponíveis em algum repositório conhecido pelo sistema (available) ou pacotes instalados no sistema (installed).
Exemplo:
$ dnf list
Nesta forma apresentada acima, listará todos os pacotes, tanto os instalados como os dos repositórios conhecidos pelo sistema. Pode ser filtrado com a especificação do nome de um pacote, que é case sensitive e aceita hífen, assim como caracteres coringas.
Exemplo:
$ dnf list nan?
Abaixo, seguem outras variantes interessantes, onde todas podem receber filtros:
$ dnf list installed
Lista os pacotes instalados.
$ dnf list available
Lista os pacotes disponíveis nos repositórios conhecidos pelo sistema.
$ dnf list obsoletes
Lista pacotes instalados no sistema que estão obsoletos em relação aos pacotes de qualquer repositório conhecido.
$ dnf list recent
Lista os pacotes recentemente adicionados aos repositórios conhecidos.
$ dnf list upgrades
Lista atualizações disponíveis aos pacotes instalados no sistema.
O terceiro comando que irei falar é o search, que serve para pesquisar metadados de pacotes através de palavras-chave. Palavras-chave são case insensitive e aceitam caracteres coringas. Por padrão, o comando busca primeiro os nomes de pacotes e resumos, na sua falta (ou sempre que tudo foi dado como um argumento) ele irá procurar nas descrições dos pacotes e URLs. O resultado é classificado a partir da relevância dos resultados (do maior para o menor).
Exemplo:
$ dnf search kmail
É possível também especificar em qual repositório será feita a busca com a opção –enablerepo (–enablerepo=).
Exemplo:
$ dnf –enablerepo=fedora search nan
Nosso quarto item da lista de comandos é o install, sua sintaxe geral é dnf [opções] install , onde pode ser o nome do pacote, o endereço de um pacote RPM local, ou URL de um pacote RPM remoto. Este comando não resolve dependências.
Exemplo:
$ sudo dnf install cowsay.noarch
Algumas opções interessantes para se utilizar juntamente com o comando install são: –enablerepo, para escolher o repositório de onde virá a instalação (se não for local ou URL); -q ou –quiet, que executará sem retornos (silenciosamente); -v ou –verbose, para ver todos os detalhes disponíveis durante a instalação; e -y ou –assumeyes, para responder sim automaticamente para todas as opções que esperam uma confirmação (s/n).
Certamente em algum momento também será necessário remover alguns pacotes instalados no sistema, para isto utiliza-se o comando remove. Este comando, faz a remoção dos pacotes especificados, juntamente com quaisquer pacotes dependentes dos pacotes que estão sendo removidos e, por padrão (com clean_requirements_on_remove habilitado) também removerá todas as dependências que não serão mais necessárias ao sistema.
Sua sintaxe geral é dnf [opções] remove , onde, pode ser o nome exato de um pacote ou parcial acompanhado de caracteres coringas para especificar um grupo de pacotes.
Exemplos:
$ sudo dnf remove kontact
ou
$ sudo dnf remove kmail*
Em alguns artigos você pode encontrar também o comando erase, porém, este é um alias para o remove, e já está marcado como deprecated, isto significa que está disponível apenas para compatibilidade com Yum mas será removido em uma das próximas versões, por isto não é aconselhável o seu uso, principalmente em scripts que você queira usar a longo prazo.
Acredito que estes sejam os comandos indispensáveis para se ter uma visão geral do DNF e que, abordei os tipos de filtros que serão vistos em outros comandos deste gerenciador, se você der uma olhadinha na manpage. Para instigar a sua curiosidade, vou deixar registrado aqui que não falei ainda sobre: busca de pacote por arquivo (provides), repository-packages, reinstalação, manutenção e limpeza de cache, distro-sync, upgrade e downgrade, grupos de pacotes, dentre outros.
That’s all folks!
Este artigo foi enviado por Douglas Santos.