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. イントロダクション
膨大なデータや(辞書データベースといった)複雑なリレーショナル設定のデー
タベースは多くのユーザやオペレータが同時に使えるものでなくてはなりませ
ん。理想的にはシステム的に接続されたさまざまなハード/ソフトウェアを使
えるものであるべきです。経費を節約するためにひとつのシステム、データベ
ースサーバはパワフルなものである必要があります。ユーザーステーションは
一般的にデータの表示とコマンドの実行をします。処理はクライアント-サー
バデータベースにする1台のマシン上で行われます。さらにユーザインター
フェースの管理が容易でできるだけクライアント側への負担がないものの方が
よいでしょう。
以上の基準(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データベースサーバ:現在2つのバージョンのものが入手できま
す。このバージョンの違いは処理できる数、アドミニストレーションイン
ターフェースの違いに依っています。古い方のバージョン
は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/以下3つのサブディレク
トリ../cgi-bin/、../html/、../icons/ があります(訳注:RedHat以外のディ
ストリビューションではディレクトリが若干違うかもしれませ
ん)。../html/ディレクトリにはindex.html ファイルがあります。あとでこの
ファイルは各自のファイルindex.htmlに置き換えて下さい。設定の情報
は/etc/httpd/conf/に蓄積されています。システムが十分に設定されていて、
特にエラーもなくインストールができたならこれ以上は必要ありません。
3.5. ブラウザ
基本的にLinux用のブラウザには3つのものがあります:
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を選択したかその理由を2、3述べます。まず第一にインスト
ール/管理が簡単で、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は2つのバージョン(msql-1.0.16, msql-2.0.1)が入手できます。この違
いはパフォーマンスの違い(小さい仕事では特に差はありません)や添付されて
いるソフトウェアの違い(新しいバージョンには多くのツール、スクリプト
ファイルがあります)によっています。以下この2つのバージョンでのインス
トールについてそれぞれ解説していきます(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
(訳注:アーカイブは以下のサイトから入手できます。