Red Hat Linux 7.0: The Official Red Hat Linux Reference Guide | ||
---|---|---|
Indietro | Capitolo 5. Amministrazione dei Pacchetti con RPM | Avanti |
RPM ha cinque modalità di funzionamento: Installazione, Disinstallazione, Aggiornamento, Query e Verifica. Questo paragrafo presenta una spiegazione d'uso per ognuna di esse. Per visualizzare tutti i dettagli e le opzioni, digitate rpm --help, o leggete la la sezione Altre Risorse di RPM per ottenere maggiori informazioni su RPM.
I pacchetti RPM hanno un nome del file composto dal nome del pacchetto dal nome del pacchetto (foo), dalla versione (1.0), dalla release (1) e dall'architettura del sistema(i386) come ad esempio foo-1.0-1.i386.rpm. Installare un pacchetto è semplice come:
# rpm -ivh foo-1.0-1.i386.rpm foo #################################### # |
Come potete vedere, RPM mostra il nome del pacchetto seguito da una serie di dati che indicano la versione, l'architettura, ...,
Nota Bene | |
---|---|
Sebbene l'uso del comando rpm -ivh foo-1.0-1.i386.rpm risulti comodo per l'installazione potete usare anche rpm -Uvh foo-1.0-1.i386.rpm. L'opzione -U viene utilizzata per aggiornare i pacchetti, ma installa anche i pacchetti nuovi. Si veda la la sezione Aggiornamento per maggiori informazioni nell'utilizzo dell'opzione -U. |
L'installazione di un pacchetto è un'operazione semplice, nonostante ciò potreste avere qualche errore:
Se il pacchetto è già installato, appare il seguente messaggio:
# rpm -ivh foo-1.0-1.i386.rpm foo package foo-1.0-1 is already installed error: foo-1.0-1.i386.rpm cannot be installed # |
Se volete installare ugualmente il pacchetto, potete usare il l'opzione --replacepkgs sulla linea di comando indicando al programma RPM di ignorare l'errore:
# rpm -ivh --replacepkgs foo-1.0-1.i386.rpm foo #################################### # |
Se provate ad installare un pacchetto che contiene un file che è già stato installato da un altro pacchetto, vedrete:
# rpm -ivh foo-1.0-1.i386.rpm foo /usr/bin/foo conflicts with file from bar-1.0-1 error: foo-1.0-1.i386.rpm cannot be installed # |
Affinchè il programma RPM ignori questo errore, inserite --replacefiles alla linea di comando:
# rpm -ivh --replacefiles foo-1.0-1.i386.rpm foo #################################### # |
I pacchetti RPM possono "dipendere" da altri pacchetti, il che significa che alcuni pacchetti siano già installati per funzionare correttamente. Se provate ad installare un pacchetto per il quale risulta una dipendenza irrisolta, verrà visualizzato il seguente messaggio:
# rpm -ivh bar-1.0-1.i386.rpm failed dependencies: foo is needed by bar-1.0-1 # |
Per gestire questo errore dovreste installare il pacchetto richiesto. Se volete forzare comunque l'installazione (una cattiva idea poichè probabilmente il pacchetto non funzionerà correttamente), inserite --nodeps alla linea di comando.
Disinstallare un pacchetto è semplice come installarlo:
# rpm -e foo # |
Nota Bene | |
---|---|
Fate attenzione al fatto che abbiamo usato il pacchetto name "foo" e non il nome del pacchetto originale file "foo-1.0-1.i386.rpm". |
Potreste trovare un errore di dipendenza quando disinstallate un pacchetto se qualche altro pacchetto installato dipende da quello che state provando a disinstallare. Per esempio:
# rpm -e foo removing these packages would break dependencies: foo is needed by bar-1.0-1 # |
Per fare in modo che RPM ignori l'errore e disinstalli comunque il pacchetto (che non è una buona idea in quanto il pacchetto che dipende da questo non riuscirà a funzionare correttamente) inserite --nodeps alla linea di comando.
Aggiornare un pacchetto è come installarlo.
# rpm -Uvh foo-2.0-1.i386.rpm foo #################################### # |
Quello che non vedete qui sopra è che RPM automaticamente disinstalla la precedente versione del pacchetto foo. Potreste volere usare il comando -U per disinstallare i pacchetti, dal momento che funziona bene anche quando non ci sono versioni precedenti del pacchetto installate.
Dal momento che RPM esegue degli upgrade "intelligenti" mantenendo i file di configurazione, potrebbe apparire un messaggio come:
saving /etc/foo.conf as /etc/foo.conf.rpmsave |
Questo significa che i cambiamenti che avete apportato al file di configurazione potrebbero non essere "compatibili in avanti" con il nuovo file di configurazione nel pacchetto; perciò RPM salva il file originale e ne installa uno nuovo. In tal caso è necessario aggiornare manualmente il nuovo file di configurazione basandosi sul file di configurazione che è stato rinominato.
Poichè la fase di aggiornamento è realmente una combinazione dei processi di installazione e di disinstallazione, potreste trovare qualche errore dovuto a queste due modalità. Inoltre se state provando ad effettuare un aggiornamento con un pacchetto più vecchio, apparirà il messaggio:
# rpm -Uvh foo-1.0-1.i386.rpm foo package foo-2.0-1 (which is newer) is already installed error: foo-1.0-1.i386.rpm cannot be installed # |
Per forzare l'operazione, potete inserire l'opzione --oldpackage alla linea di comando:
# rpm -Uvh --oldpackage foo-1.0-1.i386.rpm foo #################################### # |
Il Freshening è simile all'aggiornamento:
# rpm -Fvh foo-1.2-1.i386.rpm foo #################################### # |
Le opzioni di RPM per aggiornare solo i file installati (freshening) controllano le versioni dei pacchetti specificati alla linea di comando rispetto alle versioni degli stessi pacchetti che sono già installati sul vostro sistema. Quando viene specificato un pacchetto RPM più recente di quello installato, allora viene aggiornato. L'opzione freshen non aggiorna un pacchetto che non sia stato precedentemente installato sul sistema. Questa è la differenza sostanziale tra aggiornamento e freshen, poiché l'aggiornamento (-U) installa il pacchetto a prescindere dal fatto che fosse o meno presente sul sistema.
Le opzioni di aggiornamento selettivo di RPM funzionano sia con i singoli pacchetti che con i gruppi di pacchetti. Risulta particolarmente utile quando avete scaricato una consistente quantità di pacchetti differenti e volete aggiornare solo quei pacchetti che erano già presenti sul sistema. Utilizzando queste opzioni significa che non sarà necessario eliminare dalla lista di pacchetti scaricati tutti quelli che non vogliamo installare prima di usare RPM.
In tal caso, sarà sufficiente eseguire il seguente comando:
# rpm -Fvh *.rpm |
RPM aggiornerà automaticamente quei pacchetti già presenti sul sistema.
Interrogare il database dei pacchetti installati è possibile grazie a rpm -q. Un uso banale è rpm -q foo che visualizzerà come risultato il nome del pacchetto, la versione, il numero di release del pacchetto installato foo:
# rpm -q foo foo-2.0-1 # |
Invece di specificare il nome del pacchetto, potete usare le seguenti opzioni con -q per specificare il pacchetto che volete interrogare. Queste vengono chiamate Package Specification Options.
-a visualizza l'elenco di tutti i pacchetti installati.
-f <file> restituisce il nome del pacchetto che contiene il file specificato. <file>.
-p <packagefile> la ricerca viene effettuata sul pacchetto specificato <packagefile>.
Ci sono diversi modi per specificare le informazioni che vogliamo visualizzare sui pacchetti interrogati. Le seguenti opzioni vengono impiegate per selezionare il tipo di informazione che volete.
-i mostra le informazioni del pacchetto come il nome, la descrizione, il release, la dimensione, la data di costruzione, la data di installazione, il rivenditore ed altre informazioni varie.
-l mostra la lista di file contenuti nel pacchetto.
-s mostra lo stato di tutti i file nel pacchetto.d
-d mostra la lista dei file di documentazione (pagine man, pagine info, readme, ecc).
-c mostra la lista dei file di configurazione. Questi sono i file che vengono modificati per adattare il software alle proprie esigienze (sendmail.cf, passwd, inittab, etc).
Per queste opzioni che mostrano liste di file, potete aggiungere alla linea di comando -v per avere una lista in un formato simile a quallo prodotto da ls -l.
Verificare un pacchetto comporta comparare informazioni relative ad un file installato con le stesse informazioni della versione originale. Tra le altre cose la verifica confronta la dimensione, MD5 SUM, i permessi, il proprietario e il gruppo per ciascun file.
Il comando rpm -V verifica un pacchetto. Ad esempio potete digitare rpm -V foo per verificare che tutti i file installati tramite il pacchetto foo non siano stati alterati.
Per verificare un pacchetto contenente uno specifico file:
rpm -Vf /bin/vi |
Per verificare TUTTI i pacchetti installati:
rpm -Va |
Per verificare un pacchetto installato rispetto ad un file di un pacchetto RPM:
rpm -Vp foo-1.0-1.i386.rpm |
Se la verifica non riporta nessun errore non verrà generato nessun output. Se, invece, ci sarà qualche discrepanza verrà visualizzata. Il formato dell'output sarà una stringa di otto caratteri, una eventuale "c" che denota i file di configurazione ed il nome del file. Ognuno degli otto caratteri riporta il risultato di un confronto fra un attributo del file e il dato analogo memorizzato nel database di RPM. Un singolo "." significa che il test ha avuto esito positivo. I seguenti caratteri denotano il fallimento di certi test:
5 -- MD5 checksum
S -- Dimensione del File
L -- Link Simbolico
T -- Ora di modifica del File
D -- Dispositivo
U -- Utente
G -- Gruppo
M -- Modalità (compresi i permessi ed i tipi di file)
? -- File non leggibile
Se appaiono dei messaggi di output, potete scegliere se rimuovere e reinstallare il pacchetto, oppure se conviene risolvere il problema manualmente.