新兵器、再び。
別のPC(Red Hat Linux 7.2)にApacheをセットアップする機会が出来たので、1.3.28だと
この辺の話もあるし(自分の環境では確認してないけど)、1.3.27で再びセットアップ、メモ。まずは、Apache+mod_ssl。
まずは、openssl-0.9.7b。
$ tar zxvf ../openssl-0.9.7b.tar.gz
$ cd openssl-0.9.7b
$ ./config shared
$ make
$ make test
$ su
# make install
# emacs /etc/ld.so.conf←viはキライ。:-)
/usr/local/ssl/lib 行を追加。
# ldconfig←ぢゅーよー&基本的なワナ
# exit
$ emacs .bash_profile
PATHに/usr/local/ssl/bin/を追加。
例:PATH=$PATH:$HOME/bin:/usr/local/ssl/bin/で、完成。次は、apache_1.3.27とmod_ssl-2.8.14-1.3.27。
$ tar zxvf ../apache_1.3.27.tar.gz
$ tar zxvf ../mod_ssl-2.8.14-1.3.27.tar.gz
$ cd mod_ssl-2.8.14-1.3.27
$ ./configure --with-apache=../apache_1.3.27 --with-ssl=../openssl-0.9.7b --prefix=/usr/local/apache --enable-shared=ssl --enable-rule=SHARED_CORE --enable-module=so
$ cd ../apache_1.3.27
$ make
$ make certificateSignature Algorithm ((R)SA or (D)SA) [R]:
とか聞いてくるけど、分からない質問は適当にデフォルト(エンターキー)でOK。
(FQDNがhttpd.confのServerNameに関連する点だけ注意。正しくなくても動くっぽいけど。
$ su
# make install
# /usr/local/apache/bin/apachectl startsslポート8080(HTTP)と8443(HTTPS)で良ければ、デフォルトのhttpd.confで動いちゃう。強いて言えば、ServerNameをいぢるくらい?
(uid=nobody, gid=nobodyがないと動かないかも知れないけど。↓ポートとServerNameをいぢる場合の参考例。
(Listenだけでなく、VirtualHostタグも変更する必要がある点が、微妙にワナ。ServerNameは伏せました。
# diff httpd.conf httpd.conf.default
265c265< Port 80
- -
> Port 8080
274,275c274,275< Listen 80< Listen 443
- -
> Listen 8080
> Listen 8443
316c316< ServerName xxxx.xxxx.xxxx
- -
> #ServerName xxxx.xxxx.xxxx
1097c1097<
- -
(9/6、加筆修正)さらに、起動時のパスフレーズを省略。
(わざわざセキュリティを弱めてみる...
# cd /usr/local/apache/conf/ssl.key
# cp -p server.key server.key.org
# openssl rsa -in server.key.org -out server.keyさらに、自動起動の設定。
# cd /etc/rc.d/init.d
# ln -s /usr/local/apache/bin/apachectl .
# cd /etc/rc.d/rc3.d
# ln -s '../init.d/apachectl' ./S99httpdK99〜も設定しないとイケナイ気もするけど、ま〜いっか。
...その後、よくない気もしてきたので、(2004/6/11、追記)
もっとスマートな自動起動させる設定方法。これでランレベル3〜5でApacheが自動起動。
# chkconfig httpd on
昔はこんなコマンドはなかった気がするがの〜あと、Turbolinux 8 Serverだと、SSLを有効での自動起動は、/etc/httpd/conf/httpd/bootoptの
行のコメントアウトを外すだけだったり。
#HTTPDOPT=-DSSLただし、スタートアップスクリプトがオリジナルっぽいのは良いのだけど、graceful restart(kill -USR1)がサポートされてなくて、reload(kill -HUP)のみなのはどうよ? って思ってみたり。>Turbolinux 8 Server
参考URL:
(Apache2.0のドキュメントなのがアレだけど)
最新版が出ていないかチェックするべきサイト:
参考にさせていただいたサイト:
ありがとうございます。
次は、php-4.2.3。
(9/6、加筆修正)
mod_ssl使うのでEAPIにしないと怒られるので、まず環境変数を設定。↑bashキライだけど、tcshにすると、WinSCP2がうまく動いてくれないので。
CFLAGS=-DEAPI; export CFLAGShttp.confをいぢる。
$ tar zxvf ../php-4.2.3-multibyte.tar.gz
$ cd php-4.2.3/
$ ./configure --enable-mbstring --enable-mbstr-enc-trans --enable-mbregex --with-apxs=/usr/local/apache/bin/apxs --without-mysql
$ make
$ su
# make installは自動的に入ってる(既存のLoadModule行の最後尾に入る)ので、お好みに合わせて位置を変えるなりして、
LoadModule php4_module libexec/libphp4.soを追加。(<IfModule mod_mime.c>の中とかが良いかも。
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phpsあぱっち再起動(apachectl gracefulでもOK)後に、例によって、
を、test.phpとかで、ドキュメントルート以下で動作確認。
<?php phpinfo(); ?>さらに、PostgreSQLを使えるようにする作業。
ここで、php.iniをコピーし忘れている(でも動く)ことに気付く...
$ cd ~/work/php-4.2.3/ext/pgsql
$ phpize←csh系だとrehashすべきかも。
$ aclocal
$ ./configure
$ make
$ su
# make EXTENSION_DIR=/usr/local/lib/php/extensions/ installコピーする。
$ cd ~/work/php-4.2.3
$ su
# cp -p php.ini-dist /usr/local/lib/php.iniで、php.iniを編集する。まずは、extension_dir項目を、
# cd /usr/local/lib/
# emacs php.iniに変更。その直後とかに
extension_dir = /usr/local/lib/php/extensions行を追加。以下は、PostgreSQLは関係ないがついでに設定。
extension = pgsql.so
[mbstring]項目で、コメントアウトのセミコロン(;)を全て外して、有効化。
mbstring.internal_encoding = EUC-JP
mbstring.http_input = auto
mbstring.http_output = SJIS
mbstring.detect_order = auto
mbstring.substitute_character = none;register_globalsをOn(趣味)。
register_globals = On
(問題があるそ〜なので、オススメはしません。ドキュメントルートを何となく設定。
doc_root = "/usr/local/apache/htdocs"
以下、php.iniの変更例(差分)。
$ diff /usr/local/lib/php.ini ~/work/php-4.2.3/php.ini-dist
309c309< register_globals = On
- -
> register_globals = Off
364c364< doc_root = "/usr/local/apache/htdocs"
- -
> doc_root =
371,372c371< extension_dir = /usr/local/lib/php/extensions< extension = pgsql.so
- -
> extension_dir = ./
865,869c864,868< mbstring.internal_encoding = EUC-JP< mbstring.http_input = auto< mbstring.http_output = SJIS< mbstring.detect_order = auto< mbstring.substitute_character = none;
- -
> ;mbstring.internal_encoding = EUC-JP
> ;mbstring.http_input = auto
> ;mbstring.http_output = SJIS
> ;mbstring.detect_order = auto
> ;mbstring.substitute_character = none;あぱっちを再起動(apachectl gracefulでもOK)して、お手元にある手頃なPostgreSQLを使った、Webアプリを使って、ブラウザから動作確認。または、前述のtest.phpのページでctype項目とapache項目の間にpgsqlが出現するのを確認。
以上。
最新版が出ていないかチェックするべきサイト:
以下の書籍を参考にさせていただきました。
ありがとうございます。
ちょっと話題がそれるけど、PostgreSQL、諸々セットアップ、メモ。
(PostgreSQLがインストール済み環境(RedHat7.2)で。postgresにsuして。
ユーザとDBができる。
$ createuser hoge
Shall the new user be allowed to create databases? (y/n) n
Shall the new user be allowed to create more new users? (y/n) n
CREATE USER
$ createdb --encoding=EUC_JP hoge
CREATE DATABASEdiff /etc/rc.d/init.d/postgresql /etc/rc.d/init.d/postgresql.org
135c135< su -l postgres -s /bin/sh -c "/usr/bin/pg_ctl -D $PGDATA -o '-i' -p /usr/bin/postmaster start > /dev/nul
l 2>&1" < /dev/null
- -
> su -l postgres -s /bin/sh -c "/usr/bin/pg_ctl -D $PGDATA -p /usr/bin/postmaster start > /dev/null 2>&1"< /dev/null
安直にInternet domain接続を有効にする方法。
(注:セキュリティが激烈に弱まるので、オススメはしません。
ちょっと感想。
今回、初めてPHPからPostgreSQLを使ってみたけど、やはりMySQLのが優遇されてる(?)というか、よりお手軽な印象。
例えば、MySQLだと、
return mysql_insert_id($result);が、PostgreSQLだと
$result = pg_query($conid, "SELECT last_value FROM $seq;");
$array = pg_fetch_array($result);
return $array[0];な感じだし。($seqはシーケンス。
まあ、PostgreSQLでも、お手軽な手段があるのかも知れないけど。
盆モード。
帰りの電車がいつもより空いていて、盆モードかな、と思った。