corff@zedat.fu-berlin.de
gianmario.parisi@libero.it
.
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 non 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.
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;
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:
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.
è 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.
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.
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.
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.
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.
è 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.
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.
Il software descritto in questo articolo è disponibile su Internet o su CD-ROM. Sono stati usati i seguenti prodotti:
http://www.redhat.com
;
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;
ftp.uni-paderborn.de:/doc/magazin/iX
;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:
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.
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 httpd) 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.
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.
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
index.html
se avviato senza argomenti.
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
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.
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
telnet localhost
(ammesso che telnet
sia installato). Se l'esecuzione
fallisce occorre verificare la configurazione di rete prima di continuare.
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 è relativamente 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, meravigliosamente 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.
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 targetSe 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
dapprima il comando
# ./setupLa 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 allSe 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.
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 inventurmsql 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.
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-
(vostra versione)-(vostra cpu)/.
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/* .
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.
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.
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.
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.
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.
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:
Qui occorre una puntualizzazione per i neofiti: l'installazione di test descritta qui funziona bene utilizzando software con esattamente 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 dopo 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.
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:
# makeSe non si hanno messaggi di errore (il protocollo dettagliato mostrato a schermo non è un messaggio di errore) si testi la nuova libreria installata con il comando
# make testOsservare le seguenti linee di output (effettuare lo scroll all'indietro 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 installNon resta altro. Se per qualche ragione l'installazione fallisce e deve essere rieseguita non dimenticarsi di eseguire prima
# make realcleanQuesto 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
# . uninstallche rimuoverà i file installati.
Il driver msql può essere installato soltanto dopo 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 testDi 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 installQuesto conclude le operazioni di installazione; il prossimo paragrafo riguarda MsqlPerl e se si è scelto l'uso di DBI può essere saltato.
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
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 devono
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.
Abbiamo compiuto i passi seguenti, nell'ordine dato:
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.
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.
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.
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.
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'un colpo in tabelle già create, o l'estrazione di dati da tabelle, in
modo che l'utente non debba scrivere alcuna 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.