![]() |
今更・・・っつー気がしなくもないでつが、Postgresql と ssl で Port:443 でバンバン
する DB を作ってみようと言うものでつ。
どーせなら、 Security Update っつー事で、全部最新版にしてしまえって事で。
httpd://www.sunfreewware.com/ アタリから pkg を
ダウンしてきて pkgadd しちゃってください。
source から build してもおk。
./configure の option によっては、いらないものもあるので、そのアタリは 良きに計らってくらさい。
んで、本題の source は・・・・
2009/03/17 日現最新 & 必要な source は下記の通り。
GNU Readline があると、pgsql command のヒストリが使えるようになりまつ。
install しておいた方が良いでしょうってことで。ってゆーか、PostgreSQL では必須だそうだ(^^;。
gd と libintl は php で必須ラシイ。
php の configure 時に libintlso.8 がないよってゆわれたら、libintl を pkgadd とかしておいてね。
source を get したら、次は compile。
Build の順番に規則性があるよ。
順番にいってみようっ!
必須の readline(^^;)。
install は、
で、おk。
gd の install もカンタン。
で、おk。
libintl の install もカンタン。
source から build しよーと思ったけど、pkgadd で済ませてしまいまつた。
pkgadd 中に "y" とか聞いてくるので、良きに答えてくだされ。
で、おk。
library を shared する option を付けたダケ。
default では、 /usr/local/ssl に install されるよ。
処理が終わったら /usr/local/ssl に install されていることを確認してくらさい。
PostgreSQL を起動 & 運用する専用の user & group が必要です。
/etc/passwd と /etc/shadow、/etc/group を vi で直接追加しても良いでつし、
/bin/useradd、 /bin/groupadd しても良いでしょう。
user と group は任意の名前でおk。
ウチでは、user:pgsql,group:pgsql にしていまつ。
user を作ったら、password の設定を忘れずにね。
install 先のレポジトリに /export/home/pgsql を指定しましたが、他のところでもおkでつ。
default だと、/usr/local/pgsql でつ。
shell も好みに応じて csh や bash でもおk。
今回は pgsql ユーザの shell を /bin/sh にしまつたので、Born Shell 向けの
環境設定方法でつ。
PS1="`/usr/ucb/whoami`@`/usr/bin/hostname`% " PGHOME=${HOME} PGLIB=${PGHOME}/lib PGDATA=${PGHOME}/data MANPATH=${MANPATH}:${PGHOME}/man PATH=/bin:/usr/local/bin:/usr/ccs/bin:/usr/ucb:${PGHOME}/bin export PGHOME PGLIB PGDATA PATH MANPATH |
最低限、こんなトコ。
あと、compiler とか、 make とか使うので、PATH にそーゆーコマンドの
PATH 張ってありまつ。
このアタリは開発環境に合わせて変えてくらさい。
その他、PS1 でプロンプト設定しておりマス。
必要に応じて他の環境変数を設定して下され。
csh とか bash をご利用の場合は、Born shell の設定を参考に
pgsql ユーザで compile & install するので、 ${HOME} に
postgresql-8.3.6.tar.gz を cp しておいて。
option の prefix=/export/home/pgsql で install 先のレポジトリを指定しているよ。
make が終わったらチェックしてみましょう。
current は、そのままで、
make 時のような表示 & チェックのメッセージが出て、数分後に
======================= All 114 tests passed. ======================= |
とかってメッセージが出ればおk。
最後に install して、DataBase を格納する directory を作っておしまい。
データベース初期化して、default charactor set と locale を指定します。
The files belonging to this database system will be owned by user "pgsql". This user must also own the server process. The database cluster will be initialized with locale C. creating directory locale=C ... ok creating directory locale=C/global ... ok creating directory locale=C/pg_xlog ... ok creating directory locale=C/pg_xlog/archive_status ... ok creating directory locale=C/pg_clog ... ok creating directory locale=C/pg_subtrans ... ok creating directory locale=C/pg_twophase ... ok creating directory locale=C/pg_multixact/members ... ok creating directory locale=C/pg_multixact/offsets ... ok creating directory locale=C/base ... ok creating directory locale=C/base/1 ... ok creating directory locale=C/pg_tblspc ... ok selecting default max_connections ... 100 selecting default shared_buffers ... 1000 creating configuration files ... ok creating template1 database in locale=C/base/1 ... ok initializing pg_authid ... ok enabling unlimited row size for system tables ... ok initializing dependencies ... ok creating system views ... ok loading pg_description ... ok creating conversions ... ok setting privileges on built-in objects ... ok creating information schema ... ok vacuuming database template1 ... ok copying template1 to template0 ... ok copying template1 to postgres ... ok WARNING: enabling "trust" authentication for local connections You can change this by editing pg_hba.conf or using the -A option the next time you run initdb. Success. You can now start the database server using: postmaster -D locale=C or pg_ctl -D locale=C -l logfile start |
こんなメッセージが出ればおk。 起動スクリプトも作ってしまいましょう。
#!/bin/sh # # Startup script for PostgreSQL # # description: postgresql PGSQL=/export/home/pgsql export PGSQL if [ ! -d ${PGSQL} ]; then echo "not installed PostgreSQL\n" exit 0 fi case "$1" in start) echo "Start PostgreSQL\n" su - pgsql -c "pg_ctl -o \"-S -i\" start" ;; stop) echo "Shutdown PostgreSQL\n" su - pgsql -c "pg_ctl stop" ;; restart) echo "Restart PostgreSQL\n" $0 stop $0 start ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 esac exit 0 |
中身は実際の環境に合わせて良さげに変更してくらさい。
んで、
アタリに cp されるが良かろう
Run Level は root の好みに応じて変更してくらさい。
Run Level ってなぁに?って場合は、
スクリプトを cp したら起動しましょう。
んで、process を見てみると・・・
/usr/bin/postmaster -S -i アタリが動いているハヅ。
ps -ef | grep sql してみて。
手動で起動した場合は、 password を聞かれたけど、OS を reboot
した場合は、パスワードは聞いてこないハヅだ。
一回、reboot して試してみて。
ここまできたら、テーブルが見れるか確認してみよう。
初期化がきちんとできていれば、テンプレートができているハヅ。
こんなテーブルが見えませんか?
List of databases Name | Owner | Encoding -----------+-------+---------- postgres | pgsql | EUC_JP template0 | pgsql | EUC_JP template1 | pgsql | EUC_JP (3 rows) |
./data/postgresql.conf に書き込まれています。
vi とかで開いてください。
書き換えたとこだけ抜粋しまつ。
redirect_stderr = true log_directory = 'log' log_filename = 'postgresql-%Y%m%d.log' log_rotation_age = 1440 log_rotation_size = 0 |
事前の準備は特に必要ありません。
アーカイブ緩めて configure しちゃって下さい。
option は ssl を enable して、OpenSSL のlibrary を指定しただけ。
他に必要な option がある場合は、適宜追加して ./configure してね。
で、なにも問題なければ /usr/local/apache2 に install されマス。
install が終わったら、 /usr/local/apache2/conf/httpd.conf を書き換えて、
Web Server の設定をしておいて。
apxs を指定して multibyte の option を設定しただけ。
% make test 中にこんなエラーメッセージが出た場合は・・・・
Don't forget to run 'make test'. ld.so.1: php: fatal: relocation error: file /tmp/php-5.2.9/sapi/cli/php: symbol xmlParserInputBufferCreateFilenameDefault: referenced symbol not found Killed make: [test] Error 137 (ignored) |
これ、ドツボにハマた(TT)
ハマたよ、ドツボに(TT:倒置法)
結論を先にゆっとくと、solaris10 にバンドル済みの libxml2 のライブラリが原因。
pkgadd した /usr/local/lib にある xml ライブラリを call してくれれば問題ないんだけれども、
/usr/lib/libxml2.so.2 アタリを先に call しちゃうのが原因。
手っ取り早い解決策は、
LD_LIBRARU_PATH=/usr/local/lib:/usr/lib: |
的なことをして /usr/local/lib を優先的に見に行くようにしてくらさい。
install が終わったら /usr/local/lib/php.ini のチューニング。
php を install しただけでは存在しません。なので、
してファイルを cp してくらさい。
あとは vi で必要なトコを書き換えましょう。
書き換えておいたほーが良い気がするトコは・・・・
output_handler = mb_output_handler mbstring.language = Japanese mbstring.internal_encoding = EUC-JP mbstring.http_input = auto mbstring.http_output = EUC-JP mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.substitute_character = none; mbstring.func_overload = 0 |
あとは、仕様設計の事情とか、諸般の事情がイロイロと出てくると思いまつので、 manual 見ながら必要な設定をしていってくらさい。
最後に php の module を apache2 に load させるようにして、php のスクリプトを AddType しておしまい。
php がきちんと install できていれば、 /usr/local/apache2/modules/libphp5.so
って module があるハズ。
確認してみてくだされ。
module の load は /usr/local/apache2/conf/httpd.conf の LoadModule ディレクティブ
に libphp5.so を書いてくだされ。
AddType は httpd.conf の下の方に既定の定義が書き込んである部分があるので、その近辺
に書き込めばおk。
LoadModule php5_module modules/libphp5.so AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps |
httpd.conf の修正が終わったら、
して、 httpd の daemon を動かしてみてくらさい。
カンタンな php のスクリプトを書いて実験してみませう。
<?php phpinfo(); ?> |
で、 test.php を DocumentRoot の htdocs に置いてくらさい。
cgi-bin に置きたくなる衝動に駆られると思うのですが、それなりの設定をしないと、
perl のスクリプトだと思い込まれて php で処理してくれません。
なので、 DocumentRoot に取りあえず置いてね。
あとは、ブラウザで表示させてみるダケ。
URL に httpp://localhost/test.php とかして表示させてみて。
特に問題なければ、こんな Web が表示されるハヅ。
一部、抜粋でつ。
ホントは、下のほうにもっといっぱいイロイロと表示されてまつ。
ここまでくれば、 apache2 と php の最低限の設定はおしまい。
ベリサインとかから配布される証明書を使うのがスジってことは既にご存知のハヅ。
でも、 ssl のコマンドで作れるよ。
証明書を取り込んだブラウザが
とゆってきまつが。
俺様証明書の作り方は、俺様証明書を作る。を
参照してくらさい。
server.crt と server.key が作られたと思いまつ。
どこのレポジトリでも良いのでつが、取りあえず、 /etc/ssl.key とかってディレクトリを
作って cp しておいてくらさい。
/usr/local/apache2/conf/httpd.conf の下のほうに、conf/extra/httpd-ssl.conf の行が コメントアウトされているところがあるので探してくらさい。
編集前 | 編集後 |
---|---|
# Secure (SSL/TLS) connections #Include conf/extra/httpd-ssl.conf |
# Secure (SSL/TLS) connections Include conf/extra/httpd-ssl.conf |
コメント消したら、 conf/extra/httpd-ssl.conf に実際の設定を書いていきまつ。
最低限、書き換えないとダメなとこは、
編集前 | 編集後 |
---|---|
#SSLCertificateFile /usr/local/apache2/conf/server-dsa.crt #SSLCertificateKeyFile /usr/local/apache2/conf/server-dsa.key |
SSLCertificateFile /etc/ssl.key/server.crt SSLCertificateKeyFile /etc/ssl.key/server.key |
必要に応じて log や、 ssl 用の DocumentRoot の設定なんかもしておいてね。
書き換えが終わったら、
で、 httpd dasemon を再起動してみてくらさい。
で、今度は、先ほどの test.php を、ブラウザで見てみましょう。
スキームの "s" を忘れないよーに。
http のまんまだと、暗号化されないからね。
これで先ほどと同じ test.php の内容が表示されればおK。
ココから先は、