DNF es el sistema de administración de paquetes predeterminado en la mayoría de las distribuciones de Linux basadas en RPM ahora.
DNF descarga paquetes de repositorios, instala, desinstala y actualiza paquetes. Realiza la resolución automática de dependencias para los paquetes que está instalando, actualizando o eliminando e instala todos los paquetes necesarios para cumplir con los requisitos de dependencia.
En Fedora, ha sido el administrador de paquetes predeterminado desde Fedora 22. En RHEL 8.x, ahora es el administrador de paquetes predeterminado.
DNF proporciona una gestión segura de paquetes al permitir la verificación de firmas GPG en paquetes firmados GPG. DNF no instalará ningún paquete que no esté firmado con la clave correcta para ese repositorio.
Para compatibilidad con versiones anteriores, RHEL 8.x también tiene un comando YUM, aunque es un enlace a DNF.
Why DNF?
DNF o Dandified YUM es la próxima generación de YUM. En comparación con YUM, DNF tiene una mejor utilización de la memoria, una gestión de dependencias mejorada y la capacidad de ejecutarse con Python 2 y Python 3.
Package Management with DNF
Debe tener privilegios de superusuario para utilizar el comando DNF para instalar, actualizar o eliminar el paquete. A continuación se muestra un conjunto de comandos DNF que los administradores de sistemas utilizan con frecuencia.
Buscando un paquete
Para buscar un paquete instalado o disponible en todos los repositorios, utilizan el
$ sudo dnf search <em>package_name</em>
Por ejemplo para buscar paquete Nmap:
$ sudo dnf search nmap
Last metadata expiration check: 0:05:14 ago on Tue 02 Jun 2020 08:38:09 PM UTC.
==================================== Name Exactly Matched: nmap =====================================
nmap.x86_64 : Network exploration tool and security scanner
=================================== Name & Summary Matched: nmap ====================================
nmap-ncat.x86_64 : Nmap's Netcat replacement
Listado de paquetes
Para ver una lista de todos los paquetes instalados y disponibles:
$ sudo dnf list all
Installed Packages
GConf2.x86_64 3.2.6-22.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms
NetworkManager.x86_64 1:1.22.8-4.el8 @anaconda
NetworkManager-libnm.x86_64 1:1.22.8-4.el8 @anaconda
NetworkManager-team.x86_64 1:1.22.8-4.el8 @anaconda
NetworkManager-tui.x86_64 1:1.22.8-4.el8
...
Para enumerar todos los paquetes instalados:
$ sudo dnf list installed
Installed Packages
NetworkManager.x86_64 1:1.22.8-4.el8 @anaconda
NetworkManager-libnm.x86_64 1:1.22.8-4.el8 @anaconda
NetworkManager-team.x86_64 1:1.22.8-4.el8 @anaconda
NetworkManager-tui.x86_64 1:1.22.8-4.el8 @anaconda
PackageKit.x86_64 1.1.12-4.el8 @AppStream
PackageKit-glib.x86_64 1.1.12-4.el8 @AppStream
WALinuxAgent.noarch 2.2.38-1.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms
abattis-cantarell-fonts.noarch 0.0.25-4.el8 @AppStream
acl.x86_64 2.2.53-1.el8 @anaconda
...
Para enumerar todos los paquetes disponibles:
$ sudo dnf list available
Last metadata expiration check: 1:15:10 ago on Tue 02 Jun 2020 05:37:11 PM UTC.
Available Packages
CUnit.i686 2.1.3-17.el8 rhui-rhel-8-for-x86_64-appstream-rhui-rpms
CUnit.x86_64 2.1.3-17.el8 rhui-rhel-8-for-x86_64-appstream-rhui-rpms
CUnit-devel.i686 2.1.3-17.el8 rhui-codeready-builder-for-rhel-8-x86_64-rhui-rpms
CUnit-devel.x86_64 2.1.3-17.el8 rhui-codeready-builder-for-rhel-8-x86_64-rhui-rpms
...
Por ejemplo, para enumerar todos los paquetes MySQL que están disponibles:
$ sudo dnf list available "mysql*"
Last metadata expiration check: 1:17:04 ago on Tue 02 Jun 2020 05:37:11 PM UTC.
Available Packages
mysql.x86_64 8.0.17-3.module+el8.0.0+3898+e09bb8de rhui-rhel-8-for-x86_64-appstream-rhui-rpms
mysql-common.x86_64 8.0.17-3.module+el8.0.0+3898+e09bb8de rhui-rhel-8-for-x86_64-appstream-rhui-rpms
mysql-devel.x86_64 8.0.17-3.module+el8.0.0+3898+e09bb8de rhui-rhel-8-for-x86_64-appstream-rhui-rpms
mysql-errmsg.x86_64 8.0.17-3.module+el8.0.0+3898+e09bb8de rhui-rhel-8-for-x86_64-appstream-rhui-rpms
mysql-libs.x86_64 8.0.17-3.module+el8.0.0+3898+e09bb8de rhui-rhel-8-for-x86_64-appstream-rhui-rpms
mysql-server.x86_64 8.0.17-3.module+el8.0.0+3898+e09bb8de rhui-rhel-8-for-x86_64-appstream-rhui-rpms
mysql-test.x86_64 8.0.17-3.module+el8.0.0+3898+e09bb8de rhui-rhel-8-for-x86_64-appstream-rhui-rpms
Visualización de información del paquete
Para mostrar información sobre un paquete:
$ sudo dnf info <em>package_name
</em>
Por ejemplo, para mostrar información sobre el servidor httpd:
$ sudo dnf info httpd
Last metadata expiration check: 0:15:04 ago on Mon 01 Jun 2020 11:23:11 PM UTC.
Available Packages
Name : httpd
Version : 2.4.37
Release : 21.module+el8.2.0+5008+cca404a3
Architecture : x86_64
Size : 1.4 M
Source : httpd-2.4.37-21.module+el8.2.0+5008+cca404a3.src.rpm
Repository : rhui-rhel-8-for-x86_64-appstream-rhui-rpms
Summary : Apache HTTP Server
URL : https://httpd.apache.org/
License : ASL 2.0
Description : The Apache HTTP Server is a powerful, efficient, and extensible
: web server.
Instalar paquetes
Instalación de un solo paquete
Para instalar un solo paquete y todas sus dependencias no instaladas:
$ sudo dnf install package_name
Por ejemplo, los servicios administrativos de a instalar Nginx:
$ sudo dnf install nginx
Dependencies resolved.
===========================================================================================
Package Arch Version Repository Size
===========================================================================================
Installing:
nginx x86_64 1:1.14.1-9.module+el8.0.0+4108+af250afe
rhui-rhel-8-for-x86_64-appstream-rhui-rpms 570 k
Installing dependencies:
gd x86_64 2.2.5-6.el8 rhui-rhel-8-for-x86_64-appstream-rhui-rpms 144 k
jbigkit-libs x86_64 2.1-14.el8 rhui-rhel-8-for-x86_64-appstream-rhui-rpms 55 k
..
Esto instalará Nginx y todos sus requisitos de dependencia no instalados.
Instalación de varios paquetes
También puede instalar varios paquetes agregando nombres de paquetes a este comando. Por ejemplo, para instalar Nginx, PHP y MySQL-server, ingrese:
$ sudo dnf install nginx php mysql-server
Dependencies resolved.
===========================================================================================
Package Arch Version Repository Size
===========================================================================================
Installing:
mysql-server x86_64 8.0.17-3.module+el8.0.0+3898+e09bb8de
rhui-rhel-8-for-x86_64-appstream-rhui-rpms 22 M
nginx x86_64 1:1.14.1-9.module+el8.0.0+4108+af250afe
rhui-rhel-8-for-x86_64-appstream-rhui-rpms 570 k
php x86_64 7.2.24-1.module+el8.2.0+4601+7c76a223
rhui-rhel-8-for-x86_64-appstream-rhui-rpms 1.5 M
Installing dependencies:
apr x86_64 1.6.3-9.el8 rhui-rhel-8-for-x86_64-appstream-rhui-rpms 125 k
apr-util x86_64 1.6.1-6.el8 rhui-rhel-8-for-x86_64-appstream-rhui-rpms 105 k
gd x86_64 2.2.5-6.el8 rhui-rhel-8-for-x86_64-appstream-rhui-rpms 144 k
httpd x86_64 2.4.37-21.module+el8.2.0+5008+cca404a3
rhui-rhel-8-for-x86_64-appstream-rhui-rpms 1.4 M
httpd-filesystem noarch 2.4.37-21.module+el8.2.0+5008+cca404a3
...
Instalación de un paquete por su nombre de archivo binario
Si conoce el nombre del archivo binario para instalar, pero no el nombre del paquete, incluso eso es suficiente para instalar el paquete correspondiente.
Por ejemplo, si ingresa:
$ sudo dnf install /usr/sbin/named
Last metadata expiration check: 1:21:25 ago on Tue 02 Jun 2020 05:37:11 PM UTC.
Dependencies resolved.
=====================================================================================================
Package Arch Version Repository Size
=====================================================================================================
Installing:
bind x86_64 32:9.11.13-5.el8_2 rhui-rhel-8-for-x86_64-appstream-rhui-rpms 2.1 M
Transaction Summary
=====================================================================================================
Install 1 Package
Total download size: 2.1 M
Installed size: 4.5 M
Is this ok [y/N]:
DNF busca y encuentra el paquete que proporciona /usr/sbin/
nombrado y le solicita que lo instale.
Encontrar qué paquete posee un archivo
Si conoce el nombre del archivo y desea encontrar qué paquete lo proporciona (instalado o no), use:
$ sudo dnf provides <em>file_name</em>
Por ejemplo, para encontrar qué paquete proporciona named, el binario para el uso del servidor DNS:
$ sudo dnf provides named
Last metadata expiration check: 1:27:30 ago on Mon 01 Jun 2020 11:23:11 PM UTC.
bind-32:9.11.4-16.P2.el8.x86_64 :
The Berkeley Internet Name Domain (BIND) DNS (Domain Name System) :
server Repo : rhui-rhel-8-for-x86_64-appstream-rhui-rpms Matched from: Filename :
/usr/sbin/named
Eliminar un paquete
Para eliminar un paquete:
sudo dnf remove <em>package_name</em>
Pero tenga cuidado, DNF no puede eliminar un paquete sin eliminar también los paquetes que dependen de él. Para eliminar el paquete nmap, use:
$ sudo dnf remove nmap
Dependencies resolved.
=====================================================================================================
Package Architecture Version Repository Size
=====================================================================================================
Removing:
nmap x86_64 2:7.70-5.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms 24 M
Transaction Summary
=====================================================================================================
Remove 1 Package
Freed space: 24 M
Is this ok [y/N]:
Managing package groups
Un grupo de paquetes es una colección de paquetes que están estrechamente relacionados y tienen un propósito común. La instalación de un grupo de paquetes instala un conjunto de paquetes, lo que ahorra mucho tiempo.
Lista de todos los grupos de paquetes
Para enumerar todos los grupos de paquetes:
$ sudo dnf group list
Available Environment Groups:
Server with GUI
Server
Workstation
Custom Operating System
Virtualization Host
Installed Environment Groups:
Minimal Install
Installed Groups:
Security Tools
Container Management
Available Groups:
Legacy UNIX Compatibility
Development Tools
Scientific Support
.NET Core Development
Graphical Administration Tools
Headless Management
RPM Development Tools
Network Servers
System Tools
Smart Card Support
Enumere todos los paquetes de un grupo
Para enumerar todos los paquetes en un grupo:
$ sudo dnf group info <em>package_name</em>
Por ejemplo, para ver paquetes en el grupo Herramientas de seguridad:
$ sudo dnf group info “security tools”
Group: Security Tools
Description: Security tools for integrity and trust verification.
Default Packages:
scap-security-guide
Optional Packages:
aide
hmaccalc
openscap
openscap-engine-sce
openscap-utils
scap-security-guide-doc
scap-workbench
tpm-quote-tools
tpm-tools
tpm2-tools
trousers
Instalación de un grupo de paquetes
La instalación de un grupo instalará todos los paquetes de un grupo. Para instalar un grupo de paquetes, use:
sudo dnf group install <em>package_group_name</em>
Por ejemplo, para instalar el grupo "Servidores de red":
$ sudo dnf group install “Network Servers”
Last metadata expiration check: 1:40:14 ago on Wed 03 Jun 2020 05:53:11 PM UTC.
Dependencies resolved.
===========================================================================================
Package Architecture Version Repository Size
===========================================================================================
Installing Groups:
Network Servers
Transaction Summary
===========================================================================================
Is this ok [y/N]:
Eliminar un grupo de paquetes
Para eliminar un grupo de paquetes:
sudo dnf remove <em>package_name</em>
Entonces, para eliminar el grupo de paquetes "Herramientas de seguridad":
$ sudo dnf group remove "security tools"
Dependencies resolved.
=====================================================================================================
Package Arch Version Repository Size
=====================================================================================================
Removing:
scap-security-guide noarch 0.1.48-7.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms 182 M
Removing unused dependencies:
GConf2 x86_64 3.2.6-22.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms 6.3 M
libxslt x86_64 1.1.32-4.el8 @rhui-rhel-8-for-x86_64-baseos-rhui-rpms 734 k
openscap x86_64 1.3.2-6.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms 58 M
openscap-scanner x86_64 1.3.2-6.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms 137 k
xml-common noarch 0.6.3-50.el8 @rhui-rhel-8-for-x86_64-baseos-rhui-rpms 78 k
Removing Groups:
Security Tools
Transaction Summary
=====================================================================================================
Remove 6 Packages
Freed space: 247 M
Is this ok [y/N]:
Updating packages
Actualizar todos los paquetes
Para actualizar todos los paquetes y sus dependencias, puede usar:
$ sudo dnf upgrade
Last metadata expiration check: 1:09:31 ago on Tue 02 Jun 2020 08:38:09 PM UTC.
Dependencies resolved.
Nothing to do.
Complete!
Esto instala todas las actualizaciones que se pueden instalar. Ambos actualización dnf y la actualización dnf tienen el mismo efecto, pero se prefiere la actualización dnf.
Actualizar un solo paquete
Para actualizar un solo paquete, ejecute:
$ sudo dnf upgrade package_name
Por ejemplo, para actualizar el paquete de Python:
$ sudo dnf upgrade python
Conclusión
Aprender DNF puede ser gratificante ya que suele ser la forma más rápida de realizar tareas de administración del sistema. Si está interesado en aprender RHEL 8, puede consultar este Curso Udemy.