home *** CD-ROM | disk | FTP | other *** search
/ PC World 1999 August / PCWorld_1999-08_cd.bin / doc / HOWTO / WWW-mSQL-HOWTO < prev    next >
Text File  |  1997-11-13  |  43KB  |  1,024 lines

  1.   A mSQL and perl Web Server Mini HOWTO
  2.   Oliver Corff, corff@zedat.fu-berlin.de
  3.   v0.1, 17 September 1997
  4.  
  5.   This Mini HOWTO, highly inspired by Michael Schilli's article
  6.   Gebunkert: Datenbankbedienung mit Perl und CGI, published in the ger¡
  7.   man computer magazine iX 8/1997, describes how to build a SQL
  8.   client/server database using WWW and HTML for the user interface.
  9.  
  10.   1.  About this Document
  11.  
  12.   1.1.  Intended Audience
  13.  
  14.   Everybody who wants to install a web server database but does not know
  15.   which software is necessary and how it is installed should benefit
  16.   from reading this text. This text provides all information necessary
  17.   to get a SQL database for a web server going; it does not go into any
  18.   detail of CGI programming, nor does it explain the SQL database
  19.   language. Excellent books are available on both topics, and it is the
  20.   intention of this text to provide a working platform based on which a
  21.   user can then study CGI programming and SQL.
  22.  
  23.   For getting a small scale SQL system running (not the notorious
  24.   example of a major airline booking system, or space mission management
  25.   database) it will be sufficient to have the software described in this
  26.   text and the documentation accompanying it. The user manual of msql (a
  27.   database introduced in this text) provides sufficient information on
  28.   SQL for building your own database.
  29.  
  30.   The reader of this text should have a working knowledge of how to
  31.   obtain files via ftp if he has no access to CD-ROMs, and a basic
  32.   understanding of how to build binaries from sources. Anyway, all steps
  33.   explained in this text were tested on a real life system and should
  34.   also work on the reader's system.
  35.  
  36.   1.2.  Conventions used in this text
  37.  
  38.   A user command:
  39.  
  40.   # make install
  41.  
  42.   Screen output from a program:
  43.  
  44.        Program installed. Read README for details on how to start.
  45.  
  46.   Sample code of a file:
  47.  
  48.   ______________________________________________________________________
  49.   # My comment
  50.   char letter;
  51.   ______________________________________________________________________
  52.  
  53.   2.  Introduction
  54.  
  55.   It can be safely assumed that databases with a high volume of data or
  56.   a complicated relational setup (like, perhaps,  a lexical database for
  57.   a living language) must be accessible to many users and operators at
  58.   the same time. Ideally, it should be possible to use existing
  59.   different hardware and software platforms that can be combined into
  60.   the actual system. In order to reduce the implementation cost, only
  61.   one system, the database server, needs to be powerful; the user
  62.   stations typically just display data and accept user commands, but the
  63.   processing is done on one machine only which led to the name client-
  64.   server database.  In addition, the user interface should be easy to
  65.   maintain and should require as little as possible on the client side.
  66.  
  67.   A system which meets these criteria can be built around the following
  68.   items of protocols, concepts and software:
  69.  
  70.      Linux
  71.         supplies the operating system. It is a stable Unix
  72.         implementation providing true multi-user multi-tasking services
  73.         with full network (TCP/IP e. a.) support.  Except from the
  74.         actual media and transmission cost, it is available free of
  75.         charge and comes in form of so-called distributions which
  76.         usually include everything needed from the basic OS to text
  77.         processing, scripting, software development, interface builders,
  78.         etc.
  79.  
  80.      HTML
  81.         is the Hypertext Markup Language used to build interfaces to
  82.         network systems like Intranets and the WWW, the World Wide Web.
  83.         HTML is very simple and can be produced with any ASCII-capable
  84.         text editor.
  85.  
  86.      Browsers
  87.         are text-based (e. g. Lynx) or graphical (e. g. Mosaic,
  88.         Netscape, Arena etc.) applications accepting, evaluating and
  89.         displaying HTML documents.  They are the only piece of software
  90.         which is directly operated by the database user. Using browsers,
  91.         it is possible to display various types of data (text, possibly
  92.         images) and communicate with http servers (see next) on about
  93.         every popular computer model for which a browser has been made
  94.         available.
  95.  
  96.      http servers
  97.         provide access to the area of a host computer where data
  98.         intended for public use in a network are stored. They understand
  99.         the http protocol and procure the information the user requests.
  100.  
  101.      SQL
  102.         Structured Query Language is a language for manipulating data in
  103.         relational databases. It has a very simple grammar and is a
  104.         standard with wide industry support.  SQL-based databases have
  105.         become the core of the classical client/server database concept.
  106.         There are many famous SQL systems available, like Oracle,
  107.         Informix etc., and then there is also msql which comes with a
  108.         very low or even zero price tag if it is used in academical and
  109.         educational environments.
  110.  
  111.      CGI
  112.         Common Gateway Interface is the programming interface between
  113.         the system holding the data (in our case an SQL-based system)
  114.         and the network protocol (HTML, of course).  CGIs can be built
  115.         around many programming languages, but a particularly popular
  116.         language is perl.
  117.  
  118.      perl
  119.         is an extremely powerful scripting language which combines all
  120.         merits of C, various shell languages, and stream manipulation
  121.         languages like awk and sed.  Perl has a lot of modularized
  122.         interfaces and can be used to control SQL databases, for
  123.         example.
  124.  
  125.   3.  Installation Procedure
  126.  
  127.   3.1.  Hardware Requirements
  128.  
  129.   No general statement can be made about the hardware requirements of a
  130.   database server. Too much depends on the expected number of users, the
  131.   kind of application, the network load etc. In a small environment with
  132.   only a few users and little network traffic a i486-equivalent machine
  133.   with 16 MB of RAM can be completely sufficient. Linux, the operating
  134.   system, is very efficient in terms of resources, and can supply enough
  135.   horse-power for running a broad variety of applications at the same
  136.   time. Of course, faster processors and more RAM mean more speed, but
  137.   much more important than the processor is the amount of RAM. The more
  138.   RAM the system has the less it is forced to swap memory intensive
  139.   processes to disk in case a bottleneck occurs.
  140.  
  141.   Given anything like 32 MB RAM and a PCI bus, searches and sorting
  142.   operations can be done without much resorting to swap files etc.,
  143.   resulting in lightening fast speed.
  144.  
  145.   The model installation described in this article was made on a IBM 686
  146.   (133Mhz) with 32 MB RAM and a 1.2 GB IDE hard disk.  Assuming that the
  147.   installation process starts from scratch, here is a list of the
  148.   necessary steps.
  149.  
  150.   3.2.  Software Requirements
  151.  
  152.   The software described in this article is available from the Internet
  153.   or from CD-ROM. The following products were used:
  154.  
  155.   ╖  Red Hat Linux PowerTools: 6 CD's Complete Easy-to-Use Red Hat 4.2,
  156.      Summer '97; alternatively from http://www.redhat.com;
  157.  
  158.   ╖  msql SQL database server: it is now available in two versions. The
  159.      versions have differences in the number of transactions they can
  160.      handle, the administration interface, etc. The elder version,
  161.      1.0.16, is available from Sunsite mirrors. The ELF executable can
  162.      be found at sunsite:apps/database/sql/msql-1.0.16 or on CD-ROM
  163.      (here: disc 4 of InfoMagic Linux Developer's Resource, 6-CD set,
  164.      December 1996) or alternatively from the following URL:
  165.      http://www.infomagic.com.
  166.  
  167.      The newer version, 2.0.1, can be directly obtained from Hughes'
  168.      homepage in Australia (http://www.hughes.com.au) or from numerous
  169.      mirror sites around the world;
  170.  
  171.   ╖  perl from CPAN: The Comprehensive Perl Archive Network.  Walnut
  172.      Creek CDROM, ISBN 1-57176-077-6, May 1997;
  173.  
  174.   ╖  Michael Schilli's CGI example program from computer journal iX
  175.      8/1997, pages 150--152, available via ftp from ftp.uni-
  176.      paderborn.de:/doc/magazin/iX;
  177.  
  178.   3.3.  Installing the Operating System
  179.  
  180.   Linux is installed in form of the Red Hat Linux Distribution 4.2. In
  181.   order to install successfully, the machine must either have a DOS-
  182.   accessible CD-ROM drive, a bootable CD-ROM drive, or else a boot disk
  183.   must be made following the instructions on the Linux CD.
  184.  
  185.   During installation the user has the choice to select and configure
  186.   numerous software packages. It is convenient to select the following
  187.   items now:
  188.  
  189.   ╖  TCP/IP network support,
  190.  
  191.   ╖  the http server Apache, and
  192.  
  193.   ╖  the scripting language perl, and
  194.  
  195.   ╖  the X Window System, as well as
  196.  
  197.   ╖  the browsers Arena (graphical) and Lynx (text-based).
  198.  
  199.   All these packages are provided with the Linux distribution.  If you
  200.   do not install these packages now you still have the chance to do this
  201.   later with the assistance of glint, the graphical and intuitive
  202.   software package installation manager. Be sure to be root when
  203.   installing these packages.
  204.  
  205.   It is beyond the scope of this article to describe the network
  206.   installation and initialization procedure. Please consult the online
  207.   (manpages, HTML, texinfo) and printed (Linux Bible, etc. etc.)
  208.   documentation.
  209.  
  210.   The installation procedure of Red Hat is very mature and requires only
  211.   little user attention besides the usual choices (like providing host
  212.   names, etc.). Once the installation ends successfully, the system is
  213.   basically ready to go.
  214.  
  215.   Installing the X Window System is not mandatory for a pure server but
  216.   it makes local access and testing much easier. The X installation
  217.   procedure is done by any of several programs; XF86Setup offers the
  218.   most extensive self-testing facilities and needs the least handling of
  219.   hairy details (like video clock programming, etc.). The only
  220.   requirement is that the software can detect the video adapter. A cheap
  221.   accelerated graphics adapter (like Trio S64 based cards prior to
  222.   S64UV+) usually works ``out of the box''.
  223.  
  224.   At this point we assume that our system is up and running and that
  225.   Apache, Perl and the X Window System have been successfully installed.
  226.   We further assume that all standard structures like the file and
  227.   directory structure are kept as they are defined in the installation.
  228.   Last but not least we leave the host name as it is, and do at this
  229.   moment accept the name localhost. We'll use this name for testing the
  230.   installation; once the whole system works the true name can be added.
  231.   Please note that the network setup also requires editing the files
  232.   /etc/hosts, among others. Ideally this should be done with the
  233.   administration tools provided to user root.
  234.  
  235.   3.4.  The http Server
  236.  
  237.   The http server supplied with Linux is known as Apache to humans and
  238.   as httpd to the system. The manpage (man httpd) explains how to
  239.   install and start the http daemon (hence httpd) but, as mentioned, if
  240.   the installation went without problems then the server should be
  241.   running.  You can verify the directory tree: there must be a directory
  242.   /home/httpd/ with three subdirectories: ../cgi-bin/, be a file
  243.   index.html. Later we will manipulate or replace this file by our own
  244.   index.html. All configuration information is stored
  245.   in/etc/httpd/conf/. The system is well preconfigured and does not need
  246.   further setup provided the installation went without error.
  247.  
  248.   3.5.  The Browsers
  249.  
  250.   There are essentially three types of browsers available for Linux:
  251.   pure text-based systems like Lynx, experimental and simple ones like
  252.   Arena (free!) and commercial ones like Netscape (shareware!) with Java
  253.   support. While Lynx and Arena come with Linux, Netscape must be
  254.   procured from other sources. Netscape is available as a precombiled
  255.   binary for Linux on ix86 architectures and will run ``out of the box''
  256.   as soon as the archive is unpacked.
  257.  
  258.   3.5.1.  Configuring Lynx
  259.  
  260.   Once Lynx is started it will look for a `default URL' which is usually
  261.   not very meaningful if the system does not have permanent Internet
  262.   access.  In order to change the default URL (and lots of other
  263.   configuration details) the system administrator should edit
  264.   /usr/lib/lynx.cfg. The file is big, around 57000 bytes and contains
  265.   occasionally contradicting information. It states its own home as
  266.   /usr/local/lib/. Not far from top is a line beginning with STARTFILE.
  267.   We replace this line by the following entry:
  268.   STARTFILE:http://localhost and make sure that no spacing etc. is
  269.   inserted:
  270.  
  271.   ______________________________________________________________________
  272.   # STARTFILE:http://www.nyu.edu/pages/wsn/subir/lynx.html
  273.   STARTFILE:http://localhost
  274.   ______________________________________________________________________
  275.  
  276.   After saving the file, Lynx should now reveal our index.html document
  277.   if started without arguments.
  278.  
  279.   3.5.2.  Configuring Arena
  280.  
  281.   Arena first looks for its own default URL when started without
  282.   arguments.  This URL is hard-wired into the executable but can be
  283.   overrun by the environment variable WWW_HOME. The system administrator
  284.   can place a line saying WWW_HOME="http://localhost" in /etc/profile.
  285.   The variable must then be exported, either by a separate statement
  286.   (export WWW_HOME) or by appending WWW_HOME to the existing export
  287.   statement:
  288.  
  289.   ______________________________________________________________________
  290.   WWW_HOME="http://localhost"
  291.   export WWW_HOME
  292.   ______________________________________________________________________
  293.  
  294.   After relaunching a login shell, the new default URL is now system-
  295.   wide known to Arena.
  296.  
  297.   3.5.3.  Installing and Configuring Netscape
  298.  
  299.   Netscape is a commercial product and thus not included with the Linux
  300.   distributions. It is either downloadable from the Internet or
  301.   available from software collections on CDROM. Netscape comes in form
  302.   of precompiled binaries for every important hardware platform. For
  303.   installation purposes, it is useful to create a directory
  304.   /usr/local/Netscape/ where the archive is unpacked. The files can be
  305.   kept in place (except for the Java library: follow the instructions in
  306.   the README file that comes with the Netscape binary), and it is
  307.   sufficient to create a soft link in /usr/local/bin/ by issuing the
  308.   command
  309.  
  310.   # ln -s /usr/local/Netscape/netscape .
  311.  
  312.   from within /usr/local/bin/.
  313.  
  314.   Netscape is now ready for use and can be configured via the
  315.   ``Options'' menu. In ``General Preferences'' there is a card
  316.   ``Appearance'' with the entry ``Home Page Location''. Enter
  317.   http://localhost here and do not forget to save the options (via
  318.   ``Options'' --- ``Save Options'') before exiting Netscape. At the next
  319.   startup, Netscape will now show the Apache `homepage'.
  320.  
  321.   3.6.  Cooperation of Apache and Browsers
  322.  
  323.   You can now conduct the first real test of both the browser and the
  324.   http server: simply start any of the available browsers and the
  325.   Apache: Red Hat Linux Web Server page will pop up.  This page shows
  326.   the file locations and other basics of http server installation. If
  327.   this page is not displayed please check whether the files mentioned
  328.   above are in place and whether the browser configuration is correct.
  329.   Close edited configuration files before you start the browser again.
  330.   If all files are in place and the browsers seem to be configured
  331.   correctly then examine the network setup of your machine. Either the
  332.   host name is different from what was entered in the configuration, or
  333.   the network setup as such is not correct. It is utterly important that
  334.   /etc/hosts contains at least a line like
  335.  
  336.   ______________________________________________________________________
  337.   127.0.0.1               localhost localhost.localdomain
  338.   ______________________________________________________________________
  339.  
  340.   which implies that you can connect locally to your machine. One can
  341.   verify this by issuing any network-sensitive command requiring a host
  342.   name as argument, like telnet localhost (provided telnet is
  343.   installed). If that does not work then the network setup must be veri¡
  344.   fied before continuing with the main task.
  345.  
  346.   3.7.  The Database Engine and its Installation
  347.  
  348.   Installing the database requires only little more preparation than the
  349.   previous installation steps. There are a few SQL database engines
  350.   available with different runtime and administrative requirements, and
  351.   possibly one of the most straightforward systems is msql, or ``Mini-
  352.   SQL'' by David Hughes. msql is shareware. Depending on the version
  353.   used, commercial sites are charged USD 250.00 and more, private users
  354.   are charged USD 65.00 and more, and only educational institutions and
  355.   registered non-profit organizations can use this software free of
  356.   charge.  Please note that the exact figures are provided in the
  357.   licence notes of the database documentation. The figures given here
  358.   serve as a rough indicator only.
  359.  
  360.   A few words are in place here why the author chose msql. First of all,
  361.   there is personal experience. While searching for a database engine
  362.   the author found msql to be about the easiest to install and maintain,
  363.   and it provides enough coverage of the SQL language to meet general
  364.   needs. Only when writing these lines, the author discovered the
  365.   following words of praise in  Alligator Descartes' DBI FAQ (perl
  366.   database interface FAQ):
  367.  
  368.        From the current author's point of view, if the dataset is
  369.        relatively small, being tables of less than 1 million rows,
  370.        and less than 1000 tables in a given database, then mSQL is
  371.        a perfectly acceptable solution to your problem.  This
  372.        database is extremely cheap, is wonderfully robust and has
  373.        excellent support. ...
  374.  
  375.   Msql is available in two versions now, msql-1.0.16 and msql-2.0.1,
  376.   which differ in performance (not noticeable in small scale projects)
  377.   and accompanying software (the newer version comes with more tools,
  378.   its own scripting language, etc.).  We will describe both versions of
  379.   msql since their installion differs in a few points.
  380.  
  381.   3.7.1.  Installing msql-1.0.16
  382.  
  383.   msql is available as source and as compiled executable with ELF
  384.   support.  Using the ELF binaries makes installation easy since the
  385.   archive file msql-1.0.16.ELF.tgz contains a complete absolute
  386.   directory tree so that all directories are generated properly when
  387.   unpacked from /.
  388.  
  389.   If you decide to compile msql-1.0.16 yourself and are going to use the
  390.   MsqlPerl package rather than the DBI interface (see a detailed
  391.   discussion on the difference between these two further down) then be
  392.   prepared that MsqlPerl might complain during the test suites that some
  393.   instruction inside msql failed. In this case a patch may be necessary
  394.   which is described in the MsqlPerl documentation (file
  395.   patch.lost.tables). Notably, this demands including three lines in
  396.   msqldb.c after line 1400 which says  entry->def = NULL;:
  397.  
  398.           *(entry->DB) = 0;
  399.           *(entry->table) = 0;
  400.           entry->age = 0;
  401.  
  402.   The code fragment should now look like
  403.  
  404.   ______________________________________________________________________
  405.           freeTableDef(entry->def);
  406.           safeFree(entry->rowBuf);
  407.           safeFree(entry->keyBuf);
  408.           entry->def = NULL;
  409.           *(entry->DB) = 0;
  410.           *(entry->table) = 0;
  411.           entry->age = 0;
  412.   ______________________________________________________________________
  413.  
  414.   Compiling msql involves several steps. After unpacking the source
  415.   archive, it is necessary to build a target directory. This is done by
  416.   saying
  417.  
  418.   # make target
  419.  
  420.   If successful, the system will then answer with
  421.  
  422.        Build of target directory for Linux-2.0.30-i486 complete
  423.  
  424.   You must now change into this newly created directory and run a
  425.  
  426.   # ./setup
  427.  
  428.   command first. The ./ sequence is necessary to make sure that really
  429.   the command setup in this directory and not another command which hap¡
  430.   pens to have the same name is executed. You will then be asked ques¡
  431.   tions on the location of the source directory and whether a root
  432.   installation is desired. These questions answered, the system should
  433.   then run a number of tests checking for available software (compilers,
  434.   utilities etc.) and finally say
  435.  
  436.        Ready to build mSQL.
  437.  
  438.        You may wish to check "common/site.h" although the defaults should be
  439.        fine.  When you're ready, type  "make all" to build the software
  440.  
  441.   We say
  442.  
  443.   # make all
  444.  
  445.   If everything went as intended, we'll read:
  446.  
  447.        make[2]: Leaving directory `/usr/local/Minerva/src/msql'
  448.        <-- [msql] done
  449.  
  450.        Make of mSQL complete.
  451.        You should now mSQL using make install
  452.  
  453.        NOTE : mSQL cannot be used free of charge at commercial sites.
  454.               Please read the doc/License file to see what you have to do.
  455.  
  456.        make[1]: Leaving directory `/usr/local/Minerva/src'
  457.  
  458.   All binaries must then be made visible to the search paths by creating
  459.   soft links in /usr/local/bin/. Change to that directory and issue the
  460.   command
  461.  
  462.   # ln -s /usr/local/Minerva/bin/* .
  463.  
  464.   after which the links will be properly set.
  465.  
  466.   3.7.2.  Testing msql-1
  467.  
  468.   After the installation it is now possible to test whether the database
  469.   works. Before anything else is done, the server daemon must be
  470.   started.  The system administrator holding root privileges issues the
  471.   command
  472.  
  473.   # msqld &
  474.  
  475.   (do not forget to add the &, otherwise msql won't run in the back¡
  476.   ground.) after which the following screen message appears:
  477.  
  478.        mSQL Server 1.0.16 starting ...
  479.  
  480.        Warning : Couldn't open ACL file: No such file or directory
  481.        Without an ACL file global access is Read/Write
  482.  
  483.   This message tells us that everything so far worked since we did not
  484.   set up any access restrictions. For the moment it is sufficient to
  485.   start the msql daemon from within a shell but later we may want to
  486.   have the system startup automatically execute this command for us.
  487.   The command must then be mentioned in a suitable rc.d script.  Only
  488.   now the administrator can issue the first genuine database command:
  489.  
  490.   # msqladmin create inventur
  491.  
  492.   msql replies by saying Database "inventur" created.. As a further
  493.   proof, we find that the directory /usr/local/Minerva/msqldb/ contains
  494.   now the empty subdirectory ../inventur/. We could manipulate the newly
  495.   created database with the administration tools; these procedures are
  496.   all covered in detail in the msql documentation.
  497.  
  498.   3.7.3.  Installing msql-2.0.1
  499.  
  500.   There is now a newer, more powerful version of Hughes' mSQL server
  501.   available the installation of which is different in a few points.
  502.   Installing msql-2 from scratch involves the following steps. Copy the
  503.   archive to your extraction point, e. g.  /usr/local/msql-2/, then
  504.   untar the archive:
  505.  
  506.   # tar xfvz msql-2.0.1.tar.gz
  507.  
  508.   Change to the root direction of the install tree and issue a
  509.  
  510.   # make target
  511.  
  512.   Change to targets and look for your machine type. There should be a
  513.   new subdirectory Linux-(your version)-(your cpu)/.  Change to that
  514.   directory and start the setup facility located here:
  515.  
  516.   # ./setup
  517.  
  518.   There is also a file site.mm which can be edited. Maybe you have got
  519.   used to the directory name /usr/local/Minerva/ and want to preserve
  520.   it? In this case change the INST_DIR=...  line to your desired target
  521.   directory. Otherwise, leave everything as it is.
  522.  
  523.   Now you can start building the database:
  524.  
  525.   # make
  526.   # make install
  527.  
  528.   If everything went successfully, we'll see a message like:
  529.  
  530.        [...]
  531.  
  532.        Installation of mSQL-2 complete.
  533.  
  534.        *********
  535.        **   This is the commercial, production release of mSQL-2.0
  536.        **   Please see the README file in the top directory of the
  537.        **   distribution for license information.
  538.        *********
  539.  
  540.   After all is installed properly we have to take care of the
  541.   administration details. Here, the real differences from msql-1 begin.
  542.   First, a user msql is created which is responsible for database
  543.   administration.
  544.  
  545.   # adduser msql
  546.  
  547.   Then we have to change all ownerships in the mSQL directory to msql by
  548.   saying:
  549.  
  550.   # cd /usr/local/Minerva
  551.   # chown -R msql:msql *
  552.  
  553.   Then we create soft links for all database binaries in /usr/local/bin/
  554.   by saying:
  555.  
  556.   # ln -s /usr/local/Minerva/bin/* .
  557.  
  558.   3.7.4.  Testing msql-2
  559.  
  560.   We can now start the database server by issuing the command msql2d &
  561.   and should get a response similar to this one:
  562.        Mini SQL Version 2.0.1
  563.        Copyright (c) 1993-4 David J. Hughes
  564.        Copyright (c) 1995-7 Hughes Technologies Pty. Ltd.
  565.        All rights reserved.
  566.  
  567.                Loading configuration from '/usr/local/Minerva/msql.conf'.
  568.                Server process reconfigured to accept 214 connections.
  569.                Server running as user 'msql'.
  570.                Server mode is Read/Write.
  571.  
  572.        Warning : No ACL file.  Using global read/write access.
  573.  
  574.   That looks perfect. The database is compiled and in place, and we can
  575.   now continue with the perl modules since these rely partially on the
  576.   presence of a working database server for testing.
  577.  
  578.   Accidentally, this is also a good moment to print the complete manual
  579.   that comes with msql-2.0.1:
  580.  
  581.   # gzip -d manual.ps.gz
  582.   # lpr manual.ps
  583.  
  584.   We can proceed to building the interfaces now, but it is a good idea
  585.   to keep the newly created SQL server up and running since that makes
  586.   testing the interface libraries somewhat simpler.
  587.  
  588.   3.8.  Choice of Interfaces: DBI/mSQL, MsqlPerl, and Lite
  589.  
  590.   A frequently quoted saying in the Camel Book (the authorative perl
  591.   documentation) states that there is more than one way to achieve a
  592.   result when using perl. This, alas, holds true for our model
  593.   application, too. Basically there are three ways to access an msql
  594.   database via CGI. First of all the question is whether or not perl
  595.   shall be used. If we use perl (on which this article focuses) then we
  596.   still have the choice between two completely different interface
  597.   models. Besides using perl, we can also employ msql's own scripting
  598.   language, called Lite, which is reasonably simple and a close clone of
  599.   C.
  600.  
  601.   3.8.1.  DBI and DBD-mSQL
  602.  
  603.   By the time of this writing, using perl's generic database interface
  604.   called DBI is the method of choice. DBI has a few advantages: It
  605.   provides unified access control to a number of commercial databases
  606.   with a single command set. The actual database in use on a given
  607.   system is then contacted through a driver which effectively hides the
  608.   pecularities of that database from the programmer. Being such, using
  609.   DBI provides for a smooth transition between different databases by
  610.   different makers. In one single script it is even possible to contact
  611.   several different databases. Please refer to the DBI-FAQ for details.
  612.   There is, however, one drawback: The DBI interface is still under
  613.   development and shows rapidly galloping version numbers (sometimes
  614.   with updates taking place within less than a month). Similarly, the
  615.   individual database drivers are also frequently updated and may rely
  616.   on specific versions of the database interface. Users making first-
  617.   time installations should stick to the version numbers given in this
  618.   article since other versions may cause compilation and testing
  619.   problems the trouble shooting of which is nothing for the faint-
  620.   hearted.
  621.  
  622.   3.8.2.  MsqlPerl
  623.  
  624.   MsqlPerl is a library for directly accessing msql from perl scripts.
  625.   It bypasses the DBI interface and is fairly compact. Though it works
  626.   fine with both versions of msql, its usage is not promoted anymore in
  627.   favour of the generalized DBI interface. Nonetheless, in a given
  628.   installation it may prove to be the interface of choice since it is
  629.   small and easy to install. Notably, it has less version dependencies
  630.   than revealed by the interaction of DBI and particular database
  631.   drivers.
  632.  
  633.   3.8.3.  msql's own scripting language: Lite
  634.  
  635.   Last but not least msql-2 comes with its own scripting language: Lite.
  636.   The language is a close relative of C stripped of its oddities with
  637.   additional shell-like features (in a way, something like a very
  638.   specialized version of perl). Lite is a simple language and is well
  639.   documented in the msql-2 manual. The msql-2 package also comes with a
  640.   sample application sporting Lite.
  641.  
  642.   We will not describe Lite here because it is well documented but
  643.   fairly specific to msql-2, and because it is assumed that the readers
  644.   of this article have a basic interest in and a basic understanding of
  645.   perl.  Nonetheless it is highly recommended to have a closer look at
  646.   Lite: it may well be the case that Lite offers the solution of choice
  647.   in an exclusive msql-2 environment (implying no other databases are
  648.   involved) due to its simplicity and straightforward concept.
  649.  
  650.   3.9.  Going the generic way: DBI and DBD-msql
  651.  
  652.   We assume that perl was installed during the system setup or via the
  653.   package manager mentioned above. No further details will be given
  654.   here.  Nonetheless we first test whether our version of perl is up to
  655.   date:
  656.  
  657.   # perl -v
  658.  
  659.   perl should respond with the following message:
  660.  
  661.        This is perl, version 5.003 with EMBED
  662.                Locally applied patches:
  663.                  SUIDBUF - Buffer overflow fixes for suidperl security
  664.  
  665.                built under linux at Apr 22 1997 10:04:46
  666.                + two suidperl security patches
  667.  
  668.        Copyright 1987-1996, Larry Wall
  669.        [...]
  670.  
  671.   So far, everything is fine. The next step includes installing the perl
  672.   libraries for databases in general (DBI), the msql driver (DBD-mSQL)
  673.   and CGI. The CGI driver is necessary in any case.  The following
  674.   archives are necessary:
  675.  
  676.   1. DBI-0.81.tar.gz
  677.  
  678.   2. DBD-mSQL-0.65.tar.gz
  679.  
  680.   3. CGI.pm-2.31.tar.gz (or higher)
  681.  
  682.   A caveat is necessary here for beginners: the test installation
  683.   described here works fine using software with exactly these version
  684.   numbers, and combinations of other versions failed in one or the other
  685.   way. Debugging flawed version combinations is nothing for those who
  686.   are not very familiar with the intimate details of the calling
  687.   conventions etc. of the interfaces. Sometimes only a method is renamed
  688.   while performing the same task, but sometimes the internal structure
  689.   changes significantly. So, again, stick with these version numbers if
  690.   you want to be on the safe side even if you discover that version
  691.   numbers have increased in the meantime. Frequent updates of these
  692.   interfaces are the rule rather than the exception, so you should
  693.   really anticipate problems when installing other versions than those
  694.   indicated here.
  695.  
  696.   It is very important that the database driver for mSQL (DBD-mSQL) is
  697.   installed after the generic interface DBI.
  698.  
  699.   We start by creating the directory /usr/local/PerlModules/ as it is
  700.   very important to keep the original perl directory tree untouched.  We
  701.   could also choose a different directory name since the name is
  702.   completely uncritical, and unfortunately that is not really mentioned
  703.   in the README files of the verious perl modules.  Having copied the
  704.   above-mentioned archives to /usr/local/PerlModules/ we unpack them
  705.   saying
  706.  
  707.   # tar xzvf [archive-file]
  708.  
  709.   for every single of the three archives. Do not forget to supply the
  710.   real archive name to tar. The installation process for the three
  711.   modules is essentially stardardized; only the screen messages showing
  712.   important steps of individual packages are reproduced here.
  713.  
  714.   3.9.1.  Installing perl's Database Interface DBI
  715.  
  716.   The database interface must always be installed before installing the
  717.   specific database driver.  Unpacking the DBI archive creates the
  718.   directory /usr/local/PerlModules/DBI-0.81/. Change to that directory.
  719.   There are a README file (you should read it) and a perl-specific
  720.   makefile. Now issue the command
  721.  
  722.   # perl Makefile.PL
  723.  
  724.   The system should answer with a lengthy message of which the most
  725.   important part is shown here::
  726.  
  727.   [...]
  728.   MakeMaker (v5.34)
  729.   Checking if your kit is complete...
  730.   Looks good
  731.           NAME => q[DBI]
  732.           PREREQ_PM => {  }
  733.           VERSION_FROM => q[DBI.pm]
  734.           clean => { FILES=>q[$(DISTVNAME)/] }
  735.           dist => { DIST_DEFAULT=>q[clean distcheck disttest [...]
  736.   Using PERL=/usr/bin/perl
  737.  
  738.   WARNING! By default new modules are installed into your 'site_lib'
  739.   directories. Since site_lib directories come after the normal library
  740.   directories you MUST delete old DBI files and directories from your
  741.  
  742.   Writing Makefile for DBI
  743.  
  744.   This looks good, as the program says, and we can proceed with the next
  745.   step:
  746.  
  747.   # make
  748.  
  749.   If no error message occurs (the detailed protocol dumped on screen is
  750.   not an error message) we test the newly installed library with the
  751.   command
  752.  
  753.   # make test
  754.  
  755.   Watch the output for the following lines (you can always scroll back
  756.   with [Shift]-[PgUp]):
  757.  
  758.        [...]
  759.        t/basics............ok
  760.        t/dbidrv............ok
  761.        t/examp.............ok
  762.        All tests successful.
  763.        [...]
  764.        DBI test application $Revision: 1.20 $
  765.        Switch: DBI-0.81 Switch by Tim Bunce, 0.81
  766.        Available Drivers: ExampleP, NullP, Sponge
  767.        ExampleP: testing 2 sets of 5 connections:
  768.        Connecting... 1 2 3 4 5
  769.        Disconnecting...
  770.        Connecting... 1 2 3 4 5
  771.        Disconnecting...
  772.        Made 10 connections in  0 secs ( 0.00 usr  0.00 sys =  0.00 cpu)
  773.  
  774.        test.pl done
  775.  
  776.   The final step is to install all files in their proper directories.
  777.   The following command will take care of it:
  778.  
  779.   # make install
  780.  
  781.   No more duties are left. If for some reason the installation failed
  782.   and you want to redo it do not forget to issue
  783.   # make realclean
  784.  
  785.   first. This will remove stale leftovers of the previous installation.
  786.   You can also remove the files which were installed by copying the
  787.   screen contents (shown abbreviated)
  788.  
  789.        Installing /usr/lib/perl5/site_perl/i386-linux/./auto/DBI/DBIXS.h
  790.        Installing /usr/lib/perl5/site_perl/i386-linux/./auto/DBI/DBI.so
  791.        Installing /usr/lib/perl5/site_perl/i386-linux/./auto/DBI/DBI.bs
  792.        [...]
  793.        Writing /usr/lib/perl5/site_perl/i386-linux/auto/DBI/.packlist
  794.        Appending installation info to /usr/lib/perl5/i386-linux/5.003/perllocal.pod
  795.  
  796.   into a file, replacing every Installing with rm. Provided you named
  797.   the file uninstall you can then say
  798.  
  799.   # . uninstall
  800.  
  801.   which will remove the recently installed files.
  802.  
  803.   3.9.2.  perl's msql Driver DBD-mSQL
  804.  
  805.   The msql driver can only be installed after a successful installation
  806.   of perl's generic database interface.
  807.  
  808.   The basic steps are the same as above; so first go through
  809.  
  810.   # perl Makefile.PL
  811.  
  812.   Here, the system should answer with an urgent warning to read the
  813.   accompanying documentation. It will then detect where msql resides,
  814.   and asks which version you use:
  815.  
  816.        $MSQL_HOME not defined. Searching for mSQL...
  817.        Using mSQL in /usr/local/Hughes
  818.  
  819.         -> Which version of mSQL are you using [1/2]?
  820.  
  821.   State your correct version number. Quite a few lines of text will fol¡
  822.   low. Watch for the following ones:
  823.  
  824.        Splendid! Your mSQL daemon is running. We can auto-detect your configuration!
  825.  
  826.        I've auto-detected your configuration to be running on port: 1114
  827.  
  828.   You can now test the driver by saying
  829.  
  830.   # make test
  831.  
  832.   Again, a lengthy output follows. If it ends with
  833.  
  834.        Testing: $cursor->func( '_ListSelectedFields' ). This will fail.
  835.                ok: not a SELECT in msqlListSelectedFields!
  836.        Re-testing: $dbh->do( 'DROP TABLE testaa' )
  837.                ok
  838.        *** Testing of DBD::mSQL complete! You appear to be normal! ***
  839.  
  840.   you are on the safe side of life and can install your driver by saying
  841.  
  842.   # make install
  843.  
  844.   You are now ready to go and can skip the next paragraph.
  845.  
  846.   3.10.  The MsqlPerl Interface
  847.  
  848.   If you decide to use the exclusive MsqlPerl interface then no generic
  849.   database driver is needed, only MsqlPerl-1.15.tar.gz, since, as
  850.   mentioned earlier, MsqlPerl provides a direct interface between perl
  851.   and the database server without using the DBI interface.  Installing
  852.   and testing is straightforward.
  853.  
  854.   After saying perl Makefile.PL the make utility can be started.  First
  855.   you have to answer the question where mSQL resides. If it resides in
  856.   /usr/local/Minerva/ the default answer can be confirmed.
  857.  
  858.   Then do a make test. Before doing so you must ensure that you have a
  859.   database named test and that you have read and write permissions for
  860.   it. This can be done by
  861.  
  862.   # msqladmin create test
  863.  
  864.   3.11.  perl's CGI library
  865.  
  866.   Installing perl's CGI part is the simpliest of the three steps.
  867.   Execute the following commands in the given order and everything is
  868.   done:
  869.  
  870.   # perl Makefile.PL
  871.   # make
  872.   # make install
  873.  
  874.   Unlike the previous drivers this interface does not have a test option
  875.   (# make test) whereas the other modules should be tested in any case.
  876.  
  877.   A subdirectory with CGI example scripts is also created. You can copy
  878.   the contents of this directory into /home/http/cgi-bin/ and use the
  879.   browser to experiment with the scripts.
  880.  
  881.   3.12.  Installation Checklist
  882.  
  883.   We went through the following steps, in this order:
  884.  
  885.   1. Install Linux with networking support
  886.  
  887.   2. Install a http server, e. g. Apache
  888.  
  889.   3. Install a browser, e. g. Arena, lynx or Netscape
  890.  
  891.   4. Install an SQL server, e. g. msql
  892.  
  893.   5. Install a suitable perl SQL interface
  894.  
  895.   6. Install the CGI files
  896.  
  897.   Finally, you can do some clean-up. All source trees for msql and the
  898.   perl modules can be safely deleted (however, you should not delete
  899.   your archive files!) since the binaries and documentation are now
  900.   based in different directories.
  901.  
  902.   4.  Running an Example Database
  903.  
  904.   After completing the system installation we can now finally run a
  905.   model application. Depending on the version of msql installed and the
  906.   perl database interface used, we have to modify the sample programs in
  907.   a few points.
  908.  
  909.   First however, the file index.html residing in /home/httpd/html/ must
  910.   be modified to allow calling a sample database application. We can
  911.   place our database (which we call database.cgi or inventur.cgi here
  912.   despite its archive name perl.lst.ck) in /home/httpd/html/test/.
  913.  
  914.   We add one line (of course, depending on your installation choices)
  915.   similar to the following to index.html:
  916.  
  917.   ______________________________________________________________________
  918.   <LI>Test the <A HREF="test/database.cgi">Database, DBI:DBD-mSQL style!</A>
  919.   <LI>Test the <A HREF="test/inventur.cgi">Database, MsqlPerl style!</A>
  920.   ______________________________________________________________________
  921.  
  922.   Usually you should only pick one of these two choices but if you have
  923.   both types of database interface installed you can leave both lines
  924.   here as they are. You can then compare performance, etc.
  925.  
  926.   4.1.  Adapting the sample script for MsqlPerl
  927.  
  928.   Our sample script has to be told to use the MsqlPerl interface. The
  929.   modification takes place in several locations. First, near the
  930.   beginning of the file, we change the use clause:
  931.  
  932.   ______________________________________________________________________
  933.   #
  934.   # use DBI;            # Generisches Datenbank-Interface
  935.   use Msql;
  936.   ______________________________________________________________________
  937.  
  938.   Then, near line 27, the MsqlPerl syntax does not require the
  939.   mentioning of a specific driver:
  940.  
  941.   ______________________________________________________________________
  942.   # $dbh = DBI->connect($host, $database, '', $driver) ||
  943.   $dbh = Msql->connect($host, $database) ||
  944.   ______________________________________________________________________
  945.  
  946.   Then, from line 33 onward throughout the whole script,  we have to
  947.   change all instances of do against query:
  948.  
  949.   ______________________________________________________________________
  950.   # $dbh->do("SELECT * FROM hw") || db_init($dbh);
  951.   $dbh->query("SELECT * FROM hw") || db_init($dbh);
  952.   ______________________________________________________________________
  953.  
  954.   Finally, in MsqlPerl speak, line 207 can be commented out:
  955.  
  956.   ______________________________________________________________________
  957.   # $sth->execute || msg("SQL Error:", $sth->errstr);
  958.   ______________________________________________________________________
  959.  
  960.   In addition, it may become necessary to swap all errstr calls like the
  961.   one in the preceding code fragment against errmsg.  This is also
  962.   version dependent.
  963.  
  964.   After these modifications, the script should run smoothly.
  965.  
  966.   4.2.  Adapting the sample script for msql-2
  967.  
  968.   The SQL syntax was redefined during the development of mslq-2. The
  969.   original script will fail to execute the table initialization
  970.   statements in lines 45 -- 58. The primary key modifier is no longer
  971.   supported by msql-2, and should simply be skipped:
  972.  
  973.   ______________________________________________________________________
  974.       $dbh->do(<<EOT) || die $dbh->errstr; # Neue Personen-Tabelle
  975.           create table person (
  976.   # We do not need the 'primary key' modifier anymore in msql-2!
  977.   #           pn        int primary key,   # Personalnummer
  978.               pn        int,               # Personalnummer
  979.               name      char(80),          # Nachname, Vorname
  980.               raum      int                # Raumnummer
  981.           )
  982.   EOT
  983.       $dbh->do(<<EOT) || die $dbh->errstr; # Neue Hardware-Tabelle
  984.           create table hw (
  985.   # We do not need the 'primary key' modifier anymore in msql-2!
  986.   #           asset int primary key,       # Inventurnummer
  987.               asset int,                   # Inventurnummer
  988.               name   char(80),             # Bezeichnung
  989.               person int                   # Besitzer
  990.           )
  991.   EOT
  992.   ______________________________________________________________________
  993.  
  994.   Unfortunately, this specific script will then accept new entries with
  995.   identical personnel numbers; the msql-1 modifier primary key intends
  996.   to prevent exactly this behaviour. The msql-2 documentation shows how
  997.   to use the CREATE INDEX clause to create unique entries.
  998.  
  999.   5.  Conclusion and Outlook
  1000.  
  1001.   If you have installed msql-2 on your system then you can have a look
  1002.   at the sample programs written in Lite, msql-2's own scripting
  1003.   language.
  1004.  
  1005.   Either version of msql comes with a basic set of administration tools
  1006.   which allow the user to create and drop tables (msqladmin) and examine
  1007.   database structures (relshow).
  1008.  
  1009.   The second generation msql (i.e. msql-2) has a few more genuinely
  1010.   useful utilities: msqlimport and msqlexport. These allow the dumping
  1011.   of flat line data files into and out of the SQL database. They can be
  1012.   used for loading quantities of existing data d'un coup into existing
  1013.   tables, or extract flat data from tables, and the user does not have
  1014.   to deal with writing a single line of perl or SQL or whatever code for
  1015.   this task.
  1016.  
  1017.   If you want to write your own perl scripts dealing with databases
  1018.   you'll find sufficient support in the example files and the extensive
  1019.   on-line documentation that comes with the DBI module.
  1020.  
  1021.   Anyway, you are now ready to go and present your data to the users of
  1022.   your own network, or even the WWW.
  1023.  
  1024.