『Plamo Linux 2.x 用 PostgreSQL,Apache+PHP4 パッケージ』 >http://www.linet.gr.jp/~juk/plamo/< 2001-11-23 くわむら じゅん juk@yokohama.email.ne.jp はじめに ここにある PostgreSQL 関連パッケージ群は、Plamo Linux 2.x 向けに まとめたものです。その他の glibc2 対応 Linux ディストリビューション でも使えると思います(RedHat 系のVine2.0CRでも動くでしょう)。 個々のパッケージの利用の仕方や利用条件などについては、それぞれのパッ ケージに含まれるドキュメントに従って下さい。ドキュメントはアーカイブ内 では、 usr/doc/ 下のサブディレクトリの中にあります。随時更新されるこれ らのパッケージの情報は http://www.linet.gr.jp/~juk/plamo/ を見て下さい。 Plamo 2.x 用のバイナリは Plamo 1.x.x では動きませんのでご注意下さい。 Plamo 1.x.x 向けのパッケージは http://www.linet.gr.jp/~juk/plamo/ にも ありますし、また、Plamo 1.4.5 と供に『PostgreSQL完全ガイド』第2版(石井 達夫氏著)付録として収録されてもいます。 これらの PostgreSQL 関連パッケージを Apache,PHP などのパッケージを含 めてインストールした後に localhost のウェブサーバにアクセスすると、 http://www.linet.gr.jp/~juk/plamo/sample/ のようなページをご覧になれま す。 ===================================== 注意 ここに紹介するパッケージは作者の個人的な趣味で作成しましたので、完全 に無保障です。すなわち、これらのパッケージ自体およびそれらに起因するいか なる問題や損害に対しても、そうしたことへの言及や示唆が明記されているいな いに関わらず、作者はいかなる保証も弁償もいたしません。 ここに紹介するパッケージ等のご利用は、ご自身の責任に基づき十分に注意を 払って行って下さい。 なお、雑誌や書籍への収録や再配布やに関しては作者にご一報下さい。また、 記事にて紹介していただける場合にもご連絡をいただけると幸いです。 ===================================== 1. PostgreSQL パッケージ パッケージは以下のアーカイブからなります。 odbc, tcltk, pgaccess は本体に含まれます。perl5, python, ruby の モジュールとJDBCドライバは別のパッケージにしてあります。 また、Bash組込みの PgBash もあります。 + pgsql713-20010914.tgz -- 7.1.3本体パッケージ(odbc,pgaccess含む) + pgsql713-contrib.tgz -- コントリビューションパッケージ + pgsql713-jdk131_jdbc.tgz -- JDBCドライバ(JDK1.3.1) + pgsql713-perl5.tgz -- Perl5.005 Pg-1.8.0 モジュール + pgsql713-pgbash22.tgz -- PgBash-2.2 組み込み Bash-2.03 + pgsql713-pgmonitor051.tgz -- クエリモニタプログラム + pgsql713-python161_pygres32b.tgz -- Python-1.6.1 PyGreSQL-3.2 モジュール + pgsql713-ruby163_postgres064.tgz -- Ruby-1.6.3 postgres-0.64 モジュール + pgsql713-usogres0012.tgz -- Usogres-0.0.12サーバ二重化プログラム 基本的には、本体パッケージのインストールのみでPostgreSQLの利用は可能と なりますが、認証にKerberosと暗号化にSSLを利用できるようにしてあります ので、KTH-KRBとOpenSSL等をインストールしておいて下さい。 前のバージョンの 7.1.x からのアップデートにはダンプとリストアの必要 はありません。データをそのまま使えますので tar コマンドバックアップを とっておいて、後で展開して戻すと良いでしょう。ただし、ファイルの属性 が変わってしまわないように注意します(p オプションを使用)。 (例) # tar cvpfz /tmp/data.tgz -C ~postgres data # removepkg pgsql71x-xxx # installpkg pgsql713-20010914.tgz # pgsqld stop # tar xvpfz /tmp/data.tgz -C ~postgres もっと古いバージョンをお使いの場合は、インストール前にデータベースの バックアップをバックアップコマンド(pg_dumpまたはpg_dumpall)を使って行 ないます。ご利用になっていた PostgreSQL のバージョンが 7.0.x 以前のバー ジョンで御利用のデータベースを新しいバージョンでも使いたい場合は、ダン プとリストアが必要となります。ダンプの方法としては、pg_dumpall で全デー タベースを吐き出すか、あるいは、pg_dumpでデータベース毎に吐き出すかで すが、オプションによりテーブル毎に吐き出すこともできます。リストアは、 psql コマンドで行ないます。手順は古いバージョンを稼働させた状態でダン プをとり、新しいシステムに入れ換えてからリストアをします。ダンプとリス トアの実際の例を以下に示します (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-7.1.3の本体パッケージのインストールは、 # installpkg pgsql713-20010914.tgz または、pkgtoolからも行なえます。インストール時に実行されるスクリプト により、/usr/local/pgsql/ をホーム・ディレクトリとしてユーザpostgresと グループpgsqlが登録されます。それから、initdb によりデータベースの初期 化がおこなわれた後、ローカル・ネットワークからのフリーアクセスを許し、 他からはパスワードによるアクセスを許可するように pg_hba.conf が設定さ れます。(注意:実態は /usr/local/pgsql713/ の下です。) ネットワーク越しのアクセスのためにユーザーとパスワードを設定するには pg_passwd コマンドを使います。WEBからのアクセスのためにユーザー nobody を登録するために createuserコマンドが実行されますが、権限に注意しましょ う。これらの処理の詳細は、/usr/local/pgsql/apps/utils/create_default_users を御覧になればわかります。インストールの際に画面に以下のような表示が出 ますがエラーではありません。 -- /usr/local/pgsql/bin/pgsqld: postmaster(PostgreSQL server) started. /usr/local/pgsql/bin/pgsqld: Proccess ID = 12781 Initializing default data base by user postgres ... running... createdb postgres running... createuser nobody Enter user's postgres ID or RETURN to use unix user ID: 65534 -> Is user "nobody" allowed to create databases (y/n) n Is user "nobody" a superuser? (y/n) n createuser: nobody was successfully added Shall I create a database for "nobody" (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(フロントエンド・プログラム)の psqlj を使ってみましょう。堀田倫英 さんが日本語化した psql プログラムです。もし、日本語の表示に問題がある ようでしたら、オリジナルの psql コマンドを使って下さい。X Window System をお使いであれば、GUIで多機能なインターフェース pgaccess もご利用になれ ます。現在のバージョンでは、日本語ラベルも選択できます。 パスワードファイルによるユーザ認証をしたい場合は以下のように pg_passwd コマンドでパスワードファイルを作ってください。 -- # pg_passwd /usr/local/pgsql/data/pgpasswd File "/usr/local/pgsql/data/pgpasswd" 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.1 をパッケージにしました。インストールは PostgreSQL本体パッケージをインストールした後に行ないます。 # installpkg pgsql713-pgbash.tgz とコマンドを実行することにより、pgbash をログインシェルとする pgbash アカウントを作成します。PgBash-2.1 は Bash-2.03 にPostgreSQLアクセスの インターフェースの拡張が施されていて、Bashのコマンドラインから直接 PostgreSQL コマンドを実行できます。例えば、 $ 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 2. Perl5 DBIパッケージ Perl5 DBI は Perl5 から色々な DBMS への共通の出しを提供します。ここでは PostgreSQLを利用するためのドライバ DBDPg のみを用意しました。DBI 関連の パッケージは、 Perl5 サブディレクトリにまとめてあります。 DBI-1.15.tgz Perl5 DBI(DataBase Interface)モジュール DBD-Pg-1.00.tgz Perl5 PostgreSQL DBD(DataBase Driver)モジュール DBIにはコマンドラインからも使えるdbishというシェル版もあります。また、 dbiproxyというプロキシとして使えるものもあります。ただし、dbiproxyは PlRPCを必要とし、PlRPCはさらにStorableとNet-Daemonを必要としますので、 それらもインストールする必要があります。とりあえず必要なパッケージを用 意してあります。(ソースはCPANサイトからもダウンロードできます。)以下の パッケージは、DBI:Proxy を使用しなければ不要です。 PlRPC-0.2015.tgz Perl RPC (Remote Procedure Call) Net-Daemon-0.35.tgz ポータブル・サーバー用のクラス Storable-1.0.11.tgz データ整合性のための拡張 Compress-Zlib-1.11.tgz zlib 圧縮ライブラリのインターフェース DBI-1.15 と DBD-Pg-1.00 をインストールした後、 # cd /usr/doc/DBD-Pg-1.00/ # su postgres -c "perl test.pl" を実行すると簡単なテストが行なわれます。もちろん、postmaster が走ってい る必要があります。 その他のPerlモジュールでも、ドキュメント・ディレクトリにテストプログラ ム /usr/doc/*/t/*.t がある場合はテストプログラムを指定してテストを実行で きます。例えば、DBI-1.15 の場合、 # cd /usr/doc/DBI-1.15 # perl -e 'use Test::Harness qw(&runtests $verbose); $verbose=0; runtests @ARGV;' t/*.t のようにします。 なお、インストールされたパッケージリストからドキュメント・ディレクトリの 内容リストを探すこともできます。例えば、DBI-1.15 の場合は次のようなコマンド を実行します。 # grep doc /var/adm/packages/DBI-1.15 3. PHP4 によるApacheウェブサーバへの連係 APACHE-PHP: apaci1322s285a2.tgz Apacheウェブサーバー+mod_ssl php406s285i.tgz PHP4ハイパーテキスト・プリプロセッサ4.0.6 (mbstring組み込み) php406s285i_contrib.tgz PHP4 サンプルプログラム wagora410j.tgz W-AGORA ウェブ掲示版システム サポートライブラリ: mm113s284.tgz MM-1.1.3 メモリーマップライブラリ gdbm180a2.tgz Gnu DBM ライブラリglibc2版(Plamo-2.x用) gd184j.tgz PNG作製高速グラフィクス・ライブラリ GD-1.8.4+shared imap2001aRC2.tgz IMAP-2001a ライブラリ oldap211.tgz OpenLDAP-2.1.1 ライブラリとプログラム ossl096b.tgz OpenSSL-0.9.6b ライブラリとプログラム pdflib401.tgz PDFlib-4.01 ライブラリ krb411.tgz KTH版Kerberos4-1.1 apache1322のインストールの際にはwadmというユーザとapacheというグルー プを作成します。ウェブサーバ(httpd)はオーナー wadm、グループapacheで走 るように構成してあります。また、この httpd は gdbm-1.80 シェアードライ ブラリを使うようになってますので、Plamo-2.2.xでは gdbm180a2.tgz をイン ストールしておく必要があります。起動スクリプト apachectl にプリロード するライブラリの指定をしていません(php_mailの問題ではずしました)。ま た、mod_sslを組み込んでありますので、apachectl をstartssl オプションで 利用する際は、ossl096.tgzをインストールしておく必要があります。 php406s285パッケージを利用する場合に、PostgreSQL-7.1.3やGD1.8.4など を利用する際は、ld ファンクションで外部モジュールをろーどしてください。 また、共有ライブラリを必要としますので、使用するモジュールに応じて、 pgsql713-20010914やgd184jの両パッケージ、加えて、pdflib401 や openldap (Networkディレクトリにある)等のパッケージもあらかじめインストールしてお きましょう。 GD1.8.4は、さらに PNG, JPEG, Xpm, ZLIB, TTFのライブラリを必要と しますので、Plamoの配布に含まれているパッケージよりあらかじめこれらの ライブラリをインストールしておいてください。今回作成したGD1.8.4はJPEG の取扱をできるように機能追加していますが、 古いGDのライブラリが残っている場合、起動時あるいはJPEGなどの機能を使用 した際に失敗することがありますので、古いバージョンのGDは取り除いておい てください。 今回まとめた PHP-4.0.6は、DSO版とCGI版の両方をパッケージに入れてます。 PHP4の国際化版は現在作業中ですが、塚田さんによるmbstring(旧jstring) が本家CVSにも組込まれ、この4.0.6から拡張モジュールとして添付されるよう になりましたので、本パッケージでもモジュールとして組み込んでいます。そ の他にkakasiやnamazuなどのインターフェースもPHP4 Self-Containd Extention モジュールとして用意してますのでdl() ファンクションでロード して使えます。(注意: PostgreSQLやGDなどのインターフェースも明示的に dl() ファンクションで動的にリンクする必要があります。) 起動後、http://localhost/にアクセスするとインストールされた幾つかの パッケージのドキュメント・ディレクトリへのリンクをたどることができます。 PHP4の和訳マニュアルや、次に示す石井さんのPostgreSQLとの連携プログラム のサンプル、また、筆者が練習用に作製したテストやサンプルスクリプト類へ のリンクが張られています。さらに、namazuを使ったPlamo附属ドキュメント の検索ページへのリンクも加えました。 4. アプリケーション・パッケージ 石井達夫さんによるPostgreSQLを利用したアプリケーションです。 pgimage22.tgz PHP連係画像管理システム Web UI pgpost132+g.tgz 郵便番号検索(大口事業所付き)Web UI 渋谷さんのWebカレンダーです。 pgcalendar01g.tgz ウェブ掲示版システム W-AGORA も PHP で書かれたアプリケーションです。 データベースに PostgreSQLを利用することができます。これらの他にも、 php406scontribパッケージに同梱した拙作の PHPgSQL と名前をつけた PostgreSQL Web UI や gdbm を利用した guestbook もあります。また、 その他のサンプルも少しありますので、少しでもお役に立てれば幸いです。 5. その他の関連パッケージ ruby163.tgz Ruby-1.6.3 のパッケージ python161a.tgz Python-1.6.1 のパッケージ(_tkinter含む)