新兵器、再び。

tmx2003-08-12













別の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 certificate

Signature Algorithm ((R)SA or (D)SA) [R]:
とか聞いてくるけど、分からない質問は適当にデフォルト(エンターキー)でOK。
FQDNhttpd.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<

    • -

さらに、起動時のパスフレーズを省略。
(わざわざセキュリティを弱めてみる...


# 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' ./S99httpd

K99〜も設定しないとイケナイ気もするけど、ま〜いっか。
...その後、よくない気もしてきたので、

↑各ランレベル毎のシンボリックリンクの張り方の参考に。

あと、↑SSLを有効で自動起動させる方法。


もっとスマートな自動起動させる設定方法。

# chkconfig httpd on
これでランレベル3〜5でApache自動起動
昔はこんなコマンドはなかった気がするがの〜

あと、Turbolinux 8 Serverだと、SSLを有効での自動起動は、/etc/httpd/conf/httpd/bootoptの


#HTTPDOPT=-DSSL
行のコメントアウトを外すだけだったり。

ただし、スタートアップスクリプトがオリジナルっぽいのは良いのだけど、graceful restart(kill -USR1)がサポートされてなくて、reload(kill -HUP)のみなのはどうよ? って思ってみたり。>Turbolinux 8 Server

参考URL:

(Apache2.0のドキュメントなのがアレだけど)

(2004/6/11、追記)

最新版が出ていないかチェックするべきサイト:

参考にさせていただいたサイト:

ありがとうございます。

(9/6、加筆修正)

次は、php-4.2.3。


mod_ssl使うのでEAPIにしないと怒られるので、まず環境変数を設定。

CFLAGS=-DEAPI; export CFLAGS
bashキライだけど、tcshにすると、WinSCP2がうまく動いてくれないので。

$ 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
http.confをいぢる。

LoadModule php4_module libexec/libphp4.so
は自動的に入ってる(既存のLoadModule行の最後尾に入る)ので、お好みに合わせて位置を変えるなりして、

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
を追加。(<IfModule mod_mime.c>の中とかが良いかも。

あぱっち再起動(apachectl gracefulでもOK)後に、例によって、


<?php phpinfo(); ?>
を、test.phpとかで、ドキュメントルート以下で動作確認。

さらに、PostgreSQLを使えるようにする作業。


$ cd ~/work/php-4.2.3/ext/pgsql
$ phpizecsh系だとrehashすべきかも。
$ aclocal
$ ./configure
$ make
$ su
# make EXTENSION_DIR=/usr/local/lib/php/extensions/ install
ここで、php.iniをコピーし忘れている(でも動く)ことに気付く...

$ cd ~/work/php-4.2.3
$ su
# cp -p php.ini-dist /usr/local/lib/php.ini
コピーする。

# cd /usr/local/lib/
# emacs php.ini
で、php.iniを編集する。まずは、extension_dir項目を、

extension_dir = /usr/local/lib/php/extensions
に変更。その直後とかに

extension = pgsql.so
行を追加。以下は、PostgreSQLは関係ないがついでに設定。
[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が出現するのを確認。

以上。


最新版が出ていないかチェックするべきサイト:

以下の書籍を参考にさせていただきました。

ありがとうございます。

(9/6、加筆修正)

ちょっと話題がそれるけど、PostgreSQL、諸々セットアップ、メモ。
PostgreSQLがインストール済み環境(RedHat7.2)で。

postgresにsuして。


$ 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 DATABASE
ユーザとDBができる。

diff /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でも、お手軽な手段があるのかも知れないけど。