Struttura di un pacchetto in Bad Penguin
@1998,99,2000 by Antonio GALLO <agx@linux.it>
=========================================================
1999-06-10, Versione 1.0.0 (2^ revisione) by AGX
1999-08-17, Versione 1.1.0 by AGX
1999-08-30, Versione 1.2.0 by AGX [CANDIDATE]
1999-09-16, Versione 1.2.2 by AGX [FINALE]
1999-10-13, Versione 1.2.4 by AGX Ritoccato l'uso di ARCH
1999-11-15, Versione 1.6.0 by AGX Completato!
1999-12-13, Versione 1.6.2 by AGX Aggiunte informazioni addizzionali
2000-02-27, Versione 2.0.0 by AGX Aggiunta nuova gestione dipendenze e conflitti
---------------------------------------------------------



STRUTTURA DI UN PACCHETTO
=============================

Un pacchetto .bpp (Bad Penguin Package) e' un archivio tar+gz gestito 
secondo particolari modalita'.

Il pacchetto contiene al suo interno, oltre ai file da installare,
due due directory spciali: install ed incoming. La directory 'install' 
contiene gli script e le informazioni sul pacchetto. La directoty 
'incoming' contiene dei file che vengono trattati in modo speciale
durante la fase d'installazione.



La directory 'incoming'
=======================

I file presenti in questa directory sono principalmente file di 
configurazione. Questi file sono stratti solo se NON ancora esistenti
nel sistema. Ad esempio /incoming/etc/profile viene estratto come 
/etc/profile solo se quest'ultimo non esiste ancora, evitando quindi di
sovrascrivere file gia' esistenti.

Oltre a file di configurazione possono essere inserire in questa
directory librerie dinamiche strettamente necessarie al sistema, 
in questo modo e' possibile installarle senza inchiodare la 
macchina.



La directory 'install'
======================

In questa directory trovano posto tutti i file necessari al gestore dei
pacchetti. Eccoli di seguito:
 
PRE-INSTALL    - e' uno script che, se presente, viene eseguito prima di
                 iniziare l'estrazione del pacchetto;
INSTALL        - e' uno script che, se presente, viene eseguito subito 
                 dopo la fine dell'estrazione dei file dal pacchetto;
POST-INSTALL   - e' uno script che, se presente, viene eseguito al termine
                 della sequenza di boot della macchina, per configurare
		 il pacchetto;
X-POST-INSTALL - come POST-INSTALL ma viene eseguito quando parte X-Window,
                 e' di solito usato per la sola installazione/registrazione
		 di fonts all'interno di X-Window;
PRE-REMOVE     - e' uno script che, se presente, viene eseguito prima di
                 iniziare la rimozione del pacchetto;
REMOVE         - e' uno script che, se presente, viene eseguito dopo la
                 rimozione del pacchetto;
PURGE          - e' uno script che, se presente, viene eseguito quando viene
                 richiesto il 'purge' del pacchetto;
REQUEST        - obbligatorio anche se vuoto, contiene la lista delle 
                 dipendenze dai file e/o dai pacchetti;
CONFLICTS      - obbligatorio, contiene l'elenco dei pacchetti che vanno 
                 in conflitto con il pacchetto corrente. Deve contenere
		 almeno il riferimento al pacchetto corrente;
MANIFEST       - obbligatorio, costruito dal package-builder, contiene la 
                 lista dei file contenuti nel pacchetto;
COMPILE        - opzionale, script utilizzato per compilare il pacchetto
                 sorgente;
NOTES          - notes sulla compilazione del programma, sulla configurazione
                 e/o sulla preparazione del pacchetto;
MD5SUM         - contiene le chiavi MD5 dei binari presenti nel pacchetto;
INFO           - obbligatorio, contiene tutte le informazioni di base sul
                 pacchetto nella VARIABILE="VALORE"

Nota: i file non utilizzati direttamente dal programma si trovano solitamente 
      in forma compressa (gz)

     
     
Il file INFO
============

Il file INFO contiene le seguenti variabili:

SONAME       - Il nome del pacchetto senza estensione e versione;
CATEGORY     - Il nome della categoria di cui fa parte il pacchetto.
               Se l'installazione del pacchetto viene fatta dalla 
	       distribuzione, setup puo' alterare questo campo;
VERSION      - Versione del pacchetto;
DISKNAME     - Il numero del cdrom (o disco) contenente il pacchetto. 
ARCH         - L'architettura minima necessaria all'uso del pacchetto
               Possibili valori sono:
	         ANY - Il pacchetto contiene solo script o docs;
                 i386, i486, i586, i686 - Il pacchetto e' per macchine Intel;
OPTIM        - L'architettura per la quale e' stato ottimizzato il pacchetto;
SUMMARY      - Il titolo del pacchetto (1 riga);
STATUS       - Indica se il pacchetto e' certificato o e' in test;
AUTHOR       - L'autore del software;
COPYRIGHT    - Il tipo di licenza del software;
DESCRIPTION  - Informazioni piu' dettagliate sul pacchetto;
MANTAINER    - Il nome del mantainer del pacchetto;
URL          - L'Home Page del pacchetto;
FTPURL       - Il sito ftp da dove si e' preso il pacchetto;

Nota: tutti questi campi, eccezzion fatta per DESCRIPTION, possono essere 
      lunghi al massimo 1 (una) linea (60 caratteri) e non devono includere 
      segni di newline.



Campi riservati
===============

Le seguenti variabili all'interno di INFO sono riempite automaticamente
dallo script package-builder:

DISKUSAGE    - Spazio in bytes occupato dal pacchetto esploso;
OS           - Il sistema operativo per cui e' disegnato il pacchetto;
DISTRIBUTION - La distribuzione (nome+versione) su cui e' stato costruito il
               pacchetto, es. Bad Penguin 0.6.0pre1;
BUILDHOST    - La macchina su cui e' stato costruito il pacchetto;
BUILDTIME    - Data in cui e' stato assemblato il pacchetto;
BPPVERSION   - Versione del package-builder utilizzata;



Formato del file REQUEST
========================

Come gia' detto, il file REQUEST contiene una o piu' linee che descrivono
le dipendeze del pacchetto. Ogni linea e' formata da 5 parametri separati
da spazi o tabulazioni. Le possibili forme di utilizzo sono:
    a) <category> <package_name>
    b) <category> <package_name> <library_name>
    c) <category> <package_name> <library_name> [package_min] [library_min]

I parametri rappresentano:
  'category' rappresenta la categoria di appartenenza del pacchetto;
  'package_name' e' la maschera del pacchetto da installare;
  'library_name' e' la maschera della libreria o file richiesti dal pacchetto;
  'package_min' e' la parte finale del numero di versione omesso da 'package_name';
  'library_min' e' la parte finale del numero di versione omesso da 'library_name';

Ecco alcuni esempi:

Un esempio del tipo (a) e' "lib-shared  svgalib"
in cui si specifica la dipendenza dal pacchetto svgalib.

Un esempio del tipo (b) e' "base  bash_1  /bin/bash"
in  cui si specifica la dipendenza dal pacchetto bash_1* se /bin/bash e'
assente.

Un altro esempio di tipo (b) e' "base  svgalib  libvga.so.1.2.13"
che richiede il pacchetto svgalib se la libreria libvga.so.1.2.13 non viene
trovata sul sistema.

Un esempio complesso del tipo (c) puo' essere
lib-shared  gtk+_1.2  libgtk+.so.1.2  2  2
che installa il pacchetto gtk+_1.2.* che sia maggiore o uguale di 1.2.2
se la libreria libgtk+.so.1.2*, almeno 1.2.2, non e'presente.

EOF    