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

 またApacheアーカイブサイトからダウンロード。

$ 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しました。。