Gestione del software¶
Generalità¶
Su un sistema Linux, è possibile installare il software in due modi:
- Scaricare i pacchetti software dal repository e installarli sul computer locale
- Compilare il pacchetto del codice sorgente del progetto e installarlo sul computer locale
Nota
L'installazione da sorgente non è trattata qui. Di norma, è necessario scaricare il pacchetto software corrispondente dal repository, a meno che il pacchetto software di cui avete bisogno non sia presente nel repository. Questo perché il sistema di gestione dei pacchetti può aiutare gli utenti a risolvere i problemi di dipendenza. Per i principianti, risolvere le dipendenze necessarie per compilare i pacchetti di codice sorgente può risultare complicato.
Il pacchetto: gli sviluppatori compilano in anticipo una serie di file sorgente in codice macchina eseguibile e li raggruppano in file binari in un formato specifico. Salvo diversa indicazione, il termine "pacchetto software" in Linux si riferisce ai pacchetti software binari.
Il file sorgente: un singolo file di codice leggibile dall'utente (con estensioni quali .c, .py, .java), che può essere semplicemente un frammento di codice o un modulo dell'intero progetto e che richiede la compilazione o un interprete per essere eseguito su un computer.
Il pacchetto del codice sorgente: un file di archivio compresso che contiene i file sorgente e i file correlati (come i file di compilazione quali Makefile e configure; i file di documentazione quali README e LICENSE) dell'intero progetto. Estensioni come .tar.gz o .tar.xz indicano spesso questo tipo di file.
Panoramica su RPM¶
RPM (RedHat Package Manager) è un sistema di gestione del software. È possibile installare, disinstallare, aggiornare o verificare lo stato del software contenuto nei pacchetti.
RPM è il sistema di gestione dei pacchetti utilizzato da tutte le distribuzioni Red Hat (Rocky Linux, Fedora, CentOS, SUSE, Mandriva, ...), i cui pacchetti sono identificati dall'estensione .rpm. Debian e le sue distribuzioni derivate utilizzano il sistema di gestione dei pacchetti DPKG per gestire i pacchetti software, identificati dall'estensione .deb.
Convenzioni di denominazione per i pacchetti software RPM:

Spiegazione della terminologia
Quando utilizziamo l'acronimo "RPM" in maiuscolo, ci riferiamo al sistema di gestione dei pacchetti. Quando si usa "rpm" con la "r" minuscola, nella stragrande maggioranza dei casi ci si riferisce specificatamente al comando rpm. Quando si utilizza .rpm, si fa riferimento al suffisso del formato del pacchetto. I lettori non devono lasciarsi confondere da questi elementi durante la lettura dei documenti.
Il sistema di gestione dei pacchetti RPM è ancora oggi oggetto di aggiornamenti e miglioramenti costanti; per ulteriori informazioni, si consulti qui.
Gestore di pacchetti locale¶
Il comando rpm: strumento da riga di comando per la gestione dei pacchetti RPM locali nelle distribuzioni a monte e a valle di Red Hat.
Nome completo del pacchetto: il nome completo del pacchetto software binario, ad esempio tree-1.7.0-15.el8.x86_64.rpm.
Nome del pacchetto: il nome del pacchetto software, ad esempio tree.
Se il pacchetto software in questione non è ancora presente nel sistema operativo (non è installato), è necessario utilizzare il "nome completo del pacchetto" quando si esegue il comando rpm. Se il pacchetto software in questione non è nuovo per il sistema operativo (è già installato), è necessario utilizzare il "nome del pacchetto" quando si impiega il comando rpm. Questo perché il formato rpm memorizza le informazioni relative ai pacchetti software nella directory del database /var/lib/rpm/.
Il comando rpm si utilizza nel modo seguente:
rpm [options] <Package-Name> | <Full-Package-Name>
Installare, aggiornare e disinstallare pacchetti software¶
Le opzioni disponibili sono le seguenti:
| Opzione | Descrizione |
|---|---|
-i <Full-Package-Name> |
Installa il pacchetto. |
-U <Full-Package-Name> |
Aggiorna un pacchetto già installato. |
-e <Package-Name> |
Disinstalla il pacchetto. |
-h |
Visualizza una barra di avanzamento. |
-v |
Informa sullo stato di avanzamento dell'operazione. |
--test |
Esegue il test del comando senza eseguirlo. |
- Installa uno o più pacchetti -
rpm -ivh <Nome-completo-del-pacchetto> ... - Aggiornare uno o più pacchetti -
rpm -Uvh <Nome-completo-del-pacchetto> ... - Disinstallare uno o più pacchetti -
rpm -e <Nome-pacchetto> ...
Poiché rpm è un gestore di pacchetti locale, gli utenti devono risolvere manualmente eventuali problemi di dipendenza durante l'installazione del software. Se mancano alcune dipendenze necessarie, verrà visualizzato un messaggio del tipo "failed dependencies".
Comprendere le relazioni di dipendenza dei pacchetti RPM:
- Relazione di dipendenza ad albero (a.rpm ---> b.rpm ---> c.rpm) - Quando si installa a.rpm, viene richiesto di installare prima b.rpm. Durante l'installazione di b.rpm, viene richiesto di installare prima c.rpm. Il modo più semplice per risolvere questo problema è concatenare le installazioni con:
rpm -ivh a.rpm b.rpm c.rpm - Relazione di dipendenza circolare (a.rpm ---> b.rpm ---> c.rpm ---> a.rpm) -
rpm -ivh a.rpm b.rpm c.rpm - Relazioni di dipendenza tra moduli - Vai su questo sito web per effettuare una ricerca
D: Perché l'installazione dei pacchetti software comporta sempre problemi di dipendenze?
Poiché i software o le applicazioni si basano quasi sempre su altri software o librerie, se il programma o la libreria condivisa richiesti non sono presenti nel sistema operativo, è necessario soddisfare questo prerequisito prima di installare l'applicazione desiderata.
Ricerca pacchetti¶
Le opzioni disponibili sono le seguenti:
| Opzione | Descrizione |
|---|---|
-q |
Verificare se il pacchetto software è stato installato, ad esempio con il comando rpm -q tree-1.7.0-15.el8.x86_64.rpm |
-a |
Se utilizzata insieme all'opzione -q, consente di visualizzare tutti i pacchetti RPM installati, come nel comando rpm -qa |
-i |
Da utilizzare insieme all'opzione -q per ottenere informazioni dettagliate sul pacchetto RPM installato corrispondente. Ad esempio rpm -qi bash |
-l |
Se utilizzata insieme all'opzione -q, visualizza l'elenco dei file distribuiti dal pacchetto RPM installato corrispondente |
-p |
Indica i pacchetti software disinstallati, ad esempio rpm -qip tree-1.7.0-15.el8.x86_64.rpm e rpm -qlp tree-1.7.0-15.el8.x86_64.rpm |
-f |
Se utilizzata insieme all'opzione -q, consente di verificare a quale pacchetto software appartiene il file di installazione, ad esempio rpm -qf /usr/bin/bash |
-R |
Se utilizzata insieme all'opzione -q, consente di verificare le dipendenze dei pacchetti RPM installati. Se utilizzata insieme all'opzione -p, è possibile verificare le dipendenze dei pacchetti RPM non installati, ad esempio: rpm -qRp mtr-0.92-3.el8.x86_64.rpm |
--last |
Elenca i pacchetti in base alla data di installazione, a partire dal più recente |
Il database RPM si trova nella directory /var/lib/rpm/.
Alcuni esempi:
sudo rpm -qa
sudo rpm -qilp zork-1.0.3-1.el8.x86_64.rpm tree-1.7.0-15.el8.x86_64.rpm
# list the last installed packages:
sudo rpm -qa --last | head
NetworkManager-config-server-1.26.0-13.el8.noarch Mon 24 May 2021 02:34:00 PM CEST
iwl2030-firmware-18.168.6.1-101.el8.1.noarch Mon 24 May 2021 02:34:00 PM CEST
iwl2000-firmware-18.168.6.1-101.el8.1.noarch Mon 24 May 2021 02:34:00 PM CEST
iwl135-firmware-18.168.6.1-101.el8.1.noarch Mon 24 May 2021 02:34:00 PM CEST
iwl105-firmware-18.168.6.1-101.el8.1.noarch Mon 24 May 2021 02:34:00 PM CEST
iwl100-firmware-39.31.5.1-101.el8.1.noarch Mon 24 May 2021 02:34:00 PM CEST
iwl1000-firmware-39.31.5.1-101.el8.1.noarch Mon 24 May 2021 02:34:00 PM CEST
alsa-sof-firmware-1.5-2.el8.noarch Mon 24 May 2021 02:34:00 PM CEST
iwl7260-firmware-25.30.13.0-101.el8.1.noarch Mon 24 May 2021 02:33:59 PM CEST
iwl6050-firmware-41.28.5.1-101.el8.1.noarch Mon 24 May 2021 02:33:59 PM CEST
# list the installation history of the kernel:
sudo rpm -qa --last kernel
kernel-4.18.0-305.el8.x86_64 Tue 25 May 2021 06:04:56 AM CEST
kernel-4.18.0-240.22.1.el8.x86_64 Mon 24 May 2021 02:33:35 PM CEST
Consigli d'uso
Quando si utilizza la funzione di query (l'opzione -q), il pacchetto software corrispondente deve essere deterministico. In altre parole, non è possibile utilizzare caratteri jolly nella riga di comando rpm per trovare corrispondenze con il nome del pacchetto. Per filtrare uno o più pacchetti specifici, è necessario utilizzare il simbolo della barra verticale (|) e il comando grep.
sudo rpm -qa | grep ^dbus
dbus-common-1.12.8-27.el8_10.noarch
dbus-glib-0.110-2.el8.x86_64
dbus-libs-1.12.8-27.el8_10.x86_64
dbus-daemon-1.12.8-27.el8_10.x86_64
dbus-tools-1.12.8-27.el8_10.x86_64
dbus-1.12.8-27.el8_10.x86_64
Verificare la firma del pacchetto software¶
Per eseguire questa operazione è necessario utilizzare l'opzione -K.
Quando scarichi un pacchetto binario RPM da un sito web sconosciuto o da una fonte non attendibile, non puoi sapere se è stato manomesso. Pertanto, gli utenti devono verificare la firma del pacchetto software per assicurarsi che il pacchetto scaricato sia completo e non sia stato manomesso.
Importare la chiave pubblica richiesta prima di eseguire la verifica della firma sul pacchetto software. Di solito è compito dell'amministratore di sistema.
A partire da RHEL 8.x, è possibile utilizzare il comando dnf download per scaricare pacchetti software specifici. Ad esempio, se devi scaricare il pacchetto wget, usa:
sudo dnf download wget
ls -l wget-1.19.5-12.el8_10.x86_64.rpm
-rw-r--r-- 1 root root 750748 Jan 3 17:29 wget-1.19.5-12.el8_10.x86_64.rpm
# Use the "-K" option to verify the signature of the corresponding software package
## You can also use the "-v" or "-vv" option to display more detailed information
sudo rpm -K wget-1.19.5-12.el8_10.x86_64.rpm
wget-1.19.5-12.el8_10.x86_64.rpm: digests signatures OK
# If the software package you downloaded has been tampered with, the following information will be displayed:
echo "change content" >> /root/wget-1.19.5-12.el8_10.x86_64.rpm
sudo rpm -K wget-1.19.5-12.el8_10.x86_64.rpm
wget-1.19.5-12.el8_10.x86_64.rpm: DIGESTS SIGNATURES NOT OK
Se la firma di un pacchetto software non supera la verifica, è consigliabile non continuare a utilizzarlo.
Verifica le modifiche apportate ai file dopo l'installazione del pacchetto software¶
Per eseguire questa operazione è necessario utilizzare l'opzione -V.
Dopo l'installazione del pacchetto software RPM, il database RPM registra le caratteristiche iniziali e quelle modificate dei file in questione per stabilire se siano stati alterati in modo doloso.
sudo rpm -q chrony
chrony-4.5-2.el8_10.x86_64
rpm -V chrony
S.5....T. c /etc/chrony.conf
Il risultato è suddiviso in 3 colonne distinte.
-
Prima colonna (S.5....T.)
Utilizza 9 campi per rappresentare le informazioni valide del file dopo l'installazione del pacchetto software RPM. Ogni campo o caratteristica che ha superato un determinato controllo o test è contrassegnato da un ".".
Questi 9 diversi campi o controlli sono:
- S: Se la dimensione del file è stata modificata.
- M: Se è stata apportata una modifica al tipo di file o ai permessi del file (rwx).
- 5: Se il checksum MD5 del file è stato modificato.
- D: Se vi è una modifica al numero di dispositivi.
- L: Se è stata apportata una modifica al percorso del file.
- U: Se è stata apportata una modifica al proprietario del file.
- G: Se è stata apportata una modifica al gruppo a cui appartiene il file.
- T: Se è stata apportata una modifica alla data di modifica (mTime) del file.
- P: Se vi è una modifica alla funzionalità del programma.
-
Seconda colonna (c)
c: Indica le modifiche apportate al file di configurazione. Può anche assumere i seguenti valori:
- d: file di documentazione
- g: file ghost. Se ne vedono pochissimi
- l: file di licenza
- r: file readme
-
Terza colonna (/etc/chrony.conf)
- /etc/chrony.conf: Indica il percorso del file modificato.
Gestore pacchetti DNF¶
DNF (Dandified Yum) è un gestore di pacchetti software, successore di YUM (Yellow dog Updater Modified).
Il comando dnf: questo comando consente di gestire i pacchetti software binari interagendo con il repository. Per i comandi relativi alle voci funzionali più comuni, il loro utilizzo è identico a quello del comando yum. Per alcune distribuzioni più recenti (come Rocky Linux 10.x o Fedora 43), sono disponibili aggiornamenti per lo strumento da riga di comando dnf. Ad esempio, in Rocky Linux 10.x, gli utenti possono installare in modo selettivo dnf5 dal repository.
Le distribuzioni basate su Red Hat, come Rocky Linux, Fedora e CentOS, utilizzano lo strumento da riga di comando dnf. Il suo equivalente nell'ambiente Debian è lo strumento da riga di comando apt (Advanced Packaging Tool).
I comandi relativi agli oggetti funzionali di dnf¶
La sintassi del comando dnf è la seguente:
dnf [options] <command> [<args>...]
Il termine "command" nella sintassi rappresenta l'elemento funzionale command di dnf. Alcuni comandi sono integrati, mentre altri richiedono il supporto di plugin di terze parti. È possibile visualizzare le istruzioni per l'uso di ciascun comando utilizzando l'opzione --help, ad esempio dnf list --help.
-
Comando
listElenca i pacchetti software in base alle diverse opzioni disponibili con questo comando. Per impostazione predefinita, vengono elencati tutti i pacchetti software disponibili per l'installazione nel sistema operativo (il comando
dnf listequivale adnf list --all).dnf list --installed- Elenca i pacchetti software installati per il sistema operativo correntednf list --updates- Elenca i pacchetti software che è possibile aggiornare
Le opzioni specifiche del comando list sono le seguenti:
Opzioni specifiche Descrizione --allmostra tutti i pacchetti (impostazione predefinita) --availablemostra solo i pacchetti disponibili --installedmostra solo i pacchetti installati --extrasmostra solo i pacchetti aggiuntivi --updatesmostra solo i pacchetti di aggiornamento --upgradesmostra solo i pacchetti di aggiornamento --autoremovemostra solo i pacchetti con rimozione automatica --recentmostra solo i pacchetti modificati di recente -
Comando
searchCerca i pacchetti software nel repository utilizzando la stringa indicata. Ad esempio
dnf search vim. -
Comando
installInstalla uno o più pacchetti software dal repository. Ad esempio
dnf -y install wget tree. L'opzione-yindica che la risposta automatica è "yes". Quando si installano i pacchetti in questo modo,dnfgestisce automaticamente la risoluzione delle dipendenze.Oltre a installare pacchetti software dal repository, è possibile installare pacchetti software da un URL specificato o da un pacchetto RPM locale, ad esempio
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm,dnf install /tmp/mtr-0.92-3.el8.x86_64.rpm -
Comando
infoVisualizza le informazioni su uno o più pacchetti software, ad esempio
dnf info wget tree -
Comando
deplist(obsoleto)Elenca le dipendenze del pacchetto software. In alternativa, utilizzare il comando
dnf repoquery --deplist <Nome-del-pacchetto>. -
Comando
repolistVisualizza le informazioni relative ai repository; per impostazione predefinita vengono visualizzati i repository abilitati (il comando
dnf repolistequivale adnf repolist --enabled)dnf repolist --all- Elenca tutti i repositorydnf repolist -v- Visualizza informazioni dettagliate sui repository abilitatidnf repolist --disabled- Elenca solo i repository disabilitati.
-
Comando
historyMostra la cronologia dei comandi
dnfdigitati. Per impostazione predefinita,dnf historyequivale adnf history list. È possibile sostituire "list" con una delle seguenti opzioni:info,redo,replay,rollback,store,undoouserinstalled. -
Comando
providesVisualizza il pacchetto software a cui appartiene il file indicato. Ad esempio,
dnf provides /usr/bin/systemctl. -
Comando
removeRimuove uno o più pacchetti software dal sistema operativo corrente. Per impostazione predefinita, verrà chiesto se si desidera disinstallare il pacchetto software e il relativo pacchetto di dipendenze; è possibile rispondere automaticamente "yes" tramite l'opzione
-y. -
Comando
autoremoveElimina automaticamente i pacchetti che in passato erano utilizzati come dipendenze ma che ora non vengono più utilizzati. Ad esempio
dnf -y autoremove. -
Comando
makecacheCrea una cache per i repository appena aggiunti o per i metadati non aggiornati.
-
Comando
updateoupgradeAggiorna uno o più pacchetti software del sistema operativo. Ad esempio,
dnf update -yaggiornerà tutti i pacchetti software aggiornabili presenti nel sistema operativo. -
Comando
grouplist,groupinstall,groupremoveogroupinfoL'oggetto di questi comandi sono i gruppi di pacchetti, ovvero insiemi di pacchetti software predisposti per uno scenario o un ambiente specifico.
In Rocky Linux 8.x sono presenti i seguenti gruppi di pacchetti:
sudo dnf grouplist Available Environment Groups: Server with GUI Server Workstation KDE Plasma Workspaces Virtualization Host Custom Operating System Installed Environment Groups: Minimal Install Available Groups: Container Management .NET Core Development RPM Development Tools Development Tools Graphical Administration Tools Headless Management Legacy UNIX Compatibility Network Servers Scientific Support Security Tools Smart Card Support System Tools Fedora Packager XfcePer evitare ambiguità, quando si opera su uno o più gruppi di pacchetti, è opportuno racchiudere il nome di un singolo gruppo di pacchetti tra virgolette doppie.
-
Comando
cleanCancella i dati memorizzati nella cache. È possibile ripulire tutte le cache dei dati con il comando:
dnf clean all.Tipo di metadati da ripulire Descrizione allElimina tutti i file temporanei creati per i repository abilitati. dbcacheElimina i file di cache generati dai metadati del repository. expire-cacheContrassegna i metadati dell'archivio come scaduti. metadataRimuove i metadati del repository. packagesRimuove tutti i pacchetti memorizzati nella cache dal sistema. -
downloadpluginScarica uno o più pacchetti software dal repository sul computer locale senza installarli.
È possibile utilizzare le opzioni
--destdir DESTDIRo--downloaddir DESRDIRper specificare il percorso di salvataggio, ad esempiodnf download tree --downloaddir /tmp/. -
versionlockpluginRichiede le informazioni pertinenti utilizzando le diverse opzioni che seguono il comando, in modo simile a
rpm -q.dnf repoquery --deplist <Nome-pacchetto>- Visualizza le dipendenzednf repoquery --list <Nome-pacchetto>- Visualizza l'elenco dei file dopo l'installazione del pacchetto software (indipendentemente dal fatto che il software sia già installato sul sistema operativo)
-
config-managerpluginGestisce i repository tramite la riga di comando, comprese le operazioni di aggiunta, eliminazione, attivazione e disattivazione dei repository.
dnf config-manager --add-repo <URL>- Aggiunge un nuovo repositorydnf config-manager --set-disabled devel- Disattiva in modo permanente un singolo repositorydnf config-manager --set-enabled devel- Abilita in modo permanente un singolo repository
È possibile visualizzare i comandi disponibili del plugin tramite l'output del comando dnf --help:
sudo dnf --help
...
List of Plugin Commands:
builddep Install build dependencies for package or spec file
changelog Show changelog data of packages
config-manager manage dnf configuration options and repositories
copr Interact with Copr repositories.
debug-dump dump information about installed rpm packages to file
debug-restore restore packages recorded in debug-dump file
debuginfo-install install debuginfo packages
download Download package to current directory
groups-manager create and edit groups metadata file
needs-restarting determine updated binaries that need restarting
offline-distrosync Prepare offline distrosync of the system
offline-upgrade Prepare offline upgrade of the system
playground Interact with Playground repository.
repoclosure Display a list of unresolved dependencies for repositories
repodiff List differences between two sets of repositories
repograph Output a full package dependency graph in dot format
repomanage Manage a directory of rpm packages
reposync download all packages from remote repo
system-upgrade Prepare system for upgrade to a new release
...
Tip
Se questi comandi dei plugin non sono presenti, installare il pacchetto dnf-plugins-core. Per ulteriori informazioni, clicca qui: https://dnf-plugins-core.readthedocs.io/en/latest/index.html
Descrizione del file di configurazione¶
Tutti i file di configurazione dei repository (che terminano con .repo) si trovano nella directory /etc/yum.repos.d/. Ogni file .repo può contenere uno o più repository, e gli utenti possono attivarli o disattivarli in modo selettivo a seconda delle loro esigenze specifiche.
ls -l /etc/yum.repos.d/
total 72
-rw-r--r-- 1 root root 1919 Sep 13 2024 docker-ce.repo
-rw-r--r-- 1 root root 1680 Aug 31 2024 epel-modular.repo
-rw-r--r-- 1 root root 1332 Aug 31 2024 epel.repo
-rw-r--r-- 1 root root 1779 Aug 31 2024 epel-testing-modular.repo
-rw-r--r-- 1 root root 1431 Aug 31 2024 epel-testing.repo
-rw-r--r--. 1 root root 710 Jun 7 2024 Rocky-AppStream.repo
-rw-r--r--. 1 root root 695 Jun 7 2024 Rocky-BaseOS.repo
-rw-r--r-- 1 root root 1773 Jun 7 2024 Rocky-Debuginfo.repo
-rw-r--r--. 1 root root 360 Jul 11 2024 Rocky-Devel.repo
-rw-r--r--. 1 root root 695 Jun 7 2024 Rocky-Extras.repo
-rw-r--r--. 1 root root 731 Jun 7 2024 Rocky-HighAvailability.repo
-rw-r--r--. 1 root root 680 Jun 7 2024 Rocky-Media.repo
-rw-r--r--. 1 root root 680 Jun 7 2024 Rocky-NFV.repo
-rw-r--r--. 1 root root 690 Jun 7 2024 Rocky-Plus.repo
-rw-r--r--. 1 root root 715 Mar 29 17:39 Rocky-PowerTools.repo
-rw-r--r--. 1 root root 746 Jun 7 2024 Rocky-ResilientStorage.repo
-rw-r--r--. 1 root root 681 Jun 7 2024 Rocky-RT.repo
-rw-r--r-- 1 root root 2335 Jun 7 2024 Rocky-Sources.repo
Il formato dei contenuti di un singolo repository in ciascun file .repo è fisso, ad esempio:
[baseos]
name=Rocky Linux $releasever - BaseOS
mirrorlist=https://mirrors.rockylinux.org/mirrorlist?arch=$basearch&repo=BaseOS-$releasever
#baseurl=http://dl.rockylinux.org/$contentdir/$releasever/BaseOS/$basearch/os/
gpgcheck=1
enabled=1
countme=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
Descrizione del contenuto:
- Utilizzare "[ ]" per inserire l'ID del repository, che deve essere univoco.
- Sotto i simboli "[ ]" si trovano le opzioni del repository.
- L'opzione "name" - Indica il nome completo del repository.
- L'opzione "mirrorlist" - URL di un elenco di mirror per il repository. Gli URL supportano diversi protocolli, quali https, http, ftp, file, NFS, ecc. Il simbolo "$" nel valore rappresenta la variabile del repository corrispondente.
- L'opzione "baseurl" - Elenco degli URL del repository. Gli URL supportano diversi protocolli, quali https, http, ftp, file, NFS, ecc. Il simbolo "$" nel valore rappresenta la variabile del repository corrispondente.
- Le righe che iniziano con "#" sono righe di commento.
- L'opzione "gpgcheck" - Indica se eseguire il controllo della firma GPG sui pacchetti presenti in questo repository. Il valore predefinito è False (0).
- L'opzione "enabled" - Include questo repository come fonte di pacchetti. Il valore predefinito è True (1).
- L'opzione "countme" - Carica dati statistici anonimi sull'utilizzo. Il valore predefinito è False (0).
- L'opzione "gpgkey" - Percorso della chiave pubblica GPG.
Per ulteriori informazioni, consultare man 5 yum.conf.
Flussi di applicazioni¶
Flussi di applicazioni in RL 8.x e RL 9.x:: Rocky Linux 8.x e 9.x utilizzano una nuova tecnologia modulare che consente ai repository di ospitare più versioni delle applicazioni e delle relative dipendenze. Grazie all'adozione di un'architettura modulare, gli Application Streams in questi due sistemi operativi vengono anche denominati "Module Streams". Gli amministratori di sistema possono scegliere una versione specifica, il che garantisce una maggiore flessibilità. Se gli amministratori di sistema devono gestire gli Application Streams, spesso devono ricorrere al comando dnf module.
Application Streams in RL 10.x: A partire da Rocky Linux 10.x, gli amministratori di sistema possono continuare a utilizzare gli Application Streams, ma questi non sono più disponibili in forma modulare. In altre parole, il comando dnf module nella versione 10.x non funziona più, e gli amministratori di sistema possono gestire le diverse versioni delle applicazioni nel modo tradizionale. In questa versione del sistema operativo, il termine "Application Streams" non corrisponde a "Module Streams".
Ogni flusso di applicazioni ha un ciclo di vita diverso. Si prega di consultare il seguente link:
- https://access.redhat.com/support/policy/updates/rhel-app-streams-life-cycle#rhel8_application_streams
- https://access.redhat.com/support/policy/updates/rhel-app-streams-life-cycle#rhel9_application_streams
- https://access.redhat.com/support/policy/updates/rhel-app-streams-life-cycle#rhel10_dependent_application_streams
In questo documento, l'autore illustra principalmente i flussi applicativi dell'architettura modulare.
Flussi dei moduli¶
Nota importante:
- Per utilizzare l'architettura modulare Application Streams nelle versioni RL 8.x e RL 9.x, è necessario abilitare prima il repository AppStream. Nel repository Appstream, i moduli rappresentano insiemi di pacchetti software destinati a unità logiche che vengono compilati, testati e pubblicati insieme. Un singolo modulo può contenere più flussi (versioni) della stessa applicazione.
- Ogni modulo riceve gli aggiornamenti separatamente.
- Dopo aver abilitato un singolo modulo, gli utenti possono utilizzare solo una versione di quel modulo.
- Ogni modulo può avere un proprio flusso predefinito (versione predefinita) contrassegnato con "[d]".
- Lo stream predefinito rimane attivo a meno che non si disattivi il modulo o si attivi un altro stream per il modulo.
Profili dei moduli¶
Profili dei moduli: un insieme di elenchi di pacchetti software raggruppati in base a specifici scenari di utilizzo. Ad esempio:
sudo dnf module list nginx
Last metadata expiration check: 10:04:05 ago on Wed 07 Jan 2026 01:42:24 PM CST.
Rocky Linux 8 - AppStream
Name Stream Profiles Summary
nginx 1.14 [d] common [d] nginx webserver
nginx 1.16 common [d] nginx webserver
nginx 1.18 common [d] nginx webserver
nginx 1.20 common [d] nginx webserver
nginx 1.22 common [d] nginx webserver
nginx 1.24 common [d] nginx webserver
sudo sudo dnf module install nginx:1.14
Last metadata expiration check: 10:04:31 ago on Wed 07 Jan 2026 01:42:24 PM CST.
Dependencies resolved.
========================================================================================================================
Package Architecture Version Repository Size
========================================================================================================================
Installing group/module packages:
nginx x86_64 1:1.14.1-9.module+el8.4.0+542+81547229 appstream 566 k
nginx-all-modules noarch 1:1.14.1-9.module+el8.4.0+542+81547229 appstream 22 k
nginx-filesystem noarch 1:1.14.1-9.module+el8.4.0+542+81547229 appstream 23 k
nginx-mod-http-image-filter x86_64 1:1.14.1-9.module+el8.4.0+542+81547229 appstream 34 k
nginx-mod-http-perl x86_64 1:1.14.1-9.module+el8.4.0+542+81547229 appstream 45 k
nginx-mod-http-xslt-filter x86_64 1:1.14.1-9.module+el8.4.0+542+81547229 appstream 32 k
nginx-mod-mail x86_64 1:1.14.1-9.module+el8.4.0+542+81547229 appstream 63 k
nginx-mod-stream x86_64 1:1.14.1-9.module+el8.4.0+542+81547229 appstream 84 k
Installing dependencies:
dejavu-fonts-common noarch 2.35-7.el8 baseos 73 k
dejavu-sans-fonts noarch 2.35-7.el8 baseos 1.5 M
fontconfig x86_64 2.13.1-4.el8 baseos 273 k
fontpackages-filesystem noarch 1.44-22.el8 baseos 15 k
gd x86_64 2.2.5-7.el8 appstream 143 k
jbigkit-libs x86_64 2.1-14.el8 appstream 54 k
libX11 x86_64 1.6.8-9.el8_10 appstream 611 k
libX11-common noarch 1.6.8-9.el8_10 appstream 157 k
libXau x86_64 1.0.9-3.el8 appstream 36 k
libXpm x86_64 3.5.12-11.el8 appstream 58 k
libjpeg-turbo x86_64 1.5.3-14.el8_10 appstream 156 k
libtiff x86_64 4.0.9-36.el8_10 appstream 190 k
libwebp x86_64 1.0.0-11.el8_10 appstream 273 k
libxcb x86_64 1.13.1-1.el8 appstream 228 k
Installing module profiles:
nginx/common
Enabling module streams:
nginx 1.14
Transaction Summary
========================================================================================================================
Install 22 Packages
Total download size: 4.5 M
Installed size: 14 M
Is this ok [y/N]:
Ogni flusso di moduli può avere un numero qualsiasi di profili (o anche nessuno). I profili predefiniti del modulo Stream sono contrassegnati con "[d]".
Nell'esempio sopra riportato, quando l'utente deve installare nginx, il comando seguente è equivalente:
sudo dnf install nginx
sudo dnf install nginx:1.14
sudo dnf install nginx:1.14/common
Percorsi del modulo di gestione¶
Il comando utilizzato è dnf module e prevede alcuni sottocomandi per le diverse funzionalità.
Consigli per l'uso
Quando si esegue il comando dnf module su una singola riga che riguarda i moduli, è possibile specificare più nomi di moduli, ad esempio dnf module enable nginx httpd:2.4 o dnf module list nodejs:10 perl.
Visualizzare¶
Per eseguire questa operazione, utilizzare list o info nei sottocomandi.
dnf module list- Restituisce un elenco di tutti i moduli disponibili.dnf module list <Nome-modulo>oppurednf module list <Nome-modulo>:<Stream>- Elenca tutti gli stream (versioni) disponibili per il modulo corrente. Elenca le informazioni relative a un singolo flusso di modulo. Ad esempiodnf module list postgresqlodnf module list postgresql:15.dnf module list --enabled- Lists the enabled module stream(s).dnf module info <Nome-modulo>oppurednf module info <Nome-modulo>:<Stream>- Visualizza le informazioni relative allo stream del modulo. Se si digita solo il nome di un modulo senza specificare uno stream, verranno visualizzate tutte le informazioni relative agli stream di quel modulo. Ad esempiodnf module info rubyodnf module info ruby:2.6.dnf module --info --profile <Nome-modulo>oppurednf module --info --profile <Nome-modulo>:<Stream>- Elenca le informazioni sul profilo dello stream del modulo. Se si digita solo il nome di un modulo senza specificare uno stream, verranno visualizzate tutte le informazioni relative al profilo dello stream per quel modulo.
Installazione¶
Prima di installare lo specifico stream di un modulo, è necessario abilitarlo. La sintassi utilizzata è la seguente:
dnf module enable <Module-Name>:<Stream> ...
Ad esempio:
dnf -y module enable httpd:2.4
Ribadiamo
Lo stream predefinito rimane attivo a meno che non si disattivi il modulo o si attivi un altro stream per il modulo.
Sono ammessi i seguenti metodi d'installazione:
dnf -y module install <Module-Name>- Utilizza lo stream predefinito e il profilo predefinito di un singolo modulo (se esiste un profilo predefinito). Ad esempio:dnf -y install httpddnf -y install <Module-Name>:<Stream>/<Profile>- Utilizzare uno stream e un profilo specifici di un singolo modulo. Ad esempio,dnf -y install httpd:2.4:/minimal. Se sono presenti più profili, è possibile utilizzare*per rappresentarli tutti, ad esempiodnf module install httpd:2.4/*
Remove¶
Per rimuovere di pacchetti è possibile utilizzare la seguente sintassi:
dnf -y module remove --all <Module-name>:<Stream> ...- Rimuove tutti i pacchetti da un singolo stream all’interno di un singolo modulo. Ad esempio:dnf -y module remove --all httpd:2.4dnf -y module remove --all <Nome-modulo>:<Stream>/<Profilo> ...- Rimuove tutti i pacchetti associati a un profilo specifico, utilizzando*per indicare tutti i profili. Ad esempiodnf -y module remove httpd:2.4/*
Reset¶
È possibile utilizzare il comando reset per riportare il modulo allo stato iniziale. La sintassi corrispondente è la seguente:
dnf -y module reset <Module-Name> ...- For examplednf -y module reset httpd
Nota Importante
Il reset del modulo non modificherà i pacchetti software installati.
Switch¶
Si può passare allo stream aggiornato. Sono necessari due prerequisiti per eseguire questa operazione:
- Il sistema operativo è stato completamente aggiornato
- I pacchetti software installati nel sistema operativo non sono più recenti di quelli disponibili nel repository
È possibile utilizzare il comando dnf distro-sync per passare al nuovo stream.
Se sono disponibili aggiornamenti per lo stream del modulo, è necessario eseguire i seguenti passaggi:
dnf module reset <Module-Name> ...dnf module enable <Module-Name>:<New-Stream> ...dnf distro-sync
Se sono già installati nel sistema operativo, è possibile utilizzare l'opzione di comando switch-to per eseguire l'aggiornamento o il downgrade di questi pacchetti software. La sintassi in questo caso è:
dnf module switch-to <Module-Name>:<Stream>
Disable¶
La sintassi utilizzata è:
dnf module disable <Module-Name> ...
Personalizzazione utilizzando un file YAML¶
Un amministratore di sistema può personalizzare lo stream predefinito e il profilo predefinito creando un file YAML nella directory /etc/dnf/modules.defaults.d/.
Prendendo il modulo PostgreSQL come esempio, dalle informazioni visualizzate si può notare che il suo stream predefinito è 10 e il profilo predefinito è “server”:
sudo dnf module list postgresql
Name Stream Profiles Summary
postgresql 9.6 client, server [d] PostgreSQL server and client module
postgresql 10 [d] client, server [d] PostgreSQL server and client module
postgresql 12 client, server [d] PostgreSQL server and client module
postgresql 13 client, server [d] PostgreSQL server and client module
postgresql 15 client, server [d] PostgreSQL server and client module
postgresql 16 client, server [d] PostgreSQL server and client module
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
Impostare 15 come stream predefinito e impostare il profilo predefinito per postgresql:12 su “client”:
sudo vim /etc/dnf/modules.defaults.d/postgresql.yaml
---
document: modulemd-defaults
version: 1
data:
module: postgresql
stream: "15"
profiles:
"9.6": [server]
"10": [server]
"12": [client]
"13": [server]
"15": [server]
...
sudo dnf module list postgresql
Last metadata expiration check: 0:41:35 ago on Sat 10 Jan 2026 10:10:22 PM CST.
Rocky Linux 8 - AppStream
Name Stream Profiles Summary
postgresql 9.6 client, server [d] PostgreSQL server and client module
postgresql 10 client, server [d] PostgreSQL server and client module
postgresql 12 client [d], server PostgreSQL server and client module
postgresql 13 client, server [d] PostgreSQL server and client module
postgresql 15 [d] client, server [d] PostgreSQL server and client module
postgresql 16 client, server PostgreSQL server and client module
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
Esempio:¶
Prendiamo come esempio il modulo nodejs:
sudo dnf module list nodejs
Last metadata expiration check: 0:44:38 ago on Sat 10 Jan 2026 10:10:22 PM CST.
Rocky Linux 8 - AppStream
Name Stream Profiles Summary
nodejs 10 [d] common [d], development, minimal, s2i Javascript runtime
nodejs 12 common [d], development, minimal, s2i Javascript runtime
nodejs 14 common [d], development, minimal, s2i Javascript runtime
nodejs 16 common [d], development, minimal, s2i Javascript runtime
nodejs 18 common [d], development, minimal, s2i Javascript runtime
nodejs 20 common [d], development, minimal, s2i Javascript runtime
nodejs 22 common, development, minimal, s2i Javascript runtime
nodejs 24 common, development, minimal, s2i Javascript runtime
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
sudo dnf -y module enable nodejs:18
sudo dnf module list --enabled nodejs
Last metadata expiration check: 0:46:01 ago on Sat 10 Jan 2026 10:10:22 PM CST.
Rocky Linux 8 - AppStream
Name Stream Profiles Summary
nodejs 18 [e] common [d], development, minimal, s2i Javascript runtime
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
sudo dnf -y module install nodejs:18/minimal
sudo dnf module list --enabled nodejs
Last metadata expiration check: 0:47:26 ago on Sat 10 Jan 2026 10:10:22 PM CST.
Rocky Linux 8 - AppStream
Name Stream Profiles Summary
nodejs 18 [e] common [d], development, minimal [i], s2i Javascript runtime
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
sudo dnf -y module install nodejs:18/common
sudo dnf module list --enabled nodejs
Last metadata expiration check: 0:48:34 ago on Sat 10 Jan 2026 10:10:22 PM CST.
Rocky Linux 8 - AppStream
Name Stream Profiles Summary
nodejs 18 [e] common [d] [i], development, minimal [i], s2i Javascript runtime
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
sudo dnf -y module remove --all nodejs:18/*
sudo dnf -y module reset nodejs
sudo dnf module list nodejs
Last metadata expiration check: 0:50:03 ago on Sat 10 Jan 2026 10:10:22 PM CST.
Rocky Linux 8 - AppStream
Name Stream Profiles Summary
nodejs 10 [d] common [d], development, minimal, s2i Javascript runtime
nodejs 12 common [d], development, minimal, s2i Javascript runtime
nodejs 14 common [d], development, minimal, s2i Javascript runtime
nodejs 16 common [d], development, minimal, s2i Javascript runtime
nodejs 18 common [d], development, minimal, s2i Javascript runtime
nodejs 20 common [d], development, minimal, s2i Javascript runtime
nodejs 22 common, development, minimal, s2i Javascript runtime
nodejs 24 common, development, minimal, s2i Javascript runtime
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
Il repository EPEL¶
Che cos’è EPEL e come si usa?
EPEL (Extra Packages for Enterprise Linux) è un repository open source e gratuito basato sulla comunità, gestito dal Gruppo di interesse speciale EPEL di Fedora. Questa risorsa fornisce una serie di pacchetti aggiuntivi per RHEL (oltre che per CentOS, Rocky Linux e altre distribuzioni) provenienti dai repository di Fedora.
Sia che si tratti di utenti privati o aziende che utilizzano Rocky Linux 8.x/9.x/10.x, di solito si consiglia di abilitare il repository EPEL.
È possibile installare il repository EPEL nei seguenti modi:
dnf install epel-release
Esaminare le informazioni pertinenti e verificare che l'installazione sia stata eseguita correttamente:
sudo dnf info epel-release
Last metadata expiration check: 1 day, 23:02:38 ago on Sat 10 Jan 2026 10:10:22 PM CST.
Installed Packages
Name : epel-release
Version : 8
Release : 22.el8
Architecture : noarch
Size : 34 k
Source : epel-release-8-22.el8.src.rpm
Repository : @System
From repo : epel
Summary : Extra Packages for Enterprise Linux repository configuration
URL : http://download.fedoraproject.org/pub/epel
License : GPLv2
Description : This package contains the Extra Packages for Enterprise Linux (EPEL) repository
: GPG key as well as configuration for yum.
rpm -qa | grep epel
epel-release-8-14.el8.noarch
sudo dnf repolist
repo id repo name
...
epel Extra Packages for Enterprise Linux 8 - x86_64
...
Qui si può notare come il pacchetto non contiene file eseguibili, librerie e così via, ma solo i file di configurazione e le chiavi GPG necessari per configurare il repository.
File .repo associati:
ls -lh /etc/yum.repos.d/epel*
-rw-r--r-- 1 root root 1.7K Apr 23 2025 /etc/yum.repos.d/epel-modular.repo
-rw-r--r-- 1 root root 1.4K Apr 23 2025 /etc/yum.repos.d/epel.repo
-rw-r--r-- 1 root root 1.8K Apr 23 2025 /etc/yum.repos.d/epel-testing-modular.repo
-rw-r--r-- 1 root root 1.4K Apr 23 2025 /etc/yum.repos.d/epel-testing.repo
Di default, sono abilitati solo i repository con l'ID epel presenti nel file epel.repo.
cat /etc/yum.repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux 8 - $basearch
# It is much more secure to use the metalink, but if you wish to use a local mirror
# place its address here.
#baseurl=https://download.example/pub/epel/$releasever/Everything/source/tree/
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-source-$releasever&arch=$basearch&infra=$infra&content=$contentdir
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8
gpgcheck=1
Elencare tutti i pacchetti software disponibili con ID repository epel:
dnf --repoid epel list --available
Se nel tuo sistema operativo sono presenti altri repository, ma desideri installare pacchetti solo da EPEL:
sudo dnf --disablerepo="*" --enablerepo="epel" install nmon
Last metadata expiration check: 0:08:13 ago on Mon 12 Jan 2026 09:34:25 PM CST.
Dipendenze risolte.
========================================================================================================================
Package Architecture Version Repository Size
========================================================================================================================
Installing:
nmon x86_64 16p-5.el8 epel 80 k
Transaction Summary
========================================================================================================================
Install 1 Package
Total download size: 80 k
Installed size: 161 k
Is this ok [y/N]:
Promemoria utile
Quando sono abilitati più repository, lo stesso pacchetto software può avere più versioni e, per impostazione predefinita, la versione più recente ha la priorità più alta. Questo è anche il motivo per cui si utilizzano le opzioni --disablerepo e --enablerepo.
Considerazione sul Supporto
EPEL è un progetto avviato da volontari della comunità Fedora, pertanto non beneficia del supporto commerciale di Red Hat. Proprio come per Fedora stessa, Red Hat ospita l'infrastruttura di questo progetto e i tecnici di Red Hat vi partecipano in qualità di manutentori e responsabili, ma Red Hat non offre contratti di assistenza commerciale né accordi sul livello di servizio per i pacchetti presenti in EPEL.
Per le domande frequenti su EPEL, consultare le FAQ su EPEL nella documentazione di Fedora.
Author: Antoine Le Morvan
Contributors: Steven Spencer, Ganna Zhyrnova, tianci li