DNF es ahora el sistema de gestión de paquetes por defecto en la mayoría de las distribuciones Linux basadas en RPM.
DNF descarga paquetes de los repositorios instala, desinstala y actualiza paquetes. Realiza la resolución automática de dependencias de los paquetes que está instalando, actualizando o eliminando e instala todos los paquetes necesarios para cumplir los requisitos de dependencia.
En Fedora, ha sido el gestor de paquetes predeterminado desde Fedora 22. En RHEL 8.x, es ahora el gestor de paquetes por defecto.
DNF proporciona una gestión de paquetes segura al habilitar 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.
Por compatibilidad con versiones anteriores, RHEL 8.x dispone también de un comando YUM, aunque es un enlace a DNF.
¿Por qué DNF?
DNF o Dandified YUM es la nueva generación de YUM. Comparado con YUM, DNF tiene una mejor utilización de la memoria, una mejor gestión de las dependencias y la capacidad de ejecutarse tanto con Python 2 como con Python 3.
Gestión de paquetes con 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 utilizados con frecuencia por los administradores de sistemas.
Buscar un paquete
Para buscar un paquete instalado o disponible en todos los repositorios, utilice
$ sudo dnf search <em>nombre_paquete</em>
Por ejemplo, para buscar el paquete Nmap:
$ sudo dnf search nmap
Última comprobación de caducidad de metadatos: hace 0:05:14 el mar 02 jun 2020 08:38:09 PM UTC.
==================================== Nombre coincidente exacto: nmap =====================================
nmap.x86_64 : Herramienta de exploración de redes y escáner de seguridad
=================================== Nombre y resumen coincidentes: nmap ====================================
nmap-ncat.x86_64 : El sustituto de Netcat de Nmap
Listado de paquetes
Para ver una lista de todos los paquetes instalados y disponibles:
$ sudo dnf list all
Paquetes instalados
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
Paquetes instalados
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 @anaconda
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
Última comprobación de caducidad de metadatos: hace 1:15:10 el mar 02 jun 2020 05:37:11 PM UTC.
Paquetes disponibles
CUnit.i686 2.1.3-17.el8 rhui-rhel-8-para-x86_64-appstream-rhui-rpms
CUnit.x86_64 2.1.3-17.el8 rhui-rhel-8-para-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*"
Última comprobación de caducidad de metadatos: hace 1:17:04 el mar 02 jun 2020 05:37:11 PM UTC.
Paquetes disponibles
mysql.x86_64 8.0.17-3.module el8.0.0 3898 e09bb8de rhui-rhel-8-para-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-para-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 la información del paquete
Para mostrar información sobre un paquete:
$ sudo dnf info <em>nombre_paquete
</em>
Por ejemplo, para mostrar información sobre el servidor httpd:
$ sudo dnf info httpd
Última comprobación de caducidad de metadatos: hace 0:15:04 el lun 01 jun 2020 11:23:11 PM UTC.
Paquetes disponibles
Nombre : httpd
Versión : 2.4.37
Versión : 21.module el8.2.0 5008 cca404a3
Arquitectura : x86_64
Tamaño : 1.4 M
Fuente : httpd-2.4.37-21.module el8.2.0 5008 cca404a3.src.rpm
Repositorio : rhui-rhel-8-for-x86_64-appstream-rhui-rpms
Resumen : Servidor HTTP Apache
URL : https://httpd.apache.org/
Licencia : ASL 2.0
Descripción : El servidor HTTP Apache es un potente, eficiente y extensible
: servidor web.
Instalación de paquetes
Instalación de un solo paquete
Para instalar un único paquete y todas sus dependencias no instaladas:
$ sudo dnf install nombre_paquete
Por ejemplo, para instalar Nginx
$ sudo dnf install nginx
Dependencias resueltas.
===========================================================================================
Paquete Arch Versión Tamaño del repositorio
===========================================================================================
Instalando:
nginx x86_64 1:1.14.1-9.module el8.0.0 4108 af250afe
rhui-rhel-8-para-x86_64-appstream-rhui-rpms 570 k
Instalación de dependencias:
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 múltiples paquetes añadiendo nombres de paquetes a este comando. Por ejemplo, para instalar Nginx, PHP y MySQL-server, introduzca:
$ sudo dnf install nginx php mysql-server
Dependencias resueltas.
===========================================================================================
Paquete Arch Versión Tamaño del repositorio
===========================================================================================
Instalando:
mysql-server x86_64 8.0.17-3.module el8.0.0 3898 e09bb8de
rhui-rhel-8-para-x86_64-appstream-rhui-rpms 22 M
nginx x86_64 1:1.14.1-9.module el8.0.0 4108 af250afe
rhui-rhel-8-para-x86_64-appstream-rhui-rpms 570 k
php x86_64 7.2.24-1.module el8.2.0 4601 7c76a223
rhui-rhel-8-para-x86_64-appstream-rhui-rpms 1.5 M
Instalación de dependencias:
apr x86_64 1.6.3-9.el8 rhui-rhel-8-para-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-para-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 a instalar, pero no el nombre del paquete, incluso eso es suficiente para instalar el paquete correspondiente.
Por ejemplo, si introduce
$ sudo dnf install /usr/sbin/named
Última comprobación de caducidad de metadatos: hace 1:21:25 el mar 02 jun 2020 05:37:11 PM UTC.
Dependencias resueltas.
=====================================================================================================
Paquete Arch Versión Tamaño del repositorio
=====================================================================================================
Instalando:
bind x86_64 32:9.11.13-5.el8_2 rhui-rhel-8-for-x86_64-appstream-rhui-rpms 2.1 M
Resumen de la transacción
=====================================================================================================
Instalar 1 paquete
Tamaño total de la descarga: 2,1 M
Tamaño instalado: 4,5 M
¿Está bien [sí/no]:
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), utilice:
$ sudo dnf proporciona <em>nombre_archivo</em>
Por ejemplo, para encontrar qué paquete proporciona named, el binario para el servidor DNS utilice:
$ sudo dnf provides named
Última comprobación de caducidad de metadatos: hace 1:27:30 el lun 01 jun 2020 11:23:11 PM UTC.
bind-32:9.11.4-16.P2.el8.x86_64 :
El sistema de nombres de dominio (DNS) Berkeley Internet Name Domain (BIND) :
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>nombre_paquete</em>
Pero tenga cuidado, DNF no es capaz de eliminar un paquete sin eliminar también los paquetes que dependen de él. Para eliminar el paquete nmap utilice
$ sudo dnf remove nmap
Dependencias resueltas.
=====================================================================================================
Paquete Arquitectura Versión Tamaño del repositorio
=====================================================================================================
Eliminando:
nmap x86_64 2:7.70-5.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms 24 M
Resumen de la transacción
=====================================================================================================
Eliminar 1 paquete
Espacio liberado: 24 M
¿Está bien [sí/no]:
Gestión de grupos de paquetes
Un grupo de paquetes es una colección de paquetes que están estrechamente relacionados y sirven a 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 listar todos los grupos de paquetes
$ sudo dnf group list
Grupos de entorno disponibles:
Servidor con GUI
Servidor
Estación de trabajo
Sistema operativo personalizado
Host de virtualización
Grupos de entornos instalados
Instalación mínima
Grupos instalados:
Herramientas de seguridad
Gestión de contenedores
Grupos disponibles:
Compatibilidad con UNIX heredado
Herramientas de desarrollo
Soporte científico
desarrollo .NET Core
Herramientas de administración gráfica
Administración Headless
Herramientas de desarrollo RPM
Servidores de red
Herramientas de sistema
Soporte para tarjetas inteligentes
Listar todos los paquetes de un grupo
Para listar todos los paquetes de un grupo:
$ sudo dnf group info <em>nombre_paquete</em>
Por ejemplo, para ver los paquetes del grupo Herramientas de seguridad:
$ sudo dnf group info "herramientas de seguridad"
Grupo: Herramientas de seguridad
Descripción: Herramientas de seguridad para la verificación de la integridad y la confianza.
Paquetes por defecto:
scap-security-guide
Paquetes opcionales:
aide
hmaccalc
openscap
openscap-motor-sce
openscap-utils
scap-security-guide-doc
scap-workbench
tpm-quote-tools
tpm-tools
tpm2-herramientas
pantalones
Instalación de un grupo de paquetes
Al instalar un grupo se instalarán todos los paquetes del grupo. Para instalar un grupo de paquetes utilice:
sudo dnf group install <em>nombre_grupo_de_paquetes</em>
Por ejemplo, para instalar el grupo «Servidores de red»:
$ sudo dnf group install "Servidores de red"
Última comprobación de caducidad de metadatos: hace 1:40:14 el mié 03 jun 2020 05:53:11 PM UTC.
Dependencias resueltas.
===========================================================================================
Paquete Arquitectura Versión Tamaño del repositorio
===========================================================================================
Instalando Grupos:
Servidores de red
Resumen de transacciones
===========================================================================================
¿Está bien [sí/no]:
Eliminación de un grupo de paquetes
Para eliminar un grupo de paquetes:
sudo dnf remove <em>nombre_paquete</em>
Así, para eliminar el grupo de paquetes «Herramientas de seguridad
$ sudo dnf group remove "herramientas de seguridad"
Dependencias resueltas.
=====================================================================================================
Paquete Arch Versión Tamaño del repositorio
=====================================================================================================
Eliminando:
scap-security-guide noarch 0.1.48-7.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms 182 M
Eliminación de dependencias no utilizadas:
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
Eliminación de grupos:
Herramientas de seguridad
Resumen de transacciones
=====================================================================================================
Eliminar 6 paquetes
Espacio liberado: 247 M
¿Está bien [sí/no]:
Actualizando paquetes
Actualizando todos los paquetes
Para actualizar todos los paquetes y sus dependencias puede utilizar:
$ sudo dnf upgrade
Última comprobación de caducidad de metadatos: hace 1:09:31 el mar 02 jun 2020 08:38:09 PM UTC.
Dependencias resueltas.
Nada que hacer.
Completado
Esto instala todas las actualizaciones que se pueden instalar. Tanto dnf upgrade como dnf update tienen el mismo efecto, pero se prefiere dnf upgrade.
Actualización de un solo paquete
Para actualizar un solo paquete, ejecute
$ sudo dnf actualizar nombre_paquete
Por ejemplo, para actualizar el paquete python
$ sudo dnf upgrade python
Conclusión
Aprender DNF puede ser gratificante ya que a menudo es 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.