Red Hat Linux 9: Red Hat Linux Customization Guide | ||
---|---|---|
Indietro | Capitolo 32. Gestione dei pacchetti con RPM | Avanti |
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 32.5.
Prima di usare un RPM, dovete sapere dove cercarlo. Su Internet troverete molti RPM diversi, ma se state cercando i pacchetti RPM di Red Hat, consultate quanto segue:
I CD-ROM Red Hat Linux ufficiali
La pagina degli Errata disponibile all'indirizzo http://www.redhat.com/apps/support/errata/
Un sito mirror FTP di Red Hat disponibile all'indirizzo http://www.redhat.com/download/mirror.html
Red Hat Network — Consultate il Capitolo 34 per ulteriori dettagli su Red Hat Network
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 quanto riportato di seguito:
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 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:
warning: V3 DSA signature: NOKEY, key ID 0352860f |
Per ulteriori informazioni sulla verifica di una firma del pacchetto, consultate la Sezione 32.3.
![]() | Nota Bene |
---|---|
Se state installato un pacchetto del kernel, dovreste utilizzare rpm -ivh. Per ulteriori informazioni consultate il Capitolo 30. |
L'installazione dei pacchetti è un'operazione semplice, ma vi può capitare di trovare degli errori.
Se sul sistema è già installata la stessa versione di pacchetto, compare 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.
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, compare a video il messaggio seguente:
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 |
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, compare a video il messaggio seguente:
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 Red Hat ufficiale, suggerirà in genere che i pacchetti devono risolvere la dipendenza. Questi pacchetti sono disponibili nei CD-ROM di Red Hat 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 |
Se volete procedere all'installazione senza risolvere il problema (scelta sconsigliabile visto che probabilmente il pacchetto non funzionerà correttamente), usate l'opzione --nodeps.
L'operazione di rimozione è semplice quanto quella di installazione. Al prompt della shell digitate il comando seguente:
rpm -e foo |
![]() | Nota Bene |
---|---|
È stato usato il nome di 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.
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 a video il messaggio 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 |
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 e quelli già installati sul sistema. Quando una versione di un pacchetto già installato viene elaborata dall'opzione di refresh, 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 è ciò che differenzia l'opzione di refresh 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 numerosi pacchetti diversi e volete aggiornare quelli presenti sul sistema, scegliete l'opzione di refresh. Con quest'opzione, prima di usare RPM non dovete rimuovere i pacchetti non desiderati dal gruppo scaricato.
In questo caso, potete semplicemente digitare il comando che segue:
rpm -Fvh *.rpm |
RPM aggiorna automaticamente solo i pacchetti che sono già installati.
Usate il comando rpm -q per interrogare il database dei pacchetti installati. Il comando rpm -q foo stampa il nome, la versione e la release del pacchetto foo installato:
foo-2.0-1 |
![]() | Nota Bene |
---|---|
È stato usato il nome di pacchetto foo. Per interrogare un pacchetto, sostituite foo con il nome del pacchetto da interrogare. |
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.
-a interroga tutti i pacchetti installati.
-f <file> interroga il pacchetto contenente il <file>. Quando specificate un file, dovete indicare il percorso del file (per esempio, /usr/bin/ls).
-p <filepacchetto> interroga il pacchetto <filepacchetto>.
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.
-i mostra informazioni sul pacchetto, quali il nome, la descrizione, la release, le dimensioni, la data di installazione, il distributore e altro ancora.
-l mostra l'elenco dei file contenuti nel pacchetto.
-s mostra lo stato di tutti i file nel pacchetto.
-d mostra un elenco dei file di documentazione (pagine man, pagine info, file README e così via).
-c mostra un elenco dei file di configurazione. Questi sono i file che potete modificare dopo l'installazione per configurare il pacchetto nel vostro sistema (per esempio sendmail.cf, passwd, inittab e così via).
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.
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:
Per verificare un pacchetto contenente un file particolare:
rpm -Vf /bin/vi |
Per verificare TUTTI i pacchetti installati:
rpm -Va |
Per verificare i pacchetti installati di un pacchetto RPM:
rpm -Vp foo-1.0-1.i386.rpm |
Può essere utile se sospettate che i vostri database RPM siano danneggiati.
Se tutto è stato verificato correttamente non compare alcun output, mentre le eventuali discrepanze rilevate vengono visualizzate. Il formato dell'output è una stringa di 8 caratteri (una possibile, 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:
5 — MD5 checksum
S — dimensioni del file
L — link simbolico
T — ora di modifica del file
D — dispositivo
U — utente
G — gruppo
M — modalità (include permessi e tipo di file)
? — file non leggibile
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.