『Plamo Linux 3.0 用 PostgreSQL,Apache+PHP4 パッケージ』 >http://www.linet.gr.jp/~juk/plamo/< 2002-09-21 くわむら じゅん juk@yokohama.email.ne.jp はじめに ここで説明する PostgreSQL 関連パッケージ群は、もともと Plamo 2.2.x (glibc-2.2.2)用にまとめたものをもとに、 Plamo 3.0(glibc-2.2.5) 用とし て開発をしたものです。。GLIBCのバージョンが同等であれば、おそらく、 Plamo 以外のディストリビューションでも必要なランタイムライブラリ等の移 植によって動くようになるでしょう。個々のパッケージの利用の仕方や利用条 件などについては、それぞれのパッケージに含まれるドキュメントに従って下 さい。ドキュメントはパッケージ内の usr/doc/ 下のアプリケーション名のサ ブディレクトリの中にあります。これらのパッケージは随時更新されるので最 新情報は http://www.linet.gr.jp/~juk/plamo/ をご覧下さい。ほとんどの場 合、Plamo-2.2.x 用のパッケージは Plamo 2.x や Plamo 1.x.x では動かず、 また、Plamo-3.0 で作り直されたパッケージはPlamo-2.2.x 以前のバージョン では動かないことに注意してください。旧バージョンのパッケージも同Webサ イトにて見つかりますが、幾分古いバージョンを固めていますので、利用にあ たっては十分ご注意下さい。なお、Plamo 1.x.x 向けのパッケージは Plamo-1.4.5 と供に『PC UNIXユーザのためのPostgreSQL完全攻略ガイド 第二 版』(石井達夫氏著)付録として、Plamo 2.x 向けのパッケージは Plamo-2.2 と供に『第3版 PC UNIXユーザのためのPostgreSQL完全攻略ガイド』(石井達夫 氏著)付録としてそれぞれ収録されてもいます。 Plamo-2.2.5 のころから徐々にアプリケーションのインストール先を /usr/local とするのを避けてかわりに /usr もしくは /opt を利用するよう になりました。このため、PostgreSQL やApache などのまとまったパッケージ を /opt 以下に配備するようになりましたので、旧来のユーザの方はお気をつ け下さい。ここで紹介する PostgreSQL, PHP4, Apache のパッケージも --prefix=/opt で構成してインストールしたものとなっています。 なお、Plamo Linux 3.0 CDROM収録版は pkgtool コマンド対策のため、パッ ケージ名を "8.3" の形式に短縮しています。もとのパッケージ 名を参照するためには ls コマンドにロングフォーマット(-l)オプションを付 けて "ls -l *.tgz" でご覧ください。 ===================================== 使用上の注意 ここに紹介するパッケージは作者の個人的な趣味で作成したものです。そして、 完全に無保障です。すなわち、これらのパッケージ自体およびそれらに起因するい かなる問題や損害に対しても、そうしたことへの言及や示唆が明記されているいな いに関わらず、作者はどのような保証も弁償もいたしません。 ここに紹介するパッケージ等のご利用は、ご自身の責任に基づき十分に注意を 払って行って下さい。 なお、雑誌や書籍への収録や再配布やに関しては作者にご一報下さい。また、 書面にて紹介していただける場合にもご連絡をいただけると幸いです。 ===================================== 1. PostgreSQL 関連パッケージ PostgreSQL のパッケージは本体とcontribの2つのパッケージからなります。 本体パッケージは通常のインストレーションでインストールされるものを固め たものです。contribパッケージには PostgreSQL ソースアーカイブのcontrib ディレクトリに含まれていた拡張ファンクション類が含まれます。 PgBash は PostgreSQLの問い合わせライブラリをリンクした Bashシェルで、 シェルの中からコマンドラインで直接DBへの問い合わせが可能です。 Usogres はポートリプリケータで、PostgreSQLサーバの簡易的な二重化を提 供します。 Database/postgresql-7.2.2-i386-3.tgz PostgreSQL-7.2.2 本体パッケージ(psql日本語版対応) Database/postgresql-7.2.2_contrib-i386-3.tgz PostgreSQL-7.2.2 コントリビューションモジュールパッケージ Database/postgresql-7.2.2_doc_jp-3.tgz PostgreSQL-7.2.2 日本語ドキュメントパッケージ Database/pgbash-2.4a.2-2.05a-i386-2.tgz PostgreSQLインターフェース組み込みBashシェル Database/usogres-0.8.1-i386-1.tgz PostgreSQL ポートリプリケータ Usogres PostgreSQL標準問い合わせクライアントCUIの psql は日本語のメッセージ を利用可能となっているほか、GNU readline-4.2 の行編集や履歴機能を利用 するようにしてあります。GNU readline-4.2 の日本語対応パッケージをイン ストールしておく必要があります(plamo-3.0に取り込まれました)。 基本的には、本体パッケージのインストールのみでPostgreSQLの利用は可能と なります。認証にKerberosを使ったり、暗号化にSSLを利用できるようにして ありますので、使用する際には必要なパッケージをインストールしておいて下 さい。Plamo-2.2.x から、OpenSSL は OpenSSH とともに標準でインストール されるようになりました。Kerberos を利用したい場合は別途インストール する必要があります。( Kerberosについて詳しくは、 http://www.rccm.co.jp/~juk/krb/ をご覧下さい。) Network/krb4-1.2-i386.tgz 以前のバージョンである 7.2 からのアップデートにダンプとリストアは必 要ありません。データをそのまま使えますので tar コマンドでバックアップ をとって、新しいバージョンをインストール後に展開して戻すと良いでしょう。 ただし、ファイルの属性が変わってしまわないように注意しましょう(tar の -p オプションを使用)。 (例) # pgsqld stop # tar cvpfz /tmp/data.tgz -C ~postgres data # removepkg <旧パッケージ名> # installpkg <新パッケージファイルパス> # tar xvpfz /tmp/data.tgz -C ~postgres もっと古い 7.1.x 以前のバージョンをお使いの場合は、データベースの バックアップ(ダンプ)とリストアが必要です。 まず、古いサーバを停止する前にデータベースのバックアップをダンプコマ ンドを使って行なってから、サーバを停止し、古いPostgreSQLパッケージを消 去します。そして、新しいPostgreSQLパッケージをインストールし、データベー スを初期化して新しいサーバを起動してから、データベースのリストアを行い ます。 データベースのダンプは、pg_dumpall で全データベースを吐き出すか、あ るいは、pg_dumpでデータベース毎に吐き出すことが可能です。オプションに よりテーブル毎のダンプもできます。 データベースのリストアは、pg_restore あるいは psql コマンドで行ないま す。pg_restore を使うとテキストフォーマット以外でダンプしたバックアップ からのリストアが可能です。 以下に簡単なダンプとリストアの例を示します。 (1) 旧サーバにて(全データベース)、 % pg_dumpall > all.dump あるいは(データベース毎)、 % pg_dump dataname > database.dump あるいは(テーブル毎)、 % pg_dump -t tablename dataname > table.dump (2) 新サーバにて(全データベース)、 % psql -e < all.dump あるいは(データベース毎)、 % psql -e dataname < database.dump あるいは(テーブル毎)、 % psql -e dataname < table.dump (1) PostgreSQL本体パッケージ PostgreSQL本体パッケージには、ODBCドライバ、JDBCドライバ、および tcl/tkモジュールが、GUI(pgaccess)や埋め込みSQL(ecpg)やストアドプロシー ジャ(PL/PGSQL, PL/perl, PL/tcl, PL/python)などとともに含まれています。 この本体パッケージのインストールは、次のように行います。 # installpkg postgresql-7.2.2-i386-2.tgz または、pkgtoolからも行なえます。インストール時に実行されるスクリプト により、/opt/pgsql/ をホーム・ディレクトリとしてユーザpostgresと グループpgsqlが登録されます。それから、initdb によりデータベースの初期 化がおこなわれた後、ローカル・ネットワークからのフリーアクセスを許し、 他からはパスワードによるアクセスを許可するように pg_hba.conf が設定さ れます。(注意:実態は /opt/pgsql713/ の下です。) ネットワーク越しのアクセスのためにユーザーとパスワードを設定するには pg_passwd コマンドを使います。WEBからのアクセスのためにユーザー www を登録するために createuserコマンドが実行されますが、権限に注意しましょ う。これらの処理の詳細は、/opt/pgsql/apps/utils/create_default_users を御覧になればわかります。インストールの際に画面に以下のような表示が出 ますがエラーではありません。 (注) 以前は nobody アカウントをWebサーバにて使っていましたが、セキュ リティの見地から www アカウントを明示的に作成するようにして、Webサーバ とコンテンツ管理のアカウントを分離しました。 -- /opt/pgsql/bin/pgsqld: postmaster(PostgreSQL server) started. /opt/pgsql/bin/pgsqld: Proccess ID = 12781 Initializing default data base by user postgres ... running... createdb postgres running... createuser www Enter user's postgres ID or RETURN to use unix user ID: 65534 -> Is user "www" allowed to create databases (y/n) n Is user "www" a superuser? (y/n) n createuser: www was successfully added Shall I create a database for "www" (y/n) y -- /etc/serveses に postgres_dbms がポート 5432 で登録されますが、今の ところ、Kerberos認証以外では使うことはないと思われます。このパッケージ ではKerberos認証を利用できるように、KRBVERS4を定義してコンパイルの際に krb ライブラリをリンクしています。 インストール直後に pgsqld スクリプトで PostgreSQLバックエンド・サー バーを起動してすぐに使うことができます。 UNIXユーザー・アカウントの postgres が PostgreSQL管理者用アカウント となります。インストールが終ったら、このアカウントにパスワードを設定す るのを忘れないようにしましょう。UNIXユーザー・アカウントはマシンにログ インするためのアカウントで、インストール時に設定したPostgreSQLを使うた めのPostgreSQLユーザー・アカウントとは異なりますのでご注意下さい。 バックエンドサーバからのログは、SYSLOGD 経由で /var/log/pgsqlog に出 力されるように設定されています。これにともなって、logrotate.conf への 記述も追加も行なうようになっています。 このように、インストールが成功するとPostgreSQLはすでに使える状態になっ てますので、文字端末用FEP(フロントエンド・プログラム)の psql を使って みましょう。環境変数 LC_ALL に ja_JP.eucJP を設定すると日本語化された 日本語メッセージを psql プログラムで見ることができます。もし、端末が未 対応で日本語の表示に問題があるようでしたら、環境変数 LC_ALL を Cに設定 してオリジナルのメッセージで psql コマンドを使って下さい。 X Window Systemをお使いであれば、多機能な GUIの pgaccess もご利用に なれます。現バージョンでは、日本語ラベルの選択もできます。 パスワードファイルによるユーザ認証をしたい場合は以下のように pg_passwd コマンドでパスワードファイルを作ってください。 -- # pg_passwd /opt/pgsql/data/passwd File "/opt/pgsql/data/passwd" does not exist. Create? (y/n): y <= Username: postgres <= New password: <= Re-enter new password: <= -- 認証の仕方については、~/data/pg_hba.conf ファイルに記述します。 (2) PgBash パッケージ PostgreSQL本体パッケージでは標準シェルを tcsh に想定してありですが、 粋な Bashユーザのために、境田雅明さんの PgBash-2.4a をパッケージにしま した。インストールはPostgreSQL本体パッケージをインストールした後に行な います。installpkg でパッケージのインストールをすると、pgbash をログイ ンシェルとする pgbash アカウントが作成されます。この PgBash-2.4a は Bash-2.05a に PostgreSQL アクセスのインターフェースの拡張が施されてい て、Bashのコマンドラインから直接PostgreSQL コマンドを実行できます。イ ンストールの際に pgbash が /etc/shells に登録されますので、その他のユー ザでも自分でログインシェルを pgbash へ変更可能です。 Bashコマンドラインからの実行は例えば、 $ connect db; を実行するとデータベース db に接続し、 $ select * from table; のように、SQL 文を発行してデータベースへの問合わせも行なえます。また、 .pgbashrc をログイン時に実行するようにしてあるので以下のような psql フロントエンドのコマンドに似たコマンドも使えます。 -- ? : this help h [SQL]: help syntax or all SQL_commands o : help OPTIONs of 'exec_sql' function v : print PGBASH VERSION s : print STATUS after SQL execution l : list all DATABASEs m : list all CONNECTIONs d [TBL]: list tables,indices,columns in , or all tables dt : list only TABLEs di : list only INDEXes ds : list only SEQUENCEs dg : list GRANT/REVOKE permissions dA : list AGGREGATEs dD [obj]: list DESCRIPTIONs for , or all dF : list PosgreSQL FUNCTIONs dO : list OPERATORs dS : list SYSTEM tables and indexes dT : list TYPEs -- PgBash についての詳細は、作者境田さんのウェブページをご覧ください。 http://www.psn.co.jp/PostgreSQL/pgbash/index-j.html (3) Usogres PostgreSQLサーバの簡易的な二重化のために細川哲一さんの Usogres をパッ ケージにしてあります。usogres を実行するには、パッケージをインストール した後、ホームディレクトリの .usogresrc に ホストとポートの設定をして 起動します。たとえば、ローカルで試してみるには次のような設定もありえま す。 -- host = "127.0.0.1" port = 5432 hostorg = "127.0.0.1" portorg = 5434 hostcopy = "127.0.0.1" portcopy = 5436 -- この場合、別々のデータベースを管理する postgresql サーバをポート 5434 と 5436 とで別々に起動しておく必要があります。そして、 /opt/pgsql/bin/usogres を起動し、psql などのクライアントプログラムでポート5432(標準ポートな ので指定の必要なし)に普通にアクセスするだけで利用できます。 Usogres についての詳細は細川さんのWebページをご覧ください。 http://usogres.good-day.net/ (4) Perl5 DBIパッケージ Perl5 DBI は Perl5 から色々な DBMS への共通の出しを提供します。ここでは PostgreSQLを利用するためのドライバ DBDPg のみを用意しました。DBI 関連の パッケージは、 Perl5 サブディレクトリにまとめてあります。 DBI-1.28.tgz Perl5 DBI(DataBase Interface)モジュール DBD-Pg-1.13.tgz Perl5 PostgreSQL DBD(DataBase Driver)モジュール DBIにはコマンドラインからも使えるdbishというシェル版もあります。また、 dbiproxyというプロキシとして使えるものもあります。ただし、dbiproxyは PlRPCを必要とし、PlRPCはさらにStorableとNet-Daemonを必要としますので、 それらもインストールする必要があります。とりあえず必要なパッケージを用 意してあります。(ソースはCPANサイトからもダウンロードできます。)以下の パッケージは、DBI:Proxy を使用しなければ不要です。 PlRPC-0.2016.tgz Perl RPC (Remote Procedure Call) Net-Daemon-0.36.tgz ポータブル・サーバー用のクラス Storable-2.04.tgz データ整合性のための拡張 Compress-Zlib-1.16.tgz zlib 圧縮ライブラリのインターフェース (5) その他のデータベース GNU DBM は旧来の DBM, NDBM 互換ライブラリです。PHPなどで使うために 用意してあります。 Berkeley DB バージョン4(DB4) は OpenLDAPパッケージのために用意しました。 ここにある Berkeley DB バージョン4(DB4) はplamoメインパッケージの DB2 のヘッダと干渉しますので、インストールには注意してください。 (いずれも、plamo-3.0に取り込まれました)。 2. PHP4とApacheによるWeb+DB連係のためのパッケージ PHP:Hypertext Preprocessor を利用してWebサーバ(Apache)とデータベース サーバ(PostgreSQL)とを連携させることが可能です。 Plamo-3.0 用のApacheサーバはmod_sslモジュールをロードすることによ り SSL 対応にすることが可能です。SSLによってセッションを暗号化すること で高度なプログラムの安全性を高めることが可能となり、ASP(Application Service Provider)構築プラットホームとしても利用の可能性が広がります (正式なサーバIDは専門業者より取得して下さい)。 (1) Apache Web サーバと PHP4 パッケージ Apacheのインストールの際に、 apache というグループを作成し、www とう いう実行用ユーザアカウントとwadmという管理用ユーザアカウントをapacheグ ループにて作成します。Apache Webサーバプログラム(httpd)はオーナー www、 グループ apache にて走るように構成してあります。 WWW/apache_mod_ssl-2.8.10-1.3.26-i386-2.tgz SSL対応ウェブサーバー Apache+mod_ssl Apacheパッケージをインストールすると namazu.cgi を使っての文書検索も 可能になります。もちろん namazu パッケージもインストールしておく必要が ありますが、おそらく Plamo では標準でインストールされているはずです。 PHP-4.2.3のパッケージには、DSO版とCGI版のphpを両方含みまます。塚田さ ん、廣川さん、大垣さんらの努力でPHP-4.2に組み込まれたによるマルチバイ トコードに関連するモジュールを有効にし、さらに藤本さんによるSJISコード のためのパッチを当ててあります。この他に、kakasiやnamazuなどのインター フェースもSCE(Self-Containd Extention)モジュールとして用意してますので dlファンクションでロードして使うことができます。 WWW/php-4.2.3-i386-2.tgz PHP: ハイパーテキスト・プリプロセッサ WWW/php-4.2.3_contrib-i386-2.tgz PHPサンプルプログラム (2) Apache,PHP4 サポートライブラリ Plamo版 Apache パッケージの httpd は db, gdbm, gd, pq 等の共有ライブ ラリを必要としますので、あらかじめ確認しておきましょう。また、SSLを利 用する際(apachectl startssl で起動)は、mm, ssl 等の共有ライブラリも必 要とします。以下のサポートライブラリをインストールしておきましょう。 WWW/mm-1.2.1-i386.tgz MMメモリーマップライブラリ WWW/gd-1.8.4j-i386.tgz GD 高速グラフィック描画ライブラリ(PNG対応) WWW/curl-7.9.5-i386.tgz URLライブラリ WWW/libiconv-1.8-i386.tgz 文字コード変換ライブラリ 以前の Plamo-2.x では pgsql と gd モジュールを外部モジュールにしてい たため利用する際は、ld ファンクションでロードする必要がありましたが、 このパッケージでは不要です(出力バファリングでの問題があったため、結局 組み込むことにしました)。とはいえ、ld ファンクションを実行しても大丈 夫ですので、extension_loaded() でチェックをしている場合はあえてプログ ラムから削除する必要はありません。 GDライブラリは、さらに PNG, JPEG, Xpm, ZLIB, TTFのライブラリを必要と しますので、Plamoの配布に含まれているパッケージよりあらかじめこれらの ライブラリをインストールしておいてください。GD1.8.xはJPEGの取扱をでき るように機能追加していますが、古いGD(gd-1.3)のライブラリが残っている場 合、起動時あるいはJPEGなどの機能を使用した際に失敗することがありますの で、古いバージョンのGDライブラリは取り除いておいてください。 起動後、http://localhost/ にアクセスするとインストールされた代表的な 幾つかのパッケージのドキュメント・ディレクトリへのリンクをたどることが できるページが表示されます。 PHP4の和訳マニュアルや、筆者が練習用に作製したテストやサンプルスクリプト 類は contrib パッケージに含まれています。これらのサンプルもインストール 後に試してみることができます。 namazu や kakasi のパッケージは、Plamo-2.2.x では標準で含まれているはず ですが、もし、見つからない場合は以下のパッケージをインストールします。 WWW/kakasi-2.3.4-i386.tgz kakasi 日本語分かち書きツール WWW/namazu-2.0.10-i386.tgz namazu 日本語全文検索ツール (3) アプリケーション・パッケージ PHPを使った実際のプログラムの書き方を見ることができるように、比較的 コンパクトにまとまっているアプリケーションをサンプルとしてパッケージ にしてあります。 WWW/Sample/w-agora-4.1.4-php.tgz ウェブ掲示版システム WWW/Sample/pukiwiki1-3.2.tgz PHP による Wiki(自由帳) クローン 以下のプログラムは register_global=off でなくては動作しません。 WWW/Sample/pgimage-2.2.tgz 画像管理システム Web UI(by 石井達夫氏) WWW/Sample/pgpost-1.3.2+ooguchi.tgz 郵便番号検索 Web UI(by 石井達夫氏) WWW/Sample/pgCalendar-0.1.tgz Webカレンダー(by 渋谷寿夫氏) 上記の他に PHP4 の contrib パッケージにもサンプルを入れてあります。 インストールすると、サンプルプログラムが DocumentRoot 下の php4test ディ レクトリに展開されます。このサンプルには以下の小品が含まれています。 主なサンプルプログラムの説明: unitconv.php 単位変換 (PHP/FI2.0のサンプルを convortor で .php に変換) calcf.php Frame を使った電卓 (元の電卓は Michihide Hotta さん作) namazu/ 塚田さんによる namazu モジュール附属のサンプル count4/ DBMを用いたアクセスカウンタ guest4/ 宿長と手紙の書式 guest4/guestbook.php 宿長(Guest Book) guest4/mailform.php 郵便窓口(Mail Form) (PHP/FI2.0 のサンプルを改造、日本語化) phpgsql4/ PostgreSQL アクセス例 (Postgres95 tutorialの基本アクセス例のPHP/FI化をベース) gdgraf4/ GD でのXYグラフプロット例 (サーバアクセスログの月次集計を表示) imagekanji.php GD1.3 との互換のためのインクルード (GD-1.7以降では GIF が廃止され PNG がデフォルト) imagelist/ JPEGイメージリストの作成表示 (サムネイル生成、コメント付記可能) これらのサンプルプログラムの配布条件は GPL に従います。ファイル COPYING を参照ください。 (4) その他のWebサーバ関連パッケージ Plamo-3.0 のWebDB関連キットには、Webサーバ構築や管理を支援するため のツールやモジュールをいくつかパッケージにしてあります。そのうちのいく つかは WebDAV(Web-based Distributed Authoring and Versioning) に関する もので、HTTP を通してファイルを共有するしくみをつくることができます。 WWW/webalizer-2.01-10-i386.tgz Webアクセス統計報告Webページ生成プログラム WWW/cadaver-0.19.1-i386.tgz WebDAVクライアント WWW/Module/mod_dav-1.0.3-1.3.6-l10n-i386.tgz WebDAV のための Apache DSO モジュール WWW/Module/mod_encoding-20011211a-i386.tgz NON ASCII ファイル名を扱うためのエンコーディングモジュール その他に、認証に関するモジュールも用意してあります。 WWW/Module/mod_auth_pgsql-0.9.12-i386.tgz PostgreSQLを使った認証のための Apache DSO モジュール WWW/Module/mod_auth_kerb-4.11-i386.tgz Kerberos認証のための Apache DSO モジュール WWW/Module/mod_auth_gssapi-i386.tgz Heimdal GSS-API 認証のための Apache DSO モジュール WWW/wazilla-1.1-gssapi-i386-1.tgz Heimdal GSS-API 認証を可能にした和ジラ(和製mozzila) パッケージをインストールすることにより実装例が利用可能になります。実際 に運用される場合は、インストール後に httpd.conf とそこにインクルードさ れる設定ファイル等をご覧いただいてサイトに併せて調整してください。