[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [translators] [docinfo] [indice analitico] [volume] [parte]
In questo capitolo viene annotato un modo di gestire una raccolta degli archivi Debian, con la possibilità di realizzare una copia personalizzata della distribuzione.
La distribuzione Debian, data la sua natura collaborativa, è molto dinamica e nel susseguirsi delle sue edizioni viene prodotta una grande quantità di pacchetti aggiornati. Data la dimensione che ha raggiunto ormai la distribuzione, è improbabile che si riesca ad avere sempre una copia completa della distribuzione; piuttosto è facile trovare nelle riviste dei CD-ROM o dei DVD-ROM con questo o quel gruppo di applicativi, più o meno aggiornati. Volendo realizzare una propria copia locale della distribuzione (su disco fisso, o su dischi rimovibili), occorre realizzare qualche script per gestire un po' meglio la cosa.
Il nome degli archivi Debian è organizzato secondo la struttura seguente:
{nome_del_pacchetto}_{versione_e_revisione}[_architettura].deb |
Come si vede, la parte finale, che specifica l'architettura per la quale è predisposto un archivio, potrebbe anche essere omessa, se il contesto rende implicita questa informazione.
Alle volte, per qualche ragione, il nome degli archivi che si trovano in circolazione non è conforme a questo modello; tuttavia, con l'aiuto delle informazioni contenute negli archivi stessi, è possibile riprodurre il nome standard. I comandi seguenti, che utilizzano dpkg, permettono di ottenere le informazioni necessarie a ricostruire il nome di un archivio Debian:
dpkg --field archivio package |
restituisce il nome del pacchetto;
dpkg --field archivio version |
restituisce la stringa che rappresenta la versione e la revisione del pacchetto.
dpkg --field archivio architecture |
restituisce la stringa che rappresenta l'architettura per cui è fatto il del pacchetto.
Quello che segue è l'esempio di uno script in grado di scandire gli archivi contenuti nella directory corrente, allo scopo di modificarne il nome se questo non corrisponde al modello standard. La scansione viene fatta in due fasi, per verificare alla fine quali archivi non sono stati corretti (una copia di questo file, dovrebbe essere disponibile anche qui: <allegati/a2/debian-nomi>).
|
La versione di un pacchetto è composta da due parti: la versione (vera e propria) e la revisione. Si tratta di due stringhe unite da un trattino:
versione-revisione |
In generale, non è facile confrontare questi valori e per fortuna viene in aiuto dpkg che è in grado di affermare quale sia più recente. In pratica, si utilizza uno dei comandi seguenti, per determinare se una versione è maggiore, minore o uguale all'altra:
dpkg --compare-versions versione1 gt versione2 |
dpkg --compare-versions versione1 lt versione2 |
dpkg --compare-versions versione1 eq versione2 |
Lo script seguente serve a scandire gli archivi Debian contenuti nella directory corrente, allo scopo di eliminare quelli che contengono uno stesso pacchetto ma di una versione precedente a quanto già disponibile. Durante la scansione, si presume che i nomi degli archivi siano composti correttamente, in modo tale che gli archivi di uno stesso pacchetto si trovino di seguito, nella sequenza alfabetica (una copia di questo file, dovrebbe essere disponibile anche qui: <allegati/a2/debian-doppi>).
|
Per comprendere come realizzare una copia locale della distribuzione GNU/Linux Debian, occorre andare per gradi, partendo dal caso in cui questa è disponibile completamente in un supporto unico, per poi arrivare a comprendere le differenze che si devono introdurre per ottenere una versione distribuita su più unità di memorizzazione.
Si suppone che l'utente tizio voglia predisporre una copia locale della distribuzione Debian, a partire dalla directory /home/tizio/DEBIAN/
. La struttura minima che dovrebbe articolarsi a partire da questa directory è quella che si vede nella figura 47.3.
Figura 47.3. Struttura minima di una distribuzione GNU/Linux Debian organizzata in modo da utilizzare un supporto unico.
|
In breve, viene descritto il senso di questa struttura.
La directory debian/dists/stable/main/disks-i386/current/
contiene i file delle immagini dei dischetti (per l'architettura i386) da utilizzare per avviare l'installazione e per riprodurre il sistema minimo precedente alla selezione dei pacchetti.
Le directory debian/dists/stable/*/binary-i386/
contengono la gerarchia finale dei pacchetti di ogni gruppo (main/
, contrib/
, non-free/
, non-US/
e local/
), che potrebbe essere suddivisa o meno in sezioni (admin/
, base/
, ecc.). Da quel punto, poi, si inseriscono gli archivi Debian.
I file Packages
e Packages.gz
, contenuti nelle directory debian/dists/stable/*/binary-i386/
, sono indispensabili per fornire ai programmi come DSelect e APT le informazioni importanti sui pacchetti.
Il file, o i file debian/indices/override*.gz
servono per ricostruire correttamente i file Packages
.
Il problema nella riproduzione di una distribuzione Debian sta nella creazione dei file Packages
(e di conseguenza anche Packages.gz
). Per arrivare a questo risultato, occorre definire una stringa che serva a individuare la distribuzione, per esempio:
|
Inoltre occorre un file override (debian/indices/override.gz
o un altro nome simile), contenente l'abbinamento tra i pacchetti, la priorità e la classificazione in sezioni, come nell'estratto seguente:
|
Infine occorrono i pacchetti, che si trovano lì dove sono. I file override vanno prelevati da una delle varie riproduzioni speculari, tenendo presente che possono essere aggiornati frequentemente. Di solito, questi file sono suddivisi in base ai raggruppamenti principali in cui si articola una versione: main/
, contrib/
,... Per semplificare le operazioni, può convenire la realizzazione di un file unico, come è stato mostrato nella struttura di esempio. A questo file si fa riferimento come override.gz
.
I file override originali della distribuzione slink hanno i nomi: |
Disponendo di questo materiale, si può utilizzare dpkg-scanpackages per rigenerare i file Packages
. Eventualmente si può vedere la pagina di manuale dpkg-scanpackages(8).
tizio$
cd /home/tizio/DEBIAN/debian
[Invio]
Ci si posiziona nella directory principale della distribuzione.
tizio$
dpkg-scanpackages
\
\-m "Debian GNU/Linux 2.1 slink personalizzata"
\
\dists/stable/main/binary-i386 indices/override.gz
\
\> dists/stable/main/binary-i386/Packages
[Invio]
Si genera il file Packages
per il gruppo di pacchetti della classificazione main/
(il comando è stato mostrato suddiviso su più righe per motivi tipografici).
tizio$
cat dists/stable/main/binary-i386/Packages
\
\| gzip | dists/stable/main/binary-i386/Packages.gz
[Invio]
Si genera il file Packages.gz
, comprimendo Packages
creato precedentemente.
In seguito, si fa la stessa cosa per i raggruppamenti contrib/
, non-free/
, non-US/
e local/
.
Il programma dpkg-scanpackages può generare delle segnalazioni di errore, in particolare quando trova un pacchetto che non è indicato nel file override. In generale questo non provoca conseguenze gravi, tranne la mancanza di qualche informazione per quel pacchetto.
L'esempio seguente è un estratto di uno dei file Packages
, dove si vede la descrizione del pacchetto wget. Si deve osservare in particolare che le informazioni dei campi Priority e Section sono state determinate in base al file override, mentre la descrizione del campo X-Medium è stata ottenuta dall'opzione -m di dpkg-scanpackages.
|
Per accedere facilmente a questa distribuzione locale, basta configurare APT attraverso il file /etc/apt/sources.list
:
|
Se le dimensioni lo consentono, si può trasferire una copia della gerarchia /home/tizio/DEBIAN/
in un disco rimovibile, come un CD-ROM o un DVD-ROM.
Se si vuole masterizzare un CD/DVD, o comunque si vuole fare una copia della distribuzione suddividendola in più supporti, le cose si complicano. Per prima cosa si deve iniziare da una copia locale organizzata già nelle suddivisioni che si vogliono ottenere. Supponendo di partire dalla directory /home/tizio/DEBIAN/
, conviene aggiungere altre sottodirectory ulteriori, una per ogni suddivisione che si vuole ottenere: 1/
, 2/
,...
La struttura della gerarchia che si articola a partire da queste sottodirectory deve essere la stessa, anche quando alcuni gruppi di pacchetti (main/
, contrib/
, ecc.) risultano senza archivi. La figura 47.8 mostra le varianti rispetto al modello già mostrato.
Figura 47.8. Struttura minima di una distribuzione GNU/Linux Debian organizzata in modo da utilizzare più supporti.
|
Rispetto alla situazione precedente, si aggiunge il file debian/.disk/info
, che deve contenere la stringa di descrizione del supporto, una cosa simile ai due esempi seguenti:
|
|
Nelle directory debian/dists/stable/*/binary-i386/
appaiono dei file nuovi: Packages.cd
e Packages.cd.gz
. Infine, il raggruppamento di pacchetti local, dovrebbe trovarsi nella directory debian/dists/local/local/
. Probabilmente, conviene realizzare un collegamento simbolico per portarlo nella collocazione normale.
I supporti distinti, vengono riconosciuti in base alla stringa contenuta nel file debian/.disk/info
, che va scelta opportunamente e va utilizzata anche per la definizione del campo X-Medium.
Si comincia dalla preparazione dei file Packages
e Packages.gz
, più o meno come è stato fatto nella situazione precedente:
tizio$
cd /home/tizio/DEBIAN/1/debian
[Invio]
tizio$
dpkg-scanpackages -m `cat .disk/info`
\
\dists/stable/main/binary-i386 indices/override.gz
\
\> dists/stable/main/binary-i386/Packages
[Invio]
tizio$
cat dists/stable/main/binary-i386/Packages
\
\| gzip | dists/stable/main/binary-i386/Packages.gz
[Invio]
Come prima, si fa la stessa cosa per gli altri gruppi di pacchetti e poi si ripete il procedimento per la copia contenuta nella directory /home/tizio/DEBIAN/2/
(si suppone che si tratti di una suddivisione in due soli supporti):
tizio$
cd /home/tizio/DEBIAN/2/debian
[Invio]
tizio$
dpkg-scanpackages -m `cat .disk/info`
\
\dists/stable/main/binary-i386 indices/override.gz
\
\> dists/stable/main/binary-i386/Packages
[Invio]
tizio$
cat dists/stable/main/binary-i386/Packages
\
\| gzip | dists/stable/main/binary-i386/Packages.gz
[Invio]
Alla fine, si devono realizzare i file Packages.cd
, che si compongono della somma dei file Packages
di ogni gruppo:
tizio$
cd /home/tizio/DEBIAN/
[Invio]
tizio$
cat 1/debian/dists/stable/main/binary-i386/Packages
\
\2/debian/dists/stable/main/binary-i386/Packages
\
\> 1/debian/dists/stable/main/binary-i386/Packages.cd
[Invio]
tizio$
cat 1/debian/dists/stable/main/binary-i386/Packages
\
\2/debian/dists/stable/main/binary-i386/Packages
\
\> 2/debian/dists/stable/main/binary-i386/Packages.cd
[Invio]
tizio$
cat 1/debian/dists/stable/main/binary-i386/Packages.cd
\
\| gzip | 1/debian/dists/stable/main/binary-i386/Packages.cd.gz
[Invio]
tizio$
cat 2/debian/dists/stable/main/binary-i386/Packages.cd
\
\| gzip | 2/debian/dists/stable/main/binary-i386/Packages.cd.gz
[Invio]
In pratica, i file Packages.cd
contengono le informazioni su tutti i pacchetti del proprio gruppo; sia quelli presenti effettivamente nel supporto, sia quelli che si trovano negli altri. I programmi come DSelect distinguono il supporto in base al nome che gli è stato attribuito, indicato nel file debian/.disk/info
e riportato nel campo X-Medium dei file Packages.cd*
.
Per accedere facilmente a questa distribuzione locale, spezzata in due o più parti, basta configurare APT attraverso il file /etc/apt/sources.list
:
|
Per copiare le due strutture in dischi separati, basta trasferire una copia delle gerarchie /home/tizio/DEBIAN/*/
.
Viene proposta in questa sezione una struttura semplificata per ospitare i pacchetti Debian che si raccolgono qua e là. Si parte da una struttura di alcuni file e directory, che per il momento viene semplificata:
|
Si può osservare che la directory dists/00/
è in realtà un collegamento simbolico alla directory temporanea (/tmp/
).
Il file DIST
deve contenere una riga con la denominazione della distribuzione, che eventualmente può limitarsi a essere:
|
I file Packages.cd.gz
, indices/Maintainers.gz
e indices/override.gz
sono file compressi con gzip, a partire da file completamente vuoti; il file indices/pubring.pgp
è vuoto.
All'interno delle directory dists/01/
, dists/02/
e dists/03/
ci sono una serie di collegamenti simbolici identici nei tre casi:
|
Con questa struttura, si possono mettere i file degli archivi Debian nelle directory dists/01/
, dists/02/
e dists/03/
, tenendo conto che in presenza di pacchetti doppi, ma con versione differente, quelli riferiti alla versione più vecchia vengono spostati a un livello precedente tramite uno script. In pratica, secondo questa sistemazione, i pacchetti che si raccolgono vanno inseriti soltanto nella directory dists/03/
, dalla quale i più vecchi vengono spostati automaticamente all'interno di dists/02/
, di dists/01/
e di dists/00/
, ma dato che dists/00
è in realtà un collegamento simbolico a /tmp/
, l'ultimo passaggio è semplicemente un modo per eliminarli. Così facendo, anche se si aggiornano i pacchetti, rimane una copia di scorta delle versioni precedenti.
Lo script che fa il lavoro è make-packages, che va avviato mentre la directory corrente corrisponde all'inizio della struttura; pertanto va avviato così:
$
./make-packages
[Invio]
Lo script crea anche il file .disk/info
e il file error-messages
(una copia di questo file, dovrebbe essere disponibile anche qui: <allegati/a2/make-packages>).
Listato 47.15. Lo script make-packages.
|
Susan G. Kleinmann, Sven Rudolph, Joost Witteveen, The Debian GNU/Linux FAQ, 1999
Ian Jackson, Christian Schwarz, Debian Policy Manual, 1998
Appunti di informatica libera 2006.07.01 --- Copyright © 2000-2006 Daniele Giacomini -- <daniele (ad) swlibero·org>
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome pacchetti_debian_accorgimenti.htm
[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [translators] [docinfo] [indice analitico]