Una guía rápida para el administrador de paquetes DNF

Publicado: 2020-06-06

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 una resolución de dependencia automática 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 la firma GPG en los paquetes firmados por 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.

¿Por qué 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.

Gestión de paquetes con DNF

Debe tener privilegios de superusuario para usar el comando DNF para instalar, actualizar o eliminar el paquete. El siguiente es 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, utilice

 $ sudo dnf search <em>package_name</em>

Por ejemplo, para buscar el 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 listar 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 listar 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 listar todos los paquetes de 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

Mostrar 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.

Instalando 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, para 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 el servidor Nginx, PHP y MySQL, 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 ...

Instalar 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/ named y le pide 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 el nombre, 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

Quitar 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 uso del paquete nmap:

 $ 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]:

Gestión de grupos de paquetes

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.

Listar 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

Listar todos los paquetes en un grupo

Para listar 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 en 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]: 

Actualización de paquetes

Actualizando 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. Tanto la actualización de dnf como la actualización de dnf tienen el mismo efecto, pero se prefiere la actualización de dnf.

Actualización de un solo paquete

Para actualizar un solo paquete, ejecute:

 $ sudo dnf upgrade package_name

Por ejemplo, para actualizar el paquete 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 de Udemy.