  Server Web basati su mSQL e perl mini HOWTO
  Oliver Corff, corff@zedat.fu-berlin.de
  v0.1, 17 settembre 1997

  Questo Mini HOWTO, fortemente ispirato dall'articolo di Michael
  Schilli _G_e_b_u_n_k_e_r_t_: _D_a_t_e_n_b_a_n_k_b_e_d_i_e_n_u_n_g _m_i_t _P_e_r_l _u_n_d _C_G_I, pubblicato nel
  computer magazine tedesco iX nell'agosto 1997, descrive come costruire
  un database client/server SQL utilizzando WWW e HTML per l'interfaccia
  utente.  Documentazione tradotta da Gianmario Parisi, gian
  mario.parisi@libero.it.
  ______________________________________________________________________

  Indice Generale


  1. Scopi di questo documento
     1.1 Destinatari
     1.2 Convenzioni usate nel testo

  2. Introduzione
  3. Procedura di Installazione
     3.1 Requisiti Hardware
     3.2 Requisiti Software
     3.3 Installazione del sistema operativo
     3.4 Il server http
     3.5 I Browser
        3.5.1 Configurazione di Lynx
        3.5.2 Configurazione del browser Arena
        3.5.3 Installazione e configurazione di Netscape
     3.6 Cooperazione tra Apache e i Browser
     3.7 Il Motore Database e la sua installazione
        3.7.1 Installazione di msql-1.0.16
        3.7.2 Test di msql-1
        3.7.3 Installazione di msql-2.0.1
        3.7.4 Test di msql-2
     3.8 Scelta delle interfacce: DBI/mSQL, MsqlPerl, Lite
        3.8.1 DBI e DBD-mSQL
        3.8.2 MsqlPerl
        3.8.3 Il linguaggio scripting di msql: Lite
     3.9 La via generale: DBI e DBD-msql
        3.9.1 Installazione dell'interfaccia database di perl - DBI
        3.9.2 Il driver msql di perl DBD-mSQL
     3.10 L'interfaccia MsqlPerl
     3.11 La libreria CGI di perl
     3.12 Lista di controllo dell'installazione

  4. Esecuzione di un database di esempio
     4.1 Adattamento dello script di esempio per MsqlPerl
     4.2 Adattamento dello script di esempio per for msql-2

  5. Conclusione e Riepilogo


  ______________________________________________________________________

  11..  SSccooppii ddii qquueessttoo ddooccuummeennttoo


  11..11..  DDeessttiinnaattaarrii

  Chiunque voglia installare un server database per il web ma non sa
  quale software  necessario e come installarlo dovrebbe trarre
  beneficio dalla lettura di questo testo. Questo testo fornisce tutte
  le informazioni necessarie per ottenere un database SQL per web server
  funzionante; esso _n_o_n riguarda alcun dettaglio della programmazione
  CGI, n spiega il linguaggio SQL. Sono disponibili dei libri
  eccellenti su entrambi gli argomenti, ed  intenzione di questo testo
  fornire una piattaforma funzionante sulla quale un utente pu in
  seguito studiare la programmazione CGI e SQL.

  Per ottenere una piccolo sistema SQL funzionante (non l'esempio del
  sistema di prenotazione di una grande compagnia aerea, o il database
  per la gestione di una missione spaziale) sar sufficiente disporre
  del software descritto in questo testo e la documentazione che lo
  accompagna. Il manuale utente di msql (un database introdotto nel
  testo) fornisce sufficienti informazioni su SQL per costruire il
  proprio database.

  Il lettore di questo testo dovrebbe avere una buona conoscenza su come
  ottenere file via ftp se non ha accesso ai CD-ROM, ed una comprensione
  di base di come ottenere file binari eseguibili partendo dai sorgenti.
  In ogni modo, tutti i passi spiegati nel testo sono stati provati su
  sistemi reali e dovrebbero funzionare sul sistema del lettore.


  11..22..  CCoonnvveennzziioonnii uussaattee nneell tteessttoo


  Un comando utente:

  # make install



  Uscita a video d un programma:


       Programma installato. Leggere README per particolari su come iniziare.



  Codice d'esempio:

  ______________________________________________________________________
  # Mio commento
  char letter;
  ______________________________________________________________________



  22..  IInnttrroodduuzziioonnee

  Si pu assumere con sicurezza che database con grandi volumi di dati o
  una complessa struttura relazionale (come, probabilmente, un database
  lessicale per linguaggio naturale) deve essere accessibile a molti
  utenti ed operatori simultaneamente. Idealmente, dovrebbe essere
  possibile usare differenti piattaforme hardware e software esistenti
  che possono essere combinate nel sistema. Allo scopo di ridurre i
  costi di implementazione, solo un sistema, il database server, deve
  essere potente. Le stazioni utente devono tipicamente mostrare i dati
  e accettare i comandi, ma l'elaborazione  eseguita su una sola
  macchina, cosa che porta al nome di database client-server. Inoltre,
  l'interfaccia utente dovrebbe essere facile da mantenere e dovrebbe
  richiedere il meno possibile sul lato client.

  Un sistema che soddisfa questi criteri pu essere costruito attorno
  agli elementi seguenti tra protocolli, concetti e software:

     LLiinnuuxx
        fornisce il sistema operativo.  una implementazione stabile di
        Unix che fornisce autentici servizi multi-utente e multi-tasking
        con pieno supporto di rete (TCP/IP e. a.).  Eccetto i costi
        effettivi dei supporti e di spedizione,  disponibile
        gratuitamente in forma di cosiddette distribuzioni che di solito
        includono tutto il necessario dal SO base all'elaborazione
        testi, scripting, sviluppo software, generatori di interfacce,
        ecc.

     HHTTMMLL
         l'Hypertext Markup Language usato per costruire interfacce
        verso sistemi di rete quale le Intranet ed il World Wide Web.
        HTML  molto semplice  pu essere prodotto con un editor di
        testo ASCII.

     BBrroowwsseerr
        sono applicazioni con interfaccia testuale (per es. Lynx) o
        grafica (per es. Mosaic, Netscape, Arena ecc.) che accettano,
        valutano e mostrano documenti HTML.  Sono le uniche parti di
        software utilizzate direttamente dall'utente del database.
        Utilizzando i browser,  possibile mostrare vari tipi di dati
        (testo, immagini) e comunicare con server http (vedi nel
        seguito) su ogni modello di computer per cui sia disponibile un
        browser.

     sseerrvveerr hhttttpp
        forniscono l'accesso all'area di un computer host dove sono
        immagazzinati i dati destinati ad uso pubblico su una rete.
        Essi "comprendono" il protocollo http e procurano le
        informazioni richieste dall'utente.

     SSQQLL
        lo Structured Query Language (linguaggio strutturato per
        interrogazioni)  un linguaggio per manipolare dati in database
        relazionali.  Ha una grammatica molto semplice e costituisce uno
        standard ampiamente supportato. Database basati su SQL sono
        diventati il nucleo del classico concetto di database
        client/server. Ci sono molti famosi sistemi SQL disponibili,
        come Oracle, Informix, ecc., e poi c' anche msql disponibile a
        costo molto basso o nullo se usato in ambienti accademici e di
        istruzione.

     CCGGII
        la Common Gateway Interface  l'interfaccia di programmazione
        tra il sistema che mantiene i dati (nel nostro caso un sistema
        basato su SQL) ed il protocollo di rete (HTML, naturalmente).  I
        CGI possono essere costruiti attraverso molti linguaggi di
        programmazione, ma un linguaggio particolarmente popolare  il
        perl.

     ppeerrll
         un linguaggio di scripting estremamente potente che combina
        tutti i meriti del C, di diversi linguaggi shell e dei linguaggi
        per manipolazione di file come awk e sed. Perl ha moltissime
        interfacce modularizzate e pu essere usato, ad esempio, per
        controllare database SQL.


  33..  PPrroocceedduurraa ddii IInnssttaallllaazziioonnee



  33..11..  RReeqquuiissiittii HHaarrddwwaarree

  Non possono essere fatte affermazioni generali riguardo i requisiti
  hardware di un server database. Troppi fattori dipendono dal numero di
  utenti, dal tipo di applicazione, dal carico di rete ecc. In piccoli
  ambienti con pochi utenti e scarso traffico di rete una macchina
  i486-equivalente con 16 Mb di RAM pu essere completamente
  sufficiente.  Linux, il sistema operativo,  molto efficiente in
  termini di risorse, e pu fornire abbastanza potenza per eseguire
  un'ampia variet di applicazioni allo stesso tempo. Naturalmente,
  processori pi veloci e pi RAM significano pi velocit, ma molto pi
  importante del processore  l'ammontare di RAM. Pi RAM ha il sistema,
  meno esso  costretto ad eseguire swap di processi su disco nel caso
  la memoria diventi un collo di bottiglia.

  Disponendo di 32 MB di RAM ed un bus PCI, operazioni di ricerca e
  ordinamento possono essere eseguite senza ricorso a file di swap ecc.,
  ottenendo prestazioni velocissime.

  Il modello di installazione descritto in questo articolo  stato
  realizzato su un IBM 686 (133 MHz) con 32 MB di RAM ed un hard disk
  IDE da 1.2 GB.  Assumendo che il processo di installazione parta da
  zero, viene fornita una lista dei passi necessari.


  33..22..  RReeqquuiissiittii SSooffttwwaarree


  Il software descritto in questo articolo  disponibile su Internet o
  su CD-ROM. Sono stati usati i seguenti prodotti:

    Red Hat Linux PowerTools: Red Hat 4.2 - 6 CD Complete Easy-to-Use
     estate '97; in alternativa http://www.redhat.com;

    msql SQL database server:  ora disponibile in due versioni. Le
     versioni differiscono nel numero di transazioni che possono
     gestire, nell'interfaccia di amministrazione, ecc. La versione pi
     vecchia, 1.0.16,  disponibile dai mirror di Sunsite. Gli
     eseguibili ELF possono essere trovati a
     sunsite:apps/database/sql/msql-1.0.16 o su CD-ROM (disco 4 di
     InfoMagic Linux Developer's Resource, 6-CD, Dicembre 1996) o
     alternativamente dalla seguente URL: http://www.infomagic.com.

     La versione pi nuova, 2.0.1, pu essere direttamente ottenuta dal
     homepage della Hughes in Australia (http://www.hughes.com.au) o da
     numerosi mirror sparsi per il mondo;

    perl da CPAN: Il  Comprehensive Perl Archive Network.  Walnut Creek
     CDROM, ISBN 1-57176-077-6, Maggio 1997;

    programmi d'esempio CGI di Michael Schilli's dalla rivista tedesca
     iX 8/1997, pagine 150--152, disponibile via ftp da ftp.uni-
     paderborn.de:/doc/magazin/iX;


  33..33..  IInnssttaallllaazziioonnee ddeell ssiisstteemmaa ooppeerraattiivvoo

  Linux  installato nella forma della distribuzione Red Hat 4.2. Allo
  scopo di installare con successo, la macchina deve avere un drive CD-
  ROM accessibile da DOS, un drive CD-ROM avviabile (bootable),
  altrimenti dev'essere preparato un disco di boot seguendo le
  istruzioni sul CD di Linux.

  Durante l'installazione l'utente pu selezionare e configurare
  numerosi pacchetti software.  conveniente selezionare i seguenti
  elementi:


    supporto di rete TCP/IP,


    il server http Apache,

    il linguaggio di scripting perl

    il sistema X Window

    i browser Arena (grafico) e Lynx (testuale).

  Tutti questi pacchetti sono forniti con la distribuzione Linux.  Se
  questi pacchetti non vengono installati ora, si avr la possibilit di
  farlo in seguito con l'assistenza di glint, il gestore per
  l'installazione software con interfaccia grafica ed intuitiva.
  Assicurarsi di operare come utente root durante l'installazione dei
  pacchetti software.

  Va oltre gli scopi di questo articolo descrivere la procedura di
  installazione ed inizializzazione della rete. Consultare la
  documentazione in linea (manpage, HTML, texinfo) e stampata (Linux
  Bible, ecc. ecc.).

  La procedura di installazione di Red Hat  matura e richiede poche
  attenzioni da parte dell'utente oltre alle scelte usuali (come fornire
  il nome host ecc.).  Una volta terminata con successo l'installazione,
  il sistema  sostanzialmente pronto per l'esecuzione.

  Installare il sistema X Window non  obbligatorio per un server puro,
  ma ci rende l'accesso al sistema ed il test molto pi semplice. La
  procedura di installazione di X  eseguita con uno qualsiasi tra
  diversi programmi; XF86Setup offre la pi estesa procedura guidata e
  necessita del minor numero di operazioni manuali per la gestione di
  fastidiosi dettagli (come programmazione del clock video, ecc.).
  L'unico requisito  che il software possa rilevare l'adattatore video.
  Un adattatore video accelerato economico (come schede basate su Trio
  S64 precedenti a S64UV+) di solito funziona ``al volo''.

  A questo punto assumiamo che il nostro sistema sia attivo ed in
  esecuzione e che Apache, Perl e X Window siano stati installati con
  successo.  Si assumer inoltre che tutte le strutture standard come
  come file e directory siano mantenute come definito
  nell'installazione. Ultimo, ma non meno importante, lasceremo
  l'hostname cos com', e accettiamo in questo momento il nome
  localhost. Useremo questo nome per testare l'installazione.  Una volta
  che l'intero sistema funziona pu essere aggiunto il vero nome.
  Notare che il setup della rete richiede anche di editare il file
  /etc/hosts, tra gli altri. Idealmente questo dovrebbe essere fatto con
  gli strumenti di amministrazione forniti all'utente root.


  33..44..  IIll sseerrvveerr hhttttpp


  Il server http fornito con Linux  conosciuto come Apache dagli umani
  e come httpd dal sistema. La manpage (man httpd) spiega come
  installare ed avviare il demone http (quindi http_d) ma, come detto, se
  l'installazione  avvenuta senza problemi, il server dovrebbe essere
  in esecuzione.  Si pu verificare l'albero delle directory: deve
  esserci una directory /home/httpd/ con tre sottodirectory: ../cgi-
  bin/, ../html/ e ../icons/. In ../html/ deve esserci un file
  index.html. In seguito modificheremo o sostituiremo questo file con
  l'index.html effettivo definito da noi. Tutte le informazioni di
  configurazione sono registrate in /etc/httpd/conf/. Il sistema  ben
  preconfigurato e non richiede un ulteriore setup se l'installazione
  non ha subito errori.



  33..55..  II BBrroowwsseerr

  Ci sono essenzialmente tre tipi di browser disponibili per Linux:
  sistemi puramente testuali come Lynx, semplici e sperimentali come
  Arena (gratis!) e commerciali come Netscape (Shareware!) con supporto
  Java.  Mentre Lynx e Arena sono forniti con Linux, Netscape deve
  essere recuperato da altre fonti. Netscape  disponibile in forma
  binaria precompilata per Linux su architetture ix86 e potr essere
  eseguito ``al volo'' appena estratto dall'archivio.


  33..55..11..  CCoonnffiigguurraazziioonnee ddii LLyynnxx


  Una volta avviato, Lynx cercher una URL predefinita solitamente non
  molto significativa se il sistema non ha un accesso permanente ad
  Internet.  Per cambiare la URL predefinita (e molti altri dettagli di
  configurazione) l'amministratore di sistema dovrebbe editare
  /usr/lib/lynx.cfg.  Il file  grande, circa 57000 byte e contiene
  informazioni a volte contraddittorie. Esso dichiara la propria home
  come /usr/local/lib/.  Non lontano dall'inizio del file c' una linea
  che comincia con STARTFILE.  Rimpiazzare questa linea con la voce
  seguente: STARTFILE:http://localhost assicurandosi che non siano
  inseriti spazi ecc. :

  ______________________________________________________________________
  # STARTFILE:http://www.nyu.edu/pages/wsn/subir/lynx.html
  STARTFILE:http://localhost
  ______________________________________________________________________


  Dopo aver salvato il file, Lynx dovrebbe mostrare il nostro documento
  index.html se avviato senza argomenti.


  33..55..22..  CCoonnffiigguurraazziioonnee ddeell bbrroowwsseerr AArreennaa


  Arena dapprima cerca la propria URL predefinita quando lanciato senza
  argomenti. Questa  codificata nell'eseguibile ma pu essere
  sovrascritta tramite la variabile d'ambiente WWW_HOME.
  L'amministratore di sistema pu inserire la linea
  WWW_HOME="http://localhost" in /etc/profile. La variabile deve essere
  esportata, o tramite una istruzione separate (export WWW_HOME) o
  appendendo WWW_HOME all'istruzione export esistente:

  ______________________________________________________________________
  WWW_HOME="http://localhost"
  export WWW_HOME
  ______________________________________________________________________


  Al successivo login, la nuova URL predefinita sar nota ad Arena a
  livello di sistema.


  33..55..33..  IInnssttaallllaazziioonnee ee ccoonnffiigguurraazziioonnee ddii NNeettssccaappee


  Netscape  un prodotto commerciale e quindi non incluso nelle
  distribuzioni Linux.  scaricabile da Internet o disponibile in
  collezioni software su CD-ROM. Netscape giunge in forma binaria
  precompilata per ogni importante piattaforma hardware. Per scopi di
  installazione,  utile creare una directory /usr/local/Netscape/ dove
  scompattare l'archivio. I file possono essere lasciati sul posto
  (eccetto per le librerie Java: seguire le istruzioni nel file README
  accluso ai binari Netscape), ed  sufficiente creare un link in
  /usr/local/bin/ eseguendo il comando

  # ln -s /usr/local/Netscape/netscape .


  dalla directory /usr/local/bin/.

  Netscape  ora pronto per l'uso e pu essere configurato attraverso il
  men `Options''. In ``General Preferences'' c' una scheda
  ``Appearance'' con il campo ``Home Page Location''. Immettere qui
  http://localhost e non dimenticare di salvare le opzioni (attraverso
  ``Options'' --- ``Save Options'') prima  di uscire da Netscape.
  All'avvio successivo, Netscape mostrer l'homepage di Apache.


  33..66..  CCooooppeerraazziioonnee ttrraa AAppaacchhee ee ii BBrroowwsseerr


  Si pu ora condurre il primo test reale del browser e del server http:
  avviare uno dei browser disponibili e la pagina Apache: Red Hat Linux
  Web Server apparir.  Questa pagina mostra la locazione dei file e
  altre informazioni basilari sull'installazione del server http. Se
  questa pagina non viene mostrata controllare se i file menzionati
  sopra sono nel posto giusto e se la configurazione del browser 
  corretta. Chiudere i file di configurazione editati prima di lanciare
  il browser di nuovo. Se tutti i file sono a posto e la configurazione
  del browser sembra corretta, esaminare il setup di rete della propria
  macchina. L'hostname potrebbe essere differente da quello immesso
  nella configurazione, o il setup di rete potrebbe essere in s non
  corretto.  molto importante che /etc/hosts contenga almeno una linea
  come

  ______________________________________________________________________
  127.0.0.1               localhost localhost.localdomain
  ______________________________________________________________________


  che implica la possibilit di connettersi localmente alla propria
  macchina. Questo  verificabile richiamando uno dei programmi di rete
  che richiedono un hostname come argomento, come telnet localhost
  (ammesso che telnet sia installato). Se l'esecuzione fallisce occorre
  verificare la configurazione di rete prima di continuare.


  33..77..  IIll MMoottoorree DDaattaabbaassee ee llaa ssuuaa iinnssttaallllaazziioonnee


  L'installazione del database richiede poca preparazione in pi
  rispetto ai passi precedenti.  Ci sono pochi motori database SQL
  disponibili, con differenti prerequisiti per l'amministrazione e
  l'esecuzione, ed uno dei migliori  msql, o ``Mini-SQL'' di David
  Hughes. msql  shareware. A seconda della versione utilizzata, 
  previsto un addebito di 250 dollari USA o pi per siti commerciali, 65
  dollari o pi per utenti privati, mentre enti educativi, formativi e
  organizzazioni no-profit registrate possono usare il software
  gratuitamente.  I costi esatti sono forniti nelle note di licenza
  della documentazione del database. Le cifre indicate sono solo un
  indicatore approssimativo.

  Alcune parole per giustificare la scelta di msql da parte dell'autore.
  Prima di tutto, c' l'esperienza personale. Durante la ricerca di
  motori database, msql si  dimostrato il pi semplice da installare e
  mantenere, e fornisce una sufficiente copertura del linguaggio SQL
  tale da soddisfare le esigenze generali. Solo durante la stesura di
  questo articolo l'autore ha scoperto le seguenti parole nell'Alligator
  Descartes' DBI FAQ (perl database interface FAQ):


       Dal punto di vista dell'autore, se l'insieme di dati  rela
       tivamente piccolo, con tabelle inferiori al milione di
       righe, e meno di mille tabelle in un dato database, allora
       mSQL  una soluzione perfettamente accettabile per il vostro
       problema. Questo database  estremamente economico, merav
       igliosamente robusto ed ha un supporto eccellente. [...]


  Msql  disponibile attualmente in due versioni, msql-1.0.16 e
  msql-2.0.1, che differiscono in prestazioni (non osservabili in
  progetti di piccola scala) e software allegato (la versione pi
  recente presenta pi strumenti, un proprio linguaggio di scripting
  ecc.). Verranno descritte entrambe le versioni di msql siccome la loro
  installazioni differisce in alcuni punti.


  33..77..11..  IInnssttaallllaazziioonnee ddii mmssqqll--11..00..1166


  msql  disponibile in formato sorgente ed in forma binaria compilata
  con supporto ELF. L'uso dei binari ELF rende l'installazione semplice
  in quanto l'archivio msql-1.0.16.ELF.tgz contiene un albero di
  directory assoluto e completo, cosicch tutte le directory sono create
  correttamente quando estratte da /.

  Se si decide di compilare msql-1.0.16 e si intende usare il pacchetto
  MsqlPerl piuttosto che l'interfaccia DBI (vedere una trattazione
  dettagliata delle differenze pi oltre) tenere presente che MsqlPerl
  potrebbe segnalare degli errori in fase di test che richiedono
  l'installazione di una patch per correggere una errata gestione
  dell'SQL.  La patch  descritta nella documentazione MsqlPerl (file
  patch.lost.tables).  In particolare le richieste di MsqlPerl
  includeranno tre linee in msqldb.c dopo la linea 1400 che riporta
  entry->def = NULL;:

          *(entry->DB) = 0;
          *(entry->table) = 0;
          entry->age = 0;



  La porzione di codice dovrebbe apparire come

  ______________________________________________________________________
          freeTableDef(entry->def);
          safeFree(entry->rowBuf);
          safeFree(entry->keyBuf);
          entry->def = NULL;
          *(entry->DB) = 0;
          *(entry->table) = 0;
          entry->age = 0;
  ______________________________________________________________________



  La compilazione di msql richiede diversi passi. Dopo la scompattazione
  dell'archivio con i sorgenti  necessario costruire una directory
  destinazione. Questo si ottiene con

  # make target



  Se tutto va bene, il sistema risponde con


       Build of target directory for Linux-2.0.30-i486 complete



  Bisogna ora spostarsi nella directory appena creata ed immettere dap
  prima il comando

  # ./setup


  La sequenza ./  necessaria per assicurarsi di eseguire il comando
  setup in questa directory e non un altro con lo stesso nome. Verr
  richiesto di scegliere la locazione della directory con i sorgenti e
  se si desidera una installazione come utente root. Una volta che
  l'utente ha effettuato le scelte il sistema esegue una serie di test
  per verificare la disponibilit di software (compilatore, utilit
  ecc.) per terminare col messaggio


       Ready to build mSQL.
       You may wish to check "common/site.h" although the defaults should be
       fine.  When you're ready, type  "make all" to build the software



  Si potr immettere

  # make all


  Se tutto va come previsto, si legger:


       make[2]: Leaving directory `/usr/local/Minerva/src/msql'
       <-- [msql] done

       Make of mSQL complete.
       You should now mSQL using make install

       NOTE : mSQL cannot be used free of charge at commercial sites.
              Please read the doc/License file to see what you have to do.

       make[1]: Leaving directory `/usr/local/Minerva/src'



  Tutti i binari devono essere resi visibili dal percorso di ricerca
  creando dei link software in /usr/local/bin/. Spostarsi nella
  directory ed immettere il comando

  # ln -s /usr/local/Minerva/bin/* .


  dopo il quale i link saranno impostati correttamente.


  33..77..22..  TTeesstt ddii mmssqqll--11



  Dopo l'installazione  possibile testare se il database funziona.
  Prima di ogni altra cosa il server (demone) deve essere avviato.
  L'amministratore di sistema con i privilegi di root immette il comando

  # msqld &


  (non dimenticare di aggiungere il simbolo &, altrimenti msql non verr
  eseguito in background) dopodich apparir il seguente messaggio a
  schermo:


       mSQL Server 1.0.16 starting ...

       Warning : Couldn't open ACL file: No such file or directory
       Without an ACL file global access is Read/Write



  Questo messaggio ci informa che ogni cosa funziona ma che non esistono
  restrizioni di accesso. Per il momento  sufficiente avviare il demone
  msql da shell, ma in seguito si potrebbe desiderare che il sistema
  esegua automaticamente il comando per noi.  Il comando deve essere
  inserito in uno script rc.d appropriato.  Solo ora l'amministratore
  pu immettere il primo comando effettivo di database:

  # msqladmin create inventur


  msql risponde con Database "inventur" created.. Come ulteriore prova,
  si verifichi che la directory /usr/local/Minerva/msqldb/ contiene ora
  la sottodirectory vuota ../inventur/. Potremmo manipolare il nuovo
  database con gli strumenti di amministrazione; queste procedure sono
  tutte coperte in dettaglio dalla documentazione msql.


  33..77..33..  IInnssttaallllaazziioonnee ddii mmssqqll--22..00..11


  C' una versione pi recente e pi potente del server mSQL di Huges,
  l'installazione del quale differisce in pochi punti.  L'installazione
  ex-novo di msql-2 implica i passi seguenti.  Copiare l'archivio nel
  punto di estrazione previsto, per esempio /usr/local/msql-2/, poi
  estrarre i file:

  # tar xfvz msql-2.0.1.tar.gz



  Spostarsi nella directory radice dell'albero di installazione e
  immettere

  # tar xfvz msql-2.0.1.tar.gz



  spostarsi in targets e cercare il proprio tipo di piattaforma.
  Dovrebbe esserci una nuova sottodirectory Linux-_(_v_o_s_t_r_a
  _v_e_r_s_i_o_n_e_)_-_(_v_o_s_t_r_a _c_p_u_)_/.  Spostarsi in essa ed avviare il programma di
  setup:

  # ./setup



  C' anche un file site.mm che pu essere editato.  Vogliamo conservare
  il percorso di installazione in /usr/local/Minerva/ (predefinito per
  msql 1.0.16)?  In questo caso modificare la linea INST_DIR=... di
  conseguenza. Altrimenti, lasciare tutto com'.

  Ora possiamo lanciare la compilazione del database

  # make
  # make install



  Se tutto va per il vero giusto, vedremo un messaggio come:


       [...]

       Installation of mSQL-2 complete.

       *********
       **   This is the commercial, production release of mSQL-2.0
       **   Please see the README file in the top directory of the
       **   distribution for license information.
       *********



  Dopo che tutto  installato correttamente dobbiamo curarci dei
  dettagli amministrativi. Qui comincia la vera differenza da msql-1.
  Anzitutto, creare un utente responsabile della amministrazione del
  database.


  # adduser msql



  Poi si imposti msql come proprietario di tutti i file nella directory
  mSQL col comando:

  # cd /usr/local/Minerva
  # chown -R msql:msql *



  Poi possiamo creare link per tutti gli eseguibili binari del database
  in /usr/local/bin/ col comando:

  # ln -s /usr/local/Minerva/bin/* .



  33..77..44..  TTeesstt ddii mmssqqll--22

  Possiamo avviare il server database con il comando msql2d &; dovremmo
  ottenere una risposta simile a questa:



  Mini SQL Version 2.0.1
  Copyright (c) 1993-4 David J. Hughes
  Copyright (c) 1995-7 Hughes Technologies Pty. Ltd.
  All rights reserved.

          Loading configuration from '/usr/local/Minerva/msql.conf'.
          Server process reconfigured to accept 214 connections.
          Server running as user 'msql'.
          Server mode is Read/Write.

  Warning : No ACL file.  Using global read/write access.



  Ci sembra perfetto. Il database  compilato ed installato, e possiamo
  ora continuare con i moduli perl siccome questi si basano in parte
  sulla presenza di un database funzionante per il test.

  Incidentalmente, questo  anche un buon momento per stampare il
  manuale completo fornito con msql-2.0.1:

  # gzip -d manual.ps.gz
  # lpr manual.ps



  Possiamo ora procedere con la compilazione delle interfacce, ma  una
  buona idea mantenere il server SQL attivo ed in esecuzione perch ci
  rende il test delle librerie di interfaccia un po' pi semplice.


  33..88..  SScceellttaa ddeellllee iinntteerrffaaccccee:: DDBBII//mmSSQQLL,, MMssqqllPPeerrll,, LLiittee

  Una frase spesso citata del Camel Book (la principale documentazione
  perl) afferma che c' pi di un modo di ottenere un risultato quando
  si usa perl. Questo, ahim, resta vero anche per il nostro modello di
  applicazione. Ci sono fondamentalmente tre modi di accedere ad un
  database msql via CGI. Prima di tutto la domanda  se utilizzare o
  meno perl. Se usiamo perl (su ci si focalizza questo articolo)
  potremo ancora scegliere tra due modelli completamente diversi di
  interfaccia. A fianco del perl, possiamo anche utilizzare il
  linguaggio scripting di msql, chiamato Lite, che  ragionevolmente
  semplice e simile al C.


  33..88..11..  DDBBII ee DDBBDD--mmSSQQLL

  Al momento della redazione di questo articolo, l'uso della interfaccia
  perl DBI per l'accesso a database viene preferito. DBI ha alcuni
  vantaggi: fornisce un controllo unificato di accesso ad un numero di
  database commerciali per mezzo di un unico insieme di comandi. Il
  database effettivamente in uso su un dato sistema  poi contattato
  attraverso un driver che nasconde efficacemente le peculiarit del
  database al programmatore. Cos, l'uso di DBI permette una agevole
  transizione tra differenti database di differenti produttori. In un
  singolo script  possibile contattare diversi database. Fare
  riferimento alle DBI-FAQ per i dettagli.  C', tuttavia, uno
  svantaggio: l'interfaccia DBI  ancora in fase di sviluppo e i numeri
  di versione aumentano rapidamente (talvolta gli aggiornamenti si hanno
  in meno di un mese). Analogamente, anche i singoli driver di database
  sono aggiornati frequentemente e possono riferirsi a specifiche
  versioni dell'interfaccia di database.  Utenti che effettuano nuove
  installazioni dovrebbero attenersi strettamente ai numeri di versione
  dati in questo articolo perch altre versioni possono causare problemi
  di compilazione e di test la risoluzione dei quali non  cosa per
  gente debole di cuore.


  33..88..22..  MMssqqllPPeerrll

  MsqlPerl  una libreria per l'accesso a msql direttamente da script
  perl. Essa scavalca l'interfaccia DBI ed  piuttosto compatta.
  Sebbene essa lavori bene con entrambe le versioni di msql, il suo uso
  non  pi consigliato a vantaggio dell'interfaccia DBI generalizzata.
  Nondimeno, in un contesto specifico, MsqlPerl pu risultare la scelta
  giusta grazie alle dimensioni contenute ed alla facilit di
  installazione. Da notare, essa ha meno dipendenze dalla versione di
  quelle rivelate dall'interazione di DBI con diversi driver di
  database.


  33..88..33..  IIll lliinngguuaaggggiioo ssccrriippttiinngg ddii mmssqqll:: LLiittee

  Ultimo ma non meno importante, msql-2 possiede un suo linguaggio di
  script: Lite. Il linguaggio  un parente stretto del C, snellito dalle
  sue stranezze e arricchito con caratteristiche di tipo shell (in
  sintesi, qualcosa di simile ad una versione di perl molto
  specializzata). Lite  un linguaggio semplice ed  ben documentato nel
  manuale msql-2. Il pacchetto msql-2 fornisce anche una applicazione di
  esempio basata su Lite.

  Non descriveremo Lite in questa sede perch esso  specifico di
  msql-2, e perch si assume che i lettori di questo articolo abbiano un
  interesse ed una comprensione di base del perl. Nondimeno un
  approfondimento di Lite  altamente raccomandato: Lite pu fornire la
  soluzione vincente in un ambiente basato esclusivamente su msql-2
  (senza ricorso ad altri database), grazie alla sua concezione semplice
  e diretta.


  33..99..  LLaa vviiaa ggeenneerraallee:: DDBBII ee DDBBDD--mmssqqll

  Assumiamo che perl sia stato installato durante il setup di sistema o
  attraverso il gestore pacchetti summenzionato. Non daremo altri
  dettagli qui.  Per verificare che la versione di perl sia aggiornata
  eseguiamo:


  # perl -v



  perl dovrebbe rispondere col seguente messaggio:



        This is perl, version 5.003 with EMBED
               Locally applied patches:
               SUIDBUF - Buffer overflow fixes for suidperl security

               built under linux at Apr 22 1997 10:04:46
               + two suidperl security patches

       Copyright 1987-1996, Larry Wall



  Probabilmente, tutto  a posto.  Il passo successivo include
  l'installazione delle librerie perl per database in generale (DBI), il
  driver msql (DBD-mSQL) e CGI. Il driver CGI  necessario in ogni caso.
  Sono necessari i seguenti archivi:

  1. DBI-0.81.tar.gz

  2. DBD-mSQL-0.65.tar.gz

  3. CGI.pm-2.31.tar.gz (or successivo)

  Qui occorre una puntualizzazione per i neofiti: l'installazione di
  test descritta qui funziona bene utilizzando software con _e_s_a_t_t_a_m_e_n_t_e
  questi numeri di versione, mentre combinazioni di altre versioni
  falliscono per un motivo o per l'altro.  Il debug di combinazioni di
  versioni difettose  sconsigliabile a chi non abbia grande familiarit
  con i dettagli delle convenzioni di chiamata delle interfacce ecc.  In
  alcuni casi un metodo pu essere semplicemente rinominato pur
  effettuando lo stesso compito, ma a volte la struttura interna cambia
  significativamente. Quindi, ancora una volta,  necessario mantenere i
  numeri di versione qui indicati se si vuole operare in sicurezza,
  anche se nel frattempo fossero comparse versioni successive.
  Aggiornamenti frequenti di queste interfacce sono una regola piuttosto
  che un'eccezione, quindi l'installazione di versioni differenti da
  quelle indicate pu essere fonte di problemi.

   molto importante che il driver di database per mSQL (DBD-mSQL) sia
  installato _d_o_p_o l'interfaccia generica DBI.

  Si comincer creando la directory /usr/local/PerlModules/ siccome 
  molto importante mantenere l'albero originale delle directory perl
  intatto. Potremmo anche scegliere un nome di directory diverso siccome
  il nome non  assolutamente critico, e sfortunatamente ci non 
  specificato nei file README dei vari moduli perl.  Dopo aver copiato
  gli archivi suddetti in /usr/local/PerlModules/ li scompattiamo con

  # tar xzvf [file-archivio]



  per ognuno dei tre archivi. Non dimenticare di fornire il nome di file
  corretto a tar. Il processo di installazione per i tre moduli 
  essenzialmente standardizzato; solo i messaggi a schermo che mostrano
  passi significativi per i singoli pacchetti sono riportati nel
  seguito.


  33..99..11..  IInnssttaallllaazziioonnee ddeellll''iinntteerrffaacccciiaa ddaattaabbaassee ddii ppeerrll -- DDBBII


  L'interfaccia verso il database deve sempre essere installata prima
  del driver di database specifico. La scompattazione dell'archivio DBI
  crea la directory /usr/local/PerlModules/DBI-0.81/.  Spostandosi nella
  directory, si trovano un file README (che andrebbe letto) ed un perl-
  Makefile (estensione .PL).  Diamo il comando

  # perl Makefile.PL



  Il sistema dovrebbe rispondere con un lungo messaggio la cui parte
  importante  mostrata qui:



  [...]
  MakeMaker (v5.34)
  Checking if your kit is complete...
  Looks good
          NAME => q[DBI]
          PREREQ_PM => {  }
          VERSION_FROM => q[DBI.pm]
          clean => { FILES=>q[$(DISTVNAME)/] }
          dist => { DIST_DEFAULT=>q[clean distcheck disttest [...]
  Using PERL=/usr/bin/perl

  WARNING! By default new modules are installed into your 'site_lib'
  directories. Since site_lib directories come after the normal library
  directories you MUST delete old DBI files and directories from
  your 'privlib' and 'archlib' directories and their auto subdirectories.

  Writing Makefile for DBI



  Questo dovrebbe andare bene, come indicato dal programma (looks good),
  e possiamo procedere col passo successivo:

  # make


  Se non si hanno messaggi di errore (il protocollo dettagliato mostrato
  a schermo _n_o_n  un messaggio di errore) si testi la nuova libreria
  installata con il comando

  # make test


  Osservare le seguenti linee di output (effettuare lo scroll all'indi
  etro con [Shift]-[PgUp]):


       [...]
       t/basics............ok
       t/dbidrv............ok
       t/examp.............ok
       All tests successful.
       [...]
       DBI test application $Revision: 1.20 $
       Switch: DBI-0.81 Switch by Tim Bunce, 0.81
       Available Drivers: ExampleP, NullP, Sponge
       ExampleP: testing 2 sets of 5 connections:
       Connecting... 1 2 3 4 5
       Disconnecting...
       Connecting... 1 2 3 4 5
       Disconnecting...
       Made 10 connections in  0 secs ( 0.00 usr  0.00 sys =  0.00 cpu)

       test.pl done



  Il passo finale  quello di installare tutti i file nelle directory
  appropriate. Ci si ottiene col comando

  # make install



  Non resta altro. Se per qualche ragione l'installazione fallisce e
  deve essere rieseguita non dimenticarsi di eseguire prima

  # make realclean


  Questo rimuove i resti indesiderati della precedente installazione. Si
  possono anche rimuovere i file installati copiando il contenuto dello
  schermo (mostrato abbreviato)


       Installing /usr/lib/perl5/site_perl/i386-linux/./auto/DBI/DBIXS.h
       Installing /usr/lib/perl5/site_perl/i386-linux/./auto/DBI/DBI.so
       Installing /usr/lib/perl5/site_perl/i386-linux/./auto/DBI/DBI.bs
       [...]
       Writing /usr/lib/perl5/site_perl/i386-linux/auto/DBI/.packlist
       Appending installation info to /usr/lib/perl5/i386-linux/5.003/perllocal.pod



  in un file, rimpiazzando ogni occorrenza di Installing con rm.  Se
  tale file viene chiamato uninstall si pu poi eseguire

  # . uninstall


  che rimuover i file installati.


  33..99..22..  IIll ddrriivveerr mmssqqll ddii ppeerrll DDBBDD--mmSSQQLL


  Il driver msql pu essere installato soltanto _d_o_p_o la felice
  installazione dell'interfaccia generica per database di perl.

  I passi fondamentali sono gli stessi di sopra; cos avremo dapprima

  # perl Makefile.PL



  Qui, il sistema dovrebbe rispondere con un invito alla lettura della
  documentazione a corredo. Esso rilever poi dove risiede msql, e
  chieder quale versione  in uso.



       $MSQL_HOME not defined. Searching for mSQL...
       Using mSQL in /usr/local/Hughes

        -> Which version of mSQL are you using [1/2]?



  inserire il numero di versione corretto. Seguiranno poche linee di
  testo.  Osservare le seguenti:


       Splendid! Your mSQL daemon is running. We can auto-detect your configuration!

       I've auto-detected your configuration to be running on port: 1114



  Si pu ora testare il driver con

  # make test


  Di nuovo, segue un output piuttosto lungo. Se esso termina con


       Testing: $cursor->func( '_ListSelectedFields' ). This will fail.
               ok: not a SELECT in msqlListSelectedFields!
       Re-testing: $dbh->do( 'DROP TABLE testaa' )
               ok
       *** Testing of DBD::mSQL complete! You appear to be normal! ***



  si  sulla buona strada ed  possibile installare il driver con

  # make install


  Questo conclude le operazioni di installazione; il prossimo paragrafo
  riguarda MsqlPerl e se si  scelto l'uso di DBI pu essere saltato.


  33..1100..  LL''iinntteerrffaacccciiaa MMssqqllPPeerrll

  Se si decide di usare esclusivamente l'interfaccia MsqlPerl non
  occorre il driver di database generico, ma solo MsqlPerl-1.15.tar.gz,
  siccome, come detto in precedenza, MsqlPerl fornisce una interfaccia
  diretta tra server database e perl senza l'uso dell'interfaccia DBI.
  Installazione e test sono immediati.

  Dopo aver eseguito perl Makefile.PL l'utilit make pu essere avviata.
  Dapprima occorrer rispondere alla domanda su dove risiede msql.  Se
  msql  in /usr/local/Minerva/ si potr confermare la risposta di
  default.

  Poi eseguire make test. Prima di ci bisogna assicurarsi di avere un
  database chiamato test e di possedere i diritti di lettura/scrittura
  su di esso. Tale database pu essere creato con

  # msqladmin create test



  33..1111..  LLaa lliibbrreerriiaa CCGGII ddii ppeerrll


  L'installazione del componente CGI di perl  il pi semplice dei tre
  passi.  sufficiente eseguire i comandi seguenti nell'ordine dato e
  tutto  fatto:


  # perl Makefile.PL
  # make
  # make install



  Diversamente dai driver precedenti questa interfaccia non ha una
  opzione di test (# make test) siccome gli altri moduli _d_e_v_o_n_o essere
  testati in ogni caso.
  Viene anche creata una sottodirectory con script CGI di esempio. 
  possibile copiare i contenuti di questa directory in /home/http/cgi-
  bin/ ed usare il browser per sperimentare gli script.


  33..1122..  LLiissttaa ddii ccoonnttrroolllloo ddeellll''iinnssttaallllaazziioonnee

  Abbiamo compiuto i passi seguenti, nell'ordine dato:

  1. Installazione di Linux con supporto di rete

  2. Installazione di un server http (Apache)

  3. Installazione di un browser (Arena, lynx o Netscape)

  4. Installazione di un server SQL (msql)

  5. Installazione di una interfaccia perl SQL

  6. Installazione dei file CGI

  Infine,  possibile fare un po' di pulizia. Tutti i rami di directory
  contenenti i sorgenti per le installazioni possono essere rimossi
  (tuttavia, non vanno cancellati gli archivi originali!) siccome tutti
  i file binari e la documentazione si trovano in directory differenti.


  44..  EEsseeccuuzziioonnee ddii uunn ddaattaabbaassee ddii eesseemmppiioo


  Dopo il completamento dell'installazione del sistema si pu finalmente
  eseguire una modello di applicazione. A seconda della versione di msql
  installata e dell'interfaccia perl utilizzata si dovr modificare il
  programma di esempio in qualche punto.

  Innanzitutto, il file index.html posto in /home/httpd/html/ deve
  essere modificato per permettere di richiamare l'applicazione database
  campione.  possibile porre il database (che verr chiamato
  database.cgi o inventur.cgi nonostante il nome del file perl.lst.ck)
  nella directory /home/httpd/html/test/.

  Per ottenere lo scopo, appendere una linea (naturalmente dipendente
  dalle scelte di installazione) simile alla seguente nel file
  index.html:

  ______________________________________________________________________
  <LI>Test the <A HREF="test/database.cgi">Database, DBI:DBD-mSQL style!</A>
  <LI>Test the <A HREF="test/inventur.cgi">Database, MsqlPerl style!</A>
  ______________________________________________________________________



  Solitamente si dovrebbe mantenere una sola di queste due scelte, ma
  disponendo di entrambi i tipi di interfaccia database installata 
  possibile lasciare entrambe le linee cos come sono. Sar in seguito
  possibile comparare le prestazioni, ecc.


  44..11..  AAddaattttaammeennttoo ddeelllloo ssccrriipptt ddii eesseemmppiioo ppeerr MMssqqllPPeerrll

  Allo script campione deve essere notificato l'uso dell'interfaccia
  MsqlPerl.  Le modifiche intervengono in diversi punti. Dapprima,
  vicino all'inizio del file, rimpiazzare la clausola use:



  ______________________________________________________________________
  #
  # use DBI;            # Interfaccia Database Generica
  use Msql;
  ______________________________________________________________________



  Poi, alla linea 27, la sintassi MsqlPerl non richiede la menzione di
  un driver specifico:


  ______________________________________________________________________
  # $dbh = DBI->connect($host, $database, '', $driver) ||
  $dbh = Msql->connect($host, $database) ||
  ______________________________________________________________________



  Poi, dalla linea 33 per tutto l'intero script, bisogna modificare
  tutte le istanze di do con query:


  ______________________________________________________________________
  # $dbh->do("SELECT * FROM hw") || db_init($dbh);
  $dbh->query("SELECT * FROM hw") || db_init($dbh);
  ______________________________________________________________________



  Infine, la linea 207 deve essere commentata:


  ______________________________________________________________________
  # $sth->execute || msg("SQL Error:", $sth->errstr);
  ______________________________________________________________________



  Inoltre, pu diventare necessario scambiare tutte le chiamate errstr
  come quella nel precedente frammento di codice con errmsg.  Anche
  questa scelta dipende dalla versione.

  Dopo queste modifiche, lo script dovrebbe girare senza intoppi.


  44..22..  AAddaattttaammeennttoo ddeelllloo ssccrriipptt ddii eesseemmppiioo ppeerr ffoorr mmssqqll--22

  La sintassi SQL  stata ridefinita durante lo sviluppo di msql-2. Lo
  script originale fallir l'esecuzione delle istruzioni di
  inizializzazione tabella nelle linee 45 -- 58. Il modificatore primary
  key non  pi supportato da msql-2, e dovrebbe essere semplicemente
  evitato:



  ______________________________________________________________________
      $dbh->do(<<EOT) || die $dbh->errstr; # Neue Personen-Tabelle
          create table person (
  # We do not need the 'primary key' modifier anymore in msql-2!
  #           pn        int primary key,   # Personalnummer
              pn        int,               # Personalnummer
              name      char(80),          # Nachname, Vorname
              raum      int                # Raumnummer
          )
  EOT
      $dbh->do(<<EOT) || die $dbh->errstr; # Neue Hardware-Tabelle
          create table hw (
  # We do not need the 'primary key' modifier anymore in msql-2!
  #           asset int primary key,       # Inventurnummer
              asset int,                   # Inventurnummer
              name   char(80),             # Bezeichnung
              person int                   # Besitzer
          )
  EOT
  ______________________________________________________________________



  Sfortunatamente, questo script accetter nuovi elementi con identico
  numero di personale; il modificatore msql-1 primary key intende
  prevenire esattamente questo comportamento. La documentazione msql-2
  mostra come usare la clausola CREATE INDEX per ottenere elementi
  univoci.


  55..  CCoonncclluussiioonnee ee RRiieeppiillooggoo

  Se si  installato msql-2 sul proprio sistema si pu dare un'occhiata
  ai programmi d'esempio scritti in Lite, il linguaggio di scripting
  proprietario di msql-2.

  Entrambe le versioni di msql sono fornite con un insieme base di
  strumenti di amministrazione che permettono all'utente di creare e
  cancellare tabelle (msqladmin) e di esaminare le strutture di database
  (relshow).

  La seconda generazione di msql (cio msql-2) presenta qualche
  strumento in pi: msqlimport e msqlexport. Questi permettono
  l'esportazione e l'importazione di dati sotto forma di file di testo
  da e verso database SQL.  Possono essere usati per il caricamento di
  quantit di dati esistenti _d_'_u_n _c_o_l_p_o in tabelle gi create, o
  l'estrazione di dati da tabelle, in modo che l'utente non debba
  scrivere _a_l_c_u_n_a linea di perl o SQL o qualsiasi altro codice per
  questi compiti.

  Se si desidera scrivere propri script perl per l'interazione con
  database si trover sufficiente supporto nei file di esempio e nella
  estensiva documentazione in linea fornita col modulo DBI.

  Ad ogni modo, si  ora pronti per cominciare e presentare i propri
  dati ad utenti della propria rete, o anche del Web.



