RPM è l'acronimo ricorsivo di RPM Package Manager:è il gestore di pacchetti di basso livello predefinito in alcune delle distribuzioni Linux più famose e più utilizzate, come Fedora, Red Hat Enterprise Linux, CentOS, OpenSUSE e loro derivati. Il software, come puoi aspettarti, è gratuito e open source; quando invocato con -q
opzione può essere utilizzato per interrogare pacchetti per recuperare informazioni specifiche, come dipendenze, consigli, file ecc. In questo tutorial impariamo come eseguire tali query.
In questo tutorial imparerai :
- Come eseguire rpm in modalità "query"
- Come ottenere informazioni generali su un pacchetto
- Come leggere il registro delle modifiche di un pacchetto
- Come elencare i file forniti da un pacchetto
- Come elencare gli script utilizzati da un pacchetto
- Come elencare le dipendenze e i consigli di un pacchetto
- Come elencare i pacchetti resi obsoleti da un rpm
Requisiti software e convenzioni utilizzati
Categoria | Requisiti, convenzioni o versione del software utilizzata |
---|---|
Sistema | Distribuzioni che utilizzano il gestore di pacchetti rpm |
Software | Il gestore di pacchetti rpm |
Altro | Nessuno |
Convenzioni | # – richiede che i comandi linux dati vengano eseguiti con i privilegi di root direttamente come utente root o usando sudo command$ – richiede l'esecuzione di determinati comandi linux come un normale utente non privilegiato |
Richiamo di rpm in modalità query
Il gestore pacchetti rpm può essere utilizzato per modificare lo stato del sistema, poiché può essere utilizzato per installare, aggiornare e rimuovere pacchetti (quando invocato con -i
, -U
e e
opzioni, rispettivamente), oppure può essere eseguito in modalità “query”, senza la necessità di privilegi di amministratore, quando viene lanciato con il -q
opzione, che è la versione breve di --query
.
Se un pacchetto è già installato sul nostro sistema, tutto ciò che dobbiamo fare è citarlo per nome; in caso contrario, vogliamo interrogare un .rpm
scaricato file, per esempio, dobbiamo usare il -p
(--package
) e fornire il percorso del file come argomento. Vediamo alcuni esempi pratici di come recuperare informazioni su un pacco.
Ottenere informazioni generali su un pacchetto
Una delle cose di base che potremmo voler fare quando si tratta di un pacchetto rpm è visualizzare informazioni generali su di esso. Per portare a termine questo compito, tutto ciò che dobbiamo fare è usare il -i
(o --info
) quando si richiama rpm in modalità query. Per il bene di questo esempio lavoreremo con il pacchetto “gimp”, che è già installato nel sistema. In questo caso eseguiremmo:
$ rpm -qi gimp
Immediatamente dopo aver invocato il comando, riceviamo un output simile al seguente, che include informazioni, come la descrizione del software, la sua versione, l'architettura, la data di installazione, le dimensioni, ecc:
Name : gimp Epoch : 2 Version : 2.10.24 Release : 1.fc34 Architecture: x86_64 Install Date: Mon 21 Jun 2021 11:26:33 AM CEST Group : Unspecified Size : 109267268 License : GPLv3+ and GPLv3 Signature : RSA/SHA256, Sat 03 Apr 2021 02:00:02 AM CEST, Key ID 1161ae6945719a39 Source RPM : gimp-2.10.24-1.fc34.src.rpm Build Date : Sat 03 Apr 2021 01:13:55 AM CEST Build Host : buildhw-x86-11.iad2.fedoraproject.org Packager : Fedora Project Vendor : Fedora Project URL : http://www.gimp.org/ Bug URL : https://bugz.fedoraproject.org/gimp Summary : GNU Image Manipulation Program Description : GIMP (GNU Image Manipulation Program) is a powerful image composition and editing program, which can be extremely useful for creating logos and other graphics for web pages. GIMP has many of the tools and filters you would expect to find in similar commercial offerings, and some interesting extras as well. GIMP provides a large image manipulation toolbox, including channel operations and layers, effects, sub-pixel imaging and anti-aliasing, and conversions, all with multi-level undo.
Lettura di un log delle modifiche del pacchetto
Come sappiamo, un changelog è un log in cui tutte le modifiche apportate a un progetto vengono riportate e ordinate cronologicamente. Se quello che vogliamo fare è leggere il log delle modifiche di un pacchetto rpm, dobbiamo invocare il gestore pacchetti rpm in modalità query e usare il --changelog
opzione. Vediamo un esempio:
$ rpm -q --changelog gimp
Ecco l'output (troncato) del comando sopra sull'ultima versione di Fedora (34):
[...] Thu Jan 09 2020 Josef Ridky <[email protected]> - 2:2.10.14-3 - Demodularizing of gimp (#1772469) * Mon Nov 18 2019 Kalev Lember <[email protected]> - 2:2.10.14-2 - Rebuild for libmypaint 1.4.0 * Mon Nov 04 2019 Kalev Lember <[email protected]> - 2:2.10.14-1 - Update to 2.10.14 * Tue Aug 20 2019 Josef Ridky <[email protected]> - 2:2.10.12-3 - Fix default configuration for font folders (#1706653) * Wed Jul 31 2019 Josef Ridky <[email protected]> - 2:2.10.12-2 - Fix issue with reading SVG files (#1715882) * Thu Jul 25 2019 Fedora Release Engineering <[email protected]> - 2:2.10.12-1.1 - Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild * Thu Jun 13 2019 Kalev Lember <[email protected]> - 2:2.10.12-1 - Update to 2.10.12 * Thu Apr 11 2019 Richard Shaw <[email protected]> - 2:2.10.10-2 - Rebuild for OpenEXR 2.3.0. * Mon Apr 08 2019 Josef Ridky <[email protected]> - 2:2.10.10-1 - New upstream release 2.10.10 (#1697119)
Elencare tutti i file forniti da un pacchetto
Quando installiamo un pacchetto sul nostro sistema, una serie di file vengono copiati nei posti appropriati, come previsto dal suo manutentore. Se vogliamo elencare i file forniti da un pacchetto che è già installato sul nostro sistema possiamo invocare il
rpm package manager in modalità query con il -l
opzione (abbreviazione di --list
):
$ rpm -ql gimp
Come abbiamo detto in precedenza, se vogliamo interrogare un pacchetto prima lo installiamo, invece, dobbiamo aggiungere il -p
opzione e fornisci il percorso del pacchetto come argomento:
$ rpm -qlp /path/to/package.rpm
Il comando sopra produrrà il seguente risultato:
/etc/gimp /etc/gimp/2.0 /etc/gimp/2.0/controllerrc /etc/gimp/2.0/gimprc /etc/gimp/2.0/gtkrc /etc/gimp/2.0/menurc /etc/gimp/2.0/sessionrc /etc/gimp/2.0/templaterc /etc/gimp/2.0/toolrc /etc/gimp/2.0/unitrc /usr/bin/gimp /usr/bin/gimp-2.10 /usr/bin/gimp-console /usr/bin/gimp-console-2.10 /usr/bin/gimp-test-clipboard-2.0 [...]
Elencare gli script utilizzati da un pacchetto
Alcuni .rpm
packages utilizza una serie di script o "scriptlet" che vengono eseguiti come parte del processo di installazione o rimozione. Se vogliamo dargli un'occhiata, possiamo farlo invocando rpm in modalità query con il --scripts
opzione. Per il bene di questo esempio esamineremo gli script inclusi in systemd pacchetto:
$ rpm -q --scripts systemd
Di seguito possiamo vedere l'output (troncato) del comando sopra, quando lanciato su Fedora 34. Come puoi vedere, prima degli script stessi possiamo notare che viene riportato anche il contesto in cui vengono utilizzati (es. "preinstall" o "postinstall ”):
preinstall scriptlet (using /bin/sh): getent group cdrom &>/dev/null || groupadd -r -g 11 cdrom &>/dev/null || : getent group utmp &>/dev/null || groupadd -r -g 22 utmp &>/dev/null || : getent group tape &>/dev/null || groupadd -r -g 33 tape &>/dev/null || : getent group dialout &>/dev/null || groupadd -r -g 18 dialout &>/dev/null || : getent group input &>/dev/null || groupadd -r input &>/dev/null || : getent group kvm &>/dev/null || groupadd -r -g 36 kvm &>/dev/null || : getent group render &>/dev/null || groupadd -r render &>/dev/null || : getent group systemd-journal &>/dev/null || groupadd -r -g 190 systemd-journal 2>&1 || : [...]
Un'altra opzione simile è --triggers
che viene utilizzato per visualizzare gli script di attivazione contenuto in un pacco. Cosa sono gli script di attivazione? Sono fondamentalmente script che vengono eseguiti (attivati) quando lo stato di un altro pacchetto
cambia:
$ rpm -q --triggers systemd
Con il comando sopra possiamo visualizzare gli script di trigger contenuti nel systemd pacchetto:
triggerun scriptlet (using /bin/sh) -- systemd < 246.1-1 # This is for upgrades from previous versions before systemd-resolved became the default. systemctl --no-reload preset systemd-resolved.service &>/dev/null || : if systemctl -q is-enabled systemd-resolved.service &>/dev/null; then systemctl -q is-enabled NetworkManager.service 2>/dev/null && \ ! test -L /etc/resolv.conf 2>/dev/null && \ ! mountpoint /etc/resolv.conf &>/dev/null && \ grep -q 'Generated by NetworkManager' /etc/resolv.conf 2>/dev/null && \ echo -e '/etc/resolv.conf was generated by NetworkManager.\nRemoving it to let systemd-resolved manage this file.' && \ mv -v /etc/resolv.conf /etc/resolv.conf.orig-with-nm && \ ln -sv ../run/systemd/resolve/stub-resolv.conf /etc/resolv.conf 2>/dev/null || : systemctl start systemd-resolved.service &>/dev/null || : fi triggerpostun scriptlet (using /bin/sh) -- systemd < 247.3-2 # This is for upgrades from previous versions before oomd-defaults is available. # We use %triggerpostun here because rpm doesn't allow a second %triggerun with # a different package version. systemctl --no-reload preset systemd-oomd.service &>/dev/null || :
Elencare le dipendenze e i consigli di un pacchetto
Un altro compito comune che potremmo voler eseguire è trovare le dipendenze di un pacchetto rpm. L'opzione che ci consente di eseguire l'operazione è -R
(abbreviazione di --requires
). Per verificare le dipendenze del pacchetto “gimp”, ad esempio, eseguiremo il seguente comando:
$ rpm -qR gimp
Una volta eseguito il comando, sullo schermo verrà visualizzato l'elenco delle dipendenze del software:
/usr/bin/python2 babl(x86-64) >= 0.1.78 config(gimp) = 2:2.10.24-1.fc34 fontconfig >= 2.12.4 freetype >= 2.1.7 gegl04(x86-64) >= 0.4.30 gimp-libs(x86-64) = 2:2.10.24-1.fc34 glib2 >= 2.56.2 gtk2 >= 2.24.32 hicolor-icon-theme [...]
Se invece di -R
opzione che utilizziamo --recommends
possiamo ottenere un elenco dei software che non sono strettamente necessari al pacchetto che stiamo interrogando, ma da esso consigliati:
$ rpm -q --recommends gimp
Elenco dei pacchetti resi obsoleti da un rpm
Allo stesso modo degli esempi precedenti, possiamo vedere quali pacchetti sono resi obsoleti dal pacchetto che stiamo interrogando. Tutto quello che dobbiamo fare è usare --obsoletes
opzione:
$ rpm -q --obsoletes gimp
Ecco l'output del comando nell'esempio:
gimp < 2:2.10.24-1.fc34 gimp-help-browser < 2:2.10.24-1.fc34 gimp-unstable < 2:2.10
Conclusioni
Rpm è un gestore di pacchetti molto potente:in questo tutorial abbiamo visto come eseguirlo in modalità “query”. Abbiamo visto come ottenere informazioni generali su un pacchetto, come la sua versione e architettura, come leggere un log delle modifiche di un pacchetto, come elencare tutti i file che verranno installati da un pacchetto, come dare un'occhiata agli "scriptlet" che vengono utilizzati come parte della gestione del pacchetto e come ottenere un elenco delle dipendenze e dei consigli di un pacchetto.