Ogni distribuzione GNU/Linux utilizza un metodo per il confezionamento dei pacchetti (blocchi) che compongono l'intero sistema. Il problema principale è quello di tenere traccia della collocazione dei file di ogni applicazione, delle sue dipendenze da altri pacchetti e di permetterne l'aggiornamento o l'eliminazione senza danneggiare il sistema e senza lasciare file ignoti inutilizzati.
Con la sigla RPM si identificano gli archivi realizzati secondo uno standard definito da RedHat (RedHat Package Manager) che hanno l'estensione .rpm
. Oltre alla distribuzione RedHat, anche Caldera e SuSE utilizzano questo formato.
Per poter gestire tale formato occorre il programma rpm
. Eventualmente, questo può essere ottenuto dalla sua origine,
ftp://ftp.redhat.com/pub/redhat/code/rpm/, oppure da un altro sito dopo una ricerca per mezzo di FTPSearch,
http://ftpsearch.lycos.com, per un archivio che assomigli a rpm-*.tar.gz
.
*1*
Se la propria distribuzione GNU/Linux non è fatta per gestire i pacchetti in formato RPM, l'unica motivazione ragionevole per procurarsi il programma di gestione di questi pacchetti è quella di poterli convertire nel formato a cui si è abituati. |
Per comprendere l'utilizzo del programma rpm
, quando la propria distribuzione è organizzata secondo questo standard, vengono proposti alcuni esempi, senza entrare nel dettaglio della sua sintassi. Per maggiori informazioni conviene consultare la pagina di manuale rpm(8), oppure, per ottenere uno schema sintattico stringato basta avviare il programma stesso senza argomenti.
query -- richiesta di informazioni
rpm
|
Mostra una descrizione del contenuto del file RPM.
rpm
|
Mostra l'elenco dei file contenuti nel file RPM e dove andranno collocati se sarà installato.
rpm
|
Mostra l'elenco dei pacchetti RPM installati, così come sono stati registrati nel sistema RPM.
rpm
|
Determina il nome del pacchetto da cui proviene il file indicato come argomento.
rpm
|
Installa il pacchetto se non si verificano errori.
rpm
|
Installa il pacchetto a partire dal'URI indicato se non si verificano errori. Per esempio potrebbe trattarsi di rpm
-
i ftp://dinkel.brot.dg/pub/RPMS/mio-1.1-0.i386.rpm
rpm
|
Installa il pacchetto se non si verificano errori, mostrando qualche informazione e una barra di progressione.
rpm |
Installa il pacchetto senza verificare le dipendenze tra i file.
rpm |
Installa il pacchetto senza verificare se vengono sovrascritti dei file.
rpm |
Installa il pacchetto senza verificare l'architettura dell'elaboratore.
rpm |
Installa il pacchetto senza verificare il tipo di sistema operativo.
rpm
|
Aggiorna o installa il pacchetto se non si verificano errori.
rpm
|
Aggiorna o installa il pacchetto se non si verificano errori, mostrando qualche informazione e una barra di progressione.
rpm
|
Aggiorna il pacchetto solo se risulta già installata una versione precedente.
rpm
|
Aggiorna i pacchetti che risultano già installati nelle loro versioni precedenti.
rpm
|
Elimina (disinstalla) il pacchetto.
rpm
|
Verifica che il pacchetto indicato sia installato correttamente.
rpm
|
Verifica il pacchetto contenente il file indicato.
rpm
|
Verifica tutti i pacchetti.
rpm
|
Verifica la corrispondenza tra il file RPM indicato come argomento e quanto installato effettivamente.
Sigla | Descrizione |
5 | Controllo MD5 fallito. |
S | Variazione della dimensione del file. |
L | Collegamento simbolico alterato. |
T | Data di variazione del file alterata. |
D | Alterazione del file di dispositivo. |
U | Utente proprietario diverso. |
G | Gruppo proprietario diverso. |
M | Modalità, comprendendo sia i permessi che il tipo di file. |
-
V
).
setperms, setugids -- sistemazione dei permessi e delle proprietà
rpm |
Verifica ed eventualmente corregge i permessi dei file di tutti i pacchetti installati.
rpm |
Verifica ed eventualmente corregge la proprietà dei file di tutti i pacchetti installati.
Alle volte, quando si installano o si vogliono eliminare dei pacchetti si incontrano dei problemi, perché il programma rpm
impedisce di fare ciò che potrebbe essere dannoso e sembra originato a causa di un errore. A questo proposito vale la pena di conoscere alcune opzioni speciali.
Permette di aggiornare un pacchetto utilizzando una versione precedente a quella che appare essere già installata. | |
Permette di installare o aggiornare un pacchetto quando questo fatto implica la sostituzione di file già esistenti che appartengono ad altri pacchetti. | |
Permette di installare o aggiornare un pacchetto quando questo fatto implica la sostituzione di file già esistenti che appartengono ad altri pacchetti. | |
Permette di installare un pacchetto anche quando questo risulta già installato. | |
È l'equivalente delle opzioni | |
Installa, aggiorna o disinstalla senza curarsi delle dipendenze da file o da altri pacchetti. |
La creazione di pacchetti RPM può essere una procedura complessa e delicata, quando si fanno le cose seriamente, cioè quando si vuole costruire un pacchetto da distribuire attraverso i canali ufficiali. Per distribuire un applicativo in forma binaria, occorre affiancargli un pacchetto SRPM (sorgente), contenente i sorgenti originali (intatti), assieme a tutta la procedura necessaria per applicare le modifiche, compilare il risultato e installarlo correttamente. In questa sezione si vuole mostrare il procedimento minimo necessario a creare un pacchetto RPM «binario» per scopi personali, senza che questo sia affiancato effettivamente da un pacchetto sorgente.
Per creare un pacchetto RPM a partire da file già installati da qualche parte nel proprio filesystem, si utilizza il programma rpm
con la sintassi seguente:
rpm
|
Il file indicato come argomento contiene le informazioni necessarie a recuperare le directory e i singoli file che si vogliono raccogliere nel pacchetto, assieme a una descrizione adeguata. Il file indicato come argomento si compone con una sintassi piuttosto semplice, che conviene vedere direttamente in un esempio.
Si suppone di avere predisposto un applicativo in forma binaria collocato a partire dalla directory /opt/prova/
, che utilizza anche il file di configurazione /etc/prova.conf
. Le specifiche del pacchetto che si vuole creare potrebbero essere messe nel file /tmp/prova.spec
, mostrato sotto.
Name: Prova Summary: Binari di prova. Version: 1.0 Release: 1 Copyright: do not redistribute! Group: Applications Packager: Tizio Tizi <tizio@dinkel.brot.dg> %description Pacchetto applicativo di prova per le mie prove...:-) %files /etc/prova.conf /opt/prova |
Come si vede dall'esempio, alcune direttive sono fatte per utilizzare una sola riga, altre, quelle che iniziano con il simbolo di percentuale, si articolano nelle righe sottostanti. Vale la pena di osservare che il campo Copyright:
viene usato in modo differente dalle distribuzioni: la RedHat pone una definizione che serve a capire rapidamente il genere di condizioni che pone la licenza d'uso, mentre altre mettono il titolare dei diritti del software. In questo caso, si immagina che si tratti di un lavoro che per qualche ragione non può essere distribuito.
Si osservi l'elenco che segue la direttiva %files
: rappresenta i file singoli e le directory intere che devono essere raccolte nel pacchetto da generare.
Prima di creare il pacchetto, è necessario che la gerarchia /usr/src/redhat/
sia pronta; per quanto riguarda l'architettura i386, è necessario che esista anche la directory relativa ai pacchetti che vengono generati per questa, cioè: /usr/src/redhat/RPMS/i386/
. Se manca, occorre crearla manualmente.
#
rpm
-
pp /tmp/prova.spec
Quello che si vede è il comando necessario ad avviare la creazione del pacchetto Prova-1.0-1.i386.rpm
, che verrà collocato automaticamente nella directory /usr/src/redhat/RPMS/i386/
. Per verificare che il proprio lavoro sia stato concluso con successo, si può indagare sul contenuto del pacchetto appena creato nel modo seguente:
#
rpm
-
qpli /usr/src/redhat/RPMS/i386/Prova-1.0-1.i386.rpm
Name : Prova Distribution: (none) Version : 1.0 Vendor: (none) Release : 1 Build Date: mar 12 gen 1999 08:50:42 CET Install date: (not installed) Build Host: dinkel.brot.dg Group : Applications Source RPM: Prova-1.0-1.src.rpm Size : 32074 Packager : Tizio Tizi <tizio@dinkel.brot.dg> Summary : Binari di prova. Description : Pacchetto applicativo di prova per le mie prove...:-) /etc/prova.conf /opt/prova /opt/prova/... /opt/prova/... /opt/prova/... |
Prima di concludere, è bene tenere presente che se ciò che si impacchetta non dipende dalla piattaforma, come nel caso della documentazione, conviene modificare l'estensione del file ottenuto da .i386.rpm
a .noarch.rpm
.
Gli archivi della distribuzione GNU/Linux Debian hanno un formato particolare e l'estensione .deb
. Anche se attualmente solo la distribuzione Debian utilizza questo formato, la maggior parte del software per GNU/Linux è disponibile sotto forma di archivi Debian; spesso anche molto di più di quello che si può ottenere dalle altre distribuzioni.
Per poter gestire tale formato occorre il programma dpkg
. Col l'aiuto di FTPSearch,
http://ftpsearch.lycos.com, si può cercare un archivio che assomigli a dpkg*.tar.gz
.
Valgono le stesse considerazioni fatte a proposito dei pacchetti RPM: se la propria distribuzione GNU/Linux non è fatta per gestire i pacchetti in formato Debian, l'unica motivazione ragionevole per procurarsi il programma di gestione di questi pacchetti è quella di poterli convertire nel formato a cui si è abituati. |
Per comprendere l'utilizzo del programma dpkg
, quando la propria distribuzione è organizzata secondo questo standard, vengono proposti alcuni esempi, senza entrare nel dettaglio della sua sintassi. Per maggiori informazioni conviene consultare la pagina di manuale dpkg(8), oppure, per ottenere uno schema sintattico stringato basta avviare il programma stesso senza argomenti.
dpkg
|
Installa il pacchetto indicato.
dpkg
|
Elimina il pacchetto installato precedentemente, lasciando però i file di configurazione.
dpkg |
Elimina completamente il pacchetto installato precedentemente, inclusi i file di configurazione. La filosofia di Debian è di lasciare i file di configurazione anche quando il pacchetto viene disinstallato. Per questo si utilizza questa opzione speciale per forzare la loro cancellazione.
dpkg
|
Elenca i nomi dei pacchetti installati.
dpkg
|
Cerca di determinare a quale pacchetto installato appartengono i file indicati attraverso il modello.
dpkg
|
Controlla i pacchetti installati per determinare quali sono stati installati in modo non corretto o incompleto.
Gli archivi della distribuzione GNU/Linux Slackware hanno un formato molto semplice: tar+gzip e utilizzano l'estensione .tgz
.
Gli archivi Slackware sono il risultato di un'archiviazione attraverso tar
e di una successiva compressione attraverso gzip
. L'archivio è fatto in modo da conservare la struttura di directory a partire dalla radice e senza contenere i collegamenti simbolici.
Nell'archivio viene aggiunta la directory /install/
contenente lo script doinst
che si occupa normalmente di ricreare i collegamenti simbolici e di eseguire altri aggiustamenti eventuali.
Volendo installare un pacchetto Slackware senza l'ausilio degli strumenti offerti da quella distribuzione, si devono estrarre i file dall'archivio e quindi si deve avviare lo script /install/doinst
. Le operazioni vanno svolte con i privilegi dell'utente root
. Si suppone di installare il pacchetto esempio.tgz
.
#
cd /
#
tar xzpvf esempio.tgz
#
/install/doinst
Quando si utilizza una distribuzione GNU/Linux, è quantomeno fastidioso dover mescolare applicazioni installate a partire da pacchetti in formato diverso da quello che si usa normalmente. Ciò proprio perché non è più possibile tenere traccia, in un modo univoco, della posizione dei file appartenenti a ogni pacchetto.
Fortunatamente vengono in aiuto i programmi di conversione che permettono di trasformare un pacchetto da un formato a un altro, anche se non sempre funzionano perfettamente. A questi si affiancano poi degli applicativi che permettono di ispezionare il contenuto di file impacchettati in vari formati, e di estrarne quello che si desidera.
Questi programmi utilizzano gli applicativi delle varie distribuzioni che si occupano di espandere i pacchetti e di generare gli stessi. In pratica, di solito, per convertire da Debian a RedHat e viceversa, o per ispezionare i loro contenuti, occorrono sia dpkg
che rpm
.
L'utilizzo di pacchetti di altre distribuzioni (a seguito di conversione o meno) richiede un'ottima pratica nella gestione di questi. Due pacchetti che dal nome sembrano uguali possono essere diversi nel contenuto, a seguito delle diverse strategie adottate dalle distribuzioni. Questo vale naturalmente anche per pacchetti che utilizzano la stessa tecnica di confezionamento, ma appartengono a distribuzioni differenti. |
alien |
alien |
alien |
alien |
alien
consente di convertire un pacchetto di una distribuzione in un altro formato. Precisamente, è in grado di generare pacchetti in formato Debian, RedHat, Stampede e Slackware, a partire da questi formati e anche da un semplice archivio tar+gzip. Non è in grado di gestire i pacchetti sorgenti.
La conversione da un formato a un altro è limitata e può essere fonte di gravi problemi a causa della diversa organizzazione delle varie distribuzioni GNU/Linux. Va quindi usata in modo consapevole e prudente. |
alien
ha la necessità di conoscere soltanto in quale formato finale occorre produrre la conversione. Il tipo di pacchetto sorgente viene individuato automaticamente, probabilmente in base all'estensione usata nel nome del file. Se con le opzioni non si specifica in quale formato convertire, si ottiene un pacchetto Debian.
In linea di massima, la conversione genera il risultato nella directory corrente, a parte il caso della trasformazione in formato RPM, per cui si ottiene il file a partire dalla directory /usr/src/redhat/
(di solito, per i pacchetti di architettura i386, si tratta precisamente di /usr/src/redhat/RPMS/i386/
).
*2*
La conversione di un pacchetto Slackware o semplicemente tar+gzip in uno più sofisticato come RPM o Debian, non è conveniente in generale, perché in questo modo mancano molte informazioni che sono importanti per questi formati.
Alcuni pacchetti contengono degli script che devono essere eseguiti alla fine dell'installazione per sistemare ciò che è necessario (come l'aggiunta di un utente di sistema, o cose simili). La conversione in un altro formato tende a perdere questi script.
|
Specifica che si vuole ottenere la conversione in formato Debian.
|
Specifica che si vuole ottenere la conversione in formato RPM.
|
Specifica che si vuole ottenere la conversione in formato Slackware.
|
Specifica che si vuole ottenere la conversione in formato Stampede.
|
Specifica una descrizione per il pacchetto, da utilizzare esclusivamente per una conversione in cui l'origine sia un pacchetto Slackware o tar+gzip. Infatti, in questi casi, mancherebbe qualunque descrizione del contenuto del pacchetto.
|
Tenta di convertire gli script. Si deve usare questa opzione con molta prudenza, perché questi script dipendono dalla struttura della distribuzione per cui sono stati fatti, e l'utilizzo in un'altra distribuzione potrebbe essere incompatibile.
#
alien
-
-
to-
rpm dpkg_1.4.0.23.2-
1.i386.deb
Converte il file dpkg_1.4.0.23.2-1.i386.deb
in formato RPM, generando il file /usr/src/redhat/RPMS/i386/dpkg-1.4.0.23.2-2.i386.rpm
.
Midnight Commander è un applicativo integrato per la navigazione all'interno delle directory di filesystem reali o virtuali. In questo senso, permette anche di accedere a file compressi, inclusi i pacchetti delle applicazioni GNU/Linux, purché sia presente il rispettivo sistema di gestione.
Midnight Commander è descritto nel capitolo 54.
RedHat Package Manager | |
Donnie Barnes, RPM HOWTO |
---------------------------
Appunti Linux 1999.07.12 --- Copyright © 1997-1999 Daniele Giacomini -- daniele @ evo.it
1.) È importante che il pacchetto che si preleva sia fatto per l'architettura corrispondente al proprio sistema. Se si utilizza un PC, il nome del file dovrebbe contenere la sigla i386
, probabilmente secondo il modello rpm-*.i386.tar.gz
.
2.) A questo proposito, è bene tenere presente che la directory /usr/src/redhat/RPMS/i386/
deve esistere perché possa funzionare la conversione in RPM per l'architettura i386. Se il pacchetto non fa riferimento a un'architettura particolare, allora si deve avere pronta anche la directory /usr/src/redhat/RPMS/noarch/
. In generale, per questo genere di problemi basta osservare i messaggi di errore di alien
.