16.2. Utilizzo di RPM

RPM ha cinque modalità di funzionamento: installazione, disinstallazione, aggiornamento, interrogazione e verifica. Questa sezione contiene una panoramica di ogni modalità. Per maggiori dettagli e opzioni, digitate il comando rpm --help o consultate la Sezione 16.5.

16.2.1. Ricerca dei pacchetti RPM

Prima di usare RPM dovete sapere dove trovarli. Una ricerca effettuata tramite Internet, può darvi diversi luoghi, ma se state cercando i pacchetti RPM creati da Red Hat, ecco come poterli trovare:

16.2.2. Installazione

Solitamente i nomi dei file dei pacchetti RPM sono simili a foo-1.0-1.i386.rpm. Il nome del file include il nome del pacchetto (foo), la versione (1.0), la release (1) e l'architettura (i386). Per installare un pacchetto basta digitare, al prompt della shell, il comando seguente:

rpm -Uvh foo-1.0-1.i386.rpm

Se l'installazione ha successo, potrete visualizzare i seguenti output:

Preparing...                ########################################### [100%]
   1:foo                    ########################################### [100%]

Come potete vedere, RPM stampa il nome del pacchetto e una serie di riferimenti che servono per seguire l'installazione del pacchetto.

A partire dalla versione 4.1 di RPM, la firma di un pacchetto viene verificata automaticamente durante l'installazione o l'aggiornamento di un pacchetto. Se la verifica della firma non riesce, verrà visualizzato un messaggio di errore come il seguente:

error: V3 DSA signature: BAD, key ID 0352860f

Se si tratta di una nuova firma, costituita solo dall'intestazione, verrà visualizzato un messaggio di errore simile al seguente:

error: Header V3 DSA signature: BAD, key ID 0352860f

Se non disponete della chiave appropriata installata per la verifica della firma, il messaggio conterrà NOKEY come di seguito mostrato:

warning: V3 DSA signature: NOKEY, key ID 0352860f

Per ulteriori informazioni sulla verifica di una firma del pacchetto, consultate la Sezione 16.3.

NotaNota Bene
 

Se state installato un pacchetto del kernel, dovreste utilizzare rpm -ivh. Per ulteriori informazioni consultate il Capitolo 39.

L'installazione dei pacchetti è un'operazione semplice, ma vi può capitare di trovare degli errori.

16.2.2.1. Pacchetti già installati

Se sul sistema è già installata la stessa versione delpacchetto, comparirà il messaggio seguente:

Preparing...                ########################################### [100%]
package foo-1.0-1 is already installed

Se volete installare ugualmente il pacchetto, e la stessa versione è già presente sul sistema, usate l'opzione --replacepkgs che indica a RPM di ignorare l'errore:

rpm -ivh --replacepkgs foo-1.0-1.i386.rpm

L'opzione è utile se sono stati cancellati dei file RPM oppure se volete installare i file di configurazione originali di RPM.

16.2.2.2. File in conflitto

Se provate a installare un pacchetto contenente un file che è già stato installato da un altro pacchetto o da una versione precedente dello stesso pacchetto, comparirà quanto segue:

Preparing...                ########################################### [100%]
file /usr/bin/foo from install of foo-1.0-1 conflicts with file from package bar-2.0.20

Perché RPM ignori questo errore, usate l'opzione --replacefiles:

rpm -ivh --replacefiles foo-1.0-1.i386.rpm

16.2.2.3. Dipendenze non risolte

I pacchetti RPM possono "dipendere" da altri pacchetti, il che significa che la loro installazione è subordinata alla presenza di altri pacchetti. Se provate a installare un pacchetto che ha delle dipendenze non risolte, comparirà quanto di seguito riportato:

Preparing...                ########################################### [100%]
error: Failed dependencies:
        bar.so.2 is needed by foo-1.0-1
    Suggested resolutions:
        bar-2.0.20-3.i386.rpm

Se state installando un pacchetto tramite il set di CD-ROM di Red Hat Enterprise Linux, verrà suggerito, generalmente, che i pacchetti risolvano la dipendenza. Questi pacchetti sono disponibili nei CD-ROM di Red Hat Enterprise Linux o nel sito FTP (o mirror) di Red Hat e potete aggiungerli al comando:

rpm -ivh foo-1.0-1.i386.rpm bar-2.0.20-3.i386.rpm

Se l'installazione di entrambi i pacchetti riesce, potrete visualizzare quanto segue:

Preparing...                ########################################### [100%]
   1:foo                    ########################################### [ 50%]
   2:bar                    ########################################### [100%]

Se non viene suggerito un pacchetto per risolvere la dipendenza, potete tentare di utilizzare l'opzione --redhatprovides per determinare quale pacchetto contiene il file richiesto. È necessario che il pacchetto rpmdb-redhat sia installato per utilizzare queste opzioni.

rpm -q --redhatprovides bar.so.2

Se il pacchetto che contiene bar.so.2 si trova nel database installato dal pacchetto rpmdb-redhat, verrà visualizzato il nome del pacchetto:

bar-2.0.20-3.i386.rpm

Per forzare l'installazione (scelta sconsigliabile visto che probabilmente il pacchetto non funzionerà correttamente), usate l'opzione --nodeps.

16.2.3. Rimozione dell'installazione

L'operazione di rimozione è semplice quanto quella di installazione. Al prompt della shell digitate il comando seguente:

rpm -e foo

NotaNota Bene
 

Da notare che abbiamo usato il nome del pacchetto foo, non quello del file originale foo-1.0-1.i386.rpm. Per disinstallare un pacchetto, sostituite foo con il nome del pacchetto di origine.

Potete incontrare un errore di dipendenza durante la rimozione di un pacchetto se un altro pacchetto installato dipende da quello che state cercando di rimuovere. Per esempio:

Preparing...                ########################################### [100%]
error: removing these packages would break dependencies:
        foo is needed by  bar-2.0.20-3.i386.rpm

Perché RPM ignori questo errore e disinstalli il pacchetto (anche questa operazione è sconsigliabile poiché il pacchetto dipendente non potrà funzionare correttamente), usate l'opzione --nodeps.

16.2.4. Aggiornamento

L'operazione di aggiornamento è simile a quella di installazione. Nella shell digitate quanto segue:

rpm -Uvh foo-2.0-1.i386.rpm

Ciò che non vedete sopra è che RPM ha automaticamente disinstallato tutte le versioni precedenti del pacchetto foo. È consigliabile usare sempre il comando -U per installare i pacchetti, poiché funziona anche quando non ci sono versioni precedenti del pacchetto installato.

Dato che RPM esegue un aggiornamento intelligente dei pacchetti con i file di configurazione, può comparire a video un messaggio simile a:

saving /etc/foo.conf as /etc/foo.conf.rpmsave

Il messaggio indica che le modifiche apportate al file di configurazione possono non essere "forward compatible" con il nuovo file di configurazione del pacchetto, perciò RPM ha salvato il vostro file originale e ne ha installato uno nuovo. Dovete cercare le differenza fra i due file di configurazione e risolverle appena possibile in modo che il sistema possa continuare a funzionare correttamente.

L'aggiornamento è una combinazione dell'installazione e della disinstallazione perciò, durante un aggiornamento di RPM, potete trovare errori di installazione e disinstallazione più un altro errore. Se RPM crede che state cercando di aggiornare un pacchetto con una versione precedente, compare un output simile al seguente:

package foo-2.0-1 (which is newer than foo-1.0-1) is already installed

Perché RPM si aggiorni ugualmente, usate l'opzione --oldpackage:

rpm -Uvh --oldpackage foo-1.0-1.i386.rpm

16.2.5. Refresh

L'operazione di refresh è simile all'operazione di aggiornamento. Al prompt della shell digitate il comando seguente:

rpm -Fvh foo-1.2-1.i386.rpm

L'opzione di refresh di RPM controlla le versioni dei pacchetti specificati nella linea di comando con quelli già installati sul sistema. Quando una nuova versione di un pacchetto già installato viene elaborata dall'opzione di refresh di RPM, il pacchetto viene aggiornato alla nuova versione. Tuttavia, l'opzione di refresh di RPM non installa un pacchetto se sul sistema non è presente alcuna versione precedente di questo pacchetto. Questo differisce dall'opzione di aggiornamento, infatti, l'operazione di aggiornamento installa pacchetti, a prescindere dalla presenza sul sistema di versioni precedenti dei pacchetti.

L'opzione di refresh di RPM funziona sia per singoli pacchetti che per gruppi di pacchetti. Se avete appena scaricato un certo numero di pacchetti diversi e volete aggiornare quelli presenti sul sistema, scegliete l'opzione di refresh. Con quest'a opzione, prima di usare RPM, non dovete rimuovere i pacchetti non desiderati dal gruppo scaricato.

In questo caso, potete semplicemente digitare il seguente comando:

rpm -Fvh *.rpm

RPM aggiorna automaticamente solo i pacchetti che sono già installati.

16.2.6. Interrogazione

Usate il comando rpm -q per interrogare il database dei pacchetti installati. Il comando rpm -q foo mostra il nome, la versione e la release del pacchetto foo installato:

foo-2.0-1

NotaNota Bene
 

Da notare che abbiamo usato il nome del pacchetto foo. Per interrogare un pacchetto, sostituite foo con il nome del pacchetto.

Anziché specificare il nome del pacchetto, potete usare le seguenti opzioni con -q per specificare i pacchetti che volete interrogare. Queste sono chiamate Opzioni di specifica del pacchetto.

Ci sono molti modi per specificare quali informazioni devono essere visualizzate sul pacchetto interrogato. Le opzioni seguenti vengono usate per selezionare le informazioni che state cercando. Queste sono chiamate Opzioni di selezione delle informazioni.

Per le opzioni che visualizzano elenchi di file, potete aggiungere -v al comando perché la visualizzazione degli elenchi sia simile a quella del comando ls -l.

16.2.7. Verifica

Il processo di verifica di un pacchetto confronta le informazioni dei file installati da un pacchetto con le informazioni del pacchetto originale. Tra le altre cose, la verifica confronta le dimensioni, MD5, i permessi, il tipo, il proprietario e il gruppo di ogni file.

rpm -V verifica un pacchetto. Potete usare un elenco qualsiasi di opzioni di selezione dei pacchetti per interrogare i pacchetti specifici che volete verificare. Un uso semplice è rpm -V foo che verifica che tutti i file nel pacchetto foo siano identici a quelli installati originariamente. Per esempio:

Se tutto è stato verificato correttamente, non compare alcun output, mentre eventuali discrepanze rilevate vengono visualizzate. Il formato dell'output è una linea di 8 caratteri (una c denota un file di configurazione) e il nome del file. Ogni singolo carattere è il risultato di una comparazione di un attributo del file con il valore dell'attributo in memoria nel database RPM. Un singolo . (un punto) significa che la verifica è risultata corretta. I seguenti caratteri indicano errori in alcune verifiche:

Se vedete un output, usate il vostro intuito per determinare se è necessario rimuovere o reinstallare il pacchetto oppure risolvere il problema in qualche altro modo.