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.