Translate

03 ottobre 2007

The NeXTStep: Developer time! - La compilazione da sorgenti e il package management

Agognato da tempo immemore, sfuggito di poco più e più volte nelle aste online, finalmente recupero un compact disc di NeXTStep Developer 3.3 (from U.S. of America, Ou iea!).
Infilo il CD nel caddy, infilo il caddy nel lettore, Workpace Manager mi mostra l'icona del volume montato. Mi aggiro per le directory del CD alla ricerca dei pacchetti da installare: NextCD/packages. Doppio click sui file e con i privilegi di root parte Installer.app.



Installer.app è l'utility presente in NeXTStep per aiutarci nella gestione del software da installare o da rimuovere: l'utilizzo è immediato: l'installazione dei pacchetti può essere eseguita da qualsiasi directory del sistema. Una volta che il pacchetto è stato installato verrà conservato nel database /NextLibrary/Receipts in forma di informazioni quali ad esempio lo status (installato o meno), i percorsi dei file e così via. Il sistema di gestione dei pacchetti è quello classico di Unix, e di distribuzioni come Slackware.


A questo punto ci ritroviamo con un ambiente di sviluppo bello e pronto. Prima di procedere verso il laboratorio con una camminata alla Frankenstein, un paio di migliorie al nostro sistema:
1) installazione della patch a NeXTStep Developer: la troviamo sul sito Apple - nostalgico Jobs: http://docs.info.apple.com/article.html?artnum=70124
2) installazione del GNU C Compiler: la versione più recente che sono riuscito a trovare per NeXTStep è la 2.95.3, che mi ha aiutato nella compilazione di grep (con una versione precedente il make non andava a buon fine): http://www.savarese.org/patches/gcc.html

Fa caldo. I vapori dell'acqua calda dentro la vasca creano una nebbia, mi soffoca. Inietto il pacchetto di grep via ftp, quei pochi secondi sembrano un'eternità. Mi asciugo il sudore. Con la sinistra lo tengo fermo, con la destra prendo gunzip e lo decomprimo, poi tar xf, lo scompatto, e mi ritrovo a guardargli dentro il petto: una zaffata di zolfo mi arriva alle narici, gas di putrefazione. Ho un conato. Guardo il Changelog, sono sorgenti del 1996; nessuno ne sentirà la mancanza!
Procedo, è il momento del configure per la mia creatura. Lo costringo ad un --prefix ben preciso, così da aiutarmi nella fase finale dell'opera. Tutto procede secondo i piani... La tempesta è arrivata: una luce rischiara le nuvole di vapore nella stanza, poi un boato al quale le finestre rispondono: non ci resta che aspettare. E finalmente eccolo: la corrente scorre per i circuiti CISC, si immagazzina nelle bobine, devo solo abbassare la leva: make !
La carne brucia, ne sento l'odore. Mi siedo, sono soddisfatto e stanco, posso permettermi qualche minuto di riposo. I succubi approfittano di me.
Apro gli occhi, la tempesta è finita. Nebbia e silenzio creano un'atmosfera surreale. La mia creatura? Mi avvicino, e la guardo...
Sì può fare!

Procediamo quindi alla creazione del pacchetto. Il make install copierà i binari nella directory da me suggerita al configure --prefix= che per questioni stilistiche e pratiche, sarà: /tmp/pkg.
A metà degli anni '90, quando i Makefile non erano creati da tool automagici come Automake, le strade per consigliare un percorso per l'installazione erano due: quella usata qui, quando esiste lo script di configure, oppure andare a modificare a mano il Makefile. Creata la radice del pacchetto, ora concentriamoci sul file .info necessario a Installer.app per la corretta gestione del pacchetto.
Il nome del file in questione dovrà corrispondere al nome del pacchetto, in questo caso, quindi, avremo un grep.info e il successivo e finale grep.pkg.
grep.info che andremo a creare in /tmp/, è suddiviso in otto sezioni:

Title
Il nome del pacchetto. Nella prima immagine è "grep - GNU grep"
Version La versione del software
Description La descrizione del programma
DefaultLocation Il prefisso d'installazione del pacchetto
Diskname Il nome della directory del pacchetto, nel nostro esempio "grep.pkg"
Relocatable Una variabile, i cui valori possono essere YES o NO, che permette all'utente finale di sovrascrivere la DefaultLocation
Application YES o NO, indica se il contenuto del pacchetto è un'applicazione o meno
DeleteWarning seguito dal messaggio di avvertimento, verrà mostrato quando si vorrà cancellare il pacchetto.

E ora viene la parte più facile. Installer.app si porta dietro un'utility scritta appositamente per la creazione di pacchetti: package, la cui sintassi di base si presenta così:
package directoryradicedelpacchetto fileinfo -d directorydovesalvareilpacchetto
che, per il nostro esempio, diventerà:
package /tmp/pkg/ /tmp/grep.info -d /me/

Generating Installer package /me/grep.pkg ...
creating package archive ... done.
copying grep.info ... done.
generating bom file ... done.
generating sizes file ... done.
... finished generating /me/grep.pkg.
Diventiamo root, doppio click sul pacchetto e Installer.app farà il resto.

Fonte: http://www.bangmoney.org/nextstep/packages_1.html

1 commento: