Serveur Web de Base de Donnees mSQL / perl HOWTO
par Oliver Corff,
version francaiseNicolas Caillaud
v0.1, 17 September 1997
Ce Mini HOWTO, tres largement inspire de l'article de Michael Schilli
Gebunkert : Datenbankbedienung mit Perl und CGI, publie dans le maga-
zine informatique allemand iX du mois d'aout 1997, explique comment
construire une base de donnees client/server SQL sur le Web, utilisant
HTML pour l'interface utilisateur.
11.. AA pprrooppooss ddee ccee DDooccuummeenntt
11..11.. LLeecctteeuurrss ccoonncceerrnneess
Ce document devrait etre utile a ceux qui veulent mettre en place un
serveur de base de donnees sur le Web, mais qui ne savent pas quels
logiciels sont necessaires, ni comment les installer. Il fournit
toutes les informations utiles pour faire fonctionner une base de
donnees SQL sur un serveur Web ; il _n_e rentre _p_a_s dans les details de
la programmation CGI, ni n'explique le langage SQL. D'excellents
ouvrages existent sur ces sujets, et le but de ce document est
seulement de fournir une plate-forme sur laquelle un utilisateur
pourra etudier la programmation CGI et le langage SQL.
Pour faire tourner un systeme SQL sur une petite echelle (et non pas
l'exemple classique du systeme de reservation d'une importante
compagnie aerienne, ou le systeme de gestion de base de donnees d'une
mission spatiale), il suffit d'avoir les logiciels decrits dans ce
document, et la documentation les accompagnant. Le manuel utilisateur
de msql (la base de donnees decrite ici) fournit suffisamment
d'informations sur SQL pour vous permettre de construire votre propre
base.
Le lecteur doit savoir comment recuperer des fichiers par ftp s'il n'a
pas les CD-ROM adequats, et comment construire des executables a
partir des fichiers sources. En tout etat de cause, toutes les etapes
decrites dans ce document ont ete testees sur un systeme reel, et
devraient fonctionner sur le systeme du lecteur.
11..22.. CCoonnvveennttiioonnss ttyyppooggrraapphhiiqquueess
Une commande utilisateur :
# make install
Affichage d'un programme :
Program installed. Read README for details on how to start.
Exemple de fichier de code :
______________________________________________________________________
# Un commentaire
char lettre;
______________________________________________________________________
22.. IInnttrroodduuccttiioonn
On peut raisonnablement supposer que des bases de donnees contenant de
gros volumes de donnees, ou un schema relationnel complique (comme,
par exemple, une base lexicale pour un langage parle), doivent etre
accessibles a beaucoup d'utilisateurs a la fois. De meme, il doit etre
possible d'utiliser diverses plates-formes materielles et logicielles
existantes pour construire le systeme final. Pour reduire les couts
de mise en oeuvre, une seule partie du systeme a reellement besoin de
puissance : le serveur de la base de donnees ; les stations
utilisateurs doivent seulement afficher des donnees et accepter des
commandes utilisateurs, mais le traitement proprement dit est fait sur
une seule machine, justifiant ainsi le terme "base de donnees client -
serveur". De plus, l'interface utilisateur doit etre facile a
configurer, et requerir le moins de traitement possible sur le client.
Les elements suivants (protocoles, logiciels et plus generalement
concepts) sont utilises pour construire un systeme conforme a ces
criteres :
LLiinnuuxx
est le systeme d'exploitation. Il s'agit d'une implementation
stable d'Unix, multi-utilisateurs, multi-taches, avec support
reseau complet (TCP/IP entre autres). A part le cout du support
et de la transmission, il est gratuit et livre sous forme de
distributions, qui incluent generalement l'indispensable, du
Systeme d'Exploitation lui-meme au traitement de texte, outils
de developpement logiciel, langage de script, generateurs
d'interfaces, etc.
HHTTMMLL
Le langage HTML (HyperText Markup Language) est utilise pour
construire des interfaces de systemes reseaux comme des
Intranets, des serveurs Web (WWW). HTML est extremement simple
et peut etre genere a partir de n'importe quel editeur de texte
ASCII.
NNaavviiggaatteeuurrss
Les navigateurs sont des applications en mode texte (par exemple
Lynx) ou en mode graphique (par exemple Mosaic, Netscape, Arena,
etc.) destinees a la lecture et a l'affichage de documents HTML.
C'est le seul logiciel directement manipule par l'utilisateur de
la base de donnees. Grace aux navigateurs, on peut afficher
differents types de donnees (texte ou images), et communiquer
avec des serveurs HTTP (voir plus loin), heberges par a peu pres
n'importe quel modele d'ordinateur sur lequel un navigateur est
disponible.
SSeerrvveeuurrss HHTTTTPP
Un serveur HTTP fournit l'acces a une zone de l'ordinateur
contenant les donnees publiques d'un reseau. Il supporte le
protocole HTTP et fournit l'information demandee par
l'utilisateur.
SSQQLL
SQL (Structured Query Language) est un langage de manipulation
de donnees dans une base relationnelle. Sa grammaire est tres
simple et constitue un standard largement supporte dans
l'industrie. Les bases de donnees SQL sont au coeur meme du
concept classique de base de donnees Client - Serveur. Des
systemes SQL reconnus existent, comme Oracle, Informix, etc. ;
on trouve aussi des bases comme msql, mysql, postgresql,
pratiquement gratuites lorsqu'elles sont utilisees dans un cadre
scolaire ou universitaire.
CCGGII
CGI (Common Gateway Interface) est l'interface de programmation
entre le systeme supportant les donnees (dans notre cas, le
systeme SQL) et le protocole reseau (HTML, bien sur). Les
interfaces CGI peuvent etre construites en utilisant beaucoup de
langages de programmation, dont l'un des plus populaires est
perl.
PPeerrll
Perl est un langage de script particulierement puissant, qui
combine les avantages du C, des differents shells, et des
langages de manipulations de flux comme awk ou sed. Par exemple,
perl possede de nombreux modules de manipulation de base de
donnees SQL.
33.. PPrroocceedduurree dd''iinnssttaallllaattiioonn
33..11.. MMaatteerriieell rreeqquuiiss
Aucune supposition ne peut etre faite sur les besoins en materiel d'un
serveur de base de donnees. Cela depend trop du nombre d'utilisateurs,
du type d'application, de la charge du reseau, etc. Dans un
environnement comprenant peu d'utilisateurs et un trafic reseau
faible, un 486 ou equivalent, avec 16 MO de memoire vive, peut etre
suffisant. Linux, le systeme d'exploitation, est tres efficace en
termes de ressources, et peut fournir suffisamment de puissance pour
faire tourner un grand nombre d'applications en meme temps. Bien sur,
un processeur plus puissant et plus de memoire vive signifient plus de
puissance, mais la quantite de memoire vive est plus importante que le
processeur. Plus le systeme a de memoire vive, moins il est oblige, en
cas de besoin, de swapper les processus les plus gourmands en memoire
sur le disque.
Avec un systeme equipe de 32 MO de memoire vive et d'un bus PCI, les
recherches et operations de tri peuvent etre faites sans avoir recours
au(x) fichier(s) d'echange (swap), donnant d'excellents resultats.
L'installation decrite dans cet article a ete faite sur un IBM 686 a
133MHz, avec 32 MO de memoire vive et un disque dur IDE de 1.2 GO. La
suite du document presente les etapes indispensables a une
installation complete.
33..22.. LLooggiicciieell
Les logiciels decrits dans cet article sont disponibles sur Internet,
ou sur CD-ROM. Les produits suivants sont utilises :
+o Distribution Red Hat 4.2, parue pendant l'ete 1997, disponible sur
CD-ROM (Red Hat Linux PowerTools : 6 CD-ROM complets et prets a
etre utilises) ou sur Internet, sur le site de RedHat
<
http://www.redhat.com> ;
+o Base de donnees SQL msql : disponible en deux versions. Les
differences entre ces deux versions resident dans le nombre maximum
de transactions supporte, l'interface d'administration, etc. La
version la plus ancienne, 1.0.16, est disponible sur les sites
miroirs de Sunsite. L'executable au format ELF peut etre trouve sur
Sunsite, ou sur CD-ROM (en l'occurrence le disque 4 de l'InfoMagic
Linux Developper's Resource, ensemble de 6 CD-ROM, decembre 1996),
ou chez InfoMagic. La version la plus recente, 2.0.1, peut etre
obtenue directement de la page Web d'Hughes, en Australie, ou sur
de nombreux sites miroirs dans le monde ;
+o Perl du CPAM : The Comprehensive Perl Archive Network. Sur le CD-
ROM WalnutCreek, ISBN 1-57176-077-6, mai 1997 ;
+o L'exemple de programme CGI de Michael Schilli, dans le magazine
informatique iX d'aout 1997, pages 150-152, disponible par ftp.
33..33.. IInnssttaallllaattiioonn ddee ll''OOSS
Linux est installe a partir de la distribution Red Hat Linux 4.2. Pour
reussir a l'installer, la machine doit avoir un lecteur de CD-ROM
accessible a partir de MSDOS, un lecteur de CD-ROM bootable, ou bien
encore une disquette de boot preparee selon les instructions du CD
Linux.
Pendant l'installation, l'utilisateur peut selectionner et configurer
de nombreux paquetages logiciels. Il convient de selectionner les
suivants :
+o support du protocole TCP/IP
+o le serveur http Apache
+o le langage Perl
+o le systeme XWindow
+o les navigateurs Arena (graphique) et Lynx (mode texte).
Tous ces paquetages sont fournis avec la distribution Linux. Si vous
ne les installez pas maintenant, vous pourrez le faire plus tard en
utilisant glint, le gestionnaire graphique de paquetages logiciels.
Assurez-vous d'etre connecte comme utilisateur root lorsque vous les
installerez.
Il n'est pas du ressort de cet article de decrire l'installation
reseau, ni la procedure d'initialisation. Pour cela, consultez la
documentation en ligne (pages de manuel, HTML, texinfo) et imprimee
(Bible Linux, etc.).
La procedure d'installation de Red Hat est tres au point et necessite
peu d'interaction de la part de l'utilisateur, en dehors des choix
courants (les noms de machines, par exemple). Une fois l'installation
terminee, le systeme est pret a tourner.
L'installation de XWindow n'est pas obligatoire pour le serveur, mais
cela rend les acces locaux et les tests plus faciles. La procedure
d'installation de XWindow peut etre conduite par differents programmes
; XF86Setup offre le plus de facilite d'auto-test, et demande peu de
connaissance des menus details (la programmation de l'horloge video,
etc.). La seule contrainte est que le logiciel puisse detecter
l'adaptateur video. Des cartes graphiques acceleratrices bon marche
(comme les cartes basees sur le chip Trio S64, avant le S64UV+)
fonctionnent sans aucun probleme.
A partir de maintenant, nous supposons que le systeme tourne, et que
Apache, Perl et XWindow ont ete installes avec succes. Nous supposons
de meme que les fichiers et structure de repertoires sont tels que
definis dans l'installation. Enfin, nous laissons le nom de la machine
tel quel, et pour le moment, supposons que c'est localhost. Nous
utiliserons ce nom pour tous les tests d'installation ; des que le
systeme fonctionnera, le veritable nom pourra etre ajoute. Notez que
l'installation reseau suppose d'editer le fichier /etc/hosts, entre
autres. Cela peut etre pris en charge par les outils d'administration
fournis a l'utilisateur root.
33..44.. LLee sseerrvveeuurr HHTTTTPP
Le serveur HTTP fourni avec Linux est Apache, httpd pour le systeme.
La page de manuel (man httpd) explique comment installer et demarrer
le demon http (donc http_d) mais, comme il a ete indique plus haut, si
l'installation s'est bien passee, le serveur HTTP doit tourner.
Verifiez l'arborescence des repertoires : le repertoire /home/httpd
doit exister, avec trois sous-repertoires : ../cgi-bin/, ../html/ and
../icons/. Dans ../html/, vous devez trouver un fichier index.html.
Plus tard, nous modifierons ou remplacerons ce fichier par notre
propre index.html. Toute la configuration se fait dans le fichier
/etc/httpd/conf/. Le systeme est correctement preconfigure et ne doit
pas etre modifie, si l'installation s'est faite sans probleme.
33..55.. LLeess nnaavviiggaatteeuurrss
Il existe trois types de navigateurs disponibles sous Linux : les
logiciels purement textuels, comme Lynx, des logiciels simples et
experimentaux comme Arena (gratuit) et des logiciels commerciaux,
comme Netscape (partagiciel !) avec support de Java integre. Alors
que Lynx et Arena sont fournis avec Linux, Netscape doit etre recupere
par d'autres sources. Netscape est disponible sous forme de fichier
binaire precompile pour Linux sur architecture ix86 et tourne "tel
quel" une fois l'archive decompressee.
33..55..11.. CCoonnffiigguurraattiioonn ddee LLyynnxx
Une fois Lynx demarre, il cherche une 'URL par defaut' qui n'existe
pas toujours si le systeme n'a pas d'acces Internet permanent. Pour
changer cette URL par defaut (ainsi que d'autres details de
configuration), l'administrateur doit editer le fichier
/usr/lib/lynx.cfg. Ce fichier est gros, environ 57000 octets, et
contient des informations quelquefois contradictoires. Il etablit son
propre repertoire dans /usr/local/lib. Au debut du fichier figure une
ligne commencant par STARTFILE. Remplacez cette ligne par la suivante
: STARTFILE:
http://localhost, en vous assurant qu'il n'y a pas
d'espace en trop :
______________________________________________________________________
# STARTFILE:
http://www.nyu.edu/pages/wsn/subir/lynx.html
STARTFILE:
http://localhost
______________________________________________________________________
Apres avoir enregistre le fichier, Lynx doit maintenant ouvrir notre
index.html s'il est lance sans argument.
33..55..22.. CCoonnffiigguurraattiioonn dd''AArreennaa
S'il est lance sans argument, Arena recherche son URL par defaut.
Cette URL est codee en dur dans l'executable, mais peut etre redefinie
en utilisant la variable d'environnement WWW_HOME. L'administrateur
systeme peut placer la ligne suivante dans le fichier /etc/profile :
WWW_HOME="
http://localhost". Cette variable doit etre exportee, soit
par l'ajout de la ligne adequate (export WWW_HOME), soit en ajoutant
WWW_HOME a la ligne d'export courante :
______________________________________________________________________
WWW_HOME="
http://localhost"
export WWW_HOME
______________________________________________________________________
A la prochaine connexion, la nouvelle URL par defaut d'Arena sera
connue du systeme.
33..55..33.. IInnssttaallllaattiioonn eett CCoonnffiigguurraattiioonn ddee NNeettssccaappee
Netscape etait un produit commercial, et n'est donc pas inclus dans
les anciennes distributions Linux. Neanmoins, il est telechargeable
par Internet, ou accessible a partir de certaines compilations de
logiciels sur CD-ROM. Netscape est fourni sous la forme de fichiers
binaires precompiles pour les plates-formes les plus courantes. Avant
de l'installer, il est utile de creer le repertoire
/usr/local/Netscape, dans lequel l'archive sera decompactee. Tous les
fichiers doivent rester a cette place (sauf la bibliotheque Java :
suivez les instructions du fichier README fourni avec les binaires de
Netscape), et il suffira de creer un lien symbolique avec
/usr/local/bin par la commande :
# ln -s /usr/local/Netscape/netscape .
depuis le repertoire /usr/local/bin/.
Netscape est maintenant pret a etre utilise, et peut etre configure
par le menu "Options". Dans "General Preferences", il y a un onglet
intitule "Appearance", avec un champ de saisie "Home Page Location".
Tapez
http://localhost, et n'oubliez pas de sauvegarder les options
(par le menu "Options" -- "Save Options") avant de quitter Netscape.
Au prochain demarrage, Netscape presentera la page d'accueil d'Apache.
33..66.. LLeess nnaavviiggaatteeuurrss aavveecc AAppaacchhee
Faites maintenant le premier test d'Apache avec un navigateur : lancez
simplement l'un des navigateurs disponibles, et il affichera la page
d'accueil Apache : Red Hat Linux Web Server. Cette page indique la
localisation des fichiers et d'autres informations concernant
l'installation du serveur http. Si cette page ne s'affiche pas,
verifiez que les fichiers cites plus haut sont bien en place et que la
configuration du navigateur est correcte. Fermez les fichiers de
configuration avant de demarrer de nouveau le navigateur. Si tous les
fichiers sont installes et que le navigateur semble correctement
configure, examinez la configuration du reseau. Ou bien le nom de
votre machine est different de celui specifie lors de la
configuration, ou bien la configuration reseau n'est pas correcte. Il
est particulierement important que /etc/hosts contienne au moins la
ligne suivante :
______________________________________________________________________
127.0.0.1 localhost localhost.localdomain
______________________________________________________________________
qui suppose que vous pouvez vous connecter localement. Vous pouvez le
verifier en lancant une commande reseau qui reclame un nom de machine
comme argument, comme telnet localhost (en supposant que telnet soit
installe). Si cela ne fonctionne pas, la configuration reseau doit
etre controlee avant de continuer l'intallation.
33..77.. LLaa BBaassee ddee ddoonnnneeeess eett ssoonn iinnssttaallllaattiioonn
L'installation de la base de donnees demande a peine plus de
preparation que les etapes precedentes. Il y a quelques moteurs de
base de donnees SQL disponibles, avec des contraintes d'administration
et d'execution differentes ; l'un des plus simples est msql, dit aussi
"Mini-SQL", ecrit par David Hughes. Msql est un "partagiciel". En
fonction de la version utilisee, les sites commerciaux sont redevables
de 250 US$, voire plus, les utilisateurs prives d'au moins 65 US$, et
seules les institutions scolaires et les entreprises a but non
lucratif peuvent utiliser ce logiciel librement. Les termes exacts des
droits figurent dans la documentation de la base de donnees. Les
elements donnees ici ne sont qu'indicatifs.
Tout d'abord, voici en quelques mots pourquoi l'auteur a choisi msql.
Il y a tout d'abord une experience personnelle. Alors qu'il cherchait
une base de donnees, l'auteur a trouve que msql etait la plus facile a
installer et a maintenir, et qu'elle couvrait un ensemble suffisamment
large du langage SQL pour convenir a une utilisation classique. C'est
seulement en ecrivant ces lignes que l'auteur a decouvert cette eloge
dans la DBI FAQ d'Alligator Descartes (la FAQ interface perl aux bases
de donnees) :
Du point de vue de l'auteur, si le volume de donnees est relativement
faible, les tables contenant moins d'1 million de lignes, avec moins
de 1000 tables dans une base donnee, alors msql constitue une solution
parfaitement acceptable. Cette base de donnees est tres bon marche,
extraordinairement solide, et offre un excellent support, ...
Mqsl est disponible en deux versions, msql-1.0.16 et msql-2.0.1, qui
different par leurs performances (cela n'est sensible que sur des
petits projets) et les logiciels les accompagnant (la version la plus
recente dispose de plus d'outils, de son propre langage de script,
etc.). Nous decrirons les deux versions de msql, car leurs
installations se distinguent par quelques aspects.
33..77..11.. IInnssttaallllaattiioonn ddee mmssqqll--11..00..1166
Msql est disponible sous forme de sources et de binaires precompiles
au format ELF. L'utilisation des binaires ELF rend l'installation plus
simple, car l'archive msql-1.0.16.ELF.tgz contient une copie de
l'arborescence d'installation, pour que les repertoires soient generes
correctement lors du decompactage dans le repertoire /.
Si vous decidez de compiler msql-1.0.16 vous-meme, et que vous voulez
utiliser le paquetage MsqlPerl plutot que l'interface DBI (voir plus
loin une presentation detaillee des difference entre les deux
strategies), alors attendez-vous a ce que MsqlPerl rapporte, lors des
tests d'installation, des erreurs dans msql. Dans ce cas, une
correction sera necessaire, expliquee dans la documentation MsqlPerl
(fichier patch.lost.tables). En l'occurrence, il faut inclure les
trois lignes suivantes dans msqldb.c, apres la ligne 1400, contenant
entry->def = NULL; :
*(entry->DB) = 0;
*entry->table) = 0;
entry->age = 0;
Cette partie de code doit maintenant etre la suivante :
______________________________________________________________________
freeTableDef(entry->def);
safeFree(entry->rowBuf);
safeFree(entry->keyBuf);
entry->def = NULL;
*(entry->DB) = 0;
*entry->table) = 0;
entry->age = 0;
______________________________________________________________________
La compilation de msql comprend plusieurs etapes. Apres avoir
decompacte l'archive contenant les sources, il faut creer un
repertoire destination. Cela se fait avec la commande suivante :
# make target
Si tout se passe bien, le systeme repond avec
Build of target directory for Linux-2.0.30-i486 complete
Vous pouvez maintenant aller dans le repertoire que vous venez de
creer, et taper d'abord la commande
# ./setup
La sequence ./ est necessaire pour s'assurer que la commande setup
executee est bien celle du repertoire courant, et non une autre qui
aurait le meme nom. On va maintenant vous poser quelques questions
concernant le repertoire source, et la localisation du repertoire
d'installation. Une fois que ces questions ont eu leur reponse, le
systeme lance quelques tests pour verifier que les logiciels
necessaires (compilateurs, utilitaires divers, etc.) sont presents,
puis finalement repond
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
Il faut alors taper
# make all
Si tout fonctionne comme prevu, nous devons alors lire :
make2 : leaving directory '/usr/local/Minerva/src/msql' <-- msql done
Make of mSQL complete. You should now install 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.
make1 : Leaving directory '/usr/local/Minerva/src'
Tous les binaires doivent etre accessibles, par exemple en creant des
liens symboliques dans /usr/local/bin/. Deplacez-vous dans ce
repertoire et tapez la commande
# ln -s /usr/local/Minerva/bin/* .
apres quoi les liens sont correctement construits.
33..77..22.. TTeesstt ddee mmssqqll--11
Apres l'installation, il est maintenant possible de tester le
fonctionnement de la base de donnees. Avant toutes choses, le serveur
doit etre demarre. L'administrateur systeme, grace aux privileges du
compte utilisateur root, lance la commande
# msqld &
(n'oubliez pas d'ajouter le &, sinon msql ne tournerait pas en tache
de fond.), apres quoi le message suivant doit apparaitre :
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
Ce message indique que tout fonctionne correctement, a part la
configuration des droits d'acces. Pour le moment, il suffit de
demarrer le serveur msql a partir d'un shell, mais vous pourrez par la
suite vouloir le demarrer automatiquement au lancement du systeme.
Cette commande doit alors etre ajoutee dans un des scripts du
repertoire rc.d. Seul l'administrateur systeme peut lancer la premiere
commande typique d'une base de donnees (creation de la premiere table)
:
# msqladmimn create inventur
msql repond alors Database "inventur" created. Comme preuve supplemen-
taire, vous pouvez constater que le repertoire /usr/local/Min-
erva/msqldb/ contient maintenant le repertoire ../inventur, vide pour
l'intant. Vous pouvez manipuler la nouvelle base avec les outils
d'administration, qui sont decrits en detail dans la documentation
msql.
33..77..33.. IInnssttaallllaattiioonn ddee mmssqqll--22..00..11
Une nouvelle version, plus puissante, du serveur mSQL d'Hugues est
maintenant disponible. Son installation est un peu differente.
Installer msql-2 de zero necessite les etapes suivantes. Copiez
l'archive a l'endroit ou vous souhaitez l'installer, par exemple
/usr/local/msql-2/, puis decompressez-la :
# tar xfvz msql-2.0.1.tar.gz
Positionnez vous a la racine de l'arborescence d'installation et tapez
# make target
Placez vous dans le repertoire targets et verifiez le type de votre
machine. Il devrait y avoir un nouveau sous-repertoire Linux-_(_v_o_t_r_e
_v_e_r_s_i_o_n_)_-_v_o_t_r_e _c_p_u_). Allez dans ce repertoire et lancez l'utilitaire
de configuration qui s'y trouve :
# ./setup
Il y a aussi un fichier site.mm qui peut etre edite. Peut-etre avez-
vous deja utilise le repertoire /usr/local/Minerva/ et souhaitez-vous
le conserver intact ? Dans ce cas, changez la ligne INST_DIR=... pour
indiquer le repertoire destination qui vous convient. Sinon, ne
changez rien.
Maintenant, vous pouvez contruire la base de donnees :
# make
# make install
Si tout marche bien, vous verrez ce message :
[...]
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.
*********
Une fois que tout est installe correctement, vous devez vous
preoccuper de certains details d'administration. C'est ici que les
differences avec msql-1 commencent. D'abord, un utilisateur msql est
cree, et est responsable de l'administration de la base de donnees.
# adduser msql
Maintenant, vous devez changer les proprietaire et groupe de tous les
fichiers dans le repertoire de mSQL en tapant :
# cd /usr/local/Minerva
# chown -R msql:msql *
Enfin, vous pouvez creer les liens symboliques pour tous les
executables de la base de donnees dans /usr/local/bin/ en lancant la
commande :
# ln -s /usr/local/Minerva/bin/* .
33..77..44.. TTeesstt ddee mmssqqll--22
Demarrez maintenant le serveur de la base en tapant la commande msql2d
&, vous devriez obtenir cette reponse :
Mini SQL Version 2.0.1
Copyright (c) 1993-4 David J. Hugues
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.
Tout est parfait. La base est compilee et installee, et nous pouvons
maintenant continuer avec les modules perl puisqu'ils demandent la
presence d'un serveur de base de donnees operationnel pour les tests.
Au fait, ce moment est bien choisi pour imprimer la documentation
complete livree avec msql-2.0.1 :
# gzip -d manual.ps
# lpr manual.ps
Nous pouvons maintenant poursuivre la mise en place des interfaces,
mais il est judicieux de laisser le nouveau serveur SQL tourner: cela
ne fera que faciliter les tests des bibliotheques d'interface.
33..88.. LLeess ddiiffffeerreenntteess IInntteerrffaacceess :: DDBBII//mmSSQQLL,, MMssqqllPPeerrll,, eett LLiittee
Une phrase frequemment citee dans le Camel Book (la documentation de
reference de perl) affirme qu'il y a toujours plusieurs manieres
d'obtenir un resultat avec perl. Helas, cela est vrai aussi avec notre
application. Il y a trois methodes pour acceder a une base de donnees
msql par l'intermediaire de CGI. Tout d'abord, la question est de
savoir s'il faut ou non utiliser perl. Dans le premier cas (suppose
dans ce document), il y a encore le choix entre deux types
completement differents d'interface. Si nous n'employons pas perl, il
reste la solution d'employer le langage de script propre a msql,
appele Lite, qui est relativement proche du langage C, en plus simple.
33..88..11.. DDBBII eett DDBBDD--mmSSQQLL
Au moment de la redaction de ce document, c'est l'utilisation de
l'interface generique de base de donnees appelee DBI qui est preferee.
DBI a quelques avantages. Elle fournit un controle d'acces standard a
de nombreuses base de donnees commerciales, et ce avec le meme
ensemble de commandes. La base de donnees en fonctionnement sur un
systeme donne est alors interrogee par une interface qui masque
efficacement les caracteristiques specifiques de cette base au
programmeur. Ainsi, DBI fournit une passerelle pratique pour
travailler avec differentes bases de differents auteurs. Avec un seul
script, il est possible de communiquer avec plusieurs bases de donnees
differentes. Le lecteur interesse peut consulter la DBI-FAQ pour plus
de details. Il y a cependant un inconvenient : l'interface DBI est en
cours de developpement et aligne les versions a une allure galopante
(quelques fois avec plusieurs mises a jour par mois). De meme, les
pilotes de bases de donnees sont frequemment mis a jour, et peuvent
etre bases sur des versions specifiques de l'interface de base de
donnees. Les utilisateurs faisant une premiere installation doivent se
limiter aux numeros de version donnes dans ce document, car d'autres
versions peuvent poser des problemes de compilation et de test, dont
la resolution n'est pas une affaire de neophyte.
33..88..22.. MMssqqllPPeerrll
MsqlPerl est une bibliotheque permettant l'acces direct a msql a
partir de programmes ecrits en perl. Elle n'utilise pas l'interface
DBI et est tres compacte. Bien qu'elle fonctionne tres bien avec les
deux versions de msql, son usage n'est pas conseille par rapport a
l'interface DBI, qui tend a se generaliser. Neanmoins, suivant le
systeme, c'est une alternative interessante, car la bibliotheque est
petite et facile a installer. Notamment, il y a moins de dependance
par rapport aux numeros de version que celles constatees entre DBI et
les pilotes de base de donnees.
33..88..33.. LLee llaannggaaggee ddee ccoommmmaannddee pprroopprree ddee mmssqqll :: LLiittee
Enfin, msql-2 fournit son propre langage de commande : Lite. Ce
langage est proche du C, assaini et complete avec quelques
fonctionnalites du type 'shell' (d'une certaine maniere, c'est une
version specialisee de perl). Lite est un langage simple et bien
documente dans le manuel msql-2. Le paquetage msql-2 livre aussi en
exemple un application utilisant Lite.
Nous ne decrirons pas ici Lite, car il est trop specifique de msql-2
(et deja documente !), et parce que le lecteur est cense avoir un
certain interet pour perl, et en avoir de bonnes notions. Neanmoins,
il est recommande d'y jeter un coup d'oeil : il peut s'averer la
solution ideale dans un environnement ne mettant en oeuvre que msql-2
(en supposant donc qu'aucune autre base n'est utilisee), grace a sa
simplicite.
33..99.. LLaa ssoolluuttiioonn ssttaannddaarrdd :: DDBBII eett DDBBDD--mmssqqll
Nous supposons que perl a ete installe pendant la configuration du
systeme, ou en utilisant le gestionnaire de paquetage mentionne plus
haut. Aucun detail supplementaire ne sera donne ici. Neanmoins, nous
allons d'abord tester si notre version de perl est recente :
# perl -v
perl doit repondre avec le message suivant :
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
[...]
Jusque la, tout va bien. L'etape suivante consiste a installer les
bibliotheques generales perl pour les bases de donnees (DBI), le
pilote msql (DBD-mSQL) et CGI. Le pilote CGI est necessaire dans tous
les cas. Les archives suivantes sont utilisees :
1. DBI-0.8.1.tar.gz
2. DBD-mSQL-0.65.tar.gz
3. CGI.pm-2.31.tar.gz (ou plus recent>
Une precision est necessaire ici pour les debutants : le test decrit
ici fonctionne tres bien a condition d'utiliser _e_x_a_c_t_e_m_e_n_t les
versions recommandees de logiciels ; des combinaisons d'autres
versions peuvent echouer a un moment ou a un autre. Le deboguage de
combinaisons de versions incompatibles est une affaire de specialistes
des interfaces d'appel. Quelquefois, seule une methode change de nom
alors qu'elle fait la meme chose, mais d'autres fois, les structures
internes changent de maniere significative. Donc, encore une fois,
tenez-vous en aux numeros indiques de versions si vous ne voulez pas
de probleme, et ce meme si vous constatez que les versions ont encore
change dans l'intervalle. Il est normal de voir les versions evoluer
rapidement, et vous devez vous attendre a des problemes en installant
d'autres versions que celles conseillees ici.
Il est tres important que le pilote de base pour mSQL (DBD-mSQL) soit
installe _a_p_r_e_s l'interface generique DBI.
Nous commencons par creer le repertoire _/_u_s_r_/_l_o_c_a_l_/_P_e_r_l_M_o_d_u_l_e_s car il
est important de conserver l'arborescence initiale de perl intacte.
Nous pourrions aussi choisir un autre nom de repertoire ; cela n'a
strictement aucune importance, malheureusement aucune recommandation
n'est faite dans les fichiers README des differents modules perl. Une
fois recopiees les archives precedemment citees dans
/usr/local/PerlModules, nous les decompactons en tapant
# tar zxvf [archive-file]
pour chacune des trois archives. N'oubliez pas d'indiquer le vrai nom
de l'archive a la commande tar. Le processus d'installation de ces
trois archives est tres standard ; seuls les messages de sortie
concernant les etapes les plus importantes sont reproduits ici.
33..99..11.. IInnssttaallllaattiioonn ddee ll''iinntteerrffaaccee ppeerrll ddee bbaassee ddee ddoonnnneeeess DDBBII
L'interface de la base de donnees doit avoir ete installee avant le
pilote specifique a la base. Le decompactage de l'archive DBI cree le
repertoire /usr/local/PerlModules/DBI-0.81/. Placez-vous dans ce
repertoire. Il y a un fichier README (que vous devriez lire) et un
makefile specifique pour perl. Maintenant, tapez la commande
# perl Makefile.PL
Le systeme doit repondre avec un long message dont la partie la plus
importante figure ci-dessous :
[...]
MakeMake (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 distneck 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 subdirectories.
Writing Makefile for DBI
Comme le programme l'indique, tout va bien, et nous pouvons poursuivre
avec l'etape suivante :
# make
Si aucun message d'erreur n'apparait (les traces detaillees affichees
sur l'ecran _n_e sont _p_a_s un message d'erreur), nous pouvons tester la
librairie nouvellement installee avec la commande
# make test
Sur l'affichage, guettez les lignes suivantes (vous pouvez toujours
revenir en arriere avec la touche [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 seconds ( 0.00 usr 0.00 sys = 0.00 cpu)
test.pl done
La derniere etape est l'installation de tous les fichiers dans leurs
repertoires respectifs. La commande suivante s'en occupe :
# make install
Il n'y a plus rien a faire. Si pour quelque raison que se soit,
l'installation echoue et que vous vouliez la recommencer, n'oubliez
pas de taper d'abord la commande
# make realclean
Cela supprimera toutes les traces laissees par la precedente
installation. Vous pouvez aussi supprimer les fichiers installes en
copiant le contenu de l'ecran (montre ici abrege)
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.po
dans un fichier, en remplacant Installing par rm. Si vous avez appelle
ce fichier uninstall vous pouvez alors taper
# . uninstall
ce qui effacera les derniers fichiers installes.
33..99..22.. LLee ppiilloottee mmssqqll ddee ppeerrll :: DDBBDD--mmSSQQLL
Le pilote msql pourra etre installe seulement _a_p_r_e_sl'installation
reussie de l'interface perl generique de base de donnees.
Les etapes de l'installation sont pratiquement les memes que les
precedentes, donc commencez par taper
# perl Makefile.PL
La, le systeme doit repondre avec un avertissement vous demandant de
lire la documentation accompagnant le logiciel. Ensuite, il va
detecter ou se trouve msql, et vous demande quelle version vous
utilisez :
$MSQL_HOME not defined. Searching for mSQL...
Using mSQL in /usr/local/Hughes
-> Which version of mSQL are you using [1/2]?
Entrez la version correcte. Quelques lignes de texte suivent. Guettez
les suivantes :
Splendid! Your mSQL daemon is running. We can auto-detect your configuration.
I've auto-detected your configuration to be running on port: 1114
Vous pouvez maintenant tester le pilote en tapant
# make test
Encore une fois, plusieurs lignes sont affichees. Si elles se
terminent par
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! ***
tout va bien, et vous pouvez lancer l'installation du pilote en tapant
# make install
Vous etes pret a continuer et pouvez sauter le paragraphe suivant.
33..1100.. LL''iinntteerrffaaccee MMssqqllPPeerrll
Si vous decidez d'utiliser l'interface globale MsqlPerl, aucun pilote
particulier n'est necessaire ; seule l'archive MsqlPerl-1.15.tar.gz
est utilisee, puisque, comme cela a deja ete dit, MsqlPerl fournit une
interface directe entre perl et le serveur de base de donnees, sans
utiliser l'interface DBI. L'installation et le test sont tres faciles.
Apres avoir tape perl Makefile.PL, l'utilitaire make peut etre active.
Vous devez d'abord indiquer ou se trouve mSQL. S'il est dans
/usr/local/Minerva/, la reponse par defaut peut etre validee.
Ensuite, tapez make test. Avant cela, vous devez vous assurer qu'il y
a bien une base nommee test et que vous avez les droits d'ecriture et
lecture dessus. Cela peut etre fait avec
# msqladmin create test
33..1111.. BBiibblliiootthheeqquuee CCGGII ddee ppeerrll
L'installation de l'interface CGI de perl est la plus simple des trois
etapes. Lancez les commandes dans l'ordre donne, et voila :
# perl Makefile.PL
# make
# make install
Contrairement aux autres pilotes, cette interface n'a pas d'option de
test (# make test), alors que les autres modules _d_o_i_v_e_n_t etre testes
dans tous les cas.
Un sous-repertoire avec les exemples CGI est cree. Vous pouvez en
copier le contenu vers /home/httpd/cgi-bin/ et utiliser un navigateur
pour jouer avec les scripts.
33..1122.. CChheecckk--lliisstt ddee ll''iinnssttaallllaattiioonn
Nous avons effectue les etapes suivantes, dans cet ordre:
1. Installation de Linux avec support reseau
2. Installation d'un serveur http, par exemple Apache
3. Installation d'un navigateur, par exemple Arena, Lynx ou Netscape
4. Installation d'un serveur SQL, par exemple msql
5. Installation d'une interface perl SQL convenable
6. Installation des fichiers CGI
A la fin, vous devez faire un peu de menage. Toutes les arborescences
des sources msql et les modules perl peuvent etre detruites sans
inconvenient (cependant, vous ne devriez pas detruire les fichiers
archives !) puisque les binaires et la documentation sont maintenant
dans des repertoires differents.
44.. UUnn eexxeemmppllee ddee BBaassee ddee DDoonnnneeeess
Apres avoir termine la procedure d'installation, nous pouvons
maintenant lancer l'application donnee en exemple. En fonction de la
version de msql installee et de l'interface perl utilisee, nous
devrons modifier un peu ce programme.
Tout d'abord, le fichier index.html, dans le repertoire
/home/httpd/html/ doit etre modifie pour appeler l'application
exemple. Nous pouvons mettre notre base (que nous pouvons appeler
database.cgi ou inventur.cgi) dans /home/httpd/html/test.
Nous ajoutons une ligne parmi les suivantes dans index.html (a
choisir, bien sur, en fonction des choix d'installation) :
______________________________________________________________________
<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>
______________________________________________________________________
Vous ne devez en principe choisir qu'une seule des deux lignes
precedentes, mais vous pouvez, si vous avez installe les deux types
d'interface, laisser les deux lignes telles quelles. Vous pourrez
alors comparer les performances.
44..11.. AAddaappttaattiioonn ddee ll''eexxeemmppllee ddee ssccrriipptt ppoouurr MMssqqllPPeerrll
Il est necessaire d'indiquer, dans notre exemple de script, qu'il faut
utiliser l'interface MsqlPerl. La modification doit etre faite a
plusieurs endroits. D'abord, au debut du fichier, il faut changer la
clause use :
# use DBI; # Generisches Datebank-Interface
use Msql;
Ensuite, a la ligne 27, MsqlPerl n'exige pas la mention d'un pilote
particulier :
# $dbh = DBI->connect($host, $database, '', $driver) ||
$dbh = Msql->connect($host, $database) ||
A partir de la ligne 33 et pour tout le script, changez toutes les
occurrences de do par query :
# $dbh->do("SELECT * FROM hw") || db_init($dbh);
$dbh->query("SELECT * FROM hw") || db_init($dbh);
Enfin, dans le laius MsqlPerl, la ligne 207 peut etre mise en
commentaire :
# $sth->execute || msg("SQL Error: $sth->errstr);
De plus, il peut etre necessaire de remplacer tout les appels errstr
tels que celui de la ligne precedente par errmsg. Cela depend de la
version utilisee.
Apres ces modifications, le script doit tourner correctement.
44..22.. AAddaappttaattiioonn ddee ll''eexxeemmppllee ppoouurr mmssqqll--22
La syntaxe SQL a subi des changements durant le developpement de
msql-2. Le script original n'executera pas les instructions
d'initialisation de la table, aux lignes 45 -- 48. Le modificateur
primary key n'est plus compris par msql-2, et doit etre supprime :
$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
Malheureusement, ce script particulier acceptera maintenant les
enregistrements avec des numeros personnels identiques ; le
modificateur msql-1 primary key etait justement la pour eviter cela.
La documentation msql2 indique comment utiliser la clause CREATE INDEX
pour creer des entrees uniques.
55.. CCoonncclluussiioonn
Si vous avez installe msql-2 sur votre systeme, vous pouvez regarder
les exemples de programmes ecrits avec Lite, le langage de script de
msql-2.
Chaque version de msql est livree avec un minimum d'outils
d'administration, qui permettent a l'utilisateur de creer et detruire
des tables (msqladmin) et d'examiner la structure de la base de
donnees (relshow).
Msql deuxieme generation (c'est-a-dire msql-2) possede quelques
utilitaires de plus : msqlimport et msqlexport. Ils permettent
d'inserer et d'extraire des donnees de la base SQL, a partir de et
vers des fichiers. Ces utilitaires peuvent etre utilises pour, _e_n _u_n_e
_s_e_u_l_e _p_a_s_s_e, charger ou extraire de grandes quantites de donnees, et
cela sans que l'utilisateur ait a se soucier d'ecrire _u_n_e _s_e_u_l_e ligne
de perl, de SQL, ni meme de n'importe quoi.
Si vous voulez ecrire votre propre script perl de gestion de base de
donnees, vous trouverez suffisamment d'aide dans les fichiers
d'exemples, et dans la volumineuse documentation en ligne qui est
livree avec le module DBI.
Dans tous les cas, vous etes maintenant prets a publier vos donnees
sur votre reseau, et meme sur le Web.