初出:SoftwareDesign 2000/11月号 「発刊10周年記念大特集 今こそ Plamo Linux!」
『Plamo Linux 2.1 のデータベース』

						くわむら じゅん
						juk@yokohama.email.ne.jp

========================================================================
 SoftwareDesign 発刊10周年 おめでとうございます。
========================================================================

お詫びと訂正

 作者の不注意のため、いくつかの誤りが見つかっていますことをお詫び
申し上げます。

  Plamo-2.1のDatabase関連パッケージで以下の不具合が見つかってます。

	o aa_pgsql.tgz は aaa-pgsql.tgz という名前になってます。
		pkgtool でインストールする場合はエラーがでますが正常に
		aaa-pgsql.tgz をインストールすることができます。

	o PHP4とxjdicのパーミッションが部分的に足りません。
		http://www.linet.gr.jp/~juk/plamo/の "Plamo-2.1用最新版" 
		から最新版をダウンロードしてください。
	              WWW/php402j1-contrib.tgz 
	              WWW/php402j1.tgz 
	              xjdic23.tgz 

	o PostgreSQL の jumbo-20000921 パッチ適用、 FAQ.j をアップデート、
	  libpgeasy のサンプルプログラムを修正してコンパイルし直しました。
	        Postgres/pgsql702-aaa.tgz
	        Postgres/pgsql702-odbc.tgz
	        Postgres/pgsql702-libpgeasy.tgz


  記事中で PHP-3.0.18 のコンフィグレーションのオプションが間違えてます。

	誤 --enable-mbreg
	正 --enable-mbregex

========================================================================


PostgreSQL+PHP+Apahce = Web+DB 

  Plamo Linux 2.1 (以下Plamo-2.1) には、
Namazu による全文検索の文書インデクスもあり
ますが、ここではウェブと連携したデータベース
を構築する環境を提供する、PostgreSQL, PHP,
Apache などのパッケージについて紹介します。

● PostgreSQL(ポストグレス・キュー・エル)

  いつの間にか Linux で DBMS (データベース管
理システム)が使えて当たり前の時代となりまし
た。最近では、Plamo Linux でなくても
PostgreSQL のバイナリ・パッケージがインストー
ルを待つだけの状態で用意されています。RedHat 
や Vineなどの Linux キットをインストールして
いるとき、データベース・サーバとして 
PostgreSQL のアイコンを目にしたかたもたくさ
んいらっしゃるでしょう。
  もともと PostgreSQL はオブジェクト・リレー
ショナルのパラダイムとして開発された DBMS で
した。最近では、商用 RDBMS と同じ土俵の上に
載せられて " バキュームが必要なのが..." とか 
"アウタージョインが無いから..." と比較された
りしますが、PostgreSQL は文字通りのオープン
ソース・ソフトウェアです。にもかかわらず、そ
の価値は認められ、商用サポートを提供する会社
も増えてきています(^^)。


● PHP(PHPハイパーテキスト・プリプロセッサ)

  Java Script のようにクライアント上で動くプ
ログラム記述言語がクライアントサイド・スクリ
プトと呼ばれるのに対し、PHP のようにサーバ側
で動くものはサーバサイド・スクリプトと呼ばれ
ます。それまでの言語では別プログラムのCGIと
して書かれていたスクリプトを HTML の中に埋め
込んで記述することができます。JAVAでいうと 
Servlet に対応するでしょう。PHP は C や Perl 
に似た記述ができますので、そうしたプログラム
言語に慣れた人にとってはちょっとしたスクリプ
トを書いて HTML の味付けをするときに重宝しま
す。Apache Webサーバのモジュールとして
組み込みもできるため、スピード指向のウェブサ
イトにもうってつけです。

● Apache(アパッチ・ウェブサーバ)

  言わずと知れた HTTPデーモン(httpd)です。ウェ
ブサーバのシェアの6〜7割を占めて最も人気があ
ります。Dynamic Shared Object(DSO)という機構
をサポートし、インストール後でもモジュールの
追加が可能となっています。オープンソースで開
発されていることでも有名になりました。ロゴマー
クにはアパッチインディアンの飾り羽をモチーフ
にしています。Apache については特に説明しな
くても、皆さんはご存知だと思います。


Web+DB パッケージのお品書き

● Database のパッケージ

  初期のころから Plamo Linux には元来の日本
語化パッケージの他に、 Web と Database の連
携を意図したパッケージとして PostgreSQL と 
PHP と Apache とが提供されていました。そして、
PostgreSQL が PHP を介して Apache ウェブサー
バと連携できるように構成されていました。
 Plamo-2.1 版 の Database パッケージには、
PostgreSQL-7.0.2 をベースにした環境がそろえ
られています。この PostgreSQL のパッケージは
以下に示すように本体パッケージとインターフェー
ス言語モジュールなどのアーカイブからなります。

  contrib/Database/ ディレクトリ:
	+ aa_pgsql.tgz		--- 本体パッケージ
	+ contrib.tgz		--- contrib パッケージ(+geometory-0.2.2)
	+ libpgeas.tgz		--- libeasy簡易Cライブラリ
	+ odbc.tgz		--- Linux ODBC ドライバ 
	+ perl5.tgz		--- Perl5.005 Pg-1.8.0 モジュール
	+ pgaccess.tgz		--- PgAccess フロントエンドGUI
	+ pgbash.tgz		--- PgBash-2.1 組み込み Bash-2.0.3
	+ python.tgz		--- Python-1.5.2 PyGreSQL-3.0 モジュール
	+ jdbc.tgz		--- 文字エンコードJDBCドライバ
	+ ruby.tgz		--- Ruby-1.4.6 postgres-0.61 モジュール

Perl5 のモジュールは ソースに附属の Pg とは
別に、各種DBMSへの共通インターフェースモジュー
ル DBI(DataBase Interface)用ドライバーの 
DBD-Pg (DataBase Driver for PostgreSQL) もパッ
ケージとして用意されています。その他に、
DBI:Proxy を利用するための Perl5 モジュールも
用意されています。

  contrib/Database/Perl5/ ディレクトリ:
	+ DBI114.tgz	-- Perl5 DBI(DataBase Interface)モジュール
	+ DBDPg095.tgz	-- Perl5 PostgreSQL DBD(DataBase Driver)モジュール
	+ PlRPC020.tgz	-- Perl RPC (Remote Procedure Call)
	+ NetDaemo.tgz	-- ポータブル・サーバー用のクラス
	+ Storable.tgz	-- データ整合性のための拡張
	+ CompZlib.tgz	-- zlib 圧縮ライブラリのインターフェース

さらに、PostgreSQLを利用するサンプルプログラ
ムも用意してあります。この他に、PHP のパッケー
ジのほうにも PostgreSQL を利用するサンプルを
用意してあります。

	contrib/Database/Sample/ ディレクトリ:
	+ pgimage.tgz		-- PHP連係画像管理システム Web UI
	+ pgpost.tgz		-- 郵便番号検索(大口事業所付き)Web UI

● WWW のパッケージ

Webサーバとして Apache-1.3.12 のパッケージが
用意されていますが、Apache ウェブサーバとの
連携のために PHP-3.0.16 とPHP-4.0.2 とがパッ
ケージとして用意され、どちらも GD, GDBM,
PostgreSQL などのインターフェースを組み込
んで構築されています。PHP3, PHP4 ともに DSO
(Dynamic Shared Object)版と CGI 版とが用意さ
れていますので、HTML 組み込みスクリプトのた
めに DSO版を利用する他、CGI版を使ってデバグ
をしたり PHP スクリプトをつくったりすること
も可能です。PHP のパッケージには簡単なサンプ
ルスクリプトも含まれています。また、W-AGORA 
という掲示版システムもサンプルアプリケーショ
ンとして収録してあります。先に示した 
PostgreSQL のサンプルも PHP を使っています。

  contrib/WWW/ ディレクトリ:
	apache.tgz	-- Apacheウェブサーバー
	gd183j.tgz	-- PNG作製高速グラフィクス・ライブラリ
	gdbm180.tgz	-- GNU DBM ライブラリ
	php3.tgz	-- PHP3ハイパーテキスト・プリプロセッサ
	php4.tgz	-- PHP4ハイパーテキスト・プリプロセッサ
	php4cont.tgz	-- PHP4日本語拡張モジュールおよびサンプル
	wagora3.tgz	-- W-AGORA ウェブ掲示版システム


Database, WWW パッケージのインストール

 ようやくパッケージのインストール手順の説明
にはいりますが、ここでは、端末の入出力は字下
げして示してあります。プロンプトの表示は、

    '#'はrootで実行するコマンド
    '%'は一般ユーザ(postgres 管理ユーザも含む)でのコマンド
    '=#'は psql コマンドモード

のように識別してます。コマンドラインでは、

    オプションは '[' と ']'、
    任意の文字列は '<' と '>'

で囲みます。ホーム・ディレクトリはCシェルの
表記で表し、

    '~postgres' は postgres ホームディレクトリ(/usr/local/pgsql/)

のことを表します。
  ここでは Plamo-2.1 配布 CDROM を

	# mount /cdrom

コマンドで /cdrom ディレクトリにマウントして
いることを前提に話を進めます。

● アップデートの注意

  Plamo 版の PostgreSQL のパッケージをすでに
ご利用になっていてバージョンアップをしたい場
合は、まず、インストールの前にバックアップを
済ませておいてください。
  6.5.x 以前のバージョンからのアップデートを
行ないたい場合は、ダンプとリストアが必要です。
ダンプの方法には、pg_dumpall コマンドで全デー
タベースを吐き出す方法と、pg_dump コマンドで
データベース毎に吐き出す方法とがあります。さ
らに、pg_dump では '-t' オプションを使ってテー
ブル毎に吐き出すこともできます。リストアは
psql コマンドで行ないます。psql コマンドにダ
ンプの出力をパイプまたはリダイレクトで渡して
やります。
  PostgreSQL のダンプとリストアの手順は、古
いバージョンのシステムを稼働させた状態でダン
プをとり、バージョンアップ後に新しいシステム
を稼働させた状態でリストアをします。ダンプと
リストアの実際の例を以下に示します。

  (1) 旧システムにて;
	% pg_dumpall > all.dump
    あるいは
	% pg_dump dataname > database.dump
    あるいは
	% pg_dump -t tablename dataname > table.dump

  (2) 旧システムのアンインストール

	# ~postgres/bin/pgsqld stop
	# removepkg pgsql653
	# removepkg pgsql653-contrib
	.....

  (3) 新システムのインストール(後述)

	# installpkg aa_pgsql.tgz
	.....

  (4) 新システムにて:
	% psql -e < all.dump
    あるいは
	% psql -e dataname < database.dump
    あるいは
	% psql -e dataname < table.dump

● Database パッケージのインストール

  さて、本題に戻り PostgreSQL パッケージのイ
ンストール手順ですが、まず、本体パッケージを
インストールしてから、その他のパッケージをイ
ンストールしてください。本体パッケージのイン
ストール・スクリプトはアカウントの登録やデー
タベースの初期化などの重要な仕事をしています。
/usr/local/pgsql をホーム・ディレクトリとす
る PostgreSQL 管理アカウント postgres がグルー
プ pgsqlで登録され、initdb コマンドが実行さ
れて /usr/local/pgsql/data/ ディレクトリ
($PGDATA)にデータベースを作成し、データの初
期化が行なわれるようになっています。そして、
PostgreSQL のバックエンド・サーバの
postmaster が起動されます。基本的には、本体
パッケージのインストールのみで PostgreSQL を
利用することができる状態になっています。この
インストールの具体的な方法は、Plamo-2.1の
CDROM がマウントされている状態で、

	# cd /cdrom/contrib/Database
	# installpkg aa_pgsql.tgz

をコマンドラインで入力するか、あるいは、

	# cd /cdrom/contrib/Database
	# pkgtool

でメニューからの選択で行ないます。
  本体パッケージをインストールしたら、あなた
が普段使っている一般ユーザから su できるよう
に postgers 管理ユーザのパスワードを設定して
おくと便利です。

	# passwd postgres
	% su - postgres

次に、あなたが普段使っているアカウントの名前
で PostgreSQL のユーザを登録し、データベース
をつくりましょう。次のように createuser と
createdb コマンドを実行します。

	% createuser 
	Shall the new user be allowed to create databases? (y/n) y	<=
	Shall the new user be allowed to create more new users? (y/n) n	<=
	CREATE USER
	% createdb  
	CREATE DATABASE


これらの逆のコマンドは、それぞ
れ、dropuser, dropdb で、6.5.x 以
前とは変わっていますので覚えておきましょう。


● パスワード認証の設定

  これで、登録されたユーザは UNIX ドメイン・
ソケット経由のアクセスが可能になります。もし、
さらに、ローカル・ネットワークからの TCP/IP 
接続や他のネットワークからのパスワード認証に
よるアクセスがしたければ、これらのアクセス制
御を行なうための構成ファイル
$PGDATA/pg_hba.conf に例に示すような記述をし、
パスワード・ファイル(例では $PGDATA/passwd) 
にパスワードを登録しておきます。(残念ながら、
Kerberos 認証は KRB ライブラリと共に 
PostgreSQLを再構成してインストールしなおす必
要がありますのでここでは触れません。)

List.A $PGDATA/pg_hba.conf の設定
--
local   all                                       trust
host    all     127.0.0.1     255.255.255.255     trust
host    all     192.168.2.0   255.255.255.0       trust     
host    all     0.0.0.0       0.0.0.0             password passwd
--

 TCP/IP 経由の接続のためには postmaster を 
'-i' オプション付きで起動しなくてはなりませ
んが、これは起動スクリプトの pgsqld にて行なっ
ています。この場合のパスワードの設定は以下の
ようにして行なえます。

        % cd $PGDATA
        % pg_passwd passwd

これで PostgreSQL が一般ユーザからも利用でき
るようになったわけですが、postmaster にアク
セスするためにはフロントエンド・プログラムを
利用するのが簡単です。もっとも基本的なフロン
トエンド・プログラムは psql (日本語版は
psqlj)です。psql はオンライン・ヘルプ機能も
用意されていて使い易くなっています。

	% psql
	Welcome to psql, the PostgreSQL interactive terminal.

	Type:  \copyright for distribution terms
	       \h for help with SQL commands
	       \? for help on internal slash commands
	       \g or terminate with semicolon to execute query
	       \q to quit
	postgres=# \h
	Available help:
	...

便利な、psql の内部コマンドの一覧は

	postgres=# \?

で見ることができます。終了は、Control+D 
もしくは、

	postgres=# \q

です。
  他のネットワークから TCP/IP 経由でユーザ認
証を使って PostgreSQL にアクセスするには'-h'
オプションでホスト名、'-p' オプションでポー
ト番号を指定する他、'-U' オプションにユーザ
名を続けて指定します。

	% psql -h  -p  -U 

さらに詳しくは、附属の文書や章末の参考文献や
オンライン・マニュアルなどをご覧ください。そ
して、PostgreSQL を極めてコントリビュータの
仲間に加わりましょう。
  その他のインターフェース言語などについての
説明は割愛しますが、PgBash をインストールす
ると /usr/local/bin/pgbash をログイン・シェ
ルとする pgbash アカウントがつくられることだ
けは記しておきます。コマンドラインで DBMS に
アクセスしたいと考えている粋な方は是非お試し
ください。もちろん、インストール後にパスワー
ド登録をしておきましょう。スイッチ・ユーザ
(su) するとすぐに使えます。

	# installpkg pgbash.tgz
	# passwd pgbash

	# su - pgbash
	[pgbash]/usr/local/pgsql> ?
	  ?       : this help
	...

  ついでに、GUI指向の方には pgaccess がお奨
めです。Tcl/Tkで書かれたユーザインターフェー
スですので、X Window System 上で簡単なフォー
ムのデザインができます。

	# installpkg pgaccess.tgz

実行コマンドは、

	% pgaccess

です。
  残りの必要と思われるパッケージは
installpkg や pkgtool を使ってインストール
してください。


● WWW パッケージのインストール

  次に、WWW 関係のパッケージのインストールに
進みましょう。まずは、Apache をインストールし
ます。

	# cd /cdrom/contrib/WWW
	# installpkg apache.tgz

Apache をインストールして、httpd を起動する
前に /usr/local/apache/conf/httpd.conf ファ
イルの内容を確認しておきましょう。インストー
ルした時点で、各ユーザが $HOME/public_html/
下にコンテンツをおいてHTTP で閲覧することが
できるように設定してあります。Apache ウェブ
サーバの起動は次のコマンドで行えます。

	# /usr/local/apache/bin/apachectl start

Apache のインストールが終われば、その次は
PHP のインストールに進みたいところですが、そ
の前に、PHP がライブラリをリンクして使ってい
るPostgreSQL と GD と GDBM をインストールし
ておくことが必要です。
  GDは日本語のフォントイメージの生成に TTFラ
イブラリを利用しますのでそれもインストールし
ておく必要があります。その他にも、PNG, JPEG,
ZLIB, XPMなどのライブラリがインストールされ
ている必要があります。が、ここではそれらのラ
イブラリは既にインストールされているとして話
を進めます。

	# installpkg gd183j.tgz
	# installpkg gdbm180.tgz
	# installpkg php3.tgz
	# installpkg php4.tgz
	# installpkg php4cont.tgz
	# installpkg wagora3.tgz

httpdの動作確認には netscape などのウェブ・
ブラウザを使って http://localhost/ にアクセ
スしてみましょう。Apacheウェブサーバのサンプ
ル・ページが出れば大丈夫です。このページの下
の方には 
図(applist)    のように、インストールさ
れたWeb+DB 関連パッケージが幾つかリスト表示
されます。また、それらのパッケージのドキュメ
ントや開発サイトへのリンクもあります。
php3.tgz に収録してあった PHP3 のサンプルス
クリプトが /usr/local/apache/htdocs/php3/ に
展開されます。また、日本語モジュールなどと一
緒に php4cont.tgz パッケージに分けて収録
した PHP4 のサンプルスクリプトは
/usr/local/apache/htdocs/php4test/ に展開さ
れます。これらのサンプルにもアクセスできる
ことになります。

 サンプルスクリプトの中に PostgreSQL の検索
を行なう PHPgSQL があります。
http://localhost/php4test/phpgsql4/


これを使うためにはPHPで書かれたパスワード認証
を通過する必要があります。このパスワードを
登録するためには、

	# cd /usr/local/apache/htdocs/php4test/phpgsql4/
	# /usr/local/apache/bin/htpasswd  _htpasswd  

を実行し、パスワードを入力します。
図(phpgsql)
         はパスワード認証後のデータベース設
定フォームです。PHPgSQL は、PostgreSQL の
tutorial を基につくったPHP/FI のスクリプトで
したが、現バージョンではデータの更新もサポー
トしています。PHPgSQL でテーブルにアクセスする
には、httpd が実行時に変身するユーザ
nobody に対し、必要な権限を委譲しておく必要が
あります。権限委譲は GRANT SQL コマンドで行なえ
ます。たとえば、postal というデータベースに接続
してprefecture テーブルからデータの選択をできる
ように、GRANT コマンドを psql を使って実行する
場合は、

	% psql postal
	postal=# GRANT SELECT ON prefecture TO nobody;

のようにします。GRANT の使い方を知るには、
psql のコマンドラインで、

	postal=# \h

を入力するか、Linux のコマンドラインで、
	
	% man grant

を実行してみてください。それ以外にも、
/usr/local/apache/htdocs/php4test/ には
namazu の検索など他のサンプル・スクリプトが
ありますので興味のある方はご覧ください。


Database, WWW パッケージのできるまで

  ここでは、パッケージ構築時の仕込みにあ
たる構成(configure) オプションなどを説明
します。

● PostgreSQL の仕込み

  まず、PostgreSQL-7.0.2は次のように構成
(configure)を行ない、make および `make
install` したものをパッケージにしました。

  ./configure --prefix=/usr/local/pgsql \
	--with-pgport=5432 \
	--enable-multibyte  \
	--with-tcl \
	--with-tclconfig=/usr/local/lib \
	--with-tkconfig=/usr/local/lib \
	--with-odbc

また、次のようなパッチや追加を行なっています。

  + jumbo-20000820.patchの適用
    (pgaccessのkinput2パッチを含む)
  + EUC_JP オプションのマルチバイト指定
  + 日本語化フロントエンド・プログラム(psqlj)
  + 日本語文書(FAQ, 6.5.3 文書)

パッケージを作るときに、`make install` 後に
インストール先のディレクトリを
 /usr/local/pgsql702 へ移動し、パッケージの
インストール時にホームディレクトリの
/usr/local/pgsql へシンボリック・リンクを張
るようにしてます。古いバージョンのインストレー
ションが残っている場合に対処するためです。

  DBI-1.14 や DBD-Pg-0.95 は一般的な Perl5
モジュールのインストールの仕方で、

	% perl Makefile.pl
	% make; make test
	# make install

の手順でインストールしました。

● Apache の仕込み

  Apache-1.3.12 は次のように構成してます。

  OPTIM="-O2" \
  ./configure --with-layout=Apache \
	--enable-module=all --enable-shared=max

できるだけ多くのモジュールが利用可能となるよ
うに願っての構成オプションを使ったわけです。
これにはもちろん、mod_rewrite や libproxy も
含まれていて、httpd.conf を適切に設定さえす
れば利用できます。また、各ユーザが
$HOME/public_html/ 下にコンテンツをおいて
HTTP で閲覧することができるようにするため、
以下の設定のコメントをはずしてあります。

List.B httpd.conf ユーザホームに関する設定箇所
--

    AllowOverride FileInfo AuthConfig Limit
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    
        Order allow,deny
        Allow from all
    
    
        Order deny,allow
        Deny from all
    

--

その他に、httpd がユーザ nobody, グループ
apache にて走り HTTP の標準ポートの80番 を使
う設定になっていますので、これらに注意してコ
ンテンツのパーミションを決めてください。なお、
この Apache にはGNU dbm(GDBM)ライブラリが必
要でしたので、起動時に GDBM ライブラリをロー
ドするよう起動スクリプト
/usr/local/apache/bin/apachectl に、

List.C apachectl への追加 
--
export LD_PRELOAD=libgdbm.so.2
--

を加えました。もちろん、GDBM-1.8.0のバイナリ
パッケージも標準構成で用意してあります。

● PHP の仕込み

  さて、PHPですが、バージョンの移り目という
ことで、PHP3 と PHP4 の両方をパッケージにし
ています。Apache DSO 版で両方のバージョンを
共存させるためには、PHP3 と PHP4 の双方を
"--enable-versioning" オプションで構成する
必要があります。現在の開発環境に使っている
Plamo-2.0 では binutilles が古くてこのオプショ
ンが有効にならないため、
binutils-2.9.1.0.25-57 をインストールした環
境で、それぞれのバイナリを構築しなおしました。
構築に際し、Plamo Linux のプライベート・パッ
ケージである強み(?)をいかして、
PostgreSQL-7.0.2 の他に GD-1.8.3と GDBM-1.8.0
も組み込むことにしました。

  GD-1.8.3 は後の利用上の便利さを考えてシェ
アード・ライブラリにしています。また、デフォ
ルトの PNG のイメージフォーマットの他に、欲
張って Xpmと新機能の JPEG のイメージフォーマッ
トも扱えるようにし(ライセンスがグレーな GIF
を扱うファンクションは使えなくしています)、
さらに、日本語フォントを扱えるように構成しま
した。

  ./configure  --enable-shared
	--enable-xpm \
	--enable-jpeg \
	--enable-freetype \
	--enable-jisx0208

それに加えて、日本語の取扱いに関するパッチを
当てました。GD で FreeType フォントを利用す
る場合に気をつけるべきことはフォントのパスの
指定で、Plamo-2.1 の場合は、

  /usr/X11R6/lib/X11/fonts/TrueType/watanabe-mincho.ttf
  /usr/X11R6/lib/X11/fonts/TrueType/wadalab-gothic.ttf

が利用できます。プログラムを書くときは注意し
ましょう。

  PHP3 は PHP-3.0.15-i18n-jaの
日本語取扱の差分を PHP-3.0.16 に反映させたも
のです。いずれも GD の TTF で日本語フォント
を利用するために、gd.c の中の gdttf ファンク
ションをgdImageStringTTF ファンクションに置
き換え、gdttf.c のファンクションを使わないで、
GD 附属のファンクションを使うようにしました。
  PHP3 の DSO版の構成は、

  ./configure  \
	--with-pgsql \
	--with-apache=../apache_1.3.12 \
	--with-apxs=/usr/local/apache/bin/apxs \
	--enable-track-vars --enable-versioning \
	--with-ttf --with-x --with-gdbm \
	--with-gd=../gd-1.8.3j --with-jpeg-dir=/usr --with-zlib \
	--enable-i18n --enable-mbregex

構成時にうまく認識できなかったライブラリをリ
ンク時のフラグとするため、

  -ljpeg -L/usr/X11R6/lib -lXpm -lX11

を Makefile の中の APXS_LDFLAGS 変数と LIBS
変数とに付け足しました。'make install' 後、
Apache の起動スクリプトに、

List.D  apachectl への追加 
--
export LD_PRELOAD=libgdbm.so:libpng.so.2:libjpeg.so:libXpm.so
--

を追加するように、また、Apache の httpd.conf 
には PHP を優先するための変更を行なうように、
インストール・スクリプトに記述しました。そして、
/usr/local/lib/php3.ini では日本語文字コード
に関する設定を次のようにしました。


List.E php3.ini の日本語文字コード設定
--
i18n.http_output = EUC-JP
i18n.internal_encoding = EUC-JP
i18n.script_encoding = auto
i18n.http_input = auto
i18n.http_input_default = EUC-JP
--

  PHP3 の CGI 版の構成は、

  ./configure  \
	--with-pgsql \
	--with-ttf --with-x --with-gdbm \
	--with-gd=../gd-1.8.3j --with-jpeg-dir=/usr --with-zlib \
	--enable-i18n --enable-mbregex

で行ない、Makefile の LIBS 変数に DSO版と同
様のライブラリの指定を追加し、`make install`
後に /usr/local/bin/ にインストールされた
phpを php3 に改名しました。

  PHP-4.0.2 の日本語化は、まだ、されていませ
んが、日本語文字コードを取り扱えるいくつかの
モジュールがあります。将来的には、PHP4 から
実装されたモジュール・ダイナミックローディ
ング機構の Self-Contained PHP Extentions(SCE) により
パッケージの独立性を高めていきたいの
で、これらのモジュールやサンプルスクリプトは
別パッケージとして扱うことにしました。
  PHP4 についても DSO 版と CGI版の両方を用意
してありますが、それらの構成は日本語拡張に関
する "--enable-i18n --enable-mbregex" をはずし
ただけであとは同じです。GD に関する処置も同
じように行ないました。PHP4 をインストール
すると /usr/local/lib/php/ に DB.php を
はじめとするクラスファイルが置かれます。PHP4
のスクリプトからこれを使うには、
 /usr/local/lib/php.ini の中で include_path
にパスを指定します。
  日本語に関するモジュール(jstring, iconv,
mbregex, namazu)を SCE を利用してインストー
ルしようとしたのですが、PHP-4.0.1pl2でうまく
生成されていた Makefile が PHP-4.0.2 では全
く生成されませんでした。phpize で使われる
pear.m4 に修正が必要であることを教わり、これ
を今回のパッケージにも反映させました。SCE に
対応したモジュールの構築は

	% phpize
	% ./configure

を行なった後、生成された "php_config.h"がソー
スコードの所定の場所でインクルードされていれ
ばあとは makeと `make install` をするのみで
す。コンパイルされたモジュールはデフォルトでは

/usr/local/lib/php/extensions/no-debug-non-zts-20000809/

の下にインストールされます。PHP4 のスクリプ
トでこのディレクトリからモジュールをロードす
るためには、/usr/local/lib/php.ini の中で
extension_dir にこのパスを指定します。


List.F php.ini でのパスの指定
--
include_path  = /usr/local/lib/php:./
extension_dir = /usr/local/lib/php/extensions/no-debug-non-zts-20000809
--

 PHP4 のスクリプトでモジュールのロードはld() 
ファンクションを使って行なえます。ロードする
前に、すでにロード済みかどうかの確認は
extension_loaded() ファンクションを使って行
なうと良いようです。
  今回パッケージにはしませんでしたが、実際に
上記の手順で、PostgreSQLのインターフェースを
SCE でインストールしてスクリプト実行時にロー
ドして動かすこともできることを試してみました。
これでPHPも独り立ちできそうです。


謝辞

  最後に、ここで使わせていただいたすべてのオー
プンソース・プログラムの作者およびパッチの提
供者の皆さんに感謝いたします。また、それぞれ
メーリングリストやウェブページなどでサポート
をしてくださる人達にも感謝いたします。今回
紹介させていただいたようなパッケージをつくる
ことができるのもそうした沢山の人達が積み上げ
てきた努力の成果があったからということをいつ
も心にとどめながら、また何かをつくっていきた
いと思っています。


---
参考文献

SD-2000-06 特集 フリーDBMSの決定版 PostgreSQL大全、技術評論社
SD-1999-01 特集 オープンソース時代のデータベース活用法-2 PostgreSQL 徹底解説、技術評論社
SD-1998-12 特集 はじめての Plamo Linux-3 簡単システム構築術、技術評論社
SD-Linux Issue すみからすみまでLinux-2 Linux で作る快適データベース環境、技術評論社(ISBN4-7741-0749-2)

「改定版 PC-UNIXユーザのためのPostgreSQL 完全後略ガイド」、石井達夫、技術評論社(ISBN4-7741-0890-1)

「PC-UNIXによる高機能Webサイト構築入門」、高見禎成、技術評論社(ISBN4-7741-0758-1)
「PHP4 徹底攻略 Webとデータベースの連携プログラミング」、堀田倫英/石井達夫/広川類、ソフトバンク パブリッシング(ISBN4-7973-1392-7)
「PHPプログラミング入門」、レオン・アトキンソン著/玉川竜司訳、ピアソン・エデュケーション(ISBN4-89471-225-3)


参考URI

PostgreSQL on Plamo Linux	http://www.linet.gr.jp/~juk/plamo/
日本PostgreSQLユーザー会	http://www.jp.postgresql.org/
日本PHPユーザ会			http://www.php.gr.jp/
日本Apahceユーザ会		http://www.apache.or.jp/