System Administator's Packager toolS
			      (saps)
			        di
	    Enrico Briozzi, Mirko Tabarelli, Mirko Manea	
		------------------------------------
		  Laboratorio di Sistemi Operativi 		
		          A.A. 1995/1996
		------------------------------------

  1. Introduzione
     1.1 Il file di configurazione: 'saps.config'
  2. Implementazione delle utilities
     2.1 Caratteristiche di 'saps.create'
     2.2 Caretteristiche di 'saps.install'
     2.3 Caratteristiche di 'saps.view'
     2.4 Caratteristiche di 'saps.delete'
     2.5 Caratteristiche di 'saps.extract'
     2.6 Caratteristiche di 'saps.export'
     2.7 Caratteristiche di 'saps.chknet'
     2.8 Caratteristiche di 'saps.find'
  3. Esempi
     3.1. Creazione di un archivio
     3.2. Installazione di un archivio
     3.3. Cancellazione di un archivio

Codice sorgente: saps.tgz

		------------------------------------

1. Introduzione

   Il System Administator's Packager Tools (saps) e` un insieme di
   utilities create per facilitare l'amministrazione di un sistema UNIX.
   Si offre la possibilita` di creare, installare e rimuovere pacchetti 
   di sistema. 
   Con il termine 'pacchetto', o archivio, si intende un insieme di files
   generici tra loro correlati, formanti un software completo. Ad
   esempio e` un pacchetto il compilatore C, completo dei suoi files di
   'include' e delle librerie.
   Le varie utilities fornite possono essere richiamate tramite una
   interfaccia interattiva (costruita usando il programma dialog scritto
   da lam836@cs.cuhk.hk). Esiste anche uno script (saps) dal quale e` 
   possibile invocare le operazioni di create, install, delete e view.
   Il tutto e` stato scritto usando esclusivamente le utilita` di
   base del sistema operativo, ossia la shell 'Bash', le 'GNU ShellUtils' e
   lo straem editor 'sed'. Questa strada e` stata seguita in quanto si
   pensa che l'utilita` debba essere utilizzata fin dalle primissime
   fasi di installazione di un sistema, dove librerie e programmi
   complessi non sono ancora disponibili.
   
   Le possibilita` offerte includono:

   - creazione di un pacchetto da un albero di directory (saps.create)
   - installazione di un pacchetto (saps.intall)
   - visualizzazione del contenuto di un archivio (saps.view)
   - cancellazione di un pacchetto installato (saps.delete)
   - estrazione di uno o piu` files da un archivio (saps.extract)
   - esportazione di un pacchetto ad altri sistemi (saps.export)
   - controllo delle installazioni in rete (saps.chknet)
   - controllo sulla provenienza dei files del sistema (saps.find)

   Tutte queste funzionalita` sono richiamabili anche separatamente,
   consentendo una facile e veloce integrazione in programmi batch non
   interattivi.
   
1.1 Il file di configurazione: 'saps.config'

   Per la configurazione dell'utility e` sufficiente modificare il file
   'saps.config' presente nella directory dove risiedono gli altri
   scripts. In questo file vengono specificati numerosi parametri di
   inizializzazione, come il percorso dove risiede il programma
   (variabile PREFIX) e tutti i programmi di supporto come
   l'archiviatore usato (variabile ARC), il compressore (variabile (ZIP),
   il nome dello script di inizializzazione (variabile INIT_SCRIPT) e
   le estensioni degli archivi (variabili EXT e ZIPEXT).
   In questo modo la configurazione di 'saps' per ogni sistema risulta
   facilitata e viene incontro alle esigenze di tutti gli utenti.

2. Implementazione

   Nella testa di ogni script si trova la seguente linea:

       pushd `dirname $0` 1>&- ; SAPS=`pwd` ; popd 1>&-

   che ricava il percorso da dove prelevare in seguito gli altri files
   di saps (compresi quelli di configurazione).
   Il path di ricerca non viene, attualmente, controllato.

2.1 Caratteristiche di 'saps.create'

   Questo script serve per creare un archivio da un insieme di files.
   Per default viene utilizzata la directory corrente, con pathname 
   *RELATIVI*, ma e` possiblie anche specificare un pathname *ASSOLUTO*
   per mezzo dello switch '--source' (viene cioe` estratto il percorso
   come da comando pwd)
   In questo modo si possono costruire due differenti tipi di pacchetti:  

   1. cwd-relative, pensato per un pacchetto nuovo con la sua struttura
      ad albero riprodotta dalla radice (root).
   2. pwd-relative, utile per creare archivi da pacchetti gia`
      installati ma non dalla nostra utilita`.
  
   Per ogni pacchetto viene creato un file di data base che verra`
   usato dagli altri script; tutti i db file sono mantenuti all'interno
   della directory $ADM.
   
   Come esempio di dbfile si consideri:

      ARCHIVE: package_name
      VERSION: X.XX
      DEPEND: other packages needed (divided by blank)
      FROM: where archive is token from
      CONTENTS: files list ...

   dove si specifica il nome dell'archivio, la versione del programma,
   gli eventuali pacchetti necessari al suo funzionamento, sua
   provenienza e la lista dei files che lo compongono.

   Eventualmente e` possibile includere uno script di configurazione
   generale del pacchetto, che verra` eseguito una volta installato il
   software. Tale script deve essre inserito in /tmp/.saps e chiamarsi
   saps.script, nomi configurabili nel file saps.config.

2.2 Caretteristiche di 'saps.install'

   Dopo aver creato il pacchetto, lo si puo` installare con lo script
   saps.install.
   Le azione eseguite da questo script si raggruppano principalemente
   in:

   - scompattazione dell'archivio
   - esecuzione dello script di configurazione (creato eventualmente
     nella fase del paragrafo 2.1)
   - aggiornamento del data base di sistema
   - calcolo delle dipendenze ed eventuale loro installazione

   Da notare che il calcolo delle dipendenze viene effettuato mediante
   la scansione del campo DEPEND, che deve essere stato opportunamente
   inizializzato all'atto della creazione. Inoltre le dipendenze devono
   risiedere nello stessa directory del file che si ha installato.
   
2.3 Caratteristiche di 'saps.view'

  Questo script permette di listare il file di data bese dei vari
  pacchetti.
  E' possibile visualizzare solo l'intestazione o solo i file contenuti
  nel pacchetto.
  Inoltre tramite l'opzione --list vengono elencati tutti i pacchetti
  installati nel sistema.

2.4 Caratteristiche di 'saps.delete'

  Serve per rimuovere un pacchetto dal sistema cancellando i files
  precedentemente installati e rimuovendo il file di data base 
  (esso viene spostato nella directory $ADM/$OLD_ARC).
  La rimozione dei files del pacchetto avviene controllando che essi non
  servano ad altri pacchetti ancora installati.
  Se lo script incontra una directory vuota allora la cancella.
  Per cancellare i file viene scandito il db file dal fondo fino alla
  cima ed ogni file viene controllato con tutti gli altri db file per
  scoprire se esso e' necessario ad essi e solo se non viene trovato in
  nessun file viene eliminato.

2.5 Caratteristiche di 'saps.extract'

  Questa utilita` e` stata pensata per venire in soccorso ad eventuali
  cancellazioni indesiderate di files appartenenti a pacchetti
  installati nel sistema. Questo perche` non vi sarebbe piu` una
  coerenza tra files installati e data base.
  
2.6 Caratteristiche di 'saps.export'

  L'idea e` quella di fornire un mezzo per rigenerare un pacchetto da
  files gia` installati sul sistema, ma dei quali non e` piu`
  disponibile l'archivio originale.
  Questo scopo viene realizzato tramite il symlink di ogni singolo file
  originale nella directory $TMP, viene quindi copiato il db file e
  quindi si realizza l'archivio tramite l'opzione '-h' del tar, la quale
  "don't dump symlinks; dump the files they point to instead."
  E` stata scelto di fare uso di link al posto della semplice analisi
  del db file, in quanto, con uno sguardo rivolto al futuro,
  l'introduzione di un $USER_PREFIX, ossia di un percorso opzionale
  fornito dall'utente per l'installazione, ne risulterebbe facilitato.

2.7 Caratteristiche di 'saps.chknet'

  Questo semplice script fornisce un metodo comodo per controllare se in
  una rete di calcolatori UNIX, le configurazione sono le medesime,
  ossia se hanno gli stessi pacchetti installati.
  Basta, infatti, inserire un host prototipo, con il quale andare a
  confrontare vari altri hosts forniti.
  Inoltre una semplice funzionalita` di 'are you alive?' viene fornita
  per vedere se un host risponde o meno.

2.8 Caratteristiche di 'saps.find'

  La funzione di 'find' permette di determinare in quale/i pacchetti un
  particolare file installato sul sistema si trovi. Se la ricerca non va
  a buon fine, ossia il file non appartiene a nessun pacchetto
  correntemente installato sul sistema, viene restituito un exit status
  di 1, altrimenti 0.
  
3. Esempi

  In questa breve sezione vengono presentati alcuni esempi riguardo
  all'uso di SAPS.

3.1 Creazione di un archivio

  Per creare un archivio con path name relativo, si puo` procedere come
  segue:

  saps.create mpeg --ver 1.50 --depend jpeg svgalib --from univr

  Viene creato un archivio di nome 'mpeg.tgz' con settati i campi
  corrispondenti nel dbfile, generando il seguente:

                 ARCHIVE: mpeg
                 VERSION: 1.50
                 DEPEND: jpeg svgalib
                 FROM: univr
                 CONTENTS: files list ...     

  Qui e` da notare che il campo DEPEND contiene due pacchetti che
  verrano poi controllati dopo l'installazione di 'mpeg'.

3.2. Installazione di un archivio

 Per quanto riguarda invece l'installzione, riprendendo l'esempio di 3.1:

 saps.install mpeg

 che provvedera` ad installare il file nella struttura definita dal
 campo CONTENTS, con l'eventuale $USER_PREFIX (definito in saps.config),
 aggiornando una eventuale versione precedente e tentando di installare
 i pacchetti 'jpeg' e 'svgalib' se non sono gia` installati.
 Inoltre verra` eseguito, se presente, lo script di configurazione
 finale 'saps.script'.

3.3. Cancellazione di un archivio

 Proseguendo sempre con l'esempio iniziato in 3.1, digitando:

 saps.delete mpeg

 viene eliminato il pacchetto dal sistema, controllando che files
 presenti in 'mpeg' non siano necessari ad altri pacchetti gia`
 installati nel sistema.