Una guida rapida a DNF Package Manager

Pubblicato: 2020-06-06

DNF è ora il sistema di gestione dei pacchetti predefinito sulla maggior parte delle distribuzioni Linux basate su RPM.

DNF scarica i pacchetti dai repository, installa, disinstalla e aggiorna i pacchetti. Esegue la risoluzione automatica delle dipendenze per i pacchetti che stai installando, aggiornando o rimuovendo e installa tutti i pacchetti necessari per soddisfare i requisiti di dipendenza.

Su Fedora, è stato il gestore di pacchetti predefinito da Fedora 22. Su RHEL 8.x, ora è il gestore di pacchetti predefinito.

DNF fornisce una gestione sicura dei pacchetti abilitando la verifica della firma GPG sui pacchetti firmati GPG. DNF non installerà alcun pacchetto non firmato con la chiave corretta per quel repository.

Per compatibilità con le versioni precedenti, RHEL 8.x ha anche un comando YUM, sebbene sia un collegamento a DNF.

Perché DNF?

DNF o Dandified YUM è lo YUM di nuova generazione. Rispetto a YUM, DNF ha un migliore utilizzo della memoria, una migliore gestione delle dipendenze e la possibilità di essere eseguito utilizzando sia Python 2 che Python 3.

Gestione dei pacchetti con DNF

È necessario disporre dei privilegi di superutente per utilizzare il comando DNF per installare, aggiornare o rimuovere il pacchetto. Di seguito è riportato un insieme di comandi DNF utilizzati frequentemente dagli amministratori di sistema.

Ricerca di un pacchetto

Per cercare un pacchetto installato o disponibile in tutti i repository, utilizzare

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

Ad esempio per cercare il pacchetto 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

Lista dei pacchetti

Per visualizzare un elenco di tutti i pacchetti installati e disponibili:

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

Per elencare tutti i pacchetti installati:

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

Per elencare tutti i pacchetti disponibili:

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

Ad esempio, per elencare tutti i pacchetti MySQL disponibili:

 $ 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

Visualizzazione delle informazioni sul pacchetto

Per visualizzare informazioni su un pacchetto:

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

Ad esempio, per visualizzare informazioni sul server 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.

Installazione dei pacchetti

Installazione di un singolo pacchetto

Per installare un singolo pacchetto e tutte le sue dipendenze non installate:

 $ sudo dnf install package_name

Ad esempio, per installare 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 ..

Questo installerà Nginx e tutti i suoi requisiti di dipendenza non installati.

Installazione di più pacchetti

Puoi anche installare più pacchetti aggiungendo i nomi dei pacchetti a questo comando. Ad esempio, per installare Nginx, PHP e MySQL-server, inserisci:

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

Installazione di un pacchetto tramite il suo nome file binario

Se conosci il nome del file binario da installare, ma non il nome del pacchetto, anche quello è sufficiente per installare il relativo pacchetto.

Ad esempio, se inserisci:

 $ 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 cerca e trova il pacchetto che fornisce /usr/sbin/ named e ti chiede di installarlo.

Trovare quale pacchetto possiede un file

Se conosci il nome del file e vuoi trovare quale pacchetto lo fornisce (installato o meno), usa:

 $ sudo dnf provides <em>file_name</em>

Ad esempio, per trovare quale pacchetto fornisce named, il file binario per il server DNS utilizza:

 $ 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

Rimozione di un pacchetto

Per rimuovere un pacchetto:

 sudo dnf remove <em>package_name</em>

Ma attenzione, DNF non è in grado di rimuovere un pacchetto senza rimuovere anche i pacchetti che dipendono da esso. Per rimuovere il pacchetto nmap usa:

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

Gestione dei gruppi di pacchetti

Un gruppo di pacchetti è una raccolta di pacchetti strettamente correlati e con uno scopo comune. L'installazione di un gruppo di pacchetti installa un insieme di pacchetti, risparmiando molto tempo.

Elenca tutti i gruppi di pacchetti

Per elencare tutti i gruppi di pacchetti:

 $ 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

Elenca tutti i pacchetti in un gruppo

Per elencare tutti i pacchetti in un gruppo:

 $ sudo dnf group info <em>package_name</em>

Ad esempio, per visualizzare i pacchetti nel gruppo Strumenti di sicurezza:

 $ 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

Installazione di un gruppo di pacchetti

L'installazione di un gruppo installerà tutti i pacchetti in un gruppo. Per installare un gruppo di pacchetti utilizzare:

 sudo dnf group install <em>package_group_name</em>

Ad esempio, per installare il gruppo "Server di rete":

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

Rimozione di un gruppo di pacchetti

Per rimuovere un gruppo di pacchetti:

 sudo dnf remove <em>package_name</em>

Quindi, per rimuovere il gruppo di pacchetti "Strumenti di sicurezza":

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

Aggiornamento dei pacchetti

Aggiornamento di tutti i pacchetti

Per aggiornare tutti i pacchetti e le loro dipendenze puoi usare:

 $ 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!

Questo installa tutti gli aggiornamenti che possono essere installati. Sia l'aggiornamento dnf che l'aggiornamento dnf hanno lo stesso effetto, ma è preferibile l'aggiornamento dnf.

Aggiornamento di un singolo pacchetto

Per aggiornare un singolo pacchetto, eseguire:

 $ sudo dnf upgrade package_name

Ad esempio, per aggiornare il pacchetto python:

 $ sudo dnf upgrade python

Conclusione

L'apprendimento di DNF può essere gratificante in quanto spesso è il modo più veloce per eseguire attività di amministrazione del sistema. Se sei interessato a imparare RHEL 8, puoi dare un'occhiata a questo corso Udemy.