{"id":39,"date":"2006-06-15T09:41:30","date_gmt":"2006-06-15T08:41:30","guid":{"rendered":"http:\/\/www.ilinux.it\/content\/?p=39"},"modified":"2011-07-19T17:01:42","modified_gmt":"2011-07-19T16:01:42","slug":"la-mac-izzazione-di-postgresql-parte-i","status":"publish","type":"post","link":"https:\/\/www.ilinux.it\/content\/la-mac-izzazione-di-postgresql-parte-i.html","title":{"rendered":"La mac-izzazione di postgresql (parte i)"},"content":{"rendered":"<div>\n<div>\n<p style=\"text-align: center\"><a href=\"http:\/\/www.ilinux.it\/content\/wp-content\/uploads\/2010\/08\/540px-Postgresql_elephant.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-40 aligncenter\" src=\"http:\/\/www.ilinux.it\/content\/wp-content\/uploads\/2010\/08\/540px-Postgresql_elephant.png\" alt=\"\" width=\"277\" height=\"285\" \/><\/a><\/p>\n<p>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&#8217;inizio.<\/p>\n<p><!--more-->L&#8217;impresa prescelta \u00e8 stata  quella di creare un pacchetto di distribuzione binaria per il motore  per database relazionali (ed in questo caso dovremmo anche aggiungere  \u201cad oggetti\u201d) PostgreSQL, partendo dai suoi sorgenti, versione 8.1. <a href=\"http:\/\/www.trycycleglass.com\" rel=\"dofollow\">recycled glass gifts<\/a> .  Dite: potevate aspettare che qualcuno lo facesse per Voi. E perch\u00e9 ?<\/p>\n<p>Armati di Internet e il nostro fidato gcc (distribuito con Xcode) iniziamo l&#8217;impresa.<\/p>\n<p>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 \u00e8 necessaria  in Tiger + Xcode 2, in quanto questa libreria \u00e8 gi\u00e0 presente nel  sistema.<\/p>\n<p>Dunque la configurazione dell&#8217;ambiente di sviluppo termina con successo, e si pu\u00f2 procedere con il fidato make.<\/p>\n<p>La compilazione impiega  ovviamente un certo tempo su un ppc867mhz, ma va alla grandissima, e il  prodotto finito \u00e8 pronto per l&#8217;installazione, inizializzazione e  utilizzo.<\/p>\n<p>Terminiamo dunque queste fasi applicando il pi\u00f9 classico make install.<\/p>\n<p>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&#8217;utente postgres: chown postgres \/usr\/local\/pgsql\/data.<\/p>\n<p>Dunque cambiamo utente (precedentemente creato con le Preferenze di Sistema): su -l postgres.<\/p>\n<p>A questo punti iniziamo la base dati e avviamo il motore: \/usr\/local\/pgsql\/bin\/initdb -D \/usr\/local\/pgsql\/data<\/p>\n<pre>\/usr\/local\/pgsql\/bin\/pg_ctl -D \/usr\/local\/pgsql\/data -l \/usr\/local\/pgsql\/logfile start.<\/pre>\n<p>Avviamo l&#8217;interfaccia al motore: \/usr\/local\/pgsql\/bin\/psql.<\/p>\n<p>E come previsto abbiamo il nostro motore PostgreSQL al nostro comando.<\/p>\n<p>Terminiamo l&#8217;applicazione\/interfaccia con q, e abbiamo una sorpresa. Otteniamo uno strano errore:<\/p>\n<p>could not save history to file &#8220;\/usr\/local\/pgsql\/.psql_history&#8221;: Invalid argument<\/p>\n<p>Ad una analisi  preliminare non \u00e8 un vero problema, in quanto il file di storia dei  comandi dell&#8217;interfaccia psql viene in realt\u00e0 creato e popolato  correttamente, cos\u00ec come riletto all&#8217;avvio dell&#8217;interfaccia.<\/p>\n<p>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). <a href=\"http:\/\/www.dietistabarcelona.com\" rel=\"dofollow\">dietista<\/a> . Eppure il problema sussiste, ed \u00e8 dunque forse un  problema di implementazione della funzione, che ritorna sempre != 0 in  qualsiasi caso (!).<\/p>\n<p>Se fossimo su Linux  avremmo certamente finito la nostra installazione \u201cfrom scratch\u201d, ma  siamo su Mac, e vogliamo fare le cose in grande.<\/p>\n<p>Vogliamo utilizzare  l&#8217;applicazione PackageMaker.app in Deveper\/Applications\/Utilities per  preparare il pi\u00f9 classico dei pacchetti di installazione in MacOS X.<\/p>\n<p>L&#8217;ambiente visuale \u00e8 ben  chiaro, ma non sappiamo nulla sull&#8217;utilizzo di script pre e post  installazione: cerchiamo su internet e troviamo informazioni puntuali,  anche se all&#8217;inizio non ufficiali da fonte Apple (uhmmm, non bello da  parte sua!).<\/p>\n<p>L&#8217;installazione di  PostgreSQL prevede l&#8217;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.<\/p>\n<p>Apriamo il terminale da  bravi sistemisti Unix e battiamo useradd, poi adduser, ma alcun comando  con tale nome \u00e8 riconosciuto dalla nostra (a questo punto \u201cinfida\u201d) bash  !!<\/p>\n<p>Cosa succede? Che fine ha fatto l&#8217;essenza BSD di MacOSX ?&#8230; e che ci fa \/etc\/passwd se non abbiamo i fidati useradd\/adduser ?<\/p>\n<p>Ancora Internet viene in  nostro soccorso, e scopriamo finalmente l&#8217;esistenza di netinfo, che  (come applicazione in Applications\/Utility) avevamo \u201csnobbato\u201d come non  necessario alla gestione del sistema locale. UN (nostro) GRAVE ERRORE !<\/p>\n<p>Leggendo quattro o cinque  righe in pi\u00f9 abbiamo l&#8217;istruzione necessaria per lanciarci nell&#8217;uso  della suite di comandi non visuali a corredo con netinfo: niutil,  nireport, nidump, nigrep, etc.<\/p>\n<p>Dopo qualche breve prova  ci lanciamo nella creazione di una script che possa finalmente fornirci  un rimpiazzo efficace al nostro agognato useradd. Otteniamo cos\u00ec un buon  prototipo di script a questo scopo.<\/p>\n<p>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&#8217;utente postgres, e non abbiamo ancora implementato userdel: al volo,  con troppa disattenzione applichiamo alcune opzione &#8216;destroy&#8217; al comando  niutil, e purtroppo (sigh!) ci si cancella l&#8217;intera directory \/users  del database netinfo, rendendo il sistema inutilizzabile, e  inaccessibile (invero neanche riavviabile per mancanza di possibilit\u00e0 di  verificare le autorizzazioni).<\/p>\n<p>Terminiamo qui il racconto per lasciare un po&#8217; di suspence!<\/p>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>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&#8217;inizio.<\/p>","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"_links":{"self":[{"href":"https:\/\/www.ilinux.it\/content\/wp-json\/wp\/v2\/posts\/39"}],"collection":[{"href":"https:\/\/www.ilinux.it\/content\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ilinux.it\/content\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ilinux.it\/content\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ilinux.it\/content\/wp-json\/wp\/v2\/comments?post=39"}],"version-history":[{"count":6,"href":"https:\/\/www.ilinux.it\/content\/wp-json\/wp\/v2\/posts\/39\/revisions"}],"predecessor-version":[{"id":181,"href":"https:\/\/www.ilinux.it\/content\/wp-json\/wp\/v2\/posts\/39\/revisions\/181"}],"wp:attachment":[{"href":"https:\/\/www.ilinux.it\/content\/wp-json\/wp\/v2\/media?parent=39"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ilinux.it\/content\/wp-json\/wp\/v2\/categories?post=39"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ilinux.it\/content\/wp-json\/wp\/v2\/tags?post=39"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}