Serveur Web de Base de Donn�es mSQL / perl HOWTO

par Oliver Corff,
version fran�aise Nicolas Caillaud

   v0.1, 17 September 1997
     _________________________________________________________________

   _Ce Mini HOWTO, tr�s 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 donn�es client/server SQL sur le Web,
   utilisant HTML pour l'interface utilisateur._
     _________________________________________________________________

1. A propos de ce Document

1.1 Lecteurs concern�s

   Ce document devrait �tre utile � ceux qui veulent mettre en place un
   serveur de base de donn�es sur le Web, mais qui ne savent pas quels
   logiciels sont n�cessaires, ni comment les installer. Il fournit
   toutes les informations utiles pour faire fonctionner une base de
   donn�es SQL sur un serveur Web ; il _ne_ rentre _pas_ dans les d�tails
   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 syst�me SQL sur une petite �chelle (et non pas
   l'exemple classique du syst�me de r�servation d'une importante
   compagnie a�rienne, ou le syst�me de gestion de base de donn�es d'une
   mission spatiale), il suffit d'avoir les logiciels d�crits dans ce
   document, et la documentation les accompagnant. Le manuel utilisateur
   de msql (la base de donn�es d�crite ici) fournit suffisamment
   d'informations sur SQL pour vous permettre de construire votre propre
   base.

   Le lecteur doit savoir comment r�cup�rer des fichiers par ftp s'il n'a
   pas les CD-ROM ad�quats, et comment construire des ex�cutables �
   partir des fichiers sources. En tout �tat de cause, toutes les �tapes
   d�crites dans ce document ont �t� test�es sur un syst�me r�el, et
   devraient fonctionner sur le syst�me 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 donn�es contenant de
   gros volumes de donn�es, ou un sch�ma relationnel compliqu� (comme,
   par exemple, une base lexicale pour un langage parl�), doivent �tre
   accessibles � beaucoup d'utilisateurs � la fois. De m�me, il doit �tre
   possible d'utiliser diverses plates-formes mat�rielles et logicielles
   existantes pour construire le syst�me final. Pour r�duire les co�ts de
   mise en oeuvre, une seule partie du syst�me a r�ellement besoin de
   puissance : le serveur de la base de donn�es ; les stations
   utilisateurs doivent seulement afficher des donn�es et accepter des
   commandes utilisateurs, mais le traitement proprement dit est fait sur
   une seule machine, justifiant ainsi le terme "base de donn�es client -
   serveur". De plus, l'interface utilisateur doit �tre facile �
   configurer, et requ�rir le moins de traitement possible sur le client.

   Les �l�ments suivants (protocoles, logiciels et plus g�n�ralement
   concepts) sont utilis�s pour construire un syst�me conforme � ces
   crit�res :

   _Linux_
          est le syst�me d'exploitation. Il s'agit d'une impl�mentation
          stable d'Unix, multi-utilisateurs, multi-t�ches, avec support
          r�seau complet (TCP/IP entre autres). A part le co�t du support
          et de la transmission, il est gratuit et livr� sous forme de
          distributions, qui incluent g�n�ralement l'indispensable, du
          Syst�me d'Exploitation lui-m�me au traitement de texte, outils
          de d�veloppement logiciel, langage de script, g�n�rateurs
          d'interfaces, etc.

   _HTML_
          Le langage HTML (HyperText Markup Language) est utilis� pour
          construire des interfaces de syst�mes r�seaux comme des
          Intranets, des serveurs Web (WWW). HTML est extr�mement simple
          et peut �tre g�n�r� � 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.) destin�es � la lecture et � l'affichage
          de documents HTML. C'est le seul logiciel directement manipul�
          par l'utilisateur de la base de donn�es. Gr�ce aux navigateurs,
          on peut afficher diff�rents types de donn�es (texte ou images),
          et communiquer avec des serveurs HTTP (voir plus loin),
          h�berg�s par � peu pr�s n'importe quel mod�le d'ordinateur sur
          lequel un navigateur est disponible.

   _Serveurs HTTP_
          Un serveur HTTP fournit l'acc�s � une zone de l'ordinateur
          contenant les donn�es publiques d'un r�seau. Il supporte le
          protocole HTTP et fournit l'information demand�e par
          l'utilisateur.

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

   _CGI_
          CGI (Common Gateway Interface) est l'interface de programmation
          entre le syst�me supportant les donn�es (dans notre cas, le
          syst�me SQL) et le protocole r�seau (HTML, bien s�r). 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 particuli�rement puissant, qui
          combine les avantages du C, des diff�rents shells, et des
          langages de manipulations de flux comme awk ou sed. Par
          exemple, perl poss�de de nombreux modules de manipulation de
          base de donn�es SQL.

3. Proc�dure d'installation

3.1 Mat�riel requis

   Aucune supposition ne peut �tre faite sur les besoins en mat�riel d'un
   serveur de base de donn�es. Cela d�pend trop du nombre d'utilisateurs,
   du type d'application, de la charge du r�seau, etc. Dans un
   environnement comprenant peu d'utilisateurs et un trafic r�seau
   faible, un 486 ou �quivalent, avec 16 MO de m�moire vive, peut �tre
   suffisant. Linux, le syst�me d'exploitation, est tr�s efficace en
   termes de ressources, et peut fournir suffisamment de puissance pour
   faire tourner un grand nombre d'applications en m�me temps. Bien s�r,
   un processeur plus puissant et plus de m�moire vive signifient plus de
   puissance, mais la quantit� de m�moire vive est plus importante que le
   processeur. Plus le syst�me a de m�moire vive, moins il est oblig�, en
   cas de besoin, de swapper les processus les plus gourmands en m�moire
   sur le disque.

   Avec un syst�me �quip� de 32 MO de m�moire vive et d'un bus PCI, les
   recherches et op�rations de tri peuvent �tre faites sans avoir recours
   au(x) fichier(s) d'�change (swap), donnant d'excellents r�sultats.

   L'installation d�crite dans cet article a �t� faite sur un IBM 686 �
   133MHz, avec 32 MO de m�moire vive et un disque dur IDE de 1.2 GO. La
   suite du document pr�sente les �tapes indispensables � une
   installation compl�te.

3.2 Logiciel

   Les logiciels d�crits dans cet article sont disponibles sur Internet,
   ou sur CD-ROM. Les produits suivants sont utilis�s :

     * Distribution Red Hat 4.2, parue pendant l'�t� 1997, disponible sur
       CD-ROM (Red Hat Linux PowerTools : 6 CD-ROM complets et pr�ts �
       �tre utilis�s) ou sur Internet, sur le site de RedHat ;
     * Base de donn�es SQL msql : disponible en deux versions. Les
       diff�rences entre ces deux versions r�sident 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'ex�cutable 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,
       d�cembre 1996), ou chez InfoMagic. La version la plus r�cente,
       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'ao�t 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
   r�ussir � 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 pr�par�e selon les instructions du CD
   Linux.

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

     * support du protocole TCP/IP
     * le serveur http Apache
     * le langage Perl
     * le syst�me 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 d�crire l'installation
   r�seau, ni la proc�dure d'initialisation. Pour cela, consultez la
   documentation en ligne (pages de manuel, HTML, texinfo) et imprim�e
   (Bible Linux, etc.).

   La proc�dure d'installation de Red Hat est tr�s au point et n�cessite
   peu d'interaction de la part de l'utilisateur, en dehors des choix
   courants (les noms de machines, par exemple). Une fois l'installation
   termin�e, le syst�me est pr�t � tourner.

   L'installation de XWindow n'est pas obligatoire pour le serveur, mais
   cela rend les acc�s locaux et les tests plus faciles. La proc�dure
   d'installation de XWindow peut �tre conduite par diff�rents programmes
   ; XF86Setup offre le plus de facilit� d'auto-test, et demande peu de
   connaissance des menus d�tails (la programmation de l'horloge vid�o,
   etc.). La seule contrainte est que le logiciel puisse d�tecter
   l'adaptateur vid�o. Des cartes graphiques acc�l�ratrices bon march�
   (comme les cartes bas�es sur le chip Trio S64, avant le S64UV+)
   fonctionnent sans aucun probl�me.

   A partir de maintenant, nous supposons que le syst�me tourne, et que
   Apache, Perl et XWindow ont �t� install�s avec succ�s. Nous supposons
   de m�me que les fichiers et structure de r�pertoires sont tels que
   d�finis 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 ; d�s que le
   syst�me fonctionnera, le v�ritable nom pourra �tre ajout�. Notez que
   l'installation r�seau 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 syst�me.
   La page de manuel (man httpd) explique comment installer et d�marrer
   le d�mon http (donc http_d_) mais, comme il a �t� indiqu� plus haut,
   si l'installation s'est bien pass�e, le serveur HTTP doit tourner.
   V�rifiez l'arborescence des r�pertoires : le r�pertoire /home/httpd
   doit exister, avec trois sous-r�pertoires : ../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 syst�me est correctement pr�configur� et ne doit
   pas �tre modifi�, si l'installation s'est faite sans probl�me.

3.5 Les navigateurs

   Il existe trois types de navigateurs disponibles sous Linux : les
   logiciels purement textuels, comme Lynx, des logiciels simples et
   exp�rimentaux comme Arena (gratuit) et des logiciels commerciaux,
   comme Netscape (partagiciel !) avec support de Java int�gr�. Alors que
   Lynx et Arena sont fournis avec Linux, Netscape doit �tre r�cup�r� par
   d'autres sources. Netscape est disponible sous forme de fichier
   binaire pr�compil� pour Linux sur architecture ix86 et tourne "tel
   quel" une fois l'archive d�compress�e.

  Configuration de Lynx

   Une fois Lynx d�marr�, il cherche une 'URL par d�faut' qui n'existe
   pas toujours si le syst�me n'a pas d'acc�s Internet permanent. Pour
   changer cette URL par d�faut (ainsi que d'autres d�tails 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 r�pertoire dans /usr/local/lib. Au d�but du fichier figure une
   ligne commen�ant 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
     _________________________________________________________________

   Apr�s 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 d�faut.
   Cette URL est cod�e en dur dans l'ex�cutable, mais peut �tre red�finie
   en utilisant la variable d'environnement WWW_HOME. L'administrateur
   syst�me peut placer la ligne suivante dans le fichier /etc/profile :
   WWW_HOME="http://localhost". Cette variable doit �tre export�e, soit
   par l'ajout de la ligne ad�quate (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 d�faut d'Arena sera
   connue du syst�me.

  Installation et Configuration de Netscape

   Netscape �tait un produit commercial, et n'est donc pas inclus dans
   les anciennes distributions Linux. N�anmoins, il est t�l�chargeable
   par Internet, ou accessible � partir de certaines compilations de
   logiciels sur CD-ROM. Netscape est fourni sous la forme de fichiers
   binaires pr�compil�s pour les plates-formes les plus courantes. Avant
   de l'installer, il est utile de cr�er le r�pertoire
   /usr/local/Netscape, dans lequel l'archive sera d�compact�e. Tous les
   fichiers doivent rester � cette place (sauf la biblioth�que Java :
   suivez les instructions du fichier README fourni avec les binaires de
   Netscape), et il suffira de cr�er un lien symbolique avec
   /usr/local/bin par la commande :

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

   depuis le r�pertoire /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 d�marrage, Netscape pr�sentera 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,
   v�rifiez que les fichiers cit�s plus haut sont bien en place et que la
   configuration du navigateur est correcte. Fermez les fichiers de
   configuration avant de d�marrer de nouveau le navigateur. Si tous les
   fichiers sont install�s et que le navigateur semble correctement
   configur�, examinez la configuration du r�seau. Ou bien le nom de
   votre machine est diff�rent de celui sp�cifi� lors de la
   configuration, ou bien la configuration r�seau n'est pas correcte. Il
   est particuli�rement 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
   v�rifier en lan�ant une commande r�seau qui r�clame un nom de machine
   comme argument, comme telnet localhost (en supposant que telnet soit
   install�). Si cela ne fonctionne pas, la configuration r�seau doit
   �tre control�e avant de continuer l'intallation.

3.7 La Base de donn�es et son installation

   L'installation de la base de donn�es demande � peine plus de
   pr�paration que les �tapes pr�c�dentes. Il y a quelques moteurs de
   base de donn�es SQL disponibles, avec des contraintes d'administration
   et d'ex�cution diff�rentes ; l'un des plus simples est msql, dit aussi
   "Mini-SQL", �crit par David Hughes. Msql est un "partagiciel". En
   fonction de la version utilis�e, les sites commerciaux sont redevables
   de 250 US$, voire plus, les utilisateurs priv�s 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 donn�es. Les
   �l�ments donn�es 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 exp�rience personnelle. Alors qu'il cherchait
   une base de donn�es, 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 d�couvert cette �loge
   dans la DBI FAQ d'Alligator Descartes (la FAQ interface perl aux bases
   de donn�es) :

     Du point de vue de l'auteur, si le volume de donn�es est
     relativement faible, les tables contenant moins d'1 million de
     lignes, avec moins de 1000 tables dans une base donn�e, alors msql
     constitue une solution parfaitement acceptable. Cette base de
     donn�es est tr�s 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
   diff�rent par leurs performances (cela n'est sensible que sur des
   petits projets) et les logiciels les accompagnant (la version la plus
   r�cente dispose de plus d'outils, de son propre langage de script,
   etc.). Nous d�crirons 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 pr�compil�s
   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 r�pertoires soient g�n�r�s
   correctement lors du d�compactage dans le r�pertoire /.

   Si vous d�cidez de compiler msql-1.0.16 vous-m�me, et que vous voulez
   utiliser le paquetage MsqlPerl plutot que l'interface DBI (voir plus
   loin une pr�sentation d�taill�e des diff�rence entre les deux
   strat�gies), alors attendez-vous � ce que MsqlPerl rapporte, lors des
   tests d'installation, des erreurs dans msql. Dans ce cas, une
   correction sera n�cessaire, expliqu�e dans la documentation MsqlPerl
   (fichier patch.lost.tables). En l'occurrence, il faut inclure les
   trois lignes suivantes dans msqldb.c, apr�s 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. Apr�s avoir
   d�compact� l'archive contenant les sources, il faut cr�er un
   r�pertoire destination. Cela se fait avec la commande suivante :

# make target

   Si tout se passe bien, le syst�me r�pond avec

Build of target directory for Linux-2.0.30-i486 complete

   Vous pouvez maintenant aller dans le r�pertoire que vous venez de
   cr�er, et taper d'abord la commande

# ./setup

   La s�quence ./ est n�cessaire pour s'assurer que la commande setup
   ex�cut�e est bien celle du r�pertoire courant, et non une autre qui
   aurait le m�me nom. On va maintenant vous poser quelques questions
   concernant le r�pertoire source, et la localisation du r�pertoire
   d'installation. Une fois que ces questions ont eu leur r�ponse, le
   syst�me lance quelques tests pour v�rifier que les logiciels
   n�cessaires (compilateurs, utilitaires divers, etc.) sont pr�sents,
   puis finalement r�pond

     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 pr�vu, 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 cr�ant des
   liens symboliques dans /usr/local/bin/. D�placez-vous dans ce
   r�pertoire et tapez la commande

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

   apr�s quoi les liens sont correctement construits.

  Test de msql-1

   Apr�s l'installation, il est maintenant possible de tester le
   fonctionnement de la base de donn�es. Avant toutes choses, le serveur
   doit �tre d�marr�. L'administrateur syst�me, gr�ce aux privil�ges du
   compte utilisateur root, lance la commande

# msqld &

   (n'oubliez pas d'ajouter le &, sinon msql ne tournerait pas en t�che
   de fond.), apr�s quoi le message suivant doit appara�tre :

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'acc�s. Pour le moment, il suffit de
   d�marrer le serveur msql � partir d'un shell, mais vous pourrez par la
   suite vouloir le d�marrer automatiquement au lancement du syst�me.
   Cette commande doit alors �tre ajout�e dans un des scripts du
   r�pertoire rc.d. Seul l'administrateur syst�me peut lancer la premi�re
   commande typique d'une base de donn�es (cr�ation de la premi�re table)
   :

# msqladmimn create inventur

   msql r�pond alors Database "inventur" created. Comme preuve
   suppl�mentaire, vous pouvez constater que le r�pertoire
   /usr/local/Minerva/msqldb/ contient maintenant le r�pertoire
   ../inventur, vide pour l'intant. Vous pouvez manipuler la nouvelle
   base avec les outils d'administration, qui sont d�crits en d�tail 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 diff�rente.
   Installer msql-2 de z�ro n�cessite les �tapes suivantes. Copiez
   l'archive � l'endroit o� vous souhaitez l'installer, par exemple
   /usr/local/msql-2/, puis d�compressez-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 r�pertoire targets et v�rifiez le type de votre
   machine. Il devrait y avoir un nouveau sous-r�pertoire Linux-_(votre
   version)-votre cpu)_. Allez dans ce r�pertoire 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 d�j� utilis� le r�pertoire /usr/local/Minerva/ et
   souhaitez-vous le conserver intact ? Dans ce cas, changez la ligne
   INST_DIR=... pour indiquer le r�pertoire destination qui vous
   convient. Sinon, ne changez rien.

   Maintenant, vous pouvez contruire la base de donn�es :

# 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
   pr�occuper de certains d�tails d'administration. C'est ici que les
   diff�rences avec msql-1 commencent. D'abord, un utilisateur msql est
   cr��, et est responsable de l'administration de la base de donn�es.

# adduser msql

   Maintenant, vous devez changer les propri�taire et groupe de tous les
   fichiers dans le r�pertoire de mSQL en tapant :

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

   Enfin, vous pouvez cr�er les liens symboliques pour tous les
   �xecutables de la base de donn�es dans /usr/local/bin/ en lan�ant la
   commande :

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

  Test de msql-2

   D�marrez maintenant le serveur de la base en tapant la commande msql2d
   &, vous devriez obtenir cette r�ponse :

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 compil�e et install�e, et nous pouvons
   maintenant continuer avec les modules perl puisqu'ils demandent la
   pr�sence d'un serveur de base de donn�es op�rationnel pour les tests.

   Au fait, ce moment est bien choisi pour imprimer la documentation
   compl�te livr�e 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 biblioth�ques d'interface.

3.8 Les diff�rentes Interfaces : DBI/mSQL, MsqlPerl, et Lite

   Une phrase fr�quemment cit�e dans le Camel Book (la documentation de
   r�f�rence de perl) affirme qu'il y a toujours plusieurs mani�res
   d'obtenir un r�sultat avec perl. H�las, cela est vrai aussi avec notre
   application. Il y a trois m�thodes pour acc�der � une base de donn�es
   msql par l'interm�diaire 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
   compl�tement diff�rents 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 r�daction de ce document, c'est l'utilisation de
   l'interface g�n�rique de base de donn�es appel�e DBI qui est pr�f�r�e.
   DBI a quelques avantages. Elle fournit un contr�le d'acc�s standard �
   de nombreuses base de donn�es commerciales, et ce avec le m�me
   ensemble de commandes. La base de donn�es en fonctionnement sur un
   syst�me donn� est alors interrog�e par une interface qui masque
   efficacement les caract�ristiques sp�cifiques de cette base au
   programmeur. Ainsi, DBI fournit une passerelle pratique pour
   travailler avec diff�rentes bases de diff�rents auteurs. Avec un seul
   script, il est possible de communiquer avec plusieurs bases de donn�es
   diff�rentes. Le lecteur interess� peut consulter la DBI-FAQ pour plus
   de d�tails. Il y a cependant un inconv�nient : l'interface DBI est en
   cours de d�veloppement et aligne les versions � une allure galopante
   (quelques fois avec plusieurs mises � jour par mois). De m�me, les
   pilotes de bases de donn�es sont fr�quemment mis � jour, et peuvent
   �tre bas�s sur des versions sp�cifiques de l'interface de base de
   donn�es. Les utilisateurs faisant une premi�re installation doivent se
   limiter aux num�ros de version donn�s dans ce document, car d'autres
   versions peuvent poser des probl�mes de compilation et de test, dont
   la r�solution n'est pas une affaire de n�ophyte.

  MsqlPerl

   MsqlPerl est une biblioth�que permettant l'acc�s direct � msql �
   partir de programmes �crits en perl. Elle n'utilise pas l'interface
   DBI et est tr�s compacte. Bien qu'elle fonctionne tr�s bien avec les
   deux versions de msql, son usage n'est pas conseill� par rapport �
   l'interface DBI, qui tend � se g�n�raliser. N�anmoins, suivant le
   syst�me, c'est une alternative int�ressante, car la biblioth�que est
   petite et facile � installer. Notamment, il y a moins de d�pendance
   par rapport aux num�ros de version que celles constat�es entre DBI et
   les pilotes de base de donn�es.

  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 compl�t� avec quelques
   fonctionnalit�s du type 'shell' (d'une certaine mani�re, c'est une
   version sp�cialis�e 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 d�crirons pas ici Lite, car il est trop sp�cifique de msql-2
   (et d�j� document� !), et parce que le lecteur est cens� avoir un
   certain int�r�t pour perl, et en avoir de bonnes notions. N�anmoins,
   il est recommand� d'y jeter un coup d'oeil : il peut s'av�rer la
   solution id�ale dans un environnement ne mettant en oeuvre que msql-2
   (en supposant donc qu'aucune autre base n'est utilis�e), gr�ce � sa
   simplicit�.

3.9 La solution standard : DBI et DBD-msql

   Nous supposons que perl a �t� install� pendant la configuration du
   syst�me, ou en utilisant le gestionnaire de paquetage mentionn� plus
   haut. Aucun d�tail suppl�mentaire ne sera donn� ici. N�anmoins, nous
   allons d'abord tester si notre version de perl est r�cente :

# perl -v

   perl doit r�pondre 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
   biblioth�ques g�n�rales perl pour les bases de donn�es (DBI), le
   pilote msql (DBD-mSQL) et CGI. Le pilote CGI est n�cessaire dans tous
   les cas. Les archives suivantes sont utilis�es :

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

   Une pr�cision est n�cessaire ici pour les d�butants : le test d�crit
   ici fonctionne tr�s bien � condition d'utiliser _exactement_ les
   versions recommand�es de logiciels ; des combinaisons d'autres
   versions peuvent �chouer � un moment ou � un autre. Le d�boguage de
   combinaisons de versions incompatibles est une affaire de sp�cialistes
   des interfaces d'appel. Quelquefois, seule une m�thode change de nom
   alors qu'elle fait la m�me chose, mais d'autres fois, les structures
   internes changent de mani�re significative. Donc, encore une fois,
   tenez-vous en aux num�ros indiqu�s de versions si vous ne voulez pas
   de probl�me, et ce m�me 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 probl�mes en installant
   d'autres versions que celles conseill�es ici.

   Il est tr�s important que le pilote de base pour mSQL (DBD-mSQL) soit
   install� _apr�s_ l'interface g�n�rique DBI.

   Nous commen�ons par cr�er le r�pertoire _/usr/local/PerlModules_ car
   il est important de conserver l'arborescence initiale de perl intacte.
   Nous pourrions aussi choisir un autre nom de r�pertoire ; cela n'a
   strictement aucune importance, malheureusement aucune recommandation
   n'est faite dans les fichiers README des diff�rents modules perl. Une
   fois recopi�es les archives pr�c�demment cit�es dans
   /usr/local/PerlModules, nous les d�compactons 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 tr�s standard ; seuls les messages de sortie
   concernant les �tapes les plus importantes sont reproduits ici.

  Installation de l'interface perl de base de donn�es DBI

   L'interface de la base de donn�es doit avoir �t� install�e avant le
   pilote sp�cifique � la base. Le d�compactage de l'archive DBI cr�e le
   r�pertoire /usr/local/PerlModules/DBI-0.81/. Placez-vous dans ce
   r�pertoire. Il y a un fichier README (que vous devriez lire) et un
   makefile sp�cifique pour perl. Maintenant, tapez la commande

# perl Makefile.PL

   Le syst�me doit r�pondre 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'appara�t (les traces d�taill�es affich�es
   sur l'�cran _ne_ sont _pas_ un message d'erreur), nous pouvons tester
   la librairie nouvellement install�e avec la commande

# make test

   Sur l'affichage, guettez les lignes suivantes (vous pouvez toujours
   revenir en arri�re 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 derni�re �tape est l'installation de tous les fichiers dans leurs
   r�pertoires 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 laiss�es par la pr�c�dente
   installation. Vous pouvez aussi supprimer les fichiers install�s en
   copiant le contenu de l'�cran (montr� ici abr�g�)

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

# . uninstall

   ce qui effacera les derniers fichiers install�s.

  Le pilote msql de perl : DBD-mSQL

   Le pilote msql pourra �tre install� seulement _apr�s_l'installation
   r�ussie de l'interface perl g�n�rique de base de donn�es.

   Les �tapes de l'installation sont pratiquement les m�mes que les
   pr�c�dentes, donc commencez par taper

# perl Makefile.PL

   L�, le syst�me doit r�pondre avec un avertissement vous demandant de
   lire la documentation accompagnant le logiciel. Ensuite, il va
   d�tecter 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 affich�es. 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 pr�t � continuer et pouvez sauter le paragraphe suivant.

3.10 L'interface MsqlPerl

   Si vous d�cidez d'utiliser l'interface globale MsqlPerl, aucun pilote
   particulier n'est n�cessaire ; seule l'archive MsqlPerl-1.15.tar.gz
   est utilis�e, puisque, comme cela a d�j� �t� dit, MsqlPerl fournit une
   interface directe entre perl et le serveur de base de donn�es, sans
   utiliser l'interface DBI. L'installation et le test sont tr�s faciles.

   Apr�s 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 r�ponse par d�faut peut �tre valid�e.

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

# msqladmin create test

3.11 Biblioth�que 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 test�s
   dans tous les cas.

   Un sous-r�pertoire 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 r�seau
    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 m�nage. Toutes les arborescences
   des sources msql et les modules perl peuvent �tre d�truites sans
   inconv�nient (cependant, vous ne devriez pas d�truire les fichiers
   archives !) puisque les binaires et la documentation sont maintenant
   dans des r�pertoires diff�rents.

4. Un exemple de Base de Donn�es

   Apr�s avoir termin� la proc�dure d'installation, nous pouvons
   maintenant lancer l'application donn�e en exemple. En fonction de la
   version de msql install�e et de l'interface perl utilis�e, nous
   devrons modifier un peu ce programme.

   Tout d'abord, le fichier index.html, dans le r�pertoire
   /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 s�r, 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
   pr�c�dentes, 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 n�cessaire d'indiquer, dans notre exemple de script, qu'il faut
   utiliser l'interface MsqlPerl. La modification doit �tre faite �
   plusieurs endroits. D'abord, au d�but 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 n�cessaire de remplacer tout les appels errstr
   tels que celui de la ligne pr�c�dente par errmsg. Cela d�pend de la
   version utilis�e.

   Apr�s 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 d�veloppement de
   msql-2. Le script original n'ex�cutera 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 num�ros 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 cr�er des entr�es uniques.

5. Conclusion

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

   Chaque version de msql est livr�e avec un minimum d'outils
   d'administration, qui permettent � l'utilisateur de cr�er et d�truire
   des tables (msqladmin) et d'examiner la structure de la base de
   donn�es (relshow).

   Msql deuxi�me g�n�ration (c'est-�-dire msql-2) poss�de quelques
   utilitaires de plus : msqlimport et msqlexport. Ils permettent
   d'ins�rer et d'extraire des donn�es de la base SQL, � partir de et
   vers des fichiers. Ces utilitaires peuvent �tre utilis�s pour, _en une
   seule passe_, charger ou extraire de grandes quantit�s de donn�es, et
   cela sans que l'utilisateur ait � se soucier d'�crire _une seule_
   ligne de perl, de SQL, ni m�me de n'importe quoi.

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

   Dans tous les cas, vous �tes maintenant pr�ts � publier vos donn�es
   sur votre r�seau, et m�me sur le Web.