Differences between current version and predecessor to the previous major change of HowToWWWmSQLHOWTO.
Other diffs: Previous Revision, Previous Author, or view the Annotated Edit History
Newer page: | version 3 | Last edited on Monday, October 25, 2004 4:55:34 am | by AristotlePagaltzis | |
Older page: | version 2 | Last edited on Friday, June 7, 2002 1:07:49 am | by perry | Revert |
@@ -1,1514 +1 @@
-
-
-
-A mSQL and perl Web Server Mini HOWTO
-
-
-
-----
-
-!!!A mSQL and perl Web Server Mini HOWTO
-
-!!Oliver Corff, corff@zedat.fu-berlin.dev0.1, 17 September 1997
-
-
-----
-''This Mini HOWTO, highly inspired by Michael Schilli's article
-''Gebunkert: Datenbankbedienung mit Perl und CGI'', published
-in the german computer magazine iX 8/1997, describes how to build
-a SQL client/server database using WWW and HTML for the user interface.''
-----
-
-
-
-
-!!1. About this Document
-
-
-****1.1 Intended Audience
-
-****1.2 Conventions used in this text
-
-
-
-
-
-!!2. Introduction
-
-
-
-
-!!3. Installation Procedure
-
-
-****3.1 Hardware Requirements
-
-****3.2 Software Requirements
-
-****3.3 Installing the Operating System
-
-****3.4 The http Server
-
-****3.5 The Browsers
-
-****3.6 Cooperation of Apache and Browsers
-
-****3.7 The Database Engine and its Installation
-
-****3.8 Choice of Interfaces: DBI/mSQL, !MsqlPerl, and Lite
-
-****3.9 Going the generic way: DBI and DBD-msql
-
-****3.10 The !MsqlPerl Interface
-
-****3.11 perl's CGI library
-
-****3.12 Installation Checklist
-
-
-
-
-
-!!4. Running an Example Database
-
-
-****4.1 Adapting the sample script for !MsqlPerl
-
-****4.2 Adapting the sample script for msql-2
-
-
-
-
-
-!!5. Conclusion and Outlook
-----
-
-!!1. About this Document
-
-
-
-
-!!1.1 Intended Audience
-
-
-
-Everybody who wants to install a web server database but does not
-know which software is necessary and how it is installed should
-benefit from reading this text. This text provides all information
-necessary to get a SQL database for a web server going; it does
-''not'' go into any detail of CGI programming, nor does it explain
-the SQL database language. Excellent books are available on both
-topics, and it is the intention of this text to provide a working
-platform based on which a user can then study CGI programming and
-SQL.
-
-
-For getting a small scale SQL system running (not the notorious
-example of a major airline booking system, or space mission management
-database) it will be sufficient to have the software described in
-this text and the documentation accompanying it. The user manual
-of msql (a database introduced in this text) provides sufficient
-information on SQL for building your own database.
-
-
-The reader of this text should have a working knowledge of how
-to obtain files via ftp if he has no access to CD-ROMs, and
-a basic understanding of how to build binaries from sources. Anyway,
-all steps explained in this text were tested on a real life system
-and should also work on the reader's system.
-
-
-
-
-!!1.2 Conventions used in this text
-
-
-
-
-
-
-A user command:
-
-# make install
-
-
-
-Screen output from a program:
-
-
-Program installed. Read README for details on how to start.
-
-
-
-
-Sample code of a file:
-----
-
-# My comment
-char letter;
-
-----
-
-
-
-----
-
-!!2. Introduction
-
-
-It can be safely assumed that databases with a high volume of data
-or a complicated relational setup (like, perhaps, a lexical database
-for a living language) must be accessible to many users and operators
-at the same time. Ideally, it should be possible to use existing
-different hardware and software platforms that can be combined into
-the actual system. In order to reduce the implementation cost, only
-one system, the database server, needs to be powerful; the user stations
-typically just display data and accept user commands, but the processing
-is done on one machine only which led to the name client-server database.
-In addition, the user interface should be easy to maintain and
-should require as little as possible on the client side.
-
-
-A system which meets these criteria can be built around the following
-items of protocols, concepts and software:
-
-; __Linux__:
-
-supplies the operating system. It is a stable Unix
-implementation providing true multi-user multi-tasking
-services with full network (TCP/IP e. a.) support.
-Except from the actual media and transmission cost, it
-is available free of charge and comes in form of
-so-called distributions which usually include everything
-needed from the basic OS to text processing, scripting,
-software development, interface builders, etc.
-; __HTML__:
-
-is the Hypertext Markup Language used to build
-interfaces to network systems like Intranets and the
-WWW, the World Wide Web. HTML is very simple and can be
-produced with any ASCII-capable text editor.
-; __Browsers__:
-
-are text-based (e. g. Lynx) or graphical
-(e. g. Mosaic, Netscape, Arena etc.) applications
-accepting, evaluating and displaying HTML documents.
-They are the only
-piece of software which is directly operated by the
-database user. Using browsers, it is possible
-to display various types of data (text, possibly images)
-and communicate with http servers (see next) on about
-every popular computer model for which a browser has
-been made available.
-; __http servers__:
-
-provide access to the area of a host
-computer where data intended for public use in a
-network are stored. They understand the http protocol
-and procure the information the user requests.
-; __SQL__:
-
-Structured Query Language is a language for manipulating
-data in relational databases. It has a very simple
-grammar and is a standard with wide industry support.
-SQL-based databases have become the core of the classical
-client/server database concept. There are many famous SQL
-systems available, like Oracle, Informix etc., and then
-there is also msql which comes with a very low or even
-zero price tag if it is used in academical and educational
-environments.
-; __CGI__:
-
-Common Gateway Interface is the programming interface
-between the system holding the data (in our case an
-SQL-based system) and the network protocol (HTML, of course).
-CGIs can be built around many programming
-languages, but a particularly popular language is perl.
-; __perl__:
-
-is an extremely powerful scripting language which
-combines all merits of C, various shell languages,
-and stream manipulation languages like awk and sed.
-Perl has a lot of modularized interfaces and can be used
-to control SQL databases, for example.
-
-
-
-
-----
-
-!!3. Installation Procedure
-
-
-
-
-
-
-
-!!3.1 Hardware Requirements
-
-
-
-No general statement can be made about the hardware requirements of
-a database server. Too much depends on the expected number of users,
-the kind of application, the network load etc. In a small environment
-with only a few users and little network traffic a i486-equivalent
-machine with 16 MB of RAM can be completely sufficient. Linux, the
-operating system, is very efficient in terms of resources, and can
-supply enough horse-power for running a broad variety of applications
-at the same time. Of course, faster processors and more RAM mean more
-speed, but much more important than the processor is the amount of
-RAM. The more RAM the system has the less it is forced to swap
-memory intensive processes to disk in case a bottleneck occurs.
-
-
-Given anything like 32 MB RAM and a PCI bus, searches and sorting
-operations can be done without much resorting to swap files etc.,
-resulting in lightening fast speed.
-
-
-The model installation described in this article was made on a IBM 686
-(133Mhz) with 32 MB RAM and a 1.2 GB IDE hard disk. Assuming that the
-installation process starts from scratch, here is a list of the
-necessary steps.
-
-
-
-
-!!3.2 Software Requirements
-
-
-
-
-
-
-The software described in this article is available from the Internet
-or from CD-ROM. The following products were used:
-
-
-**** Red Hat Linux !PowerTools: 6 CD's Complete Easy-to-Use
-Red Hat 4.2, Summer '97; alternatively from
-http://www.redhat.com;
-
-****
-
-**** msql SQL database server: it is now available in
-two versions. The versions have differences in
-the number of transactions they can handle, the
-administration interface, etc. The elder version,
-1..16, is available from Sunsite mirrors. The
-ELF executable can be found at
-sunsite:apps/database/sql/msql-1..16
-or on CD-ROM (here: disc 4 of !InfoMagic Linux Developer's
-Resource, 6-CD set, December 1996) or alternatively
-from the following URL:
-http://www.infomagic.com.
-The newer version, 2..1, can be directly obtained
-from Hughes' homepage in Australia
-(http://www.hughes.com.au) or from numerous
-mirror sites around the world;
-
-****
-
-**** perl from CPAN: The Comprehensive Perl Archive Network.
-Walnut Creek CDROM, ISBN 1-57176-077-6, May 1997;
-
-****
-
-**** Michael Schilli's CGI example program from computer
-journal iX 8/1997, pages 150--152, available via ftp from
-ftp.uni-paderborn.de:/doc/magazin/iX;
-****
-
-
-
-
-
-!!3.3 Installing the Operating System
-
-
-
-Linux is installed in form of the Red Hat Linux Distribution 4.2. In order
-to install successfully, the machine must either have a DOS-accessible
-CD-ROM drive, a bootable CD-ROM drive, or else a boot disk must be made
-following the instructions on the Linux CD.
-
-
-During installation the user has the choice to select and configure
-numerous software packages. It is convenient to select the following
-items now:
-
-
-
-
-
-**** TCP/IP network support,
-****
-
-**** the http server Apache, and
-****
-
-**** the scripting language perl, and
-****
-
-**** the X Window System, as well as
-****
-
-**** the browsers Arena (graphical) and Lynx (text-based).
-****
-
-
-
-All these packages are provided with the Linux distribution.
-If you do not install these packages now you still have the chance to
-do this later with the assistance of glint, the graphical and intuitive
-software package installation manager. Be sure to be root when installing
-these packages.
-
-
-It is beyond the scope of this article to describe the network installation
-and initialization procedure. Please consult the online (manpages, HTML,
-texinfo) and printed (Linux Bible, etc. etc.) documentation.
-
-
-The installation procedure of Red Hat is very mature and requires only
-little user attention besides the usual choices (like providing host names,
-etc.). Once the installation ends successfully, the system is basically
-ready to go.
-
-
-Installing the X Window System is not mandatory for a pure server but
-it makes local access and testing much easier. The X installation procedure
-is done by any of several programs; XF86Setup offers the most extensive
-self-testing facilities and needs the least handling of hairy details
-(like video clock programming, etc.). The only requirement is that the
-software can detect the video adapter. A cheap accelerated graphics
-adapter (like Trio S64 based cards prior to S64UV+) usually works
-``out of the box''.
-
-
-At this point we assume that our system is up and running and that
-Apache, Perl and the X Window System have been successfully installed.
-We further assume that all standard structures like the file and
-directory structure are kept as they are defined in the installation.
-Last but not least we leave the host name as it is, and do at this moment
-accept the name localhost. We'll use this name for testing
-the installation; once the whole system works the true name can be added.
-Please note that the network setup also requires editing the
-files /etc/hosts, among others. Ideally this should be done with
-the administration tools provided to user root.
-
-
-
-
-
-
-
-!!3.4 The http Server
-
-
-
-
-
-
-The http server supplied with Linux is known as Apache to humans and
-as httpd to the system. The manpage (man httpd) explains how to install
-and start the http daemon (hence http''d'') but, as mentioned, if
-the installation went without problems then the server should be running.
-You can verify the directory tree: there must be a directory
-/home/httpd/ with three subdirectories: ../cgi-bin/,
-../html/ and ../icons/. In ../html/ there must
-be a file index.html. Later we will manipulate or replace this
-file by our own index.html. All configuration information is
-stored in/etc/httpd/conf/. The system is well preconfigured
-and does not need further setup provided the installation went without
-error.
-
-
-
-
-!!3.5 The Browsers
-
-
-
-
-
-
-There are essentially three types of browsers available for Linux:
-pure text-based systems like Lynx, experimental and simple ones like
-Arena (free!) and commercial ones like Netscape (shareware!) with
-Java support. While Lynx and Arena come with Linux, Netscape must
-be procured from other sources. Netscape is available as a precombiled
-binary for Linux on ix86 architectures and will run ``out of the box''
-as soon as the archive is unpacked.
-
-
-
-
-!Configuring Lynx
-
-
-
-
-
-Once Lynx is started it will look for a `default URL' which is usually
-not very meaningful if the system does not have permanent Internet access.
-In order to change the default URL (and lots of other configuration details)
-the system administrator should edit /usr/lib/lynx.cfg. The file
-is big, around 57000 bytes and contains occasionally contradicting
-information. It states its own home as /usr/local/lib/. Not
-far from top is a line beginning with STARTFILE. We replace this
-line by the following entry: STARTFILE:http://localhost and
-make sure that no spacing etc. is inserted:
-----
-
-# STARTFILE:http://www.nyu.edu/pages/wsn/subir/lynx.html
-STARTFILE:http://localhost
-
-----
-After saving the file, Lynx should now reveal our index.html
-document if started without arguments.
-
-
-
-
-!Configuring Arena
-
-
-
-
-
-Arena first looks for its own default URL when started without arguments.
-This URL is hard-wired into the executable but can be overrun by the
-environment variable WWW_HOME. The system administrator can place
-a line saying WWW_HOME="http://localhost" in /etc/profile.
-The variable must then be exported, either by a separate statement
-(export WWW_HOME) or by appending WWW_HOME to the
-existing export statement:
-----
-
-WWW_HOME="http://localhost"
-export WWW_HOME
-
-----
-After relaunching a login shell, the new default URL is now
-system-wide known to Arena.
-
-
-
-
-
-
-
-!Installing and Configuring Netscape
-
-
-
-
-
-Netscape is a commercial product and thus not included with the
-Linux distributions. It is either downloadable from the
-Internet or available from software collections on CDROM. Netscape
-comes in form of precompiled binaries for every important hardware
-platform. For installation purposes, it is useful to create a directory
-/usr/local/Netscape/ where the archive is unpacked. The files
-can be kept in place (except for the Java library: follow the instructions
-in the README file that comes with the Netscape binary), and
-it is sufficient to create a soft link in /usr/local/bin/ by
-issuing the command
-
-# ln -s /usr/local/Netscape/netscape .
-
-from within /usr/local/bin/.
-
-
-Netscape is now ready for use and can be configured via the ``Options''
-menu. In ``General Preferences'' there is a card ``Appearance'' with
-the entry ``Home Page Location''. Enter http://localhost here
-and do not forget to save the options (via ``Options'' --- ``Save Options'')
-before exiting Netscape. At the next startup, Netscape will now show
-the Apache `homepage'.
-
-
-
-
-!!3.6 Cooperation of Apache and Browsers
-
-
-
-
-
-
-You can now conduct the first real test of both the
-browser and the http server: simply start any of the available browsers
-and the Apache: Red Hat Linux Web Server page will pop up.
-This page shows the file locations and other basics of http server
-installation. If this page is not displayed please check whether the
-files mentioned above are in place and whether the browser configuration
-is correct. Close edited configuration files before you start the browser
-again. If all files are in place and the browsers seem to be configured
-correctly then examine the network setup of your machine. Either the
-host name is different from what was entered in the configuration, or
-the network setup as such is not correct. It is utterly important
-that /etc/hosts contains at least a line like
-----
-
-127...1 localhost localhost.localdomain
-
-----
-which implies that you can connect locally to your machine. One can
-verify this by issuing any network-sensitive command requiring a host name
-as argument, like telnet localhost (provided telnet
-is installed). If that does not work then the network setup must be
-verified before continuing with the main task.
-
-
-
-
-
-
-
-!!3.7 The Database Engine and its Installation
-
-
-
-
-
-
-Installing the database requires only little more preparation than the
-previous installation steps. There are a few SQL database engines available
-with different runtime and administrative requirements, and possibly
-one of the most straightforward systems is msql, or ``Mini-SQL'' by David
-Hughes. msql is shareware. Depending on the version used, commercial sites
-are charged USD 250.00 and more, private users are charged USD
-65.00 and more, and only educational institutions and registered
-non-profit organizations can use this software free of charge.
-Please note that the exact figures are provided in the licence notes
-of the database documentation. The figures given here serve as a rough
-indicator only.
-
-
-A few words are in place here why the author chose msql. First of
-all, there is personal experience. While searching for a database
-engine the author found msql to be about the easiest to install
-and maintain, and it provides enough coverage of the SQL language
-to meet general needs. Only when writing these lines, the author
-discovered the following words of praise in Alligator Descartes'
-DBI FAQ (perl database interface FAQ):
-
-
-
-
-From the current author's point of view, if the dataset is
-relatively small, being tables of less than 1 million
-rows, and less than 1000 tables in a given database, then
-mSQL is a perfectly acceptable solution to your problem.
-This database is extremely cheap, is wonderfully robust
-and has excellent support.
[[...
]
-
-
-
-Msql is available in two versions now, msql-1..16 and msql-2..1,
-which differ in performance (not noticeable in small scale projects)
-and accompanying software (the newer version comes with more tools,
-its own scripting language, etc.). We will describe both versions
-of msql since their installion differs in a few points.
-
-
-
-
-!Installing msql-1..16
-
-
-
-
-
-msql is available as source and as compiled executable with ELF support.
-Using the ELF binaries makes installation easy since the archive file
-msql-1..16.ELF.tgz contains a complete absolute directory tree
-so that all directories are generated properly when unpacked from /.
-
-
-If you decide to compile msql-1..16 yourself and are going to use
-the !MsqlPerl package rather than the DBI interface (see a detailed
-discussion on the difference between these two further down) then be
-prepared that !MsqlPerl might complain during the test suites that some
-instruction inside msql failed. In this case a patch may be necessary
-which is described in the !MsqlPerl documentation (file
-patch.lost.tables). Notably, this demands including three lines
-in msqldb.c after line 1400 which says entry->def = NULL;:
-
-*(entry->DB) = ;
-*(entry->table) = ;
-entry->age = ;
-
-The code fragment should now look like
-----
-
-freeTableDef(entry->def);
-safeFree(entry->rowBuf);
-safeFree(entry->keyBuf);
-entry->def = NULL;
-*(entry->DB) = ;
-*(entry->table) = ;
-entry->age = ;
-
-----
-
-
-Compiling msql involves several steps. After unpacking the source
-archive, it is necessary to build a target directory. This is done
-by saying
-
-# make target
-
-If successful, the system will then answer with
-
-
-Build of target directory for Linux-2..30-i486 complete
-
-
-You must now change into this newly created directory and run a
-
-# ./setup
-
-command first. The ./ sequence is necessary to make sure
-that really the command setup in this directory and not another
-command which happens to have the same name is executed. You will
-then be asked questions on the location of the source directory and
-whether a root installation is desired. These questions answered,
-the system should then run a number of tests checking for available
-software (compilers, utilities etc.) and finally say
-
-
-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
-
-
-We say
-
-# make all
-
-If everything went as intended, we'll read:
-
-
-make[[2]: Leaving directory `/usr/local/Minerva/src/msql'
-<-- [[msql] done
-Make of mSQL complete.
-You should now 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'
-
-
-
-
-All binaries must then be made visible to the search paths by creating
-soft links in /usr/local/bin/. Change to that directory and
-issue the command
-
-# ln -s /usr/local/Minerva/bin/* .
-
-after which the links will be properly set.
-
-
-
-
-!Testing msql-1
-
-
-
-
-
-After the installation it is now possible to test whether the database
-works. Before anything else is done, the server daemon must be started.
-The system administrator holding root privileges issues the command
-
-# msqld &
-
-(do not forget to add the &, otherwise msql won't run in
-the background.) after which the following screen message appears:
-
-
-mSQL Server 1..16 starting ...
-Warning : Couldn't open ACL file: No such file or directory
-Without an ACL file global access is Read/Write
-
-
-
-
-This message tells us that everything so far worked since we did
-not set up any access restrictions. For the moment it is sufficient
-to start the msql daemon from within a shell but later we may want
-to have the system startup automatically execute this command for us.
-The command must then be mentioned in a suitable rc.d script.
-Only now the administrator can issue the first genuine database command:
-
-# msqladmin create inventur
-
-msql replies by saying Database "inventur" created.. As a further
-proof, we find that the directory /usr/local/Minerva/msqldb/
-contains now the empty subdirectory ../inventur/. We could
-manipulate the newly created database with the administration tools;
-these procedures are all covered in detail in the msql documentation.
-
-
-
-
-!Installing msql-2..1
-
-
-
-
-
-There is now a newer, more powerful version of Hughes' mSQL server available
-the installation of which is different in a few points. Installing msql-2
-from scratch involves the following steps. Copy the archive to your
-extraction point, e. g. /usr/local/msql-2/, then untar the archive:
-
-# tar xfvz msql-2..1.tar.gz
-
-
-
-Change to the root direction of the install tree and issue a
-
-# make target
-
-
-
-Change to targets and look for your machine type. There should
-be a new subdirectory Linux-''(your version)-(your cpu)/''.
-Change to that directory and start the setup facility located
here:
-
-# ./setup
-
-
-
-There is also a file site.mm which can be edited. Maybe you
-have got used to the directory name /usr/local/Minerva/ and
-want to preserve it? In this case change the INST_DIR=...
-line to your desired target directory. Otherwise, leave everything as
-it is.
-
-
-Now you can start building the database:
-
-# make
-# make install
-
-
-
-
-
-
-If everything went successfully, we'll see a message like:
-
-
-[[...]
-Installation of mSQL-2 complete.
-*********
-** This is the commercial, production release of mSQL-2.
-** Please see the README file in the top directory of the
-** distribution for license information.
-*********
-
-
-
-
-After all is installed properly we have to take care of the
-administration details. Here, the real differences from msql-1
-begin. First, a user msql is created which is responsible for
-database administration.
-
-
-
-
-# adduser msql
-
-
-
-
-
-
-Then we have to change all ownerships in the mSQL directory to
-msql
-by saying:
-
-# cd /usr/local/Minerva
-# chown -R msql:msql *
-
-
-
-
-
-
-Then we create soft links for all database binaries in
-/usr/local/bin/
-by saying:
-
-# ln -s /usr/local/Minerva/bin/* .
-
-
-
-
-
-
-
-
-!Testing msql-2
-
-
-We can now start the database server by issuing the command
-msql2d & and should get a response similar to this one:
-
-
-Mini SQL Version 2..1
-Copyright (c) 1993-4 David J. Hughes
-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.
-
-
-
-
-That looks perfect. The database is compiled and in place, and we
-can now continue with the perl modules since these rely partially
-on the presence of a working database server for testing.
-
-
-Accidentally, this is also a good moment to print the complete
-manual that comes with msql-2..1:
-
-# gzip -d manual.ps.gz
-# lpr manual.ps
-
-
-
-We can proceed to building the interfaces now, but it is a good idea
-to keep the newly created SQL server up and running since that makes
-testing the interface libraries somewhat simpler.
-
-
-
-
-
-
-
-!!3.8 Choice of Interfaces: DBI/mSQL, !MsqlPerl, and Lite
-
-
-
-A frequently quoted saying in the Camel Book (the authorative perl
-documentation) states that there is more than one way to achieve a
-result when using perl. This, alas, holds true for our model
-application, too. Basically there are three ways to access an msql
-database via CGI. First of all the question is whether or not perl
-shall be used. If we use perl (on which this article focuses) then
-we still have the choice between two completely different interface
-models. Besides using perl, we can also employ msql's own scripting
-language, called Lite, which is reasonably simple and a close
-clone of C.
-
-
-
-
-!DBI and DBD-mSQL
-
-
-By the time of this writing, using perl's generic database interface
-called DBI is the method of choice. DBI has a few advantages: It
-provides unified access control to a number of commercial databases
-with a single command set. The actual database in use on a given system
-is then contacted through a driver which effectively hides the
-pecularities of that database from the programmer. Being such, using
-DBI provides for a smooth transition between different databases by
-different makers. In one single script it is even possible to contact
-several different databases. Please refer to the DBI-FAQ for details.
-There is, however, one drawback: The DBI interface is still under
-development and shows rapidly galloping version numbers (sometimes
-with updates taking place within less than a month). Similarly, the
-individual database drivers are also frequently updated and may
-rely on specific versions of the database interface. Users making
-first-time installations should stick to the version numbers given
-in this article since other versions may cause compilation and
-testing problems the trouble shooting of which is nothing for the
-faint-hearted.
-
-
-
-
-
-
-
-
-
-
-!!MsqlPerl
-
-
-!MsqlPerl is a library for directly accessing msql from perl scripts.
-It bypasses the DBI interface and is fairly compact. Though it works
-fine with both versions of msql, its usage is not promoted anymore
-in favour of the generalized DBI interface. Nonetheless, in a given
-installation it may prove to be the interface of choice since it is
-small and easy to install. Notably, it has less version dependencies
-than revealed by the interaction of DBI and particular database
-drivers.
-
-
-
-
-!msql's own scripting language: Lite
-
-
-Last but not least msql-2 comes with its own scripting language:
-Lite. The language is a close relative of C stripped of its oddities
-with additional shell-like features (in a way, something like a very
-specialized version of perl). Lite is a simple language and is well
-documented in the msql-2 manual. The msql-2 package also comes with
-a sample application sporting Lite.
-
-
-We will not describe Lite here because it is well documented but
-fairly specific to msql-2, and because it is assumed that the readers
-of this article have a basic interest in and a basic understanding
-of perl. Nonetheless it is highly recommended to have a closer look
-at Lite: it may well be the case that Lite offers the solution of
-choice in an exclusive msql-2 environment (implying no other
-databases are involved) due to its simplicity and straightforward
-concept.
-
-
-
-
-
-
-
-
-
-
-!!3.9 Going the generic way: DBI and DBD-msql
-
-
-
-We assume that perl was installed during the system setup or via the
-package manager mentioned above. No further details will be given here.
-Nonetheless we first test whether our version of perl is up to date:
-
-
-
-
-# perl -v
-
-
-
-perl should respond with the following message:
-
-
-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
-[[...]
-
-
-So far, everything is fine. The next step includes installing the
-perl libraries for databases in general (DBI), the msql driver
-(DBD-mSQL) and CGI. The CGI driver is necessary in any case.
-The following archives are necessary:
-
-
-***# DBI-.81.tar.gz
-***#
-
-***# DBD-mSQL-.65.tar.gz
-***#
-
-***# CGI.pm-2.31.tar.gz (or higher)
-***#
-
-
-
-A caveat is necessary here for beginners: the test installation
-described here works fine using software with ''exactly'' these
-version numbers, and combinations of other versions failed in one or
-the other way. Debugging flawed version combinations is nothing for
-those who are not very familiar with the intimate details of the
-calling conventions etc. of the interfaces. Sometimes only a method
-is renamed while performing the same task, but sometimes the internal
-structure changes significantly. So, again, stick with these version
-numbers if you want to be on the safe side even if you discover that
-version numbers have increased in the meantime. Frequent updates of
-these interfaces are the rule rather than the exception, so you should
-really anticipate problems when installing other versions than those
-indicated here.
-
-
-It is very important that the database driver for mSQL (DBD-mSQL)
-is installed ''after'' the generic interface DBI.
-
-
-We start by creating the directory /usr/local/!PerlModules/ as
-it is very important to keep the original perl directory tree untouched.
-We could also choose a different directory name since the name is completely
-uncritical, and unfortunately that is not really mentioned in the README
-files of the verious perl modules. Having copied the above-mentioned
-archives to /usr/local/!PerlModules/ we unpack them saying
-
-# tar xzvf [[archive-file]
-
-
-
-for every single of the three archives. Do not forget to supply the
-real archive name to tar. The installation process
-for the three modules is essentially stardardized; only the screen
-messages showing important steps of individual packages are
-reproduced here.
-
-
-
-
-!Installing perl's Database Interface DBI
-
-
-
-
-
-The database interface must always be installed before installing
-the specific database driver. Unpacking the DBI archive creates
-the directory /usr/local/!PerlModules/DBI-.81/. Change to
-that directory. There are a README file (you should read
-it) and a perl-specific makefile. Now issue the command
-
-# perl Makefile.PL
-
-
-
-The system should answer with a lengthy message of which the most
-important part is shown here::
-
-
-
-
-
-[[...]
-!MakeMaker (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 distcheck disttest [[...]
-Using PERL=/usr/bin/perl
-WARNING! By default new modules are installed into your 'site_lib'
-directories. Since site_lib directories come after the normal library
-directories you MUST delete old DBI files and directories from your
-'privlib' and 'archlib' directories and their auto subdirectories.
-Writing Makefile for DBI
-
-
-This looks good, as the program says, and we can proceed with the
-next step:
-
-# make
-
-If no error message occurs (the detailed protocol dumped on screen
-is ''not'' an error message) we test the newly installed library
-with the command
-
-# make test
-
-Watch the output for the following lines (you can always scroll back
-with [[Shift]-[[!PgUp]):
-
-
-[[...]
-t/basics............ok
-t/dbidrv............ok
-t/examp.............ok
-All tests successful.
-[[...]
-DBI test application $Revision: 1.20 $
-Switch: DBI-.81 Switch by Tim Bunce, .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 secs ( .00 usr .00 sys = .00 cpu)
-test.pl done
-
-
-The final step is to install all files in their proper directories. The
-following command will take care of it:
-
-# make install
-
-No more duties are left. If for some reason the installation failed and
-you want to redo it do not forget to issue
-
-# make realclean
-
-first. This will remove stale leftovers of the previous installation.
-You can also remove the files which were installed by copying the
-screen contents (shown abbreviated)
-
-
-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.pod
-
-
-into a file, replacing every Installing with rm. Provided
-you named the file uninstall you can then say
-
-# . uninstall
-
-which will remove the recently installed files.
-
-
-
-
-!perl's msql Driver DBD-mSQL
-
-
-
-
-
-The msql driver can only be installed ''after'' a successful installation
-of perl's generic database interface.
-
-
-The basic steps are the same as above; so first go through
-
-# perl Makefile.PL
-
-
-
-Here, the system should answer with an urgent warning to read the
-accompanying documentation. It will then detect where msql resides,
-and asks which version you use:
-
-
-$MSQL_HOME not defined. Searching for mSQL...
-Using mSQL in /usr/local/Hughes
--> Which version of mSQL are you using [[1/2]?
-
-
-State your correct version number. Quite a few lines of text will
-follow. Watch for the following ones:
-
-
-Splendid! Your mSQL daemon is running. We can auto-detect your configuration!
-I've auto-detected your configuration to be running on port: 1114
-
-
-
-
-You can now test the driver by saying
-
-# make test
-
-Again, a lengthy output follows. If it ends with
-
-
-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! ***
-
-
-you are on the safe side of life and can install your driver by
-saying
-
-# make install
-
-You are now ready to go and can skip the next paragraph.
-
-
-
-
-
-
-
-!!3.10 The !MsqlPerl Interface
-
-
-
-If you decide to use the exclusive !MsqlPerl interface then no generic
-database driver is needed, only !MsqlPerl-1.15.tar.gz, since,
-as mentioned earlier, !MsqlPerl provides a direct interface between
-perl and the database server without using the DBI interface.
-Installing and testing is straightforward.
-
-
-After saying perl Makefile.PL the make utility can be started.
-First you have to answer the question where mSQL resides. If it
-resides in /usr/local/Minerva/ the default answer can be confirmed.
-
-
-Then do a make test. Before doing so you must ensure that you
-have a database named test and that you have read and write
-permissions for it. This can be done by
-
-# msqladmin create test
-
-
-
-
-
-
-
-
-
-
-
-!!3.11 perl's CGI library
-
-
-
-
-
-
-Installing perl's CGI part is the simpliest of the three steps.
-Execute the following commands in the given order and everything
-is done:
-
-
-
-
-# perl Makefile.PL
-# make
-# make install
-
-
-
-
-
-
-Unlike the previous drivers this interface does not have a test
-option (# make test) whereas the other modules ''should''
-be tested in any case.
-
-
-A subdirectory with CGI example scripts is also created. You can
-copy the contents of this directory into /home/http/cgi-bin/
-and use the browser to experiment with the scripts.
-
-
-
-
-
-
-
-!!3.12 Installation Checklist
-
-
-
-We went through the following steps, in this order:
-
-
-***# Install Linux with networking support
-***#
-
-***# Install a http server, e. g. Apache
-***#
-
-***# Install a browser, e. g. Arena, lynx or Netscape
-***#
-
-***# Install an SQL server, e. g. msql
-***#
-
-***# Install a suitable perl SQL interface
-***#
-
-***# Install the CGI files
-***#
-
-
-
-Finally, you can do some clean-up. All source trees for msql and
-the perl modules can be safely deleted (however, you should not
-delete your archive files!) since the binaries and documentation
-are now based in different directories.
-
-
-
-----
-
-!!4. Running an Example Database
-
-
-
-
-
-After completing the system installation we can now finally run
-a model application. Depending on the version of msql installed
-and the perl database interface used, we have to modify the sample
-programs in a few points.
-
-
-First however, the file index.html residing in
-/home/httpd/html/ must be modified to allow calling a
-sample database application. We can place our database (which we call
-database.cgi or inventur.cgi here despite its archive name
-perl.lst.ck) in /home/httpd/html/test/.
-
-
-We add one line (of course, depending on your installation choices)
-similar to the following to index.html:
-----
-
-<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>
-
-----
-Usually you should only pick one of these two choices but if you
-have both types of database interface installed you can leave both
-lines here as they are. You can then compare performance, etc.
-
-
-
-
-!!4.1 Adapting the sample script for !MsqlPerl
-
-
-
-Our sample script
-has to be told
-to use the !MsqlPerl
-interface. The modification takes place in several locations. First,
-near the beginning of the file, we change the use clause:
-----
-
-#
-# use DBI; # Generisches Datenbank-Interface
-use Msql;
-
-----
-
-
-Then, near line 27, the !MsqlPerl syntax does not require the mentioning
-of a specific driver:
-----
-
-# $dbh = DBI->connect($host, $database, '', $driver) ||
-$dbh = Msql->connect($host, $database) ||
-
-----
-
-
-Then, from line 33 onward throughout the whole script, we have to
-change all instances of do against query:
-----
-
-# $dbh->do("SELECT * FROM hw") || db_init($dbh);
-$dbh->query("SELECT * FROM hw") || db_init($dbh);
-
-----
-
-
-Finally, in !MsqlPerl speak, line 207 can be commented out:
-----
-
-# $sth->execute || msg("SQL Error:", $sth->errstr);
-
-----
-
-
-In addition, it may become necessary to swap all errstr calls
-like the one in the preceding code fragment against errmsg.
-This is also version dependent.
-
-
-After these modifications, the script should run smoothly.
-
-
-
-
-!!4.2 Adapting the sample script for msql-2
-
-
-
-The SQL syntax was redefined during the development of mslq-2. The
-original script will fail to execute the table initialization
-statements in lines 45 -- 58. The primary key modifier is no
-longer supported by msql-2, and should simply be skipped:
-----
-
-$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
-
-----
-
-
-Unfortunately, this specific script will then accept new entries
-with identical personnel numbers; the msql-1 modifier primary
-key intends to prevent exactly this behaviour. The msql-2
-documentation shows how to use the CREATE INDEX clause to
-create unique entries.
-
-
-
-----
-
-!!5. Conclusion and Outlook
-
-
-If you have installed msql-2 on your system then you can have a look
-at the sample programs written in Lite, msql-2's own scripting
-language.
-
-
-Either version of msql comes with a basic set of administration
-tools which allow the user to create and drop tables
-(msqladmin) and examine database structures (relshow).
-
-
-The second generation msql (i.e. msql-2) has a few more genuinely
-useful utilities: msqlimport and msqlexport. These allow
-the dumping of flat line data files into and out of the SQL
-database. They can be used for loading quantities of existing data
-''d'un coup'' into existing tables, or extract flat data from
-tables, and the user does not have to deal with writing a
-''single'' line of perl or SQL or whatever code for this task.
-
-
-If you want to write your own perl scripts dealing with databases
-you'll find sufficient support in the example files and the
-extensive on-line documentation that comes with the DBI module.
-
-
-Anyway, you are now ready to go and present your data to the users
-of your own network, or even the WWW
.
-----
+Describe
[HowToWWWmSQLHOWTO
] here.