The Geek Diary

Mantenere il software usando RPM (Red Hat Package Manager)

RPM è un potente software manager che può essere usato per costruire, installare, interrogare, verificare, aggiornare e disinstallare singoli pacchetti software. Un pacchetto RPM consiste in un archivio di file, e informazioni sul pacchetto come il nome, la versione, una descrizione e informazioni sulle dipendenze da altri pacchetti RPM.

RPM è più di uno strumento specifico di Red Hat. Anche molte altre distribuzioni moderne, come Ubuntu e SuSE, usano RPM. I benefici dell’uso di RPM includono:

  • Distribuzione semplificata del software, installazione, aggiornamento e rimozione
  • Garantisce che:
    • il software prerequisito è installato sul sistema.
    • le versioni del software prerequisito rimangono compatibili.
    • i file di configurazione modificati localmente non vengono occultati quando l’RPM viene aggiornato.
    • i file di configurazione modificati localmente vengono salvati con un suffisso “.rpmsave” se il pacchetto viene successivamente cancellato.
  • Consente di certificare che il software installato non è stato alterato, modificato, corrotto o cambiato in alcun modo.

RPM mantiene informazioni sui pacchetti installati nella directory “/var/lib/rpm”.

I componenti dello strumento RPM sono:

  • Un database personalizzato contenente informazioni su tutto il software installato sul sistema, raccolte dai singoli RPM.
  • Un eseguibile “/bin/rpm”.
  • Repository accessibili da internet dei pacchetti RPM disponibili.

Tipi di pacchetti RPM

I pacchetti RPM sono di due categorie: sorgente e binario.

Un RPM sorgente può sempre essere riconosciuto perché il nome del file termina con la stringa “.src.rpm”. In un RPM sorgente non ci sono solo i file del codice sorgente del programma originale, ma gli script che permettono al codice di essere ricompilato automaticamente, di essere installato automaticamente e di essere rimosso automaticamente. Non ci sono file eseguibili per l’utente finale in un RPM sorgente. Di solito, solo gli sviluppatori sono interessati a un RPM sorgente.

Un RPM binario contiene i componenti di un RPM per l’utente finale. I nomi dei file RPM binari identificano l’architettura dell’host per i contenuti. Per esempio, il file RPM binario:

bash-3.1-16.1.x86_64.rpm

Contiene file utilizzabili solo su una CPU con architettura Intel X86 a 64 bit. Altri valori comuni di architettura includono “i386” per gli host Intel a 32 bit. Alcuni RPM binari possono essere installati su qualsiasi architettura di CPU perché i loro file funzionano su qualsiasi host; un esempio di questi pacchetti “.noarch.rpm” è l’RPM “tzdata” che contiene informazioni sui fusi orari mondiali. Per aggiornare il vostro sistema con l’ultima versione di un pacchetto, avrete bisogno del più recente RPM binario per esso.

Schema di denominazione degli RPM

Ogni pacchetto RPM è contenuto in un singolo file. Il nome del file ha diversi campi per identificare completamente il contenuto del pacchetto. Mentre gli stessi strumenti RPM non si basano sul nome del file, dovresti capire la convenzione dei nomi dei file per aiutarti a identificare o scaricare il pacchetto corretto. Ecco un esempio di nome di file RPM:

bash-3.1-16.1.x86_64.rpm

Questo RPM è per la shell BASH (“/bin/bash”). Il nome del file è composto da diverse parti:

--..rpm

dove:

    è il nome del programma o del pacchetto. Di solito viene assegnato dall’autore del programma. Nel nostro esempio, gli sviluppatori hanno deciso di chiamare il loro prodotto “bash” per ragioni che sembravano divertenti per loro.

  • versione] identifica quale edizione del software contiene questo RPM. Il numero è assegnato dall’autore del programma. Usare il numero permette di determinare quale versione dei sorgenti dell’autore è stata usata per generare l’RPM.
  • fornisce il numero di edizione del file RPM stesso e non la versione dei file sorgente dell’autore. Un RPM aggiornato può essere rilasciato per fornire una versione con patch del software originale dell’autore. La patch non deve necessariamente provenire dallo sviluppatore originale, quindi l’RPM viene incrementato al posto del .
  • descrive il contenuto dell’RPM e dice se questo file contiene il sorgente del prodotto (un “.src.rpm”), file indipendenti dall’architettura (un “.noarch.rpm”), o file che possono essere installati solo su un particolare tipo di host (un “.sh.rpm” funzionerà solo su un processore embedded STRONGHOLD).
Nota: Il è controllato dall’autore originale e il è controllato da chiunque abbia costruito l’RPM.

Comprensione delle versioni RPM

I campi RPM e RPM non sono sempre strettamente numerici e possono contenere altri caratteri oltre alle cifre ordinarie. È comune vedere sia una versione “10” che una versione “10a” dello stesso pacchetto. A volte scegliere la versione più recente può essere difficile. Ecco come RPM stesso confronta internamente i numeri di versione e di rilascio:

1. Rimuovete il prefisso e il suffisso “..rpm”. Per esempio,:
“bash-3.1-16.1.x86_64.rpm” diventa “3.1-16.1” e “bash-3.1-16.5a.1.x86_64.rpm” diventa “3.1-16.5a.1”

2. Confronta le stringhe rimanenti carattere per carattere, da sinistra a destra, fino a quando non viene incontrata una cifra. Se i caratteri differiscono, il carattere che viene dopo nella sequenza di confronto è l’RPM più recente.

3. Quando si incontra una cifra, convertire l’intera sequenza di cifre in un singolo numero binario. Nel nostro esempio, i due caratteri “16” sono combinati in un valore di sedici (16). I valori binari risultanti vengono confrontati e il valore maggiore è l’RPM più recente. Così, un RPM con a di “0010” è più recente di uno con a di “9”.

I passi 2 e 3 sono ripetuti come necessario finché non si verifica una differenza.

Installazione e rimozione di file

Nota: Di solito solo uno o di un RPM può essere installato in una volta sola.

Le versioni successive sono solitamente installate usando la funzione “-U” (update) RPM invece della funzione “-i” RPM. Eccezioni comuni alla regola di un solo RPM sono gli RPM del kernel. Un sistema ha comunemente diverse versioni di kernel installate; RPM ha una lista di quali RPM possono avere più versioni installate. Per eliminare una versione quando ne sono installate diverse, è necessario specificare completamente il nome del pacchetto e la versione.

Sull’architettura x86_64, è comune avere sia i pacchetti RPM a 32 bit “.i386” che quelli a 64 bit “.x86_64” installati per supportare applicazioni a 32 e 64 bit. Normalmente, RPM non mostra l’architettura di un pacchetto in una query, ma è possibile visualizzarla manualmente.

Installazione e rimozione

# rpm -i --install (install new RPM; error if already installed)# rpm -U --upgrade (delete existing RPM, if any; install new)# rpm -F --freshen (update RPM only if package already installed)# rpm -e --erase (remove, delete, expunge)

Opzioni comuni
Output: -v (verbose – nome file), -h (hash)
Precondizioni: -nodeps, -replacefiles, -force (STAI ATTENTO QUI !!!)
Relocazione: -excludepath, -prefix, -relocate, -badreloc, -root
Supporto URL: ftp, http

Esempi:

# rpm -ivh binutils-2.11.90.0.8-12.i386.rpm# rpm -Uvh finger-0.17-9-i386.rpm# rpm -Fvh ftp://updates.redhat.com/current/i386/*.rpm# rpm -e diffutils# rpm -e kernel-enterprise-2.4.9-e.12

Suggerimento: Mai, mai, usare l’opzione “-U” per installare un nuovo RPM del kernel. La funzione di aggiornamento “-U” prima cancella l’RPM corrente dal sistema e poi tenta di installare il nuovo RPM. Qualsiasi problema che impedisca al nuovo RPM di installarsi lascerà il sistema non avviabile. Questo non è quello che vuoi, quindi usa sempre lo switch “-i” per installare un RPM del kernel.

Query (Pacchetti e/o informazioni)

Usa una query per ottenere informazioni sui pacchetti installati. Puoi interrogare tutti i pacchetti installati o un singolo pacchetto installato. Puoi anche scoprire quale RPM fornisce un particolare file.

# rpm -q # rpm -qa (all installed packages)# rpm -q package_name# rpm -qf (filename)# rpm -qp (package filename)

Informazioni
default (nome del pacchetto)
-i: informazioni generali
-l: lista dei file

Esempi:

# rpm -qa# rpm -q kernel -i (information)# rpm -q kernel -l (files contained in package)# rpm -q kernel --requires (prereqs)# rpm -q kernel --provides (capabilities provided by package)# rpm -q kernel --scripts (scripts run during installation and removal)# rpm -q kernel --changelog (revision history)# rpm -q kernel -queryformat format (rpm --querytags for list of options)

Suggerimento: Quando si cerca un particolare pacchetto RPM quando il nome esatto non è noto, si usa comunemente una pipeline di comandi come:

$ rpm -qa | grep foo

. Le versioni successive dello strumento RPM permettono di farlo in modo succinto come:

$ rpm -qa '*foo*'

Query – Verifica (File)

Il database RPM contiene molti attributi su ogni singolo file installato da un RPM. Puoi verificare lo stato attuale del file rispetto alle informazioni catalogate da RPM quando il pacchetto è stato installato.

# rpm -V package_name# rpm -Va (verify all)# rpm -Vf (filename)# rpm -Vp (package filename)

Nota: Molte distribuzioni Linux includono un RPM “prelink” che cerca di ridurre il tempo necessario per avviare un’applicazione utilizzando una libreria condivisa (molte applicazioni utilizzano almeno una libreria condivisa e potenzialmente dozzine) aggiungendo informazioni speciali direttamente nel file di programma dell’applicazione.

L’aggiunta di queste informazioni rende l’avvio delle applicazioni più veloce, ma le modifiche al file invalidano la maggior parte degli attributi del file nel database RPM, come la data dell’ultima modifica del file, la dimensione del file e il checksum MD5 del file.

Query – Verifica (Pacchetti)

# rpm -import /mnt/cdrom/RPM-GPG-KEY# rpm -q gpg-pubkey# rpm --checksig m4-1.4.1-11.i386.rpm

Esempi:

# rpm -qf /path/filename (what package owns filename)# rpm -qf /path/filename -i (what does it do)# rpm -qp m4-1.4.1-11.i386.rpm -l (files in m4)# rpm -qp m4-1.4.1-11.i386.rpm --requires (prereqs needed to install m4)# rpm -q --whatprovides glibc.so (what package provides requisite library)

Riparare il database RPM

Lo strumento RPM usa la sua implementazione personalizzata del database per contenere le informazioni. A volte questo database può essere corrotto; i sintomi includono la segnalazione che un pacchetto RPM installato è mancante; o i tentativi di aggiornare un RPM semplicemente si bloccano. Se il tuo database RPM è bloccato o corrotto puoi provare a ripararlo con questi comandi. Questo processo non è garantito per funzionare.

Devi essere loggato con i privilegi di superuser (alias “root”) per questi passi. I comandi possono essere copiati e incollati direttamente in una finestra del terminale di root.

1. Assicurati che non ci siano processi RPM ancora in esecuzione sul tuo sistema. Usate il comando ps per identificarli. Use the kill command to terminate any “rpm” processes you find; a “kill -9” may be necessary.

2. Delete the lock files that RPM uses:

# rm -f /var/lib/rpm/__db*

3. If you were experiencing a hanging “rpm” command, try it again. If it works, you are finished. If not, perform Step #1 and #2 again. Then proceed to the next step.

4. Make a backup of your RPM database:

# cd /var/lib# mkdir rpm-backup# rsync -av ./rpm/. ./rpm-backup/.

5. Rebuild your RPM database:

# rpm -vv --rebuilddb > /tmp/rpmrebuilddb.log 2>&1

6. Retry your failed RPM command.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *