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.