La mac-izzazione di postgresql (parte i)

Nel continuo sforzo di avvicinare MacOS X a Linux ci siamo buttati in una nuova impresa, e nuove sorprese ci si sono presentate davanti: e non sempre liete, almeno all’inizio.

L’impresa prescelta è stata quella di creare un pacchetto di distribuzione binaria per il motore per database relazionali (ed in questo caso dovremmo anche aggiungere “ad oggetti”) PostgreSQL, partendo dai suoi sorgenti, versione 8.1. recycled glass gifts . Dite: potevate aspettare che qualcuno lo facesse per Voi. E perché ?

Armati di Internet e il nostro fidato gcc (distribuito con Xcode) iniziamo l’impresa.

A differenza di quanto detto dal sito Apple (ma riguardava postgresql 7.4, ed evidentemente una versione vecchia di MacOSX+XCode), la dipendenza dalla libreria readline e dalla distribuzione di questo mediante fink non è necessaria in Tiger + Xcode 2, in quanto questa libreria è già presente nel sistema.

Dunque la configurazione dell’ambiente di sviluppo termina con successo, e si può procedere con il fidato make.

La compilazione impiega ovviamente un certo tempo su un ppc867mhz, ma va alla grandissima, e il prodotto finito è pronto per l’installazione, inizializzazione e utilizzo.

Terminiamo dunque queste fasi applicando il più classico make install.

Seguendo le linee guida della documentazione Apple/PostgreSQL creiamo la directory necessaria alla base dati: mkdir /usr/local/pgsql/data; diamo diritti di possesso per questa all’utente postgres: chown postgres /usr/local/pgsql/data.

Dunque cambiamo utente (precedentemente creato con le Preferenze di Sistema): su -l postgres.

A questo punti iniziamo la base dati e avviamo il motore: /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data

/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/logfile start.

Avviamo l’interfaccia al motore: /usr/local/pgsql/bin/psql.

E come previsto abbiamo il nostro motore PostgreSQL al nostro comando.

Terminiamo l’applicazione/interfaccia con q, e abbiamo una sorpresa. Otteniamo uno strano errore:

could not save history to file “/usr/local/pgsql/.psql_history”: Invalid argument

Ad una analisi preliminare non è un vero problema, in quanto il file di storia dei comandi dell’interfaccia psql viene in realtà creato e popolato correttamente, così come riletto all’avvio dell’interfaccia.

Allora indaghiamo nei sorgenti, ed in particolare nella riga 218 del file src/bin/psql/input.c, ove si fa uso della funzione write_history(const char *), della libreria readline. Ma questo uso non sembra essere erroneo (analizzando il prototipo della funzione distribuito con Xcode e la manualistica). dietista . Eppure il problema sussiste, ed è dunque forse un problema di implementazione della funzione, che ritorna sempre != 0 in qualsiasi caso (!).

Se fossimo su Linux avremmo certamente finito la nostra installazione “from scratch”, ma siamo su Mac, e vogliamo fare le cose in grande.

Vogliamo utilizzare l’applicazione PackageMaker.app in Deveper/Applications/Utilities per preparare il più classico dei pacchetti di installazione in MacOS X.

L’ambiente visuale è ben chiaro, ma non sappiamo nulla sull’utilizzo di script pre e post installazione: cerchiamo su internet e troviamo informazioni puntuali, anche se all’inizio non ufficiali da fonte Apple (uhmmm, non bello da parte sua!).

L’installazione di PostgreSQL prevede l’esistenza di un utente postgres: noi abbiamo detto aver usato le Preferenze di Sistema per questo, ma in una procedura di installazione automatica questo non va bene.

Apriamo il terminale da bravi sistemisti Unix e battiamo useradd, poi adduser, ma alcun comando con tale nome è riconosciuto dalla nostra (a questo punto “infida”) bash !!

Cosa succede? Che fine ha fatto l’essenza BSD di MacOSX ?… e che ci fa /etc/passwd se non abbiamo i fidati useradd/adduser ?

Ancora Internet viene in nostro soccorso, e scopriamo finalmente l’esistenza di netinfo, che (come applicazione in Applications/Utility) avevamo “snobbato” come non necessario alla gestione del sistema locale. UN (nostro) GRAVE ERRORE !

Leggendo quattro o cinque righe in più abbiamo l’istruzione necessaria per lanciarci nell’uso della suite di comandi non visuali a corredo con netinfo: niutil, nireport, nidump, nigrep, etc.

Dopo qualche breve prova ci lanciamo nella creazione di una script che possa finalmente fornirci un rimpiazzo efficace al nostro agognato useradd. Otteniamo così un buon prototipo di script a questo scopo.

Iniziamo a sperimentare delle script di pre e post installazione per il pacchetto di distribuzione, e il tutto promette bene. Ma occorre ogni volta eliminare l’utente postgres, e non abbiamo ancora implementato userdel: al volo, con troppa disattenzione applichiamo alcune opzione ‘destroy’ al comando niutil, e purtroppo (sigh!) ci si cancella l’intera directory /users del database netinfo, rendendo il sistema inutilizzabile, e inaccessibile (invero neanche riavviabile per mancanza di possibilità di verificare le autorizzazioni).

Terminiamo qui il racconto per lasciare un po’ di suspence!

Posicionamiento web SEO