Selezione e gestione di pacchetti e profili d'installazione
all'interno del setup
 della distribuzione GNU/Linux
 
              " B a d   P e n g u i n "
=============================================
==============
Version  0.1.0 on  1999-06-09 by AGX
Version  0.2.0 on  1999-08-17 by AGX
Version  0.9.0 on  1999-10-25 by AGX
Versione 0.9.9 del 1999-12-01 by AGX (2^ Draft)


La gestione dei pacchetti in BP si articola in 3 programmi:
  1. wizard
  2. packagement
  3. installer
  
'wizard' e' un front-end all'installazione, consente di scegliere quali
profili installare. 'packagement' e' il programma di selezione dei pacchetti,
legge tutti gli input e permette di selezionare interattivamente quali 
pacchetti installare, quindi genera i risultati su un file libretto.db.
'installer' e' un front-end allo script di installazione pacchetti "setup",
questi legge l'output di packagement ed effettua l'installazione.



WIZARD
======
Il Wizard deve permettere 3 tipi di operazioni:
  1. installazione dei pacchetti tramite profilo
  2. installazione manuale dei pacchetti
  3. gestione dei pacchetti gia' presenti (rimozione,controllo)

Nel caso viene scelta l'opzione 1 o 2, e la directory di installazione
non e' stata scelta, viene chiesto da dove effettuare l'installazione:
  a. directory locale
  b. cdrom
  c. nfs +/- plip
  d. ftp (??? difficile da fare ???)

Nel caso si sceglie l'opzione (1) vengono proposti una serie di profili
a cui e' possibile aderire o meno. Un profilo, in questo caso, va inteso
come un insieme di pacchetti da installare per un determinato scopo.

Nel caso dell'opzione (2), e dopo la selezione del profilo nella (1)
si passa alla selezione particolareggiata dei pacchetti.

Nel caso dell'opzione (3) si puo' solo effettuare la rimozione o il
controllo (check) dei pacchetti.



Formato del file dei profili per il wizard (draft)
------------------------------------------
Il file e' nel formato:
 <nome categoria> <whitespace> <mask del pacchetto da includere>
questo significa che la riga:
  x-window       *
include tutti i pacchetti della sezione X-WINDOW mentre:
  gnome-core     gmc*
include qualsiasi versione di 'mc' trovata

E' compito del wizard effettuare le seguenti operazioni:
  1. mostrare e selezionare i profili dalla directory (da stabilirsi)
  2. per ogni profilo espandere il contenuto per individuare i file
     da installare dal cdrom
  3. per ogni file individuato dal profilo salvarlo nel file wizard.deps
     che dovra' essere successivamente letto dal "packagement"

Il formato del file wizard.deps e' motlo semplice
  <categoria> <whitespace> <nome completo del pacchetto, senza estensione>
   x-window                 xfree86-bin_3.4.0.1



PACKAGEMENT
===========

Il packagement e' il programma di selezione dei pacchetti. Questi
e' diviso in 3 sezioni principali:
  - lettura del database e dei vari file in input
  - selezione interattiva dei pacchetti da parte dell'utente
  - scrittura del flusso di output (libretto.db)


Il programma riceve in input i seguenti dati:

  a) directory sorgente,
     contenente la lista dei pacchetti che e' possibile installare.
     ( categories.db, distribution.db ) PM inizializza la lista delle
     categorie e dei pacchetti in base a queste informazioni.

  b) partizione destinazione,
     da cui viene acquisita la lista dei pacchetti gia' installati sulla
     macchina, e relative informazioni ( /var/spool/badpenguin ).
     I pacchetti gia' installati vanno aggiunti alle rispettive categorie,
     se un pacchetto non ha una categoria viene aggiunto alla categoria
     che ha lo stesso SONAME, altrimenti finisce nella categoria 'obsolete'
     [da verifare questa asserzione con il codice gia' presente]

  c) dipendenze non risolte,
     file contenente le dipendenze non risolte (da installare) sulla
     directory destinazione ( /var/spool/badpenguin/?????? ).
     Marcare il file per l'installazione se presente nella lista altrimenti
     mandare un messaggio di warning.

  d) profilo,
     contiene i file scelti nel profilo, quindi solo da installare
     (vedere sopra, wizard.deps).  Marcare il file per l'installazione se 
     presente nella lista altrimenti mandare un messaggio di warning.

  e) recupero libretto, 
     recupera le scelte effettuate in una precedente installazione
     ( /var/spool/badpenguin/libretto.db ). Controllare che il file 
     selezionato sia presente ed applicare le relative modifiche al flag di 
     selezione, se non presente invece emettere un warning.

  f) spazio fisico,
     legge i dati relativi allo spazio libero su disco, ed ai vari
     mount-point presenti.
     NOTA: il formato attuale del pacchetto non include informazioni sullo
     spazio utilizzato per partizione.

Al termine di queste operazione e' compito del packager effettuare l'analisi
delle dipendenze e successivamente dello spazio su disco residuo.



Funzionalita' offerte dal programma
------------------------------------
Lo stato dei pacchetti viene visualizzato tenendo conto della seguente 
legenda (lo stato equivale anche al tasto da premere) :
	[ ] pacchetto non installato
	[I] pacchetto marcato per l'installazione (anche premendo spazio)
	[X] pacchetto gia' installato
	[R] pacchetto marcato per la rimozione
	[U] pacchetto marcato per l'upgrade
	[K] pacchetto marcato per il ripristino (restore)
	[F] Forza reinstallazione (TODO)

Le transizioni possibili sono:
    - da [ ] si puo' passare al solo stato di I e viceversa;
    - da [X] si puo' passare allo stato di R, U o K e viceversa;

dipendenze - Il nuovo gestore deve tenere conto delle dipendenze di un 
pacchetto :
  - controllando che la dipendenza sia presente quando si installa un 
    pacchetto che la richiede;
  - controllando che la dipendenza non sia in uso quando viene rimossa;
insomma, deve essere potente come quello di Debian ma facile come quello 
della SUSE e sopratutto NON DEVE ROMPERE (!!!!) :-)



Formato del libretto.db
-----------------------
packagement in uscita genera il file libretto.db che contiene
tutte le modifiche apportate all'elenco dei pacchetti nel formato:
  <operazione>  <categoria>  <pacchetto>  <posizione>

dove
  operazione = install, reinstall (install+force), remove, update, 
               restore, check, etc.
  categoria  = dove si trova il pacchetto
  pacchetto  = nome completo del pacchetto (sensa estensione)
  posizione  = su quale degli N cdrom si trova il pacchetto



Parametri di packagement
------------------------
Il programma deve accettare in input le opzioni:
  --sourcedir="root directory della distribuzione"
  --targetdir="root directory dove installare"
  --targetdep="file delle dipendenze sulla targetdir"
  --wizarddep="file scelti dal profilo sulla targetdir"
  --libretto="dove scrivere il libretto + libretto da recuperare"
  --first-install	# Seleziona tutti i pacchetti di BASE dal cdrom





INSTALLER
=========

Installer e' un banalissimo programma che accetta in input:
 - source directory, dove si trovano i pacchetti ;
 - target directory, dove installare i pacchetti ;
 - libretto.db, file contenente le operazioni da effettuare.

Una volta letto il libretto.db, vengoono eseguite le operazioni descritte 
richiedendo di cambiare cdrom nel caso in cui il pacchetto non viene 
trovato sul source medium attuale. Tiene traccia della
progress bar e del tempo stimato. Ovviamente per le operazioni
di installazione lancia il comando 'setup' usando una banale system()


APPENDICI
=========

Formato di categories.db
------------------------
   TODO 


Formato di distribution.db
--------------------------
   TODO

Il db (distribution.data) conterra le entry per ogni pacchetto 
nel seguente formato:

<START>
<BEGIN>
<CATEGORY>
<PACKAGE_NAME>
<SUMMARY>
<DESCRIPTION>
........
.......
.........
..........
</DESCRIPTION>
<DISKUSAGE>
<REQUEST>
............
...............
..............
.........
.............
..........
</REQUEST>
<END>
.... altri blocchi....
<QUIT>



^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
