どうも、('A`)です。只今四十肩のリハビリ中です・・・
えーと、もう皆さんご存じたと思いますが、念の為お知らせを。
前回の日記でもご紹介しましたがFreeBSDの7.3-RC1が発表されました。
で、FTPサーバでも7.3-releaseのportsが昨日公開されましたが、どうも、
perlのバージョンが5.10.1を標準で提供するみたいです。
試しにLatestにあるperl.tbzをインストールして、perl -vをしたら、
こんな風に表示されました。
# perl -v
This is perl, v5.10.1 (*) built for amd64-freebsd
Copyright 1987-2009, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl". If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.
#
|
ありゃりゃ。。。。バージョン上がったのね。大変だ、こりゃ。
大抵こういうバージョンアップがあると、インストールできたものが、
(過去の経験上)できなくなったりするんだよねえ。
まあ、先週から7-stableの方のportsに収録されているperl系のソフトが
軒並み5.10.1と関連付けされていたので、('A`)の方も7.3のサーバを作るのに
苦戦しました。
「どうして?」って・・・・いままで使っていたパッケージで、インストールの時に
コケる様になったからです。
おかしくなったのは、SpeedyCGIとmod_perlです、ハイ。
('A`)にとっては鬼門です。トホホ・・・
今回はこのperlがらみのお話を2回に分けてご説明します。
えーと今回は64ビット機(amd64)を作りました。
まずは、perlをいつもの様にpkg_addコマンドでインストールしました。
で、ApacheとかPHPとか順調にインストールしていたのですが、
SpeedyCGIのところで、こんなエラーがでました。
cp ../src/speedy_perl.c speedy_perl.c
cc -c -I../src -I. -DAPPLLIB_EXP="/usr/local/lib/perl5/5.10.1/BSDPAN"
-DHAS_FPSETMASK -DHAS_FLOATINGPOINT_H -fno-strict-aliasing -pipe
-fstack-protector -I/usr/local/include -O
-DVERSION=\"2.22\" -DXS_VERSION=\"2.22\" -DPIC
-fPIC "-I/usr/local/lib/perl5/5.10.1/mach/CORE"
-DSPEEDY_PROGNAME=\"speedy_backend\"
-DSPEEDY_VERSION=\"2.22\"
-DSPEEDY_BACKEND speedy_perl.c
speedy_perl.c: In function 'find_scr':
speedy_perl.c:258: error: expected expression before 'SpeedyScript'
speedy_perl.c: In function 'get_string':
speedy_perl.c:449: error: expected expression before 'char'
speedy_perl.c: In function 'cwd_new':
speedy_perl.c:484: error: expected expression before 'SpeedyCwd'
speedy_perl.c: In function 'onerun':
speedy_perl.c:808: warning: comparison between pointer and integer
speedy_perl.c:809: warning: comparison between pointer and integer
speedy_perl.c:810: warning: comparison between pointer and integer
*** Error code 1
|
で、エラーメッセージを調べてgoogleさんで調べていたら、1つ目としてココが
引っかかりました。
書かれていた事は以下の通りです。
Revision 1.17: download - view: text, markup, annotated - select for diffs
Mon Oct 12 19:55:37 2009 UTC (4 months, 1 week ago) by lth
Branches: MAIN
CVS tags: HEAD
Diff to: previous 1.16: preferred, colored
Changes since revision 1.16: +1 -1 lines
Avoid segfault on perl 5.10
PR: ports/139259
Submitted by: Vivek Khera <vivek@khera.org>
Obtained from: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=537996
あと、2つ目としてココも見つかりました。
(書かれている内容が長いので、掲載しません。リンク先で確認して下さい。)
で、リンク先を見ると、1番目のリンク先ではspeedy_perl.c の中の記述を
修正すると通るとの事。
2番目のリンク先ではspeedy_backend_main.h の中の記述を修正すると通ると、
書いていて、パッチの中身も掲載されていました。
でもね、せっかくならファイルの形でダウンロードできる様になっていたら、
良いのになあ・・・
せっかくだから、ファイルの形にしてダウンロードできる様にします。
まずは1つ目。中身は以下の通りです。
ココ(speedy-cgi-perl-segfault.patch)からダウンロードできます。
--- speedy-cgi-perl-2.22/src/speedy_perl.c.orig 2009-07-23 21:26:43.000000000 +0200
+++ speedy-cgi-perl-2.22/src/speedy_perl.c 2009-07-23 21:26:47.000000000 +0200
@@ -818,7 +818,7 @@
my_call_sv(get_perlvar(&PERLVAR_RESET_GLOBALS));
/* Copy option values in from the perl vars */
- if (SvIV(PERLVAL_OPTS_CHANGED)) {
+ if (SvTRUE(PERLVAL_OPTS_CHANGED)) {
int i;
for (i = 0; i < SPEEDY_NUMOPTS; ++i) {
OptRec *o = speedy_optdefs + i;
|
次に2つ目。中身は以下の通りです。
ココ(SpeedyCGI-2.22-5.10.patch)からダウンロードできます。
--- CGI-SpeedyCGI-2.22/src/speedy_backend_main.h.orig 2003-10-07 00:03:48.000000000 -0400
+++ CGI-SpeedyCGI-2.22/src/speedy_backend_main.h 2010-01-06 21:26:48.000000000 -0500
@@ -38,7 +38,7 @@
#else
-#define speedy_new(s,n,t) New(123,s,n,t)
+#define speedy_new(s,n,t) Newx(s,n,t)
#define speedy_renew Renew
#define speedy_free Safefree
|
パッチの当て方は、みなさん判りますよね?
えーと、念の為。
SpeedyCGIのソースのディレクトリをCGI-SpeedyCGI-2.22/としますと、
cd CGI-SpeedyCGI-2.22/
patch -p1 < speedy-cgi-perl-segfault.patch
patch -p1 < SpeedyCGI-2.22-5.10.patch
とパッチを宛ててから、
perl Makefile.PL
make install
|
とインストールします。
なんとかSpeedyCGIはこれでインストール出来たのですが、今度は
mod_perlのインストールでコケまくって・・・・
最終的にはサーバをまっさらにして、perlをソースから入れ直し、と
なりました。
単純にpkg_addで入れたものでは行けない様になったのです、ハア・・・
えー、1回にまとめて説明したかったのですが、作業が立て込んでしまって、
ちょっと次回に回します。ゴメンなさいね。
root兄(・∀・)から、「javaのサーブレットが使えるサーバ1台頂戴」と
リクエストが来たので、これから作らないといけません。
それでは、また。
【追記 17.40】
どうも、('A`)/です。えーと、今回は64ビット(amd64)でサーバを構築してますが、
32ビット(i386)の状況についてもちょっとお知らせを。
どうも、FreeBSDの本家FTPサイトを見てみると、7-stableのportsでは
perlのバージョンはまだ上がっていません。5.8.9がデフォルトのようです。
試しに以下のコマンドでインストールしてみたら、5.8.9_3が入りました。
pkg_add ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-7-stable/Latest/perl.tbz
で、ディレクトリ(7.3-release)は在るのですが、中身はまだ空でした。
FreeBSDの中の人は苦戦しているのかなあ?
あと、perl5.10.1にして他のperl系のソフト(p5-なんちゃら)をインストールする場合には、
/usrパーティションの溢れに気をつけて下さい。
どうも、perl5.10.1化で各モジュールのサイズが大きくなって、/usr/localのあたりが
650MB位に膨れます。
|