Come l’unità gemella sul mondo Debian, anche questa è volutamente monofamiglia: LPI dedica ai pacchetti RPM un obiettivo separato e si aspetta che tu non mescoli i due vocabolari. Qui vivono Red Hat Enterprise Linux e i suoi derivati (Fedora, CentOS, Rocky, AlmaLinux, Oracle Linux) e openSUSE, che usa lo stesso formato ma un gestore diverso.

Una conseguenza pratica: lo stesso formato non garantisce la compatibilità. Un .rpm per openSUSE può non funzionare su RHEL, perché cambiano nomi, dipendenze e convenzioni. Cerca sempre il pacchetto della tua distribuzione.

rpm: installare, aggiornare, rimuovere

Il livello basso è rpm: lavora su un file alla volta e non va in rete.

# rpm -i pacchetto.rpm
# rpm -Uvh pacchetto.rpm
# rpm -F pacchetto.rpm
# rpm -e nomepacchetto

Le tre lettere iniziali sono la distinzione più chiesta all’esame. -i installa. -U (upgrade) aggiorna se esiste una versione precedente e installa comunque se non esiste. -F (freshen) aggiorna solo se il pacchetto è già presente: è la forma giusta per applicare una cartella di aggiornamenti senza aggiungere software nuovo.

-v rende l’output verboso e -h stampa i cancelletti della barra di avanzamento; le opzioni si accorpano, quindi rpm -ivh equivale a rpm -i -v -h. Per rimuovere si usa -e (erase) seguito dal nome del pacchetto, non dal nome del file. Se qualcosa dipende da ciò che stai togliendo, rpm rifiuta con «Failed dependencies» e tocca a te rimuovere prima i dipendenti; in installazione elenca le dipendenze mancanti ma non le scarica.

Le query di rpm: la q e cosa ci metti dietro

Tutte le interrogazioni iniziano con -q. La seconda lettera dice cosa vuoi, e queste combinazioni vanno sapute a memoria: una domanda a completamento non ti offre alternative da riconoscere.

# rpm -qa
# rpm -q unzip
# rpm -qi unzip
# rpm -ql unzip
# rpm -qf /usr/bin/unzip
# rpm -qip atom.x86_64.rpm

-qa elenca tutti i pacchetti installati; -q nome dice se quel pacchetto c’è; -qi mostra versione, architettura, data di installazione, licenza, firma e sommario; -ql elenca i file che il pacchetto ha installato; -qf fa il percorso inverso e dice da quale pacchetto arriva un file.

La lettera che cambia tutto è p: senza, rpm interroga il database dei pacchetti installati; con -p interroga un file .rpm sul disco, anche mai installato. Da qui -qip e -qlp.

Per integrità e firme ci sono due comandi distinti. rpm -V nomepacchetto confronta i file installati con il database e stampa una riga solo per ciò che è cambiato: 5 è il checksum, S la dimensione, T la data di modifica, il punto significa «invariato»; rpm -Va verifica tutto il sistema. rpm -K pacchetto.rpm, sinonimo di rpm --checksig, verifica invece la firma GPG del file e richiede che la chiave del fornitore sia stata importata con rpm --import.

Infine rpm2cpio estrae il contenuto di un pacchetto senza installarlo, utile per recuperare un singolo file:

$ rpm2cpio pacchetto.rpm | cpio -idmv

yum e dnf: repository e dipendenze risolte

yum sta a rpm come apt-get sta a dpkg: parla con i repository, scarica e risolve le dipendenze. dnf è il suo fork, predefinito su Fedora e su RHEL dalla versione 8: dell’obiettivo serve la consapevolezza che esiste e che i comandi si somigliano molto.

# yum search 7zip
# yum install p7zip
# yum update wget
# yum check-update
# yum remove p7zip
# yum info firefox
# yum whatprovides /etc/hosts

Senza nome di pacchetto, yum update aggiorna tutto il sistema e yum check-update si limita a dire cosa è aggiornabile. whatprovides risponde a «quale pacchetto fornisce questo file o questa libreria?», sia per file già presenti sia per file dentro pacchetti non installati: è il compagno naturale di un errore di dipendenze di rpm.

In dnf i verbi sono quasi gli stessi, con due differenze: si dice dnf provides invece di whatprovides e l’aggiornamento è dnf upgrade. Per l’elenco dei file di un pacchetto: dnf repoquery -l nomepacchetto.

La configurazione globale è /etc/yum.conf (sui sistemi recenti un collegamento a /etc/dnf/dnf.conf), mentre ogni repository ha un file .repo in /etc/yum.repos.d/; anche dnf usa quella directory e quella sintassi. Per gestirli senza editor: yum-config-manager --add-repo URL, --enable e --disable seguiti dall’id del repository, cioè la parte prima della prima barra nella colonna «repo id» di yum repolist. In dnf gli equivalenti sono dnf config-manager --add-repo, --set-enabled e --set-disabled: nomi diversi, stessa funzione.

zypper: le stesse operazioni con altri verbi

Su SUSE e openSUSE il front end è zypper, che ha forme lunghe e abbreviate.

# zypper refresh
# zypper se -i firefox
# zypper in unrar
# zypper rm unrar
# zypper info gimp
# zypper se --provides /usr/lib64/libgimpmodule-2.0.so.0
# zypper repos
# zypper addrepo URL nome
# zypper modifyrepo -d repo-non-oss

refresh equivale a apt-get update. se è search, in è install, rm è remove, e zypper update aggiorna. Con se -i cerchi solo fra gli installati, con se -u solo fra i non installati, con se --provides scopri quale pacchetto contiene un dato file. zypper repos elenca i repository per Alias e modifyrepo li modifica: -d disabilita, -e abilita, -F e -f spengono e accendono l’auto-refresh.

Una differenza utile rispetto a rpm: passando a zypper in il percorso di un .rpm locale, le sue dipendenze vengono cercate nei repository e installate da lì.