『Plamo Linux 3.3 用 PostgreSQL,Apache+PHP4 パッケージ』 >http://www.linet.gr.jp/~juk/plamo/< 2003-09-27 くわむら じゅん juk@yokohama.email.ne.jp はじめに ここで説明する PostgreSQL 関連パッケージ群は、Plamo Linux (以下 Plamo)バージョン 3.3 用として開発をしたものです。GLIBCのバージョンは、 glibc-2.2.5 ですが、同等であれば、おそらく、Plamo 以外のディストリビュー ションでも必要なランタイムライブラリ等の移植によって動くようになるでしょ う。なお、個々のパッケージの利用の仕方や利用条件などについては、それぞ れのパッケージに含まれるドキュメントに従って下さい。ドキュメントはパッ ケージ内の usr/doc/ 下のアプリケーション名のサブディレクトリの中にあり ます。 これらのパッケージは随時更新されますので、最新情報は、 http://www.linet.gr.jp/~juk/plamo/ サイトをご覧下さい。 ほとんどの場合、より新しいバージョンのパッケージはそれより古いバージョ ンのディストリビューションではうまく動作しません。Plamo-3.3 のパッケー ジは libiconv などの関係で、Plamo-3.0以前のバージョンでは動かないこと に注意してください。旧バージョンのパッケージも同Webサイトにて見つかり ますが、利用にあたっては十分ご注意下さい。 Plamo-3 の contrib パッケージは、原則としてインストール先のプレフィ クスディレクトリに /usr もしくは /opt を利用するようにしてあります。 PostgreSQLやApache などのまとまったパッケージを /opt 以下に配備してあ りますので、旧来の(プレフィクスに/usr/local を使っていた)ユーザの方は お気をつけ下さい。ここで紹介するPostgreSQL, PHP4, Apache のパッケージ も --prefix=/opt で構成してインストールしたものとなっています。 なお、Plamo Linux 3.3 CDROM収録版は pkgtool コマンド対策のため、パッ ケージ名を "8.3" の形式に短縮しています。もとのパッケージ名を参照する ためには ls コマンドにロングフォーマット(-l)オプションを付けて "ls -l *.tgz" でシンボリックリンク先のファイル名をご覧ください。しか しながら、一部 pkgtool コマンドに対応できていないパッケージもあります ので、インストールには installpkg コマンドを利用されることをお奨めしま す。 ===================================== 使用上の注意 ここに紹介するパッケージは作者の個人的な趣味で作成したものです。そして、 完全に無保障です。すなわち、これらのパッケージ自体およびそれらに起因するい かなる問題や損害に対しても、そうしたことへの言及や示唆が明記されているいな いに関わらず、作者はどのような保証も弁償もいたしません。 ここに紹介するパッケージ等のご利用は、ご自身の責任に基づき十分に注意を 払って行って下さい。 なお、雑誌や書籍への収録や再配布やに関しては作者にご一報下さい。また、 書面にて紹介していただける場合にもご連絡をいただけると幸いです。 ===================================== 1. PostgreSQL 関連パッケージ PostgreSQL のパッケージは、本体、contrib、それから doc の3つのパッケー ジからなります。本体パッケージは通常のインストレーションでインストール されるものを固めたものです。contribパッケージには PostgreSQL ソースアー カイブのcontribディレクトリに含まれていた拡張ファンクション類が含まれ ます。 PgBash は PostgreSQLの問い合わせライブラリをリンクした Bashシェルで、 シェルの中からコマンドラインで直接DBへの問い合わせが可能です。 Database/postgresql-7.3.4-i386-3.tgz PostgreSQL-7.3.4 本体パッケージ(psql日本語版対応) Database/postgresql-7.3.4_contrib-i386-3.tgz PostgreSQL-7.3.4 コントリビューションモジュールパッケージ Database/postgresql-7.3.4_doc_jp-3.tgz PostgreSQL-7.3.4 日本語ドキュメントパッケージ Database/pgbash-7.3-2.05a-i386-4.tgz PostgreSQLインターフェース組み込みBashシェル Database/pgaccess-0.98.8.20030520-noname-1.tgz Database/pgaccess-0.98.7-7.3.4-noname.tgz PgAccess PostgreSQL GUI(Tcl/Tkアプリ) Database/Perl5/DBI-1.28-i386.tgz Database/Perl5/DBD-Pg-1.22-i386.tgz Perl5.6 DBインターフェースとPgドライバ PostgreSQL標準問い合わせクライアントCUIの psql は日本語のメッセージ を利用可能となっているほか、GNU readline-4.2 の行編集や履歴機能を利用 するようにしてあります。GNU readline-4.2 の日本語対応パッケージをイン ストールしておく必要があります(plamo-3.0から本体に取り込まれました)。 基本的には、本体パッケージのインストールのみでPostgreSQLの利用は可能と なります。暗号化にSSLを利用できるようにしてありますので、使用する際に は必要なパッケージをインストールしておいて下さい。Plamo-2.2.x 以降、 OpenSSL は OpenSSH とともに標準でインストールされるようになりました。 7.3 以降のバージョンはデータをそのまま使えますので tarコマンドでバッ クアップをとって、新しいバージョンをインストール後に展開して戻すと良い でしょう。ただし、ファイルの属性が変わってしまわないように注意しましょ う(tar の -p オプションを使用)。 (例) # pgsqld stop # tar cvpfz /tmp/data.tgz -C ~postgres data # removepkg <旧パッケージ名> # installpkg <新パッケージファイルパス> # tar xvpfz /tmp/data.tgz -C ~postgres もっと古い 7.2.x 以前のバージョンをお使いの場合は、データベースの バックアップ(ダンプ)とリストアが必要です。 まず、古いサーバを停止する前にデータベースのバックアップをダンプコマ ンドを使って行なってから、サーバを停止し、古いPostgreSQLパッケージを消 去します。そして、新しいPostgreSQLパッケージをインストールし、データベー スを初期化して新しいサーバを起動してから、データベースのリストアを行い ます。 データベースのダンプは、pg_dumpall で全データベースを吐き出すか、あ るいは、pg_dumpでデータベース毎に吐き出すことが可能です。オプションに よりテーブル毎のダンプもできます。 データベースのリストアは、pg_restore あるいは psql コマンドで行ないま す。pg_restore を使うとテキストフォーマット以外でダンプしたバックアップ からのリストアが可能です。 7.3 より前のデータベースの場合、SERIAL、外部キー、UNIQUEなどの制約が あるカラムの依存関係情報が適切に作成されませんので、adddepend を実行し て(contrib にあります)、データベースの依存関係を作り直す必要があります。 adddepend は DBD:Pg Perl インターフェースを必要とします。 以下に簡単なダンプとリストアの例を示します。 (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 (3) データベースの依存関係を追加 % ./adddepend -Y -d dataname (1) PostgreSQL本体パッケージ PostgreSQL本体パッケージには、PostgreSQLのサーバ/クライアントの基本 パッケージのほか、C言語ライブラリ(libpq)、埋め込みSQL(ecpg)、ストアド プロシージャ(PL/PGSQL, PL/perl, PL/tcl, PL/python)、tcl/tk モジュール、 JDBCドライバなどが含まれています。 7.3から Tcl/Tk で書かれたGUI(pgaccess)、ODBCドライバ、C言語簡易ライブ ラリ(libeasy)、Perlモジュールはソースアーカイブに含まれなくなりました。 このうち、pgaccess は別パッケージにしてあります。 この本体パッケージのインストールは、次のように行います。 # installpkg postgresql-7.3.4-i386-3.tgz または、pkgtoolからも行なえます。インストール時に実行されるスクリプト により、/opt/pgsql/ をホーム・ディレクトリとしてユーザpostgresと グループpgsqlが登録されます。それから、initdb によりデータベースの初期 化がおこなわれた後、ローカル・ネットワークからのフリーアクセスを許可する ように $PGDATA/pg_hba.conf が設定されます( $PGDATA は Plamo Linux では、 /opt/pgsql/data となります)。WEBからのアクセスのためにユーザー www を登録するために createuserコマンドが実行されますが、権限に注意しましょ う。これらの処理の詳細は、/opt/pgsql/apps/utils/create_default_users を御覧になればわかります。インストールの際に画面に以下のような表示が出 ますがエラーではありません。 (注) 以前は nobody アカウントをWebサーバにて使っていましたが、セキュ リティの見地から www アカウントを明示的に作成するようにしました。また、 Webサーバの実行アカウント(www)とコンテンツ管理のアカウント(wadm)とを 分離しました。 -- /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認証以外では使うことはないと思われます。 (Plamo-3.3 では Kerberos 認証オプションははずしてあります。) インストール直後に 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 もご利用に なれます。現バージョンでは、日本語ラベルの選択もできます。 ネットワーク越しのアクセスのためのユーザーにパスワードを設定するには、 バックエンドに接続して、次のSQL文を発行します。 ALTER USER ユーザ名 WITH PASSWORD 'パスワード'; なお、ALTER USER の使いかたは、psql をお使いの際に \h ALTER USER を実行すると確認可能です。PostgreSQLのアクセス制御は $PGDATA/pg_hba.conf の記述にて行ないますが、PostgreSQL-7.3 以降、書式が以前と少し変更になってますので、ご注意ください。 (2) PgBash パッケージ PostgreSQL本体パッケージでは標準シェルを tcsh に想定してありですが、 粋な Bashユーザのために PgBash-7.3 をパッケージにしました。インストー ルはPostgreSQL本体パッケージをインストールした後に行ないます。 installpkg でパッケージのインストールをすると、pgbash をログインシェル とする pgbash アカウントが作成されます。この PgBash-7.3 は Bash-2.05a に PostgreSQL アクセスのインターフェースの拡張が施されていて、Bashのコ マンドラインから直接PostgreSQL コマンドを実行できます。インストールの 際に pgbash が /etc/shells に登録されますので、その他のユーザでも自分 でログインシェルを pgbash へ変更可能です。 Bashコマンドラインからの実行は例えば、 $ connect db; を実行するとデータベース db に接続し、 $ select * from table; のように、SQL 文を発行してデータベースへの問合わせも行なえます。また、 .pgbashrc をログイン時に実行するようにしてあるので以下のような psql フロントエンドのコマンドに似たコマンドも使えます。 -- ? : this help ?u : list database USERs ?l : list DATABASEs ?d [rel] : list RELATIONs for table/view/index/sequence ?d{t|i|v} : list TABLEs/INDEXes/VIEWs ?dp : list PERMISSIONs ?ds : list SEQUENCEs ?dA : list AGGREGATEs ?dD [obj] : list DESCRIPTIONs for table/type/function/operator ?dF : list FUNCTIONs ?dO : list OPERATORs ?dS : list SYSTEM_TABLEs ?dT : list data_TYPEs ?dM : list domains ?m : show CONNECTION NAMEs ?o : show current values of exec_sql_OPTIONs ?s : show STATUS after executing SQL ?v : show PostgreSQL and pgbash VERSION E{+|-} : turn on/off ECHO_QUERY sent to the backend Q{+|-} : turn on/off QUIET_MODE for system/sql error messages L{+|-} : turn on/off OUTER_FRAME_print T{+|-} : turn on/off TOP_header_print B{+|-} : turn on/off BOTTOM_count_print A{+|-} : turn on/off ALIGNMENT of plain text X{+|-} : turn on/off EXPANDED format H{+|-} : turn on/off HTML format S+ [chr] : set SEPARATOR (e.g. ',' ) or DEFAULT('|') N+ [str] : set NULL_STRING(e.g. '*N*') or DEFAULT('') Z+ [str] : set ZERO_STRING(e.g. '*0*') or DEFAULT('') O+ [str] : set TABLE TAG (e.g. 'cellpadding=4') or DEFAULT('') _lo_import : lo_import <'COMMENT'> _lo_export : lo_export _lo_unlink : lo_unlink _lo_list : list LARGE_OBJECTs (?dl) ?? : help pgbash usage ??h [SQL] : help SQL(or "SQL") syntax or all SQL reserved words ??e : help SQLCODE (sql ERROR code) ??f : help 'pgbashrc' FUNCTIONs for using a shell script ??o : help 'exec_sql' options -- PgBash についての詳細は、作者である境田雅明さんのウェブページをご覧く ださい。 http://www.psn.co.jp/PostgreSQL/pgbash/index-j.html (3) Perl5 DBIパッケージ Perl5 DBI は Perl5 から色々な DBMS への共通の出しを提供します。ここでは PostgreSQLを利用するためのドライバ DBDPg のみを用意しました。DBI 関連の パッケージは、 Database/Perl5 サブディレクトリにまとめてあります。 DBI-1.28.tgz Perl5 DBI(DataBase Interface)モジュール DBD-Pg-1.22.tgz Perl5 PostgreSQL DBD(DataBase Driver)モジュール (4) PostgreSQL GUI PgAccess は Tcl/Tk で書かれていて、唯一の PostgreSQL の GUIとして当 初より人気がありました。7.3 からは本体アーカイブに含まれなくなったため、 別パッケージにしてあります。日本語表示にすると問題がでるかもしれません。 その場合は、旧版の pgaccess-0.98.7 の方を使ってください。 Database/pgaccess-0.98.8.20030520-noname-1.tgz Database/pgaccess-0.98.7-7.3.4-noname.tgz (5) その他のデータベース Perl 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 圧縮ライブラリのインターフェース Berkeley DB(libdb)由来の Sleepycat社のDBライブラリバージョン4(DB4) は組込み用として高度な機能を提供します。 (いずれも、plamo-3.0に取り込まれました)。 Berkeley DB 4.1 を, OpenLDAPのためにパッケージにしてあります。 Database/db-4.1.25-i386-1.tgz 組み込み用のファイルベースSQL DBエンジンの SQLite もッケージに してあります。 Database/sqlite-2.8.5-i386-1.tgz (libgdbm -- GNU DBM は旧来の DBM, NDBM 互換ライブラリです。) 2. PHP4とApacheによるWeb+DB連係のためのパッケージ PHP:Hypertext Preprocessor を利用してWebサーバ(Apache)とデータベース サーバ(PostgreSQL)とを連携させることが可能です。 Plamo-3.2.1 用の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.15-1.3.28-i386-1.tgz SSL対応ウェブサーバー Apache+mod_ssl Apacheパッケージをインストールすると namazu.cgi を使っての文書検索も 可能になります。もちろん namazu パッケージもインストールしておく必要が ありますが、おそらく Plamo では標準でインストールされているはずです。 PHP-4.3.3のパッケージは、DSO版とCLI版のphpを含んでいます。マルチバイ トを有効にして構成し、pgsql, gd を組み込んであります。この他に、kakasi やnamazuなどのインターフェースもSCE(Self-Containd Extention)モジュール として用意してますので dlファンクションでロードして使うことができます。 WWW/php-4.3.3-i386-6.tgz PHP: ハイパーテキスト・プリプロセッサ WWW/php-4.3.3_contrib-i386-6.tgz PHPサンプルプログラム (2) Apache,PHP4 サポートライブラリ Plamo版 Apache パッケージの httpd は db, gdbm, pq 等の共有ライブラリ を必要としますので、あらかじめ確認しておきましょう。また、SSLを利用す る際(apachectl startssl で起動)は、mm, ssl 等の共有ライブラリも必要と します。以下のサポートライブラリをインストールしておきます。 WWW/mm-1.3.0-i386-1.tgz MMメモリーマップライブラリ WWW/curl-7.10.4-i386.tgz URLライブラリ Network/imap-2002b-i386-1.tgz UW IMAP メールライブラリ Network/net-snmp-5.0.8-i386-1.tgz Net SNMP(旧ucd-snmp)ツール Network/openldap-2.1.22-i386-1.tgz OpenLDAPツール(Database/db-4.1.25-i386-1.tgz が必要) Develop/expat-1.95.6-i386-1.tgz Expat ライブラリ PHP4には pgsql と gd モジュールを組み込んであります。外部モジュール の場合は ld() ファンクションでロードするか、 php.ini の中で拡張モジュー ルとして指定の必要がありますが、このパッケージでは組み込みなので不要で す。ただし、extension_loaded() でチェックをしてから、ld() ファンクショ ンを実行している場合はあえてプログラムから削除する必要はありません。 Plamo-3.2.1 以降のPHP4パッケージは、バンドルされているGDライブラリ (gd-2.0.15相当)を使っています。また、フォントのロードは freetype2を 使うようにしました。このGDライブラリは、PNG, JPEG, Xpm, ZLIB,および、 FreeType2のライブラリを使いますので、Plamoの配布に含まれているパッケー ジよりあらかじめこれらのライブラリをインストールしておく必要があります (おすすめ 'm' ではインストール済み)。 Plamo-3.2.1 から libiconv.tgzパッケージは不要となりましたが、 PHP4 の CLI版は libgnuintl.so.2 を要求するため preloadable_libintl.so へのシンボリックリンクを張ることで対処しています。 起動後、http://localhost/ にアクセスするとインストールされた代表的な 幾つかのパッケージのドキュメント・ディレクトリへのリンクをたどることが できるページが表示されます。 PHP4の和訳マニュアルや、筆者が練習用に製作したテストやスクリプトの類 は contrib パッケージに含まれています。これらのサンプルもインストール 後に試してみることができます。 (3) アプリケーション・パッケージ PHPを使った実際のプログラムの書き方を見ることができるように、比較的 コンパクトにまとまっているアプリケーションをサンプルとしてパッケージ にしてあります。 WWW/Sample/w-agora-4.1.5-php-1.tgz ウェブ掲示版システム WWW/Sample/pukiwiki1-3.5-1.tgz PHP による Wiki(自由帳) クローン WWW/Sample/squirrelmail-1.4.0-1.tgz Webメール(imap2002.tgzを必要とする) WWW/Sample/phpPgAdmin-3.0-1.tgz PostgreSQL管理Webインターフェース 上記の他に PHP4 contrib パッケージにもサンプル(一部拙作)があります。 インストールすると、サンプルプログラムが $DocumentRoot/php4test ディ レクトリに展開されます。このサンプルには以下の小品が含まれています。 主なサンプルプログラムの説明: pwauth4/ テキストファイルのパスワード認証 phpgsql4/ PostgreSQL アクセス例 (Postgres95 tutorialの基本アクセス例のPHP/FI化をベース) guest4/ 宿長と手紙の書式 guest4/guestbook.php 宿長(Guest Book) guest4/mailform.php 郵便窓口(Mail Form) (PHP/FI2.0 のサンプルを改造、日本語化) imagelist/ JPEGイメージリストの作成表示 (サムネイル生成、コメント付記可能) gdgraf4/ GD でのXYグラフプロット例 (サーバアクセスログの月次集計を表示) imagekanji.php GD1.3 との互換のためのインクルード (GD-1.7以降では GIF が廃止され PNG がデフォルト) namazu/ 塚田さんによる namazu モジュール附属のサンプル count4/ DBMを用いたアクセスカウンタ simple-template.php 最も簡単なテンプレート calcf.php フレームを使った電卓 (元の電卓は Michihide Hotta さん作) unitconv.php 単位変換 (PHP/FI2.0のサンプルを convortor で .php に変換) これらのサンプルプログラムの配布条件は GPL に従います。ファイル COPYING を参照ください。 (4) その他のWebサーバ関連パッケージ Plamo-3.3 のWebDB関連キットには、Webサーバ構築や管理を支援するため のツールやモジュールをいくつかパッケージにしてあります。そのうちのいく つかは WebDAV(Web-based Distributed Authoring and Versioning) に関する もので、HTTP を通してファイルを共有するしくみをつくることができます。 WWW/webalizer-2.01-10-i386-2.tgz Webアクセス統計報告Webページ生成プログラム WWW/cadaver-0.21.0-i386.tgz WebDAVクライアント(plamo/d1/libxml2.tgz が必要) WWW/Module/mod_dav-1.0.3-1.3.6-l10n-i386-6.tgz WebDAV のための Apache DSO モジュール WWW/Module/mod_encoding-20021209-i386-6.tgz NON ASCII ファイル名を扱うためのエンコーディングモジュール その他に、認証に関するモジュールも用意してあります。 WWW/Module/mod_auth_pgsql-0.9.12-7.3.4-i386.tgz PostgreSQLを使った認証のための Apache DSO モジュール WWW/Module/mod_auth_kerb-4.11-i386-5.tgz Kerberos認証のための Apache DSO モジュール WWW/Module/mod_auth_gssapi-i386-6.tgz Heimdal GSS-API 認証のための Apache DSO モジュール WWW/wazilla-1.1-gssapi-i386.tgz Heimdal GSS-API 認証を可能にした和ジラ(和製mozzila) Network/heimdal-0.6-i386-1.tgz Heimdal 0.6 Kerberos5 認証システムの国際版 パッケージをインストールすることにより実装例が利用可能になります。実際 に運用される場合は、インストール後に httpd.conf とそこにインクルードさ れる設定ファイル等をご覧いただいてサイトに併せて調整してください。 最後に、これらのパッケージが、なにかのお役に立てれば幸いです。