1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320
|
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 Gebunkert: Datenbankbedienung mit Perl und CGI, 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@comune.torino.it
1. Scopi di questo documento
1.1. Destinatari
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.
1.2. Convenzioni usate nel testo
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. Introduzione
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:
Linux
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.
HTML
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.
Browser
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.
server http
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.
SQL
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.
CGI
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.
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.
3. Procedura di Installazione
3.1. Requisiti Hardware
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.2. Requisiti Software
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. Installazione del sistema operativo
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.4. Il server http
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.
3.5. I Browser
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.5.1. Configurazione di Lynx
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.5.2. Configurazione del browser Arena
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.5.3. Installazione e configurazione di Netscape
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.6. Cooperazione tra Apache e i Browser
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.7. Il Motore Database e la sua installazione
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.7.1. Installazione di msql-1.0.16
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.7.2. Test di msql-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.7.3. Installazione di msql-2.0.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-(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/* .
3.7.4. Test di msql-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.8. Scelta delle interfacce: DBI/mSQL, MsqlPerl, Lite
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.8.1. DBI e DBD-mSQL
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.8.2. MsqlPerl
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.8.3. Il linguaggio scripting di msql: Lite
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.9. La via generale: DBI e DBD-msql
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 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.
3.9.1. Installazione dell'interfaccia database di perl - DBI
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 non 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.9.2. Il driver msql di perl DBD-mSQL
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 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.10. L'interfaccia MsqlPerl
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.11. La libreria CGI di perl
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.
3.12. Lista di controllo dell'installazione
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. Esecuzione di un database di esempio
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.1. Adattamento dello script di esempio per MsqlPerl
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.2. Adattamento dello script di esempio per for msql-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. Conclusione e Riepilogo
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.
|