RPM (RedHat Package Manager) è il gestore di default dei pacchetti nelle distribuzioni GNU\Linux RedHat e derivate, come ad esmepio CentOS o Fedora. Questo tool consente agli amministratori dei sistemi di installare, rimuovere, aggiornare, verificare e gestire i pacchetti software di sistema. Saper gestire al meglio i pacchetti software è uno dei fondamentali per conseguire la certificazione RHCSA. In questo articolo vi propongo 15 esempi pratici del comando rpm che potrebbero risultare utili per la gestione del vostro sistema.
Dove scaricare file RPM
Possiamo scaricare i file RPM in siti non ufficiali. Ve ne elenco 3 che, oltre ad essere i più famosi, uso spesso:
1. Installare un pacchetto RPM
Per installare un pacchetto .rpm appena scaricato o appena creato utilizzare il comando:
# rpm -ivh nome_pacchetto.rpm
nell’esempio il pacchetto perl-tests:
[root@centos7 ~]# rpm -ivh perl-tests-5.16.3-285.el7.x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:perl-tests-4:5.16.3-285.el7 ################################# [100%]
2. Verificare le dipendenze necessarie del pacchetto prima di installarlo
Un pacchetto .rpm solitamente ha bisogno di alcune librerie o pacchetti per essere installato correttamente. Per verificare cosa abbiamo bisogno utilizziamo il comando:
# rpm -qpR nome_pacchetto.rpm
ecco un esempio:
[root@centos7 ~]# rpm -qpR perl-tests-5.16.3-285.el7.x86_64.rpm perl(:MODULE_COMPAT_5.16.3) perl-core rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadIsXz) <= 5.2-1
3. Verificare se un pacchetto è installato
Come detto nel punto precedente, ogni pacchetto ha le sue dipendenze. Per verificare se un pacchetto è già installato sul nostro sistema utilizzare il comando:
# rpm -q nome_pacchetto
per l’esempio precedente:
[root@centos7 ~]# rpm -q perl-core perl-core-5.16.3-283.el7.x86_64
in questo caso il pacchetto perl-core è presente nel nostro sistema, in caso contrario l’output sarebbe nullo.
4. Eliminare un pacchetto
Per eliminare un pacchetto installato utilizzare l’opzione “-e” (erase):
# rpm -ev nome_pacchetto
esempio:
[root@centos7 ~]# rpm -ev perl-tests Preparing packages... perl-tests-4:5.16.3-285.el7.x86_64
5. Eliminare un pacchetto senza dipendenze
Può risultare utile anche questo comando, che permette di forzare l’eliminazione di un pacchetto anche se richiesto da altre applicazioni. Ovviamente la rimozione può causare danni al funzionamenti di altre applicazioni. Il comando da utilizzare è:
# rpm -ev --nodeps nome_pacchetto
6. Effettuare un test di installazione prima di installare un pacchetto
Può essere utile, prima di installare un pacchetto, effettuare una simulazione di installazione, per verificare se ci sono problemi. Per fare questo bisogna utilizzare il parametro “–test“, quindi:
# rpm -ivh nome_pacchetto --test
esempio:
[root@centos7 ~]# rpm -ivh perl-tests-5.16.3-285.el7.x86_64.rpm --test Preparing... ################################# [100%]
in questo caso tutto è andato bene. Mentre se abbiamo problemi tipo dipendenze insoddisfatte, l’output sarà così:
[root@centos7 ~]# rpm -ivh perl-tests-5.16.3-285.el7.x86_64.rpm --test error: Failed dependencies: perl-core is needed by perl-tests-4:5.16.3-285.el7.x86_64
7. Verificare la firma di un pacchetto
Prima di installare un pacchetto è sempre consigliato verificare l’integrità del pacchetto e la firma. Questo eliminerà ogni dubbio sulla provenienza del pacchetto. Il comando da utilizzare è:
# rpm ---checksig nome_pacchetto
esempio di output:
[root@centos7 ~]# rpm --checksig perl-tests-5.16.3-285.el7.x86_64.rpm perl-tests-5.16.3-285.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
8. Effettuare il rebuild del database corrotto di rpm
Può succedere, come a volte sento da amici e colleghi, che il DB dei pacchetti viene corrotto per qualche motivo. Di seguito i comandi per effettuare il rebuild:
# cd /var/lib/rpm # rm -f __db.* # rpm --rebuilddb # rpmdb --rebuilddb
In questo modo dovremmo riavere i file __db.01 ecc corretti.
9. Visualizzare tutte le Chiavi GPG importate
Per visualizzare tutte le Chiavi GPG presenti nel sistema utilizzare il comando:
# rpm -qa gpg-pub*
esempio:
[root@centos7 ~]# rpm -qa gpg-pub* gpg-pubkey-f4a80eb5-53a7ff4b
10. Importare una Chiave GPG
Per importare una Chiave GPG nel nostro sistema utilizzare il comando:
# rpm --import /path/key/RPM-GPG-KEY-NAME
esempio:
[root@centos7 ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
11. Reperire informazioni sulla documentazione di un pacchetto installato
Se vogliamo visualizzare dove risiede la documentazione di un binario installato sul nostro sistema, utilizzare il comando:
# rpm -qdf /path/binario
esempio:
[root@centos7 ~]# rpm -qdf /usr/sbin/ifconfig /usr/share/doc/net-tools-2.0/COPYING /usr/share/man/de/man5/ethers.5.gz /usr/share/man/de/man8/arp.8.gz /usr/share/man/de/man8/ifconfig.8.gz /usr/share/man/de/man8/netstat.8.gz /usr/share/man/de/man8/plipconfig.8.gz /usr/share/man/de/man8/route.8.gz /usr/share/man/de/man8/slattach.8.gz /usr/share/man/fr/man5/ethers.5.gz ...
12. Reperire informazioni su un pacchetto installato
Se vogliamo informazioni dettagliate su un pacchetto installato nel sistema utilizzare il comando:
# rpm -qi nome_pacchetto
esempio:
[root@centos7 ~]# rpm -qi net-tools Name : net-tools Version : 2.0 Release : 0.17.20131004git.el7 Architecture: x86_64 Install Date: Tue 17 Mar 2015 12:25:13 PM CET Group : System Environment/Base Size : 938653 License : GPLv2+ Signature : RSA/SHA256, Fri 04 Jul 2014 05:56:18 AM CEST, Key ID 24c6a8a7f4a80eb5 Source RPM : net-tools-2.0-0.17.20131004git.el7.src.rpm Build Date : Tue 10 Jun 2014 06:15:04 AM CEST Build Host : worker1.bsys.centos.org Relocations : (not relocatable) Packager : CentOS BuildSystem <http://bugs.centos.org> Vendor : CentOS URL : http://sourceforge.net/projects/net-tools/ Summary : Basic networking tools Description : The net-tools package contains basic networking tools, including ifconfig, netstat, route, and others. Most of them are obsolete. For replacement check iproute package.
13. Reperire informazioni su un pacchetto rpm prima di installarlo
Come abbiamo visto nella guida “creare un paccheto RPM“, all’interno del file .spec vi sono inserite tutte le informazioni relative al software. Per visualizzare tali informazioni su un qualsiasi pacchetto .rpm utilizzare il comando:
# rpm -qip nome_pacchetto.rpm
esempio:
[root@centos7 ~]# rpm -qip perl-tests-5.16.3-285.el7.x86_64.rpm Name : perl-tests Epoch : 4 Version : 5.16.3 Release : 285.el7 Architecture: x86_64 Install Date: (not installed) Group : Development/Languages Size : 3431801 License : GPL+ or Artistic Signature : RSA/SHA256, Sat 14 Mar 2015 09:28:37 AM CET, Key ID 24c6a8a7f4a80eb5 Source RPM : perl-5.16.3-285.el7.src.rpm Build Date : Fri 06 Mar 2015 06:10:00 AM CET Build Host : worker1.bsys.centos.org Relocations : (not relocatable) Packager : CentOS BuildSystem <http://bugs.centos.org> Vendor : CentOS URL : http://www.perl.org/ Summary : The Perl test suite Description : This package contains the test suite included with Perl 5.16.3. Install this if you want to test your Perl installation (binary and core modules).
14. Vedere a quale pacchetto corrisponde un file
Potrebbe risultare molto utile capire a quale pacchetto appartiene un determinato file di configurazione. Questo è possibile utilizzando il comando:
# rpm -qf /path/file_conf
esempio:
[root@centos7 ~]# rpm -qf /etc/httpd/conf/httpd.conf httpd-2.4.6-19.el7.centos.x86_64
15. Aggiornare un pacchetto RPM
Per aggiornare un pacchetto RPM utilizzare il comando:
# rpm -U nome_pacchetto.rpm
esempio:
[root@centos7 ~]# rpm -Uvh perl-tests-5.16.3-285.el7.x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:perl-tests-4:5.16.3-285.el7 ################################# [100%]
Conclusione
Spero che sia stato utile l’articolo per imparare, anche se non tutte, le operazioni sui pacchetti tramite il comando rpm.