cygportでApache2?
前回、CygwinでApache2のWEBサーバーを立ち上げて、MOD_Perl.soをインストールしたわけですな。
で、libapreq2というライブラリをコンパイルして、Apache2::Requestというperlモジュールで、ブラウザでINPUTされたフォームデータとかを受け取りたいと思って、で、ここ数日間、MOD_apreq2.soをコンパイルする方法を探っていたのですが、何度やってもMOD_apreq2.soを作れない。
誰か、cygwinでMOD_apreq2.soをコンパイル出来た人はいないのかとググッたところ、cygwinのcygportというToolでlibapreq2をインストール出来るパケージが提供されているという情報を発見。
cygport自体は、cygwinのsetup.exeからインストールが可能である。
で、どうすればcygportでプログラムをインストール出来るのか
付属のドキュメントが"/usr/share/doc/cygport/cygport.1.html"にあった。
しかし、よく分からない。。。
で、まずはcygportでapache2-2.2.6-1をインストールしてみるところから始める。
cygportでダウンロドできるファイルの、ほぼ一覧はここからたぐっていく。
wwwからapache2を選んで、まず、"2.2.9-apr_pool.patch","2.2.9-docs.patch","2.2.9-layout.patch","2.2.9-no-undefined.patch","apache2-2.2.16-1.cygport","postinstall.sh","preremove.sh"を/usr/srcに保存する。
で、"/usr/src"で
cygport apache2-2.2.16-1.cygport download
でソースファイルをdownloadする。
次に、
cygport apache2-2.2.16-1.cygport prep
すると、downloadしたパッケージが展開されるが、先に*.patchファイルを/usr/srcにdownloadしていないか、*.patchファイルが無いと怒られる
で、今度は
cygport apache2-2.2.16-1.cygport compile
とやると、コンパイルが始まる。
今回、configureで
** Error: unable to find layout Cygwin
というエラーで、configureがストップした。
何がおかしいのか調べるために、その周辺のコードをコピペして、次のようなシェルスクリプトを作ってテストしてみた
#! /bin/sh pldconf=./config.pld LAYOUT=Cygwin sed -e "1s/[ ]*<[lL]ayout[ ]*$LAYOUT[ ]*>[ ]*//;1t" \ -e "1,/[ ]*<[lL]ayout[ ]*$LAYOUT[ ]>[ ]*/d" \ -e '/[ ]<\/Layout>[ ]*/,$d' \ -e "s/^[ ]*//g" \ -e "s/:[ ]*/=\'/g" \ -e "s/[ ]*$/'/g" \ config.layout >; $pldconf layout_name=$LAYOUT if test ! -s $pldconf; then echo "** Error: unable to find layout $layout_name" exit 1 fi
 すると、config.pldというファイルは無事作られた。
腑に落ちないが、既にconfig.pldというファイルが出来ているため、もう一度
cygport apache2-2.2.16-1.cygport compile
とやると、そのconfig.pldのチェックをくぐり抜け、configureは無事終了し、コンパイルも問題なく終わった。
で
cygport apache2-2.2.16-1.cygport install
 で無事、インストールされ、apache2の起動および、動作は無事確認された。
で、error_log見て気が付いた。
前から"Apache/2.2.6 (Unix) "だったんじゃん。
libapreq2付属のversion_check.plを実行すると、
$ perl build/version_check.pl ================================================== Build system (core C API) prerequisites apache2: 2.0.48 apr: 0.9.4 (bundled with apache2 2.0.48) apu: 0.9.4 (bundled with apache2 2.0.48) perl: 5.6.1
って表示されるので、勘違いしていた。この"version_check.pl"は、現在の自分の環境のversionを表示するものじゃなくって、libapreq2-2.12の動作条件を表示していたのね。。。ずっと勘違いしていた。
次に、apr1をビルドしました。libsの下にあります。
cygport apr1-1.3.2-1.cygport download
を実行すると、"Error:404 not found"に。仕方が無いので、Apacheのアーカイブサイトからブラウザで、"apr-1.3.2.tar.bz2"をdownload。
cygport apr1-1.3.2-1.cygport prep cygport apr1-1.3.2-1.cygport compile cygport apr1-1.3.2-1.cygport install
で、インストールされたみたいな感じ。
$ apr-1-config --version 1.4.2
あれっ?1.3.2じゃなくっていいのか?不安になってきた。
次にaprutil1をインストールしたいのですが、依存関係で、"libdb4.6-4.6.21.1-1"以上が必要となっているが、現在、cygwinのsetup.exeでインストール出来るのは、"libdb4.5"までなので、cygportからlibdb4.6をインストールすることにしました。
が、ソースの"db4.6-4.6.21.4-10-src.tar.bz2"がどこにあるのか分からないので、download出来ない。
ぐぐったらこんなところにあった。
で、db4.6-4.6.21.4-10-src.tar.bz2をダウンロードして
$ cygport db4.6-4.6.21.4-10.cygport prep
とやると、
*** ERROR: tcl is required to build this package
と出たので、Tclとやらを先にcygwinのsetup.exeでインストールすることに。
で、Tcl/ktをインストール後、またcygportで
$ cygport db4.6-4.6.21.4-10.cygport prep
とやったら、
*** ERROR: Cannot find source package db-4.6.21.tar.gz
となったので、今度はOracleのダウンロードサイトから"db-4.6.21.tar.gz"をダウンロード。
しかし、今度は
*** ERROR: patch patch.4.6.21.1 not found
このpatchはOracleがリリースしたものらしいのだが、現在、Oracleのサイトには無いので困った。
ググったら理化学研究所のftpサイトにあった。pacthは4つあって、4個とも必要だった。
本音を言えば、データベース使うような機会はないと思うのだが。
次にaprutil1をインストールしたい。ので、ダウンロードしようとすると、
$ cygport aprutil1-1.3.2-1.cygport download --2010-10-09 11:53:30-- http://www.apache.org/dist/apr/apr-util-1.3.2.tar.bz2 Connecting to www.apache.org (www.apache.org)|140.211.11.131|:80... connected. HTTP request sent, awaiting response... 404 Not Found
$ cygport aprutil1-1.3.2-1.cygport prep $ cygport aprutil1-1.3.2-1.cygport compile configure: error: Berkeley db4 not found *** ERROR: configure failed
そんなアホな。
/usr/src/db4.6-4.6.21.4-10/log/db4.6-4.6.21.4-10-install.log
の中を見ると、
Installing DB library: /usr/src/db4.6-4.6.21.4-10/inst/usr/lib ...
どこにインストールしとんねん!
これは。。。! Apache2も、コンパイル後、インストールされてなかった!
$apr-1-config --version のバージョンがおかしい時点で気が付くべきだった。。。
cpし直して、再度挑戦!
$ cygport aprutil1-1.3.2-1.cygport compile configure: error: Berkeley db4 not found *** ERROR: configure failed
がーん。configureのlogを見ると、installされたdbのファイルの名前が、どうもいけないらしい。
/usr/included/b4.6 → /usr/included/b46
と、変えるとOK。
でも、コンパイル中に別のエラーが出る。
/bin/sh /usr/share/apr/build-1/libtool --silent --mode=link gcc -O2 -pipe -L/usr/lib -release 1 -module -no-undefined -rpath /usr/lib/apr-util-1 libaprutil-1.la -o ldap/apr_ldap.la ldap/apr_ldap_init.lo ldap/apr_ldap_option.lo ldap/apr_ldap_rebind.lo -lldap libtool: link: cannot find the library `libaprutil-1.la' or unhandled argument `libaprutil-1.la' make[1]: *** [dbd/apr_dbd_sqlite3.la] Error 1 make[1]: *** Waiting for unfinished jobs.... libtool: link: cannot find the library `libaprutil-1.la' or unhandled argument `libaprutil-1.la'
探したら、"libaprutil-1.la"というファイルは/aprutil1-1.3.2-1/build/.libsの中にあった。
ので、フルパスで"libaprutil-1.la"を指定するようにMakefileを書き換えた。
<LINK_MODULE = $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) $(LT_LDFLAGS) $(ALL_CFLAGS) $(ALL_LDFLAGS) $(APRUTIL_LDFLAGS) -release $(APRUTIL_MAJOR_VERSION) -module -no-undefined -rpath $(APU_DSO_LIBDIR) libaprutil-${APRUTIL_MAJOR_VERSION}.la --- >LINK_MODULE = $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) $(LT_LDFLAGS) $(ALL_CFLAGS) $(ALL_LDFLAGS) $(APRUTIL_LDFLAGS) -release $(APRUTIL_MAJOR_VERSION) -module -no-undefined -rpath $(APU_DSO_LIBDIR) /usr/src/aprutil1-1.3.2-1/build/.libs/libaprutil-${APRUTIL_MAJOR_VERSION}.la
すると、うまく行ったように見える。ので、install
で、MOD_Perlを再ビルド。前回のソースがそのままあるので、そのままの手順で。。。ん?
[ error] '/usr/sbin/apxs2 -q INCLUDEDIR' failed: [ error] apxs:Error: Sorry, no shared object support for Apache. apxs:Error: available under your platform. Make sure. apxs:Error: the Apache module mod_so is compiled into. apxs:Error: your server binary `/usr/sbin/httpd2'.. [ error] Unable to determine server version, aborting. [ error] Invalid MP_APXS specified?
はぁ?なんだそりゃ?
泣きながら、cygwinのsetup.exeでApache2とlibapr1とlibaprutil1をreinstallしました。。