  A mSQL and perl Web Server Mini HOWTO
  Oliver Corff, corff@zedat.fu-berlin.de
  v0.1, 17 September 1997
  伊佐冶  哲, isaji@mxu.meshnet.or.jp

  このmini-HOWTOはユーザーインターフェースとしてWWWとHTMLを使った SQL ク
  ライアント/サーバー データベースの構築方法について書かれています。ドイ
  ツコンピュータマガジン(german computer magazine)iX 8/1997 で出版され
  た"Gebunkert: Datenbankbedienung mit Perl und CGI(PerlとCGI を使ったデ
  ータバンクサービス)"というMichael Schilli氏の記事に触発されています。
  ______________________________________________________________________

  目次

  1. このドキュメントについて
     1.1 対象読者
     1.2 このテキストで使われる表現

  2. イントロダクション
  3. インストール過程
     3.1 必要なハードウェア
     3.2 必要なソフトウェア
     3.3 OSのインストール
     3.4 httpサーバ
     3.5 ブラウザ
        3.5.1 Lynxの設定
        3.5.2 Arenaの設定
        3.5.3 Netscapeのインストールと設定
     3.6 Apacheとブラウザの協力関係
     3.7 データベースエンジンとインストール
        3.7.1 msql-1.0.16のインストール
        3.7.2 msql-1のテスト
        3.7.3 msql-2.0.1のインストール
        3.7.4 msql-2のテスト
     3.8 インターフェースの選択：DBI/mSQL, MsqlPerl, Lite
        3.8.1 DBI と DBD-mSQL
        3.8.2 MsqlPerl
        3.8.3 msqlのスクリプト言語：Lite
     3.9 一般的な方法：DBI と DBD-msql
        3.9.1 perlデータベースインターフェース DBI のインストール
        3.9.2 perl の msql ドライバ DBD-mSQL
     3.10 MsqlPerlインターフェース
     3.11 perlのCGIライブラリ
     3.12 チェックリストのインストール

  4. テストデータベースの実行
     4.1 MsqlPerlサンプルスクリプトの追加
     4.2 msql-2用サンプルスクリプトの追加

  5. まとめと今後の見通し

  ______________________________________________________________________

  1.  このドキュメントについて

  1.1.  対象読者

  Webサーバデータベースをインストールしたいけれど、必要なソフトウェアは
  何か、どのようにインストールすればよいのかわからないといった人向けに書
  かれています。またwebサーバを使ったSQLデータベースを入手するために必要
  な情報も提供しています。CGIプログラミングやその詳細については詳しく調
  べてありませんし、SQL言語についても説明はしていません。これらについて
  書かれた良書がたくさんで出回っています。このドキュメントではユーザー
  がCGIプログラミングとSQLを学ぶことのできる場を提供します。

  (悪名高い航空座席予約システムや宇宙飛行マネージメントデータベースでは
  なく) 小さいスケールのSQLシステムを稼働させることに関してはこのテキス
  トに書かれたソフトウェアで十分ですし、ドキュメントはそれにそって書いて
  います。このテキストで紹介するデータベースmsql のユーザーマニュアルは
  各自のデータベースの構築法について詳しく情報を提供してくれています。

  もしCD-ROMが使えない場合は、ftp経由でファイルを入手するための方法を
  知っておきましょう。またソースからバイナリを作るやりかたも理解しておい
  て下さい。とにかくこのテキストで説明していることは実際稼働しているシス
  テム上でテストし、読者のシステム上でも動作するものと思います。

  1.2.  このテキストで使われる表現

  ユーザーコマンド：

          # make install

  プログラムからの画面出力：

       Program installed. Read README for details on how to start.

  ファイルのサンプルコード：

  ______________________________________________________________________
  # My comment
  char letter;
  ______________________________________________________________________

  2.  イントロダクション

  膨大なデータや(辞書データベースといった)複雑なリレーショナル設定のデー
  タベースは多くのユーザやオペレータが同時に使えるものでなくてはなりませ
  ん。理想的にはシステム的に接続されたさまざまなハード/ソフトウェアを使
  えるものであるべきです。経費を節約するためにひとつのシステム、データベ
  ースサーバはパワフルなものである必要があります。ユーザーステーションは
  一般的にデータの表示とコマンドの実行をします。処理はクライアント-サー
  バデータベースにする１台のマシン上で行われます。さらにユーザインター
  フェースの管理が容易でできるだけクライアント側への負担がないものの方が
  よいでしょう。

  以上の基準(criteria)を満たすシステムは以下のプロトコル、概念、ソフト
  ウェアアイテムを使って構築できます。

     Linux
        オペレーティングシステムです。マルチユーザ、マルチタスクをネット
        ワーク(TCP/IP)上で提供する安定したUNIXです。実際のメディアと通信
        コストを除けば全てがフリーです。基本OSからテキストプロセッサ、ス
        クリプト、ソフト開発、インターフェースビルダーなど必要なもの全て
        がそろっています。

     HTML
        HTMLはインターネット、WWW(World Wide Web)といったネットワークシ
        ステムインターフェースを構築するためのHypertext Markup言語
        (Language)です。 HTMLは簡単でASCIIテキストエディタで編集すること
        ができます。
     Browsers
        ブラウザにはテキストベース(例えばLynx)あるいはグラフィカ
        ル(Mosaic, Netscape, Arenaなど)アプリケーションが使えま
        す。HTMLドキュメントの読み込みと表示をします。データベースユーザ
        によって直接操作される唯一のソフトでもあります。ブラウザを使うこ
        とでテキスト、イメージといったさまざまなデータを表示できます。ま
        たブラウザが使えるさまざまなコンピュータに対してhttpサーバで通信
        することができます。

     http サーバ
        http サーバはネットワークで一般に使用されるデータがあるホストコ
        ンピュータへのアクセスを提供します。httpプロトコルを理解し、ユー
        ザが要求する情報を渡します。

     SQL
        Structured Query Languageの略。関連データベースのデータを操作す
        る言語です。文法は簡単で広く商業的(wide industry)にもサポートさ
        れています。SQLを基にしたデータベースは典型的なクライアント/サー
        バの考えの中心(core)となるものです。多くのSQLシステムがありま
        す。有名なものではOracle, Informixなどで、低価格のものや学術
        的/教育的な使用目的の場合は無料で入手できるようになりました。
        (訳注：SQL=データを蓄積(Query)する時の構造とその取り出し方を定め
        ている言語です。SQL標準化[日本では1987年JIS規格となりました]によ
        りDB言語の統一、異種DBMSとの互換性などの利点があります)

     CGI
        CGI(Common Gateway Interface)はデータを蓄えてあるシステム(今回
        はSQL をベースとしたシステムです)とネットワークプロトコ
        ル(HTML)間のプログラミングインターフェースです。CGIは多くのプロ
        グラミング言語で構築できますがもっともよく使われているのはperlで
        す。

     perl
        Perlはきわめてパワフルなスクリプト言語です。C言語、シェル言語、
        ストリーム操作言語(sed、awkなど)の長所を持っています。Perlには多
        くのモジュラインターフェースがあり、SQLデータベースをコントロー
        ルすることもできます。

  3.  インストール過程

  3.1.  必要なハードウェア

  データベースサーバで必要なハードウェアについて一般的なことは言えませ
  ん。予想されるユーザーの数、アプリケーションの種類、ネットワーク経
  路(network load)等に大きく依存しています。 2〜3人のユーザがいるだけで
  ネットワークトラフィックも少ない最小な環境では RAM 16MB、i486程度のマ
  シンで十分です。Linuxはリソースに関してはそれで十分で、同時にさまざま
  なアプリケーションを起動するだけの馬力があります。もちろんもっと速いプ
  ロセッサやRAMの増設をすればするほど高速化することもできますが、プロ
  セッサよりもRAMの容量の方が重要です。 RAMを増やせば増やすほど、障害を
  生じやすい集中的なメモリープロセスのディスクスワップが小さくなっていく
  のです。

  32 MB RAM と PCIバスがあればスワップファイルなどを使わないで検索とソー
  トを高速に行うことができます。

  この文書で書かれているインストールは32 MB RAM、1.2 GB IDEハードディス
  クの IBM 686(133Mhz) で行っています。はじめからインストールするものと
  して以下、必要な手順のリストを書きました。

  3.2.  必要なソフトウェア

  この文書で取り扱うソフトウェアはCD-ROMやインターネットから入手できるも
  のです。以下のものを使います：

  o  Red Hat Linux PowerTools：Red Hat Linux PowerTools：6 CD's Complete
     Easy-to-Use Red Hat 4.2, Summer '97;http://www.redhat.com から。

  o  msql SQLデータベースサーバ：現在２つのバージョンのものが入手できま
     す。このバージョンの違いは処理できる数、アドミニストレーションイン
     ターフェースの違いに依っています。古い方のバージョン
     は1.0.16で、Sunsiteミラーサイトから入手できます。ELFファイルは

     sunsite:apps/database/sql/msql-1.0.16

     やCDROM(disc 4 of InfoMagic Linux Developer's Resource, 6-CD set,
     December 1996)、

     http://www.infomagic.comから入手します。

     新しいバージョンは2.0.1です。オーストラリアのHughe氏のホームページ
     (http://www.hughes.com.au)やその他ミラーサイトから入手できます。

  o  CPANのperl：The Comprehensive Perl Archive Network.  Walnut Creek
     CDROM, ISBN 1-57176-077-6, May 1997;

  o  computer journal iX 8/1997, pages 150--152のMichael Schilli 氏によ
     るCGIサンプルプログラム。ftpで入手

     ftp.uni-paderborn.de:/doc/magazin/iX。

  3.3.  OSのインストール

  著者はRed Hat Linux Distribution 4.2からLinuxをインストールしていま
  す。ちゃんとインストールするために、マシンはDOSでアクセスできるCDROMド
  ライブ/ ブート可能なCDROMドライブか、Linux CDの以下の設定を盛り込んだ
  ブートディスクのどちらかを持っているとよいでしょう。

  インストールの途中でソフトウェアパッケージの選択と設定を行います。以下
  のアイテムを選択しておいて下さい。

  o  TCP/IP ネットワークサポート

  o  http サーバ Apache

  o  スクリプト言語perl

  o  X Window System

  o  Arena (グラフィカル)とLynx (テキストベース)ブラウザ

     これらのパッケージはLinuxディストリビューションで配布されています。
     もしすぐにこれらのパッケージをインストールしないなら、ソフトウェア
     パッケージにあるグラフィカルで直観的なインストールマネージャを使っ
     て後からインストールできます(訳注：setupコマンドなどで)。これらの
     パッケージをインストールする際はrootで作業をして下さい。

  この文書ではネットワークインストールや初期設定の仕方は取り扱いません。
  オンラインドキュメント(manページ、HTML、texinfo)や出版されているドキュ
  メント((Linux Bibleなどなど)を参照して下さい。

  Red Hatのインストール方法は十分確立されていて、選択(ホスト名の指定な
  ど)を普通に行うだけです。インストールが成功すれば、システムはすぐに稼
  働できます。

  X Window Systemのインストールはサーバには必ずしも必要ではありませんが
  ローカルアクセスやテストが簡単になるので入れておくとよいでしょう。 Xの
  インストール方法はいくつかプログラムを使うことで行えます(XF86Setup は
  自己テストの機能(self-testing facilities)を装備していて、例えばビデオ
  クロックプログラミングなど難しい操作はほとんどありません)。必要なこと
  はソフトウェアがビデオアダプタを検出できるかどうかということだけです。
  安価なアクセラレータグラフィックアダプタ(S64UV+の前身のTrio S64のよう
  なアダプタなど)は通常、特に何もしなくても(``out of the box'')動作しま
  す。

  ここでシステムにApache, Perl, X Window Systemがすでにインストールされ
  ているものとします。今後、ファイル/ディレクトリといった基本的なことは
  インストール時のままとして話しを進めていきます。またホスト名
  はlocalhostとします。このホスト名をインストールのテスト用に使います。
  全システムがちゃんと動作したら適当な名前をつけます。/etc/hostsファイル
  などを編集する必要があることもおぼえておいて下さい。理想的にはこれら
  はroot用の管理者ツールを使って行うべきです。

  3.4.  httpサーバ

  Linuxで使われるhttpサーバはApache(httpd)が有名です。 manページ(man
  httpd)でhttpデーモン(httpd)のインストールと稼働の仕方について説明して
  います。しかし問題なくインストールできているならすでにサーバは稼働され
  ています。ディレクトリを確認します：/home/httpd/以下３つのサブディレク
  トリ../cgi-bin/、../html/、../icons/ があります(訳注：RedHat以外のディ
  ストリビューションではディレクトリが若干違うかもしれませ
  ん)。../html/ディレクトリにはindex.html ファイルがあります。あとでこの
  ファイルは各自のファイルindex.htmlに置き換えて下さい。設定の情報
  は/etc/httpd/conf/に蓄積されています。システムが十分に設定されていて、
  特にエラーもなくインストールができたならこれ以上は必要ありません。

  3.5.  ブラウザ

  基本的にLinux用のブラウザには３つのものがあります：

  o  Lynx：テキストベースのシステム。

  o  Arena(フリー)：シンプルなブラウザ。実験的

  o  Netscape(シェア)：Javaをサポートしています。

     LynxとArenaLinuxに附属していますが、Netscape はよそから入手しなけれ
     ばなりませんix86アーキテクチャ上で動作するLinux用のものがバイナリ
     ファイルで配布されています。アーカイブを展開すればすぐに(``out of
     the box'')実行できます。

  3.5.1.  Lynxの設定

  Lynxは起動時にデフォルトURLを表示しようとします。これは常にインター
  ネットに接続していない場合にはちょっと厄介です。このデフォルトURLを変
  更する (また他の設定も変更する)ために、システム管理者
  は/usr/lib/lynx.cfg (訳注：または/usr/local/lib/lynx.cfgなど)ファイル
  を編集する必要があります。この設定ファイルは約57,000バイトと大きく不必
  要な情報を含んでいるものもあり、/usr/local/lib/ディレクトリをホーム
  ディレクトリとして記述しています。ファイルのはじめあたりにSTARTFILEで
  はじまる行があるので、これを以下のように変更します。

  ______________________________________________________________________
  # STARTFILE:http://www.nyu.edu/pages/wsn/subir/lynx.html
  # STARTFILE:http://lynx.browser.org/
  STARTFILE:http://localhost
  ______________________________________________________________________

  ファイルを保存後、Lynxは引数なしでindex.htmlドキュメントを表示するよう
  になります。

  [訳注："Lynxについて"

  LynxはVer2.5あたりから特別なパッチなしで日本語が通るようになりました。
  以下のサイトを参照してみて下さい。

  o  最新のLynxソースftp://ftp2.cc.ukans.edu/pub/lynx/

  o  Lynxの日本語化について http://www.three-a.co.jp/~asada/lynx/

  o  Lynxとkterm。terminfoのバグ修正について http://www-
     nagao.kuee.kyoto-u.ac.jp/member/shimada/misc/lynx-kterm.html

     ]

  3.5.2.  Arenaの設定

  Arenaも引数なしで起動するとデフォルトURLを表示します。このデフォル
  トURLは実行ファイルに組み込まれていますが、環境変数WWW_HOMEによって変
  更 (overrun)することもできます。システム管理者は/etc/profileファイルに
  WWW_HOME="http://localhost"となるように書き込んで下さい(bashなどの場合
  はexportするようにします)。例えば、

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

  とします。一度ログインし直せば、新しいデフォルトURLがArenaで有効になり
  ます。

  3.5.3.  Netscapeのインストールと設定

  Netscapeは商用の製品でLinuxディストリビューションでは配布されていませ
  ん。 (訳注：Caldera Open Linuxなど商用のディストリビューションではライ
  センスされたNetscapeがついてくるものもあります)。インターネット
  やCDROMのソフトウェアコレクションから入手できます。Netscape は各プラッ
  トフォーム用にコンパイルされたバイナリ形式で配布されています。インスト
  ールするにはアーカイブファイルを展開するディレクトリとして
  /usr/local/Netscape/を作ります(訳注：アーカイブに附属のインストールプ
  ログラムを使えば自動的に/usr/local/netscape/ ディレクトリを作ります)。
  Javaライブラリを除くファイルは全てこのディレクトリ内にありま
  す(Netscape ライブラリについてはREADMEファイルを参照して下さい)。以下
  のようにしてリンクをはります(/usr/local/bin/ディレクトリで作業をしま
  す)。

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

  Netscapeは「Options」メニューで設定できます。「General Preferences」で
  は「Appearance」カードがあるので、「Home Page Location」に
  http://localhostを指定します。Netscapeを終了するまえに、オプションの保
  存を忘れないで下さい(「Options」---「Save Options」で)。次回の起動で
  Apacheのページが開きます(訳注：これはローカルマシンのページで、Apache
  インストール時に作られます)。

  3.6.  Apacheとブラウザの協力関係

  ブラウザとhttpサーバの最初のテストをします。適当なブラウザを起動すると
  apache: red hat linux web serverのページが表示されます。このページでは
  ファイルの場所とhttpサーバのインストールの基本を説明します。もしこのペ
  ージが表示されない場合はファイルが適当な場所にあるか、ブラウザの設定が
  正しいかチェックしてください。ブラウザをもう一度開く前に設定ファイルの
  編集を終らせて下さい。以上の設定が正しければ次にマシンのネットワーク設
  定をテストします。ホスト名が設定ファイルに書いたものと違ったりネットワ
  ークセットアップが正しいかどうか。少なくとも/etc/hostsに以下の行がある
  ことをチェックします。これは重要です。

  ______________________________________________________________________
  127.0.0.1               localhost localhost.localdomain
  ______________________________________________________________________

  これはマシンにローカル接続をするとき非常に重要です。引数にホスト名を使
  うようなネットワーク用コマンドを使ってテストします。例えば、telnet
  localhost とします(telnet はすでにマシンにインストールされています)。
  もしこれがおかしければ次の作業に移るまえにもう一度ネットワーク設定を
  チェックしておいて下さい。

  3.7.  データベースエンジンとインストール

  データベースをインストールするには、netscapeといった上記のインストール
  よりも、若干準備しておくことがあります。ランタイムやアドミニストレー
  ションがそれぞれ違うsqlデータベースエンジンが 2〜3あり、その中で一番わ
  かりやすいシステムであるmsql(mini-sql)を使います。このシステムはdavid
  hughes氏によるもので、シェアウェアです。料金は使うバージョンに依りま
  す。商用的な使用の場合は250.00ドル(us)以上。個人ユーザの場合は65.00ド
  ル(us)以上。教育、非商用的な機関の場合はフリーで使うことができます。正
  確な価格(figures)はデータベースに附属しているドキュメントのライセンス
  を参照してください。ここに書いた価格はだいたいの目安として下さい。

  なぜ著者がmsqlを選択したかその理由を２、３述べます。まず第一にインスト
  ール/管理が簡単で、sql言語のカバーしている範囲が十分であることが挙げら
  れます。ここまで書いた時点で 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. [...]

       [日本語訳：現在の作者の指摘によると、データセットが100,000列
       以下の表や1000以下のテーブルといった、比較的小さいものな
       らmSQLは完全にあなたの問題を解決してくれます。このデータベー
       スは安くしっかりしたもので優れたサポートがあります。 ]

  Msqlは２つのバージョン(msql-1.0.16, msql-2.0.1)が入手できます。この違
  いはパフォーマンスの違い(小さい仕事では特に差はありません)や添付されて
  いるソフトウェアの違い(新しいバージョンには多くのツール、スクリプト
  ファイルがあります)によっています。以下この２つのバージョンでのインス
  トールについてそれぞれ解説していきます(2〜3違いがあります)。

  3.7.1.  msql-1.0.16のインストール

  msqlはソースやELFサポートバイナリとして入手できます。ELFバイナリを使え
  ばインストールは簡単です。アーカイブファイルmsql-1.0.16.ELF.tgzはその
  パッケージ中にインストール先のディレクトリを含んだ形でパッケージ化され
  ています。そのため展開する時にルートディレクトリで展開するだけで適当な
  ディレクトリにインストールされます。

  もしmsql-1.0.16をコンパイルして、DBIインターフェースよりもMsqlPerlパッ
  ケージ (この両者の違いについては後で述べます)を使う場合に、 MsqlPerlを
  テスト中「some instruction inside msql failed(msql内で命令が失敗しまし
  た)」となることがあります。この場合MsqlPerlドキュメント
  (patch.lost.tables)に書かれているパッチが必要です。特にmsqldb.c
  の1400行( entry->def = NULL;)からの3行

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

  が大切です。コードフラグは以下です。

  ______________________________________________________________________
          freeTableDef(entry->def);
          safeFree(entry->rowBuf);
          safeFree(entry->keyBuf);
          entry->def = NULL;
          *(entry->DB) = 0;
          *(entry->table) = 0;
          entry->age = 0;
  ______________________________________________________________________

  msqlをコンパイルするためにいくつか手順を踏みます。ますソースアーカイブ
  を展開してターゲットディレクトリを作ります。

          # make target

  これがうまくいったら、システムは

       Build of target directory for Linux-2.0.30-i486 complete

  と表示します。この新しいディレクトリに移動して

          # ./setup

  と実行します。 ./シーケンスはこのディレクトリのsetupコマンドを実行する
  ために必要です。これを付けないと別のsetupが実行されてしまいます。ソー
  スディレクトリやrootインストールが必要かどうか聞かれます。この後システ
  ムはコンパイラ、ユーティリティなどのソフトが使えるかテストします。

       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

  と表示されます。そして

          # make all

  と実行して下さい。

       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'

  バイナリは/usr/local/bin/にソフトリンクを作ることで検索パスに通るよう
  にします。/usr/local/bin/ディレクトリに移動して

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

  と実行して下さい。

  3.7.2.  msql-1のテスト

  インストール後、データベースがちゃんと動作するかどうかテストします。サ
  ーバデーモンをスタートさせるためにシステム管理者(root権限)としてコマン
  ドを実行します。

          # msqld &

  (バックグランドでmsqlを実行するために、&を付けるのを忘れないようにして
  下さい)。以下のメッセージが表示されます。

       mSQL Server 1.0.16 starting ...

       Warning : Couldn't open ACL file: No such file or directory
       Without an ACL file global access is Read/Write

  このメッセージは、アクセス制限を設定していないために動作していないとい
  うことを意味しています。さしあたってシェル内からmsqlデーモンを開始でき
  ます。そこでコマンドを適当なrc.dスクリプトに書いておきます( 管理者だけ
  がデータベースコマンドを実行できます)。

          # msqladmin create inventur

  (訳注：このコマンドの実行で空のデータベースinventurが作られます)。
  msqlはDatabase "inventur" created.と返答します。
  /usr/local/Minerva/msqldb/ディレクトリに空の../inventur/ サブディレク
  トリができます。この新しいデータベースはアドミニストレーションツー
  ル(詳細はmsqlドキュメントに書かれています)を使って操作できます。

  3.7.3.  msql-2.0.1のインストール

  新しくパワフルなHugheのmSQLサーバがあり、以前のバージョンと2〜3の点で
  インストールに違いがあります。msql-2のインストールをはじめから行うには
  以下のステップをふみます。適当なディレクトリ(例えば/usr/local/msql-2/)
  にアーカイブをコピーして展開します。

          # tar xfvz msql-2.0.1.tar.gz

  (訳注：アーカイブは以下のサイトから入手できます。
  <http://www.hughes.com.au/software/msql2/>)

          # make target

  と実行します。 targetsに変更してマシンタイプを選びます。新しいサブディ
  レクトリ Linux-(バージョン)-(CPU)/ このディレクトリに変更して以下のよ
  うにセットアップをスタートします。

          # ./setup

  編集可能なsite.mmファイルがあります。ディレクトリ名
  /usr/local/Minerva/を使っていることと思います。保存したいですか？この
  場合INST_DIR=...の行に保存したいディレクトリ名を書き込んで下さい。デー
  タベースを構築します。

          # make
          # make install

  インストールに成功すると以下のメッセージが表示されます。

       [...]

       Installation of mSQL-2 complete.

       *********
       **   This is the commercial, production release of mSQL-2.0
       **   Please see the README file in the top directory of the
       **   distribution for license information.
       *********

  インストールが適切に行われたら次はデータベース管理の詳細に注意を払わな
  ければなりません。ここでmsql-1とは違う作業が必要です。データベース管理
  を担うユーザmsqlを作ります：

          # adduser msql

  mSQLディレクトリのオーナーをmsqlに変更します。

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

  次に/usr/local/bin/のデータベースバイナリへのソフトリンクを作ります。

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

  以上です。

  3.7.4.  msql-2のテスト

  データベースサーバはmsql2d &コマンドによって開始され、

       Mini SQL Version 2.0.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.

  と応答が出ます。これで完璧です。データベースはコンパイルされ適当な場所
  にあります。続いてperlモジュールを継続します。perlモジュールはテスト用
  に動作しているデータベースサーバの振舞いに部分的に基づいています。

  きっかけがあればmsql-2.0.1に附属しているマニュアルの印刷をしておくとよ
  いでしょう：

          # gzip -d manual.ps.gz
          # lpr manual.ps

  続いてインターフェースの構築を行いますが、新しく作ったSQLサーバを保存
  して実行したほうがよいでしょう。そのほうが安心してインターフェースライ
  ブラリのテストができます。

  3.8.  インターフェースの選択：DBI/mSQL, MsqlPerl, Lite

  perlを使う時に参考になることがらがCamel Book(訳注：「ラクダ本」と呼ば
  れるものです)に書かれています。これは今回のモデルアプリケーションをも
  書かれています。基本的にCGIを経由してmsqlデータベースにアクセスする方
  法が以下３つあります。はじめにperlを使うかどうかということに関すること
  です。 (この文書が対象としている)perlを使うなら二つの異なるインター
  フェースモデルのどちらかを選べます。perlを使う場合はmsql独自のスクリプ
  ト言語(Lite)も使うことができます。非常にわかりやすく、C言語に近いクロ
  ーンです。

  3.8.1.  DBI と DBD-mSQL

  この執筆の時点までにDBIと呼ばれるperlのデータベースインターフェースが
  。 DBIは2,3の役立つ点があります：コマンド一つで多くの商用データベース
  を操作できる統一されたアクセスコントロールが提供されています。与えられ
  たシステムで実際のデータベースはプログラマからデータベースの横取
  り(pecularities)を防ぐドライバを使ってアクセスできる。DBIを使うことで
  マーカーによる異なるデータベース間でスムーズな移行ができる。一つのスク
  リプトで複数のデータベースにアクセスできる。詳しくはDBI-FAQを参照して
  下さい。しかし一つ欠点もあります： DBIインターフェースはまた開発中でバ
  ージョンがどんどん変わっています(一カ月も経たないうちに新しいものに変
  わってしまうこともあります)。同様にそれぞれのデータベースドライバも
  アップデートされ特定のインターフェースバージョンに依存していることもあ
  ります。初期にインストールしたユーザーはこの文書で挙げたバージョンをつ
  使わないといけないかもしれません。というのも他のバージョンでは複雑に
  なってしまったり、テストのトラブルシューティングも意味のないものになっ
  てしまうことがあるからです。

  3.8.2.  MsqlPerl

  MsqlPerl はperlスクリプトからmsqlに直接アクセスするためのライブラリで
  す。 DBIインターフェースを回避してとてもコンパクトです。 msqlの両バー
  ジョンともよく動作しますが、その使い方は一般化されたDBI インターフェー
  スを使う(promoted)ことはできません。ですが小さいシステムでインストール
  が容易なので選択するインターフェースとします。特にDBIや特定のデータベ
  ースドライバよりもバージョンに依存しません。

  3.8.3.  msqlのスクリプト言語：Lite

  msql-2ではスクリプト言語(Lite)を持っています。この言語はシェルライクな
  特徴を追加したちょっと変わったものです(特定のPerlバージョンに似ていま
  す)。 Liteはシンプルな言語でmsql-2マニュアルに詳しく書かれていま
  す。msql-2 パッケージにはLiteを使った簡単なアプリケーションも附属して
  います。

  Liteについては優れた文書(msql-2に特定した内容)があるのでここではLiteに
  ついては説明しません。またこの文書を読んでいる読者はperlについて基礎的
  な理解があるものと想定しています。ですがLiteをよく調べてみることをお奨
  めします。Liteはそのシンプルで直観的な概念に関してmsql-2環境(他のデー
  タベースで行われているような) での解決を提供している場合があります。

  3.9.  一般的な方法：DBI と DBD-msql

  すでにシステム設定でperlをインストールしてあるか上記したパッケージマネ
  ージャを使ってperlが入っているものとします。perlについては詳しく述べま
  せん。 perlのバージョンを見るには、

          # perl -v

  とします。 perlは以下のメッセージを表示します。

       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
       [...]

  これで問題なければ、次はデータベース用のperlライブラリ(DBI)、msqlドラ
  イバ (DBD-mSQL)、CGIをインストールします。CGIドライバはいろんな場面で
  必要になります。３つのアーカイブが必要です：

  1. DBI-0.81.tar.gz

  2. DBD-mSQL-0.65.tar.gz

  3. CGI.pm-2.31.tar.gz (あるいはこれ以上のもの)

     初心者の方に注意があります。ここまでで述べてきたテストインストール
     は上記したバージョンを使って正確に動いています。他のバージョンでは
     エラーとなるかもしれません。欠陥のあるバージョンのデバッグは呼び出
     しの規則(conventions)やインターフェースについて詳しくない人にはどう
     しようもありません。

  同じ動作をしているものをリネームするのが一つの方法ですが内部構造が著し
  く変更されていることがあったりします。そこで  それまでは新しいバージョ
  ンに上がっていても、安全に使いたいのであればここで紹介したバージョンに
  するよう心がけて下さい。

  mSQL((DBD-mSQL)用のデータベースドライバはインターフェース(generic
  interface) DBIの後にインストールするということは重要です。

  オリジナルのperlディレクトリを保存するために/usr/local/PerlModules/
  ディレクトリを作ることから始めます。ディレクトリ名は特に決っていないの
  でこれとは違う名前にすることもできます(どのperlモジュールのREADMEファ
  イルにもディレクトリ名については書かれていません)。上記のアーカイブを
  /usr/local/PerlModules/にコピーして、

  # tar xzvf [archive-file]

  ３つのアーカイブをそれぞれ展開します([archive-file]はアーカイブ名に置
  き換えて下さい)。

  ３つのモジュールのインストールプロセスは通常通り行います(このドキュメ
  ントでは各パッケージで重要なものだけを書き出してします)。

  3.9.1.  perlデータベースインターフェース DBI のインストール

  データベースインターフェースは特定のデータベースドライバをインストール
  する前に入れておいて下さい。DBIアーカイブを展開すると
  /usr/local/PerlModules/DBI-0.81/ディレクトリが作られるのでこのディレク
  トリに移動します。READMEファイルとperl用makefileがあります。

          # perl Makefile.PL

  と実行して下さい。次々とメッセージが表示されます。そのうち重要な箇所を
  引用します。

  [...]
  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

  ちゃんと実行されているようです。次に

          # make

  と実行します。もしエラーメッセージが出なければ(画面に表示されるプロト
  コルはエラーメッセージではありません)、新しくインストールされるライブ
  ラリをテストします。

          # make test

  表示される出力は[Shift]-[PgUp]でスクロールできます。

       [...]
       t/basics............ok
       t/dbidrv............ok
       t/examp.............ok
       All tests successful.
       [...]
       DBI test application $Revision: 1.2 $
       Switch: DBI-0.81 Switch by Tim Bunce, 0.81
       Available Drivers: ExampleP, NullP, Sponge
       ExampleP: testing 2 sets of 5 connections:
       Connecting... 1 2 3 4 5
       Disconnecting...
       Connecting... 1 2 3 4 5
       Disconnecting...
       Made 10 connections in  0 secs ( 0.00 usr  0.00 sys =  0.00 cpu)

       test.pl done

  最後にインストールするディレクトリにファイルを入れます。

          # make install

  このコマンドは十分に確認してから実行して下さい。これ以上することはあり
  ません。もしなんらかの理由でインストールに失敗したら忘れないうちに作業
  をやり直して下さい。

          # make realclean

  ますはじめに。このコマンドは前のインストールで不用なものを削除します。
  また画面の表示(以下省略して挙げました)をコピーしてインストールしたファ
  イルも削除できます。

       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

  このInstallingをrmに置き換えます。これをuninstallに保存して

          # . uninstall

  と実行すれば、インストールされたファイルが削除されます。

  3.9.2.  perl の msql ドライバ DBD-mSQL

  msqlドライバはperlデータベース(generic database)インターフェースのイン
  ストールがうまくいった後にインストールします。インストール過程は上記し
  たステップと同じです。

          # perl Makefile.PL

  ここでシステムは添付ドキュメントを読むように警告を表示します。ここで
  msqlの場所を見つけます。

       $MSQL_HOME not defined. Searching for mSQL...
       Using mSQL in /usr/local/Hughes

        -> Which version of mSQL are you using [1/2]?

  正しいバージョンを入力して下さい。以下2,3行を表示します。

       Splendid! Your mSQL daemon is running. We can auto-detect your configuration!

       I've auto-detected your configuration to be running on port: 1114

  以下のようにしてドライバのテストをします。

          # make test

  再び長い出力があり、

  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! ***

  で終ります。これで大丈夫です。

          # make install

  としてインストールします。もう準備できたので次の節は飛ばしてください。

  3.10.  MsqlPerlインターフェース

  もしMsqlPerlの方を選んだなら、MsqlPerl-1.15.tar.gz以外に特定のデータベ
  ースドライバ(generic database driver)は必要ありません。始めに書いたよ
  うに MsqlPerlはperlとデータベースサーバ間でDBIインターフェースを使わず
  に直接やり取りをするからです。直接インストール、テストします。

  perl Makefile.PLと実行するとユーティリティがスタートします。はじめにど
  こにmSQLがあるか答えます。/usr/local/Minerva/ならデフォルトのままでよ
  いです。

  そしてmake testとします。この前にtestというデータベースがあることを確
  認してパーミッションを読み書き可能にして下さい。

          # msqladmin create test

  と実行します。

  3.11.  perlのCGIライブラリ

  perlのCGIパートは３つのシンプルな段階にわかれています。以下のコマンド
  を実行して下さい。

          # perl Makefile.PL
          # make
          # make install

  前のドライバと違い、このインターフェースはテストオプション (# make
  test)を持っていません。ところが他のモジュールは任意のケースでテストさ
  れる必要があります。

  CGIのサンプルスクリプトがあるサブディレクトリがこれで作られます。この
  ディレクトリの中身を/home/http/cgi-bin/にコピーしてスクリプトのテスト
  のためにブラウザを起動してみて下さい。

  3.12.  チェックリストのインストール

  以下の順に作業を進めます。

  1. Linuxをネットワークサポートでインストールする

  2. httpサーバのインストール(Apacheなど)

  3. ブラウザのインストール(Arena, lynx, Netscapeなど)

  4. SQLサーバのインストール(msql)

  5. 適当なperl SQLインターフェースをインストール

  6. CGIファイルのインストール

     最後にクリーンアップを行います。バイナリやドキュメントは異なるディ
     レクトリにあるのでmsqlのソースツリーやperlモジュールは安全のために
     削除しておきます (アーカイブファイルは削除しなくてよいです)。

  4.  テストデータベースの実行

  システムインストール終了後、モデルアプリケーションを実行することができ
  ます。インストールしたmsqlのバージョンやperlデータベースインターフェー
  スに依存しし、サンプルプログラムを２〜３修正しなければいけません。

  まず/home/httpd/html/にあるindex.htmlファイルがサンプルデータベースア
  プリケーションを呼び出すように修正します。/home/httpd/html/test/のデー
  タベース(アーカイブ名はperl.lst.ckですが、database.cgi あるい
  はinventur.cgiと呼びます)に置き換えます。

  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>
  ______________________________________________________________________

  通常はこの２つのうちから一つを選択するのですが、もし両方ともインストー
  ルしている場合は上のように２行を追加することもできます。２つを使えれば
  パフォーマンスなどを比較することもできます。

  4.1.  MsqlPerlサンプルスクリプトの追加

  サンプルスクリプトはMsqlPerlインターフェースを使うようにします。そのた
  めに適当な箇所を書き換えます。はじめにファイルのはじめあたりのuse 指定
  を変更します。

  ______________________________________________________________________
  #
  # use DBI;            # Generisches Datenbank-Interface
  use Msql;
  ______________________________________________________________________

  そして27行付近でMsqlPerl syntaxが特定のドライバを必要としないようにし
  ます。

  ______________________________________________________________________
  # $dbh = DBI->connect($host, $database, '', $driver) ||
  $dbh = Msql->connect($host, $database) ||
  ______________________________________________________________________

  また33行から最後までdoをqueryに変更します。

  ______________________________________________________________________
  # $dbh->do("SELECT * FROM hw") || db_init($dbh);
  $dbh->query("SELECT * FROM hw") || db_init($dbh);
  ______________________________________________________________________

  最後に、207行をコメントアウトします。

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

  またerrmsgに対する前のコードフラグメントの一つのように全errstrコールを
  スワップする必要があります。これはバージョンに依存するものです。以上の
  作業が終了したらスクリプトはスムーズに実行されます。

  4.2.  msql-2用サンプルスクリプトの追加

  SQL syntaxはmslq-2の開発中に再定義されました。オリジナルスクリプトは
  45〜58行にテーブル初期化ステートメントを実行することはできません。
  primary key modifierはmsql-2ではもうサポートされていません。以下をス
  キップします：

  ______________________________________________________________________
      $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
  ______________________________________________________________________

  このスクリプトは個人番号が同じものも新しくエントリーしてしまいます。
  msql-1はprimary keyをこの動作を防ぐのに使います。msql-2ドキュメント
  はCREATE INDEXが唯一のエントリ発行を閉じる方法について書かれています。

  5.  まとめと今後の見通し

  もしmsql-2をシステムにインストールしているなら、Lite, msql-2のスクリプ
  ト言語で書かれたサンプルプログラム、msql-2独自のスクリプト言語を見つけ
  られます。

  msqlのどちらのバージョンもユーザーを発行しテーブル(msqladmin)に落せる
  ようにした管理ツールの基本セット、データベース構造のテスト(relshow) が
  ついています。

  ２世代目のmsql(msql-2)にはより価値のあるユーティリティ(msqlimport
  とmsqlexport)がついています。これらはSQLデータベースにフラットラインデ
  ータファイル(flat line data file)のダンプをするものです。すでにあるデ
  ータd'un coupをすでにあるテーブルに読み込んだりフラットデータをテーブ
  ルから展開したりするのに使われます。ユーザーはこの作業をするため
  のperlやSQLあるいはどのようなコードでも１行で書くことはできません。

  もしデータベースを取り扱うperlスクリプトを書きたい場合はサンプルファイ
  ルや、DBIモジュールに附属している広範囲に渡ったオンラインドキュメント
  を参照して下さい。

  とにかくこれでネットワークユーザー、WWWのユーザーにデータを表示する準
  備ができました。

  [日本語訳：伊佐冶  哲, isaji@mxu.meshnet.orjp

  日本語訳について感想、訂正などありましたらご連絡下さい]

