
               Serveur Web de Base de Donnes mSQL / perl HOWTO

par Oliver Corff,
version franaise Nicolas Caillaud

   v0.1, 17 September 1997
     _________________________________________________________________

   _Ce Mini HOWTO, trs largement inspir de l'article de Michael Schilli
   Gebunkert : Datenbankbedienung mit Perl und CGI, publi dans le
   magazine informatique allemand iX du mois d'aout 1997, explique
   comment construire une base de donnes client/server SQL sur le Web,
   utilisant HTML pour l'interface utilisateur._
     _________________________________________________________________

1. A propos de ce Document

1.1 Lecteurs concerns

   Ce document devrait tre utile  ceux qui veulent mettre en place un
   serveur de base de donnes sur le Web, mais qui ne savent pas quels
   logiciels sont ncessaires, ni comment les installer. Il fournit
   toutes les informations utiles pour faire fonctionner une base de
   donnes SQL sur un serveur Web ; il _ne_ rentre _pas_ dans les dtails
   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 tudier la programmation CGI et le langage SQL.

   Pour faire tourner un systme SQL sur une petite chelle (et non pas
   l'exemple classique du systme de rservation d'une importante
   compagnie arienne, ou le systme de gestion de base de donnes d'une
   mission spatiale), il suffit d'avoir les logiciels dcrits dans ce
   document, et la documentation les accompagnant. Le manuel utilisateur
   de msql (la base de donnes dcrite ici) fournit suffisamment
   d'informations sur SQL pour vous permettre de construire votre propre
   base.

   Le lecteur doit savoir comment rcuprer des fichiers par ftp s'il n'a
   pas les CD-ROM adquats, et comment construire des excutables 
   partir des fichiers sources. En tout tat de cause, toutes les tapes
   dcrites dans ce document ont t testes sur un systme rel, et
   devraient fonctionner sur le systme du lecteur.

1.2 Conventions typographiques

   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;
     _________________________________________________________________

2. Introduction

   On peut raisonnablement supposer que des bases de donnes contenant de
   gros volumes de donnes, ou un schma relationnel compliqu (comme,
   par exemple, une base lexicale pour un langage parl), doivent tre
   accessibles  beaucoup d'utilisateurs  la fois. De mme, il doit tre
   possible d'utiliser diverses plates-formes matrielles et logicielles
   existantes pour construire le systme final. Pour rduire les cots de
   mise en oeuvre, une seule partie du systme a rellement besoin de
   puissance : le serveur de la base de donnes ; les stations
   utilisateurs doivent seulement afficher des donnes et accepter des
   commandes utilisateurs, mais le traitement proprement dit est fait sur
   une seule machine, justifiant ainsi le terme "base de donnes client -
   serveur". De plus, l'interface utilisateur doit tre facile 
   configurer, et requrir le moins de traitement possible sur le client.

   Les lments suivants (protocoles, logiciels et plus gnralement
   concepts) sont utiliss pour construire un systme conforme  ces
   critres :

   _Linux_
          est le systme d'exploitation. Il s'agit d'une implmentation
          stable d'Unix, multi-utilisateurs, multi-tches, avec support
          rseau complet (TCP/IP entre autres). A part le cot du support
          et de la transmission, il est gratuit et livr sous forme de
          distributions, qui incluent gnralement l'indispensable, du
          Systme d'Exploitation lui-mme au traitement de texte, outils
          de dveloppement logiciel, langage de script, gnrateurs
          d'interfaces, etc.

   _HTML_
          Le langage HTML (HyperText Markup Language) est utilis pour
          construire des interfaces de systmes rseaux comme des
          Intranets, des serveurs Web (WWW). HTML est extrmement simple
          et peut tre gnr  partir de n'importe quel diteur de texte
          ASCII.

   _Navigateurs_
          Les navigateurs sont des applications en mode texte (par
          exemple Lynx) ou en mode graphique (par exemple Mosaic,
          Netscape, Arena, etc.) destines  la lecture et  l'affichage
          de documents HTML. C'est le seul logiciel directement manipul
          par l'utilisateur de la base de donnes. Grce aux navigateurs,
          on peut afficher diffrents types de donnes (texte ou images),
          et communiquer avec des serveurs HTTP (voir plus loin),
          hbergs par  peu prs n'importe quel modle d'ordinateur sur
          lequel un navigateur est disponible.

   _Serveurs HTTP_
          Un serveur HTTP fournit l'accs  une zone de l'ordinateur
          contenant les donnes publiques d'un rseau. Il supporte le
          protocole HTTP et fournit l'information demande par
          l'utilisateur.

   _SQL_
          SQL (Structured Query Language) est un langage de manipulation
          de donnes dans une base relationnelle. Sa grammaire est trs
          simple et constitue un standard largement support dans
          l'industrie. Les bases de donnes SQL sont au coeur mme du
          concept classique de base de donnes Client - Serveur. Des
          systmes SQL reconnus existent, comme Oracle, Informix, etc. ;
          on trouve aussi des bases comme msql, mysql, postgresql,
          pratiquement gratuites lorsqu'elles sont utilises dans un
          cadre scolaire ou universitaire.

   _CGI_
          CGI (Common Gateway Interface) est l'interface de programmation
          entre le systme supportant les donnes (dans notre cas, le
          systme SQL) et le protocole rseau (HTML, bien sr). Les
          interfaces CGI peuvent tre construites en utilisant beaucoup
          de langages de programmation, dont l'un des plus populaires est
          perl.

   _Perl_
          Perl est un langage de script particulirement puissant, qui
          combine les avantages du C, des diffrents shells, et des
          langages de manipulations de flux comme awk ou sed. Par
          exemple, perl possde de nombreux modules de manipulation de
          base de donnes SQL.

3. Procdure d'installation

3.1 Matriel requis

   Aucune supposition ne peut tre faite sur les besoins en matriel d'un
   serveur de base de donnes. Cela dpend trop du nombre d'utilisateurs,
   du type d'application, de la charge du rseau, etc. Dans un
   environnement comprenant peu d'utilisateurs et un trafic rseau
   faible, un 486 ou quivalent, avec 16 MO de mmoire vive, peut tre
   suffisant. Linux, le systme d'exploitation, est trs efficace en
   termes de ressources, et peut fournir suffisamment de puissance pour
   faire tourner un grand nombre d'applications en mme temps. Bien sr,
   un processeur plus puissant et plus de mmoire vive signifient plus de
   puissance, mais la quantit de mmoire vive est plus importante que le
   processeur. Plus le systme a de mmoire vive, moins il est oblig, en
   cas de besoin, de swapper les processus les plus gourmands en mmoire
   sur le disque.

   Avec un systme quip de 32 MO de mmoire vive et d'un bus PCI, les
   recherches et oprations de tri peuvent tre faites sans avoir recours
   au(x) fichier(s) d'change (swap), donnant d'excellents rsultats.

   L'installation dcrite dans cet article a t faite sur un IBM 686 
   133MHz, avec 32 MO de mmoire vive et un disque dur IDE de 1.2 GO. La
   suite du document prsente les tapes indispensables  une
   installation complte.

3.2 Logiciel

   Les logiciels dcrits dans cet article sont disponibles sur Internet,
   ou sur CD-ROM. Les produits suivants sont utiliss :

     * Distribution Red Hat 4.2, parue pendant l't 1997, disponible sur
       CD-ROM (Red Hat Linux PowerTools : 6 CD-ROM complets et prts 
       tre utiliss) ou sur Internet, sur le site de RedHat ;
     * Base de donnes SQL msql : disponible en deux versions. Les
       diffrences entre ces deux versions rsident dans le nombre
       maximum de transactions support, l'interface d'administration,
       etc. La version la plus ancienne, 1.0.16, est disponible sur les
       sites miroirs de Sunsite. L'excutable au format ELF peut tre
       trouv sur Sunsite, ou sur CD-ROM (en l'occurrence le disque 4 de
       l'InfoMagic Linux Developper's Resource, ensemble de 6 CD-ROM,
       dcembre 1996), ou chez InfoMagic. La version la plus rcente,
       2.0.1, peut tre obtenue directement de la page Web d' Hughes, en
       Australie, ou sur de nombreux sites miroirs dans le monde ;
     * Perl du CPAM : The Comprehensive Perl Archive Network. Sur le
       CD-ROM WalnutCreek, ISBN 1-57176-077-6, mai 1997 ;
     * L'exemple de programme CGI de Michael Schilli, dans le magazine
       informatique iX d'aot 1997, pages 150-152, disponible par ftp.

3.3 Installation de l'OS

   Linux est install  partir de la distribution Red Hat Linux 4.2. Pour
   russir  l'installer, la machine doit avoir un lecteur de CD-ROM
   accessible  partir de MSDOS, un lecteur de CD-ROM bootable, ou bien
   encore une disquette de boot prpare selon les instructions du CD
   Linux.

   Pendant l'installation, l'utilisateur peut slectionner et configurer
   de nombreux paquetages logiciels. Il convient de slectionner les
   suivants :

     * support du protocole TCP/IP
     * le serveur http Apache
     * le langage Perl
     * le systme XWindow
     * 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'tre connect comme utilisateur root lorsque vous les
   installerez.

   Il n'est pas du ressort de cet article de dcrire l'installation
   rseau, ni la procdure d'initialisation. Pour cela, consultez la
   documentation en ligne (pages de manuel, HTML, texinfo) et imprime
   (Bible Linux, etc.).

   La procdure d'installation de Red Hat est trs au point et ncessite
   peu d'interaction de la part de l'utilisateur, en dehors des choix
   courants (les noms de machines, par exemple). Une fois l'installation
   termine, le systme est prt  tourner.

   L'installation de XWindow n'est pas obligatoire pour le serveur, mais
   cela rend les accs locaux et les tests plus faciles. La procdure
   d'installation de XWindow peut tre conduite par diffrents programmes
   ; XF86Setup offre le plus de facilit d'auto-test, et demande peu de
   connaissance des menus dtails (la programmation de l'horloge vido,
   etc.). La seule contrainte est que le logiciel puisse dtecter
   l'adaptateur vido. Des cartes graphiques acclratrices bon march
   (comme les cartes bases sur le chip Trio S64, avant le S64UV+)
   fonctionnent sans aucun problme.

   A partir de maintenant, nous supposons que le systme tourne, et que
   Apache, Perl et XWindow ont t installs avec succs. Nous supposons
   de mme que les fichiers et structure de rpertoires sont tels que
   dfinis 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 ; ds que le
   systme fonctionnera, le vritable nom pourra tre ajout. Notez que
   l'installation rseau suppose d'diter le fichier /etc/hosts, entre
   autres. Cela peut tre pris en charge par les outils d'administration
   fournis  l'utilisateur root.

3.4 Le serveur HTTP

   Le serveur HTTP fourni avec Linux est Apache, httpd pour le systme.
   La page de manuel (man httpd) explique comment installer et dmarrer
   le dmon http (donc http_d_) mais, comme il a t indiqu plus haut,
   si l'installation s'est bien passe, le serveur HTTP doit tourner.
   Vrifiez l'arborescence des rpertoires : le rpertoire /home/httpd
   doit exister, avec trois sous-rpertoires : ../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 systme est correctement prconfigur et ne doit
   pas tre modifi, si l'installation s'est faite sans problme.

3.5 Les navigateurs

   Il existe trois types de navigateurs disponibles sous Linux : les
   logiciels purement textuels, comme Lynx, des logiciels simples et
   exprimentaux comme Arena (gratuit) et des logiciels commerciaux,
   comme Netscape (partagiciel !) avec support de Java intgr. Alors que
   Lynx et Arena sont fournis avec Linux, Netscape doit tre rcupr par
   d'autres sources. Netscape est disponible sous forme de fichier
   binaire prcompil pour Linux sur architecture ix86 et tourne "tel
   quel" une fois l'archive dcompresse.

  Configuration de Lynx

   Une fois Lynx dmarr, il cherche une 'URL par dfaut' qui n'existe
   pas toujours si le systme n'a pas d'accs Internet permanent. Pour
   changer cette URL par dfaut (ainsi que d'autres dtails de
   configuration), l'administrateur doit diter le fichier
   /usr/lib/lynx.cfg. Ce fichier est gros, environ 57000 octets, et
   contient des informations quelquefois contradictoires. Il tablit son
   propre rpertoire dans /usr/local/lib. Au dbut du fichier figure une
   ligne commenant 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
     _________________________________________________________________

   Aprs avoir enregistr le fichier, Lynx doit maintenant ouvrir notre
   index.html s'il est lanc sans argument.

  Configuration d'Arena

   S'il est lanc sans argument, Arena recherche son URL par dfaut.
   Cette URL est code en dur dans l'excutable, mais peut tre redfinie
   en utilisant la variable d'environnement WWW_HOME. L'administrateur
   systme peut placer la ligne suivante dans le fichier /etc/profile :
   WWW_HOME="http://localhost". Cette variable doit tre exporte, soit
   par l'ajout de la ligne adquate (export WWW_HOME), soit en ajoutant
   WWW_HOME  la ligne d'export courante :
     _________________________________________________________________

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

   A la prochaine connexion, la nouvelle URL par dfaut d'Arena sera
   connue du systme.

  Installation et Configuration de Netscape

   Netscape tait un produit commercial, et n'est donc pas inclus dans
   les anciennes distributions Linux. Nanmoins, il est tlchargeable
   par Internet, ou accessible  partir de certaines compilations de
   logiciels sur CD-ROM. Netscape est fourni sous la forme de fichiers
   binaires prcompils pour les plates-formes les plus courantes. Avant
   de l'installer, il est utile de crer le rpertoire
   /usr/local/Netscape, dans lequel l'archive sera dcompacte. Tous les
   fichiers doivent rester  cette place (sauf la bibliothque Java :
   suivez les instructions du fichier README fourni avec les binaires de
   Netscape), et il suffira de crer un lien symbolique avec
   /usr/local/bin par la commande :

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

   depuis le rpertoire /usr/local/bin/.

   Netscape est maintenant pret  tre utilis, et peut tre configur
   par le menu "Options". Dans "General Preferences", il y a un onglet
   intitul "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 dmarrage, Netscape prsentera la page d'accueil d'Apache.

3.6 Les navigateurs avec Apache

   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,
   vrifiez que les fichiers cits plus haut sont bien en place et que la
   configuration du navigateur est correcte. Fermez les fichiers de
   configuration avant de dmarrer de nouveau le navigateur. Si tous les
   fichiers sont installs et que le navigateur semble correctement
   configur, examinez la configuration du rseau. Ou bien le nom de
   votre machine est diffrent de celui spcifi lors de la
   configuration, ou bien la configuration rseau n'est pas correcte. Il
   est particulirement 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
   vrifier en lanant une commande rseau qui rclame un nom de machine
   comme argument, comme telnet localhost (en supposant que telnet soit
   install). Si cela ne fonctionne pas, la configuration rseau doit
   tre controle avant de continuer l'intallation.

3.7 La Base de donnes et son installation

   L'installation de la base de donnes demande  peine plus de
   prparation que les tapes prcdentes. Il y a quelques moteurs de
   base de donnes SQL disponibles, avec des contraintes d'administration
   et d'excution diffrentes ; l'un des plus simples est msql, dit aussi
   "Mini-SQL", crit par David Hughes. Msql est un "partagiciel". En
   fonction de la version utilise, les sites commerciaux sont redevables
   de 250 US$, voire plus, les utilisateurs privs d'au moins 65 US$, et
   seules les institutions scolaires et les entreprises  but non
   lucratif peuvent utiliser ce logiciel librement. Les termes exacts des
   droits figurent dans la documentation de la base de donnes. Les
   lments donnes 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 exprience personnelle. Alors qu'il cherchait
   une base de donnes, l'auteur a trouv que msql tait la plus facile 
   installer et  maintenir, et qu'elle couvrait un ensemble suffisamment
   large du langage SQL pour convenir  une utilisation classique. C'est
   seulement en crivant ces lignes que l'auteur a dcouvert cette loge
   dans la DBI FAQ d'Alligator Descartes (la FAQ interface perl aux bases
   de donnes) :

     Du point de vue de l'auteur, si le volume de donnes est
     relativement faible, les tables contenant moins d'1 million de
     lignes, avec moins de 1000 tables dans une base donne, alors msql
     constitue une solution parfaitement acceptable. Cette base de
     donnes est trs bon march, extraordinairement solide, et offre un
     excellent support, ...

   Mqsl est disponible en deux versions, msql-1.0.16 et msql-2.0.1, qui
   diffrent par leurs performances (cela n'est sensible que sur des
   petits projets) et les logiciels les accompagnant (la version la plus
   rcente dispose de plus d'outils, de son propre langage de script,
   etc.). Nous dcrirons les deux versions de msql, car leurs
   installations se distinguent par quelques aspects.

  Installation de msql-1.0.16

   Msql est disponible sous forme de sources et de binaires prcompils
   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 rpertoires soient gnrs
   correctement lors du dcompactage dans le rpertoire /.

   Si vous dcidez de compiler msql-1.0.16 vous-mme, et que vous voulez
   utiliser le paquetage MsqlPerl plutot que l'interface DBI (voir plus
   loin une prsentation dtaille des diffrence entre les deux
   stratgies), alors attendez-vous  ce que MsqlPerl rapporte, lors des
   tests d'installation, des erreurs dans msql. Dans ce cas, une
   correction sera ncessaire, explique dans la documentation MsqlPerl
   (fichier patch.lost.tables). En l'occurrence, il faut inclure les
   trois lignes suivantes dans msqldb.c, aprs la ligne 1400, contenant
   entry->def = NULL; :

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

   Cette partie de code doit maintenant tre 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 tapes. Aprs avoir
   dcompact l'archive contenant les sources, il faut crer un
   rpertoire destination. Cela se fait avec la commande suivante :

# make target

   Si tout se passe bien, le systme rpond avec

Build of target directory for Linux-2.0.30-i486 complete

   Vous pouvez maintenant aller dans le rpertoire que vous venez de
   crer, et taper d'abord la commande

# ./setup

   La squence ./ est ncessaire pour s'assurer que la commande setup
   excute est bien celle du rpertoire courant, et non une autre qui
   aurait le mme nom. On va maintenant vous poser quelques questions
   concernant le rpertoire source, et la localisation du rpertoire
   d'installation. Une fois que ces questions ont eu leur rponse, le
   systme lance quelques tests pour vrifier que les logiciels
   ncessaires (compilateurs, utilitaires divers, etc.) sont prsents,
   puis finalement rpond

     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 prvu, nous devons alors lire :

     make[2] : 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.

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

   Tous les binaires doivent tre accessibles, par exemple en crant des
   liens symboliques dans /usr/local/bin/. Dplacez-vous dans ce
   rpertoire et tapez la commande

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

   aprs quoi les liens sont correctement construits.

  Test de msql-1

   Aprs l'installation, il est maintenant possible de tester le
   fonctionnement de la base de donnes. Avant toutes choses, le serveur
   doit tre dmarr. L'administrateur systme, grce aux privilges du
   compte utilisateur root, lance la commande

# msqld &

   (n'oubliez pas d'ajouter le &, sinon msql ne tournerait pas en tche
   de fond.), aprs quoi le message suivant doit apparatre :

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,  part la
   configuration des droits d'accs. Pour le moment, il suffit de
   dmarrer le serveur msql  partir d'un shell, mais vous pourrez par la
   suite vouloir le dmarrer automatiquement au lancement du systme.
   Cette commande doit alors tre ajoute dans un des scripts du
   rpertoire rc.d. Seul l'administrateur systme peut lancer la premire
   commande typique d'une base de donnes (cration de la premire table)
   :

# msqladmimn create inventur

   msql rpond alors Database "inventur" created. Comme preuve
   supplmentaire, vous pouvez constater que le rpertoire
   /usr/local/Minerva/msqldb/ contient maintenant le rpertoire
   ../inventur, vide pour l'intant. Vous pouvez manipuler la nouvelle
   base avec les outils d'administration, qui sont dcrits en dtail dans
   la documentation msql.

  Installation de msql-2.0.1

   Une nouvelle version, plus puissante, du serveur mSQL d'Hugues est
   maintenant disponible. Son installation est un peu diffrente.
   Installer msql-2 de zro ncessite les tapes suivantes. Copiez
   l'archive  l'endroit o vous souhaitez l'installer, par exemple
   /usr/local/msql-2/, puis dcompressez-la :

# tar xfvz msql-2.0.1.tar.gz

   Positionnez vous  la racine de l'arborescence d'installation et tapez

# make target

   Placez vous dans le rpertoire targets et vrifiez le type de votre
   machine. Il devrait y avoir un nouveau sous-rpertoire Linux-_(votre
   version)-votre cpu)_. Allez dans ce rpertoire et lancez l'utilitaire
   de configuration qui s'y trouve :

# ./setup

   Il y a aussi un fichier site.mm qui peut tre dit. Peut-tre
   avez-vous dj utilis le rpertoire /usr/local/Minerva/ et
   souhaitez-vous le conserver intact ? Dans ce cas, changez la ligne
   INST_DIR=... pour indiquer le rpertoire destination qui vous
   convient. Sinon, ne changez rien.

   Maintenant, vous pouvez contruire la base de donnes :

# 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 install correctement, vous devez vous
   proccuper de certains dtails d'administration. C'est ici que les
   diffrences avec msql-1 commencent. D'abord, un utilisateur msql est
   cr, et est responsable de l'administration de la base de donnes.

# adduser msql

   Maintenant, vous devez changer les propritaire et groupe de tous les
   fichiers dans le rpertoire de mSQL en tapant :

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

   Enfin, vous pouvez crer les liens symboliques pour tous les
   xecutables de la base de donnes dans /usr/local/bin/ en lanant la
   commande :

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

  Test de msql-2

   Dmarrez maintenant le serveur de la base en tapant la commande msql2d
   &, vous devriez obtenir cette rponse :

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 compile et installe, et nous pouvons
   maintenant continuer avec les modules perl puisqu'ils demandent la
   prsence d'un serveur de base de donnes oprationnel pour les tests.

   Au fait, ce moment est bien choisi pour imprimer la documentation
   complte livre 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 bibliothques d'interface.

3.8 Les diffrentes Interfaces : DBI/mSQL, MsqlPerl, et Lite

   Une phrase frquemment cite dans le Camel Book (la documentation de
   rfrence de perl) affirme qu'il y a toujours plusieurs manires
   d'obtenir un rsultat avec perl. Hlas, cela est vrai aussi avec notre
   application. Il y a trois mthodes pour accder  une base de donnes
   msql par l'intermdiaire de CGI. Tout d'abord, la question est de
   savoir s'il faut ou non utiliser perl. Dans le premier cas (suppos
   dans ce document), il y a encore le choix entre deux types
   compltement diffrents d'interface. Si nous n'employons pas perl, il
   reste la solution d'employer le langage de script propre  msql,
   appel Lite, qui est relativement proche du langage C, en plus simple.

  DBI et DBD-mSQL

   Au moment de la rdaction de ce document, c'est l'utilisation de
   l'interface gnrique de base de donnes appele DBI qui est prfre.
   DBI a quelques avantages. Elle fournit un contrle d'accs standard 
   de nombreuses base de donnes commerciales, et ce avec le mme
   ensemble de commandes. La base de donnes en fonctionnement sur un
   systme donn est alors interroge par une interface qui masque
   efficacement les caractristiques spcifiques de cette base au
   programmeur. Ainsi, DBI fournit une passerelle pratique pour
   travailler avec diffrentes bases de diffrents auteurs. Avec un seul
   script, il est possible de communiquer avec plusieurs bases de donnes
   diffrentes. Le lecteur interess peut consulter la DBI-FAQ pour plus
   de dtails. Il y a cependant un inconvnient : l'interface DBI est en
   cours de dveloppement et aligne les versions  une allure galopante
   (quelques fois avec plusieurs mises  jour par mois). De mme, les
   pilotes de bases de donnes sont frquemment mis  jour, et peuvent
   tre bass sur des versions spcifiques de l'interface de base de
   donnes. Les utilisateurs faisant une premire installation doivent se
   limiter aux numros de version donns dans ce document, car d'autres
   versions peuvent poser des problmes de compilation et de test, dont
   la rsolution n'est pas une affaire de nophyte.

  MsqlPerl

   MsqlPerl est une bibliothque permettant l'accs direct  msql 
   partir de programmes crits en perl. Elle n'utilise pas l'interface
   DBI et est trs compacte. Bien qu'elle fonctionne trs bien avec les
   deux versions de msql, son usage n'est pas conseill par rapport 
   l'interface DBI, qui tend  se gnraliser. Nanmoins, suivant le
   systme, c'est une alternative intressante, car la bibliothque est
   petite et facile  installer. Notamment, il y a moins de dpendance
   par rapport aux numros de version que celles constates entre DBI et
   les pilotes de base de donnes.

  Le langage de commande propre de msql : Lite

   Enfin, msql-2 fournit son propre langage de commande : Lite. Ce
   langage est proche du C, assaini et complt avec quelques
   fonctionnalits du type 'shell' (d'une certaine manire, c'est une
   version spcialise de perl). Lite est un langage simple et bien
   document dans le manuel msql-2. Le paquetage msql-2 livre aussi en
   exemple un application utilisant Lite.

   Nous ne dcrirons pas ici Lite, car il est trop spcifique de msql-2
   (et dj document !), et parce que le lecteur est cens avoir un
   certain intrt pour perl, et en avoir de bonnes notions. Nanmoins,
   il est recommand d'y jeter un coup d'oeil : il peut s'avrer la
   solution idale dans un environnement ne mettant en oeuvre que msql-2
   (en supposant donc qu'aucune autre base n'est utilise), grce  sa
   simplicit.

3.9 La solution standard : DBI et DBD-msql

   Nous supposons que perl a t install pendant la configuration du
   systme, ou en utilisant le gestionnaire de paquetage mentionn plus
   haut. Aucun dtail supplmentaire ne sera donn ici. Nanmoins, nous
   allons d'abord tester si notre version de perl est rcente :

# perl -v

   perl doit rpondre 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 l, tout va bien. L'tape suivante consiste  installer les
   bibliothques gnrales perl pour les bases de donnes (DBI), le
   pilote msql (DBD-mSQL) et CGI. Le pilote CGI est ncessaire dans tous
   les cas. Les archives suivantes sont utilises :

    1. DBI-0.8.1.tar.gz
    2. DBD-mSQL-0.65.tar.gz
    3. CGI.pm-2.31.tar.gz (ou plus rcent>

   Une prcision est ncessaire ici pour les dbutants : le test dcrit
   ici fonctionne trs bien  condition d'utiliser _exactement_ les
   versions recommandes de logiciels ; des combinaisons d'autres
   versions peuvent chouer  un moment ou  un autre. Le dboguage de
   combinaisons de versions incompatibles est une affaire de spcialistes
   des interfaces d'appel. Quelquefois, seule une mthode change de nom
   alors qu'elle fait la mme chose, mais d'autres fois, les structures
   internes changent de manire significative. Donc, encore une fois,
   tenez-vous en aux numros indiqus de versions si vous ne voulez pas
   de problme, et ce mme si vous constatez que les versions ont encore
   chang dans l'intervalle. Il est normal de voir les versions voluer
   rapidement, et vous devez vous attendre  des problmes en installant
   d'autres versions que celles conseilles ici.

   Il est trs important que le pilote de base pour mSQL (DBD-mSQL) soit
   install _aprs_ l'interface gnrique DBI.

   Nous commenons par crer le rpertoire _/usr/local/PerlModules_ car
   il est important de conserver l'arborescence initiale de perl intacte.
   Nous pourrions aussi choisir un autre nom de rpertoire ; cela n'a
   strictement aucune importance, malheureusement aucune recommandation
   n'est faite dans les fichiers README des diffrents modules perl. Une
   fois recopies les archives prcdemment cites dans
   /usr/local/PerlModules, nous les dcompactons en tapant

# tar zxvf [archive-file]

   pour chacune des trois archives. N'oubliez pas d'indiquer le vrai nom
   de l'archive  la commande tar. Le processus d'installation de ces
   trois archives est trs standard ; seuls les messages de sortie
   concernant les tapes les plus importantes sont reproduits ici.

  Installation de l'interface perl de base de donnes DBI

   L'interface de la base de donnes doit avoir t installe avant le
   pilote spcifique  la base. Le dcompactage de l'archive DBI cre le
   rpertoire /usr/local/PerlModules/DBI-0.81/. Placez-vous dans ce
   rpertoire. Il y a un fichier README (que vous devriez lire) et un
   makefile spcifique pour perl. Maintenant, tapez la commande

# perl Makefile.PL

   Le systme doit rpondre 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 dir
ectories 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'tape suivante :

# make

   Si aucun message d'erreur n'apparat (les traces dtailles affiches
   sur l'cran _ne_ sont _pas_ un message d'erreur), nous pouvons tester
   la librairie nouvellement installe avec la commande

# make test

   Sur l'affichage, guettez les lignes suivantes (vous pouvez toujours
   revenir en arrire avec la touche [Shift]-[PgUp]) :

[...]
t/basics............ok
t/dbidrv............ok
t/examp.............ok
All tests successful.
[...]
DBI test application $Revision: 1.1.1.1 $
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 dernire tape est l'installation de tous les fichiers dans leurs
   rpertoires respectifs. La commande suivante s'en occupe :

# make install

   Il n'y a plus rien  faire. Si pour quelque raison que se soit,
   l'installation choue et que vous vouliez la recommencer, n'oubliez
   pas de taper d'abord la commande

# make realclean

   Cela supprimera toutes les traces laisses par la prcdente
   installation. Vous pouvez aussi supprimer les fichiers installs en
   copiant le contenu de l'cran (montr ici abrg)

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 remplaant Installing par rm. Si vous avez appell
   ce fichier uninstall vous pouvez alors taper

# . uninstall

   ce qui effacera les derniers fichiers installs.

  Le pilote msql de perl : DBD-mSQL

   Le pilote msql pourra tre install seulement _aprs_l'installation
   russie de l'interface perl gnrique de base de donnes.

   Les tapes de l'installation sont pratiquement les mmes que les
   prcdentes, donc commencez par taper

# perl Makefile.PL

   L, le systme doit rpondre avec un avertissement vous demandant de
   lire la documentation accompagnant le logiciel. Ensuite, il va
   dtecter o 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 affiches. 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 tes prt  continuer et pouvez sauter le paragraphe suivant.

3.10 L'interface MsqlPerl

   Si vous dcidez d'utiliser l'interface globale MsqlPerl, aucun pilote
   particulier n'est ncessaire ; seule l'archive MsqlPerl-1.15.tar.gz
   est utilise, puisque, comme cela a dj t dit, MsqlPerl fournit une
   interface directe entre perl et le serveur de base de donnes, sans
   utiliser l'interface DBI. L'installation et le test sont trs faciles.

   Aprs avoir tap perl Makefile.PL, l'utilitaire make peut tre activ.
   Vous devez d'abord indiquer o se trouve mSQL. S'il est dans
   /usr/local/Minerva/, la rponse par dfaut peut tre valide.

   Ensuite, tapez make test. Avant cela, vous devez vous assurer qu'il y
   a bien une base nomme test et que vous avez les droits d'criture et
   lecture dessus. Cela peut tre fait avec

# msqladmin create test

3.11 Bibliothque CGI de perl

   L'installation de l'interface CGI de perl est la plus simple des trois
   tapes. Lancez les commandes dans l'ordre donn, et voil :

# 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 _doivent_ tre tests
   dans tous les cas.

   Un sous-rpertoire avec les exemples CGI est cr. Vous pouvez en
   copier le contenu vers /home/httpd/cgi-bin/ et utiliser un navigateur
   pour jouer avec les scripts.

3.12 Check-list de l'installation

   Nous avons effectu les tapes suivantes, dans cet ordre:

    1. Installation de Linux avec support rseau
    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 mnage. Toutes les arborescences
   des sources msql et les modules perl peuvent tre dtruites sans
   inconvnient (cependant, vous ne devriez pas dtruire les fichiers
   archives !) puisque les binaires et la documentation sont maintenant
   dans des rpertoires diffrents.

4. Un exemple de Base de Donnes

   Aprs avoir termin la procdure d'installation, nous pouvons
   maintenant lancer l'application donne en exemple. En fonction de la
   version de msql installe et de l'interface perl utilise, nous
   devrons modifier un peu ce programme.

   Tout d'abord, le fichier index.html, dans le rpertoire
   /home/httpd/html/ doit tre modifi 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 (
   choisir, bien sr, 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
   prcdentes, mais vous pouvez, si vous avez install les deux types
   d'interface, laisser les deux lignes telles quelles. Vous pourrez
   alors comparer les performances.

4.1 Adaptation de l'exemple de script pour MsqlPerl

   Il est ncessaire d'indiquer, dans notre exemple de script, qu'il faut
   utiliser l'interface MsqlPerl. La modification doit tre faite 
   plusieurs endroits. D'abord, au dbut du fichier, il faut changer la
   clause use :


# use DBI;                 # Generisches Datebank-Interface
use Msql;

   Ensuite,  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 tre mise en
   commentaire :


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

   De plus, il peut tre ncessaire de remplacer tout les appels errstr
   tels que celui de la ligne prcdente par errmsg. Cela dpend de la
   version utilise.

   Aprs ces modifications, le script doit tourner correctement.

4.2 Adaptation de l'exemple pour msql-2

   La syntaxe SQL a subi des changements durant le dveloppement de
   msql-2. Le script original n'excutera 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 tre supprim :

  $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 numros personnels identiques ; le
   modificateur msql-1 primary key tait justement l pour viter cela.
   La documentation msql2 indique comment utiliser la clause CREATE INDEX
   pour crer des entres uniques.

5. Conclusion

   Si vous avez install msql-2 sur votre systme, vous pouvez regarder
   les exemples de programmes crits avec Lite, le langage de script de
   msql-2.

   Chaque version de msql est livre avec un minimum d'outils
   d'administration, qui permettent  l'utilisateur de crer et dtruire
   des tables (msqladmin) et d'examiner la structure de la base de
   donnes (relshow).

   Msql deuxime gnration (c'est--dire msql-2) possde quelques
   utilitaires de plus : msqlimport et msqlexport. Ils permettent
   d'insrer et d'extraire des donnes de la base SQL,  partir de et
   vers des fichiers. Ces utilitaires peuvent tre utiliss pour, _en une
   seule passe_, charger ou extraire de grandes quantits de donnes, et
   cela sans que l'utilisateur ait  se soucier d'crire _une seule_
   ligne de perl, de SQL, ni mme de n'importe quoi.

   Si vous voulez crire votre propre script perl de gestion de base de
   donnes, vous trouverez suffisamment d'aide dans les fichiers
   d'exemples, et dans la volumineuse documentation en ligne qui est
   livre avec le module DBI.

   Dans tous les cas, vous tes maintenant prts  publier vos donnes
   sur votre rseau, et mme sur le Web.
