火曜日, 4月 14, 2015

mod_perlがビルドできなかった

mod_perlがビルド時点でしくってるので確認。

以下、ログ

/home/luna/perl5/perlbrew/perls/perl-5.18.4/bin/perl /home/luna/perl5/perlbrew/perls/perl-5.18.4/lib/5.18.4
/ExtUtils/xsubpp  -typemap /home/luna/perl5/perlbrew/perls/perl-5.18.4/lib/5.18.4/ExtUtils/typemap -typemap
 /usr/local/src/mod_perl-2.0.8/xs/typemap  Connection.xs > Connection.xsc && mv Connection.xsc Connection.c
cc -c  -I/usr/local/src/mod_perl-2.0.8/src/modules/perl -I/usr/local/src/mod_perl-2.0.8/xs -I/usr/include/a
pr-1 -I/usr/include/httpd -D_REENTRANT -D_GNU_SOURCE -fPIC -fno-strict-aliasing -pipe -fstack-protector -I/
usr/local/include  -DMOD_PERL -DMP_COMPAT_1X -DLINUX -D_REENTRANT -D_GNU_SOURCE  -O2   -DVERSION=\"2.000008
\" -DXS_VERSION=\"2.000008\" -fPIC "-I/home/luna/perl5/perlbrew/perls/perl-5.18.4/lib/5.18.4/x86_64-linux-t
hread-multi/CORE"  -DMP_HAVE_APR_LIBS Connection.c
Connection.xs: 関数 ‘XS_Apache2__Connection_remote_addr’ 内:
Connection.xs:117:33: エラー: ‘conn_rec’ は ‘remote_addr’ という名前のメンバを持っていません
     RETVAL = (APR__SockAddr) obj->remote_addr;
                                 ^
Connection.xs: 関数 ‘XS_Apache2__Connection_remote_ip’ 内:
Connection.xs:134:26: エラー: ‘conn_rec’ は ‘remote_ip’ という名前のメンバを持っていません
     RETVAL = (char *) obj->remote_ip;
                          ^
Connection.xs:138:13: エラー: ‘conn_rec’ は ‘remote_ip’ という名前のメンバを持っていません
          obj->remote_ip = (char *) (SvOK(ST(1)) ?
             ^
make[3]: *** [Connection.o] エラー 1
make[3]: ディレクトリ `/usr/local/src/mod_perl-2.0.8/WrapXS/Apache2/Connection' から出ます
make[2]: *** [subdirs] エラー 2
make[2]: ディレクトリ `/usr/local/src/mod_perl-2.0.8/WrapXS/Apache2' から出ます
make[1]: *** [subdirs] エラー 2
make[1]: ディレクトリ `/usr/local/src/mod_perl-2.0.8/WrapXS' から出ます
make: *** [subdirs] エラー 2
[luna@v3290 mod_perl-2.0.8]$

んー。。。。なんかすでに入っている何かを呼び出そうとして失敗してるのかな。

調べてみると、以下の記事

httpd -V
Server version: Apache/2.4.6 (CentOS)
Server built:   Mar 12 2015 15:07:19
Server's Module Magic Number: 20120211:24
Server loaded:  APR 1.4.8, APR-UTIL 1.5.2
Compiled using: APR 1.4.8, APR-UTIL 1.5.2
Architecture:   64-bit
Server MPM:     prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/etc/httpd"
 -D SUEXEC_BIN="/usr/sbin/suexec"
 -D DEFAULT_PIDLOG="/run/httpd/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

今までの環境ってそういえばみんなapache2.2系でしたね。

stackoverflowで提示されている方法試してみるか。

I solve that problem by installing apache2 via apt-get and installing Apache2::RequestRec via cpan
or

Try to run these commands before make

make source_scan

make xs_generate

makeのターゲット指定をまず試してみた。
結果はダメで、再度perl Makefile.PLを叩いても結果一緒です。

もう一つのperlモジュールもmod_perl持ってきてから、なので、これも通らなさそう。

となるとこれか。。

Unfortunately upstream mod_perl is not ported to Apache 2.4 yet.

AFAIK Debian developers went ahead and made some changes that allows you to compile and use mod_perl on Apache 2.4. Here is there source tree http://svn.apache.org/repos/asf/perl/modperl/branches/httpd24

今度試した時に追記するよ。

modern ie

思い出したので、書いておきたい。

もし、IEのテストを行う時には、このVMを思い出して欲しい。

https://www.modern.ie/ja-jp

様々なWindowsとIEの組み合わせが入っているそんなやつらだ。
特にMacしかもっていない人は、これでIEの動作確認ができる。

Browser+OSの組みあわせで可能なものが表示されるので、欲しいものをダウンロードしておくと良いだろう。
必要になったら、OVAファイルをダブルクリックすればいい。

月曜日, 4月 13, 2015

perl周りについて書き散らかす。

perl今自分の中でホットになりました。
そんなわけでperlのことについて色々書いてみたいと思う。

開発環境は何がいいかな?

慣れていないなら、Linux。 Windowsは別途ノウハウがいる。(cpanであれが通らないんだけどを解決する術)

perl6がいいの?

ほかの言語とは違い、perl6は全く別言語と聞きます。
ずっと前から名前だけは聞いてますが、まだまだな感じを受けます。
(触ってみた、動かしてみたが多いけど、入門系の記事はあまり見受けないので)

site_perlでいい?自分でビルド?

ほかの人が言うにはvendor_perlはフレームワークみたいなものを使う時には良くないとききます。
が、私自身ビルドしてもある程度のエラーが出るのでなんとも。

オススメの環境は?

plack + webサーバー mod_perlの運用方法は知っておくべき事柄の一つかもしれないけど。
(plackの紹介記事だけ見て話してる)

perlビルドするのが大変です。

開発環境では、 perlbrew、プロダクションでは、plenvがいいとか。
ログに載せているけど、オプションは、あんな感じで良いと思います。

その他

runy使っててもwindowsでやるときは別途ノウハウが必要だと感じてて、慣れるまでは大変かな?と思います。
また、mod_perl全力ディスではなく、監視対象が一つ減るとかいいとこもあるので、この辺は要件になるかなと思います。

手を動かす。

そこを踏まえた上で、開発環境で、catalyst、sledgeとかを動かす環境を作ってみるとしましょう。(mojoは触れる機会がまだないのでスキップ)

perlbrew

perlbrewのインストール及び概要については上のサイトが全体像掴みやすかった。
しかし、上記のやり方ではGetop周りで怒られちゃうので、以下のサイトの様な回避策を講じる必要がある。
ワンライナーで何か置き換えているね。sedは使えた方がいいね。(遠い目)

ではどんどんインストール

インストールするバージョンはperlbrew availableで確認できるのがインストール可能なバージョンです。
心ゆくままに5.8オーバーを各種ビルドなんてのもいいのではないでしょうか。
(この記事を修正してるとき、裏でperlbrewを回しまくっています。)

いざ、モジュールのインストール

さて、cpanmまでインストールが終わったら、いざ開発に必要なモジュールを揃える旅に出よう。
perlbrewはrvmみたいにmoduleセットの切り替えができるんですね。すてきです。
perl5libの面倒もみてくれるんですかね。 site_perl的なところに入ってしまうものについてはみてくれるパスではないかもしれないですが。

個人的にはプロジェクト作成時点でcartonで必要なパッケージをちゃんとバージョン管理する様にした方がいいかなと思うよ。。。

  • 個人的にcatalystのディレクトリ構成とあまりマッチしていない気がしますが
    • いやいや。catalystに関しては、cpanfileだけでよくね?


cartonで管理するなら、あまりcpanmでどこにインストールするのかとか最初だけ気にしていればいいからね。
となると、cpanmでいれたほうがいいのは?
carton、DBD系くらいしか思いつかない。きっと、熟れてる人ならもっと出てくるかもしれないけど。

carton+catalyst+sqlite
https://github.com/tluna/perl
sledge
諦めた。mod_perl必須

後書き perlって環境周りはあまり楽じゃない気がします。。。
へぼいのは承知でちとperlerはすげぇとおもう。また、テストツールはperl界隈は随一とのことなので、その辺も触ったらいいのかな。次の機会に書こう

ごりっとバージョンごとにインストール(あまり意味ないけど)
#!/bin/bash
perlbrew -v install perl-5.21.10 -Accflags=-fPIC -Dloclibpth="/usr/lib64 /lib64" -Dusethreads
perlbrew -v install perl-5.20.2 -Accflags=-fPIC -Dloclibpth="/usr/lib64 /lib64" -Dusethreads
perlbrew -v install perl-5.18.4 -Accflags=-fPIC -Dloclibpth="/usr/lib64 /lib64" -Dusethreads
perlbrew -v install perl-5.16.3 -Accflags=-fPIC -Dloclibpth="/usr/lib64 /lib64" -Dusethreads
perlbrew -v install perl-5.14.4 -Accflags=-fPIC -Dloclibpth="/usr/lib64 /lib64" -Dusethreads
perlbrew -v install perl-5.12.5 -Accflags=-fPIC -Dloclibpth="/usr/lib64 /lib64" -Dusethreads
perlbrew -v install perl-5.10.1 -Accflags=-fPIC -Dloclibpth="/usr/lib64 /lib64" -Dusethreads
perlbrew -v install perl-5.8.9 -Accflags=-fPIC -Dloclibpth="/usr/lib64 /lib64" -Dusethreads

#perl-5.21.10
#perl-5.20.2
#perl-5.18.4
#perl-5.16.3
#perl-5.14.4
#perl-5.12.5
#perl-5.10.1
#perl-5.8.9
#perl-5.6.2
#perl5.005_04
#perl5.004_05
#perl5.003_07

$ perlbrew list 
  perl-5.16.3
  perl-5.18.4

  perl-5.20.2

その他のバージョンのビルドについては後日確認します。