MTOS 5.2 on Lighttpd + PSGI (1)

CentOS 5.8 x64 上に MTOS 5.2 を構築する。httpd は lighttpd を利用しているので PSGI と連携させて利用する。というわけで、今回はモジュールのインストールについて説明します。といっても簡単で、cpanm を利用して以下のようにモジュールをインストールすれば OK かと思います。エラーへの対処についてはトラブルシュート以下を参考のために一応残しておきます。

■インストールするモジュール
# cpanm Plack
# cpanm CGI::PSGI
# cpanm CGI::Emulate::PSGI
# cpanm CGI::Compile
# cpanm SOAP::Transport::HTTP::Plack
# cpanm Log::Log4perl
# cpanm Net::SSLeay
# cpanm Starman

■トラブルシュート
SOAP::Transport::HTTP::Plack のインストール中に、XML::Parser の依存関係に起因して以下のモジュールでエラーが発生した。

Building and testing XML-Parser-2.41 ... FAIL
! Installing XML::Parser failed. See /root/.cpanm/build.log for details.
! Bailing out the installation for SOAP-Lite-0.715. Retry with --prompt or --force.
! Bailing out the installation for SOAP-Transport-HTTP-Plack-0.03. Retry with --prompt or --force.

~/.cpanm/build.log を確認すると、expat.hがないためにエラーとなっているため、yum で expat-devel
をインストール。尚、 expat パッケージは導入済みの状態も発生していたので、expat-devel を入れないと
このヘッダファイルはインストールされないということになります。

# yum install expat-devel
make[1]: ディレクトリ `/root/.cpanm/work/1353830454.21569/XML-Parser-2.41/Expat' に入ります
cp Expat.pm ../blib/lib/XML/Parser/Expat.pm
/usr/bin/perl /usr/lib/perl5/site_perl/5.8.8/ExtUtils/xsubpp -noprototypes -typemap /usr/lib/perl5/5.8.8/ExtUtils/typemap -typemap typemap  Expat.xs > Expat.xsc && mv Expat.xsc Expat.c
gcc -c   -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic   -DVERSION=\"2.41\" -DXS_VERSION=\"2.41\" -fPIC "-I/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE"   Expat.c
Expat.xs:12:19: error: expat.h: そのようなファイルやディレクトリはありません

Starman のインストール中に、NET::Serverモジュールの依存関係に起因して、以下のエラーが発生した。

Fetching http://search.cpan.org/CPAN/authors/id/R/RH/RHANDOM/Net-Server-2.006.tar.gz ... OK
Configuring Net-Server-2.006 ... OK
Building and testing Net-Server-2.006 ... FAIL
! Installing Net::Server failed. See /root/.cpanm/build.log for details.
! Bailing out the installation for Starman-0.3005. Retry with --prompt or --force.

~/.cpanm/build.log を確認すると、テストの一部で必要となる Log::Log4perl モジュールがインストールされていないためにテストがスキップされているので Log::Log4perl をインストール。

Manifying blib/man3/Net::Server::HTTP.3pm
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/Options.................ok
        7/73 skipped: Log::Log4perl not installed: Can't locate Log/Log4perl.pm in @INC (@INC contains: /root/.cpanm/work/1353831006.22216/Net-Server-2.006/t /root/.cpanm/work/1353831006.22216/Net-Server-2.006/blib/lib /root/.cpanm/work/1353831006.22216/Net-Server-2.006/blib/arch /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/5.8.8 .) at t/Options.t line 253.
t/Port_Configuration......Use of uninitialized value in subroutine entry at /root/.cpanm/work/1353831006.22216/Net-Server-2.006/blib/lib/Net/Server/Proto/SSLEAY.pm line 35.
# number of tests ran 35 did not match number of specified tests 51
FAILED tests 35-51

しかし、同じ箇所でエラーとなる。これは SSLEAY.pm の 35行目で発生している。

Manifying blib/man3/Net::Server::HTTP.3pm
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/Options.................ok
t/Port_Configuration......Use of uninitialized value in subroutine entry at /root/.cpanm/work/1353831438.22753/Net-Server-2.006/blib/lib/Net/Server/Proto/SSLEAY.pm line 35.
# number of tests ran 35 did not match number of specified tests 51
FAILED tests 35-51

35行目では、Net::SSLeay->can($sub)->(); のように can メソッドを呼び出しているが、uninitialized value というエラー内容から$sub に何も入っていないのかしら。。

# -*- perl -*-
#
#  Net::Server::Proto::SSLEAY - Net::Server Protocol module
#
#  $Id: SSLEAY.pm,v 1.23 2012/05/30 21:22:57 rhandom Exp $
#
#  Copyright (C) 2010-2012
#
#    Paul Seamons
#    [email protected]
#    http://seamons.com/
#
#  This package may be distributed under the terms of either the
#  GNU General Public License
#    or the
#  Perl Artistic License
#
#  All rights reserved.
#
################################################################

package Net::Server::Proto::SSLEAY;

use strict;
use warnings;
use IO::Socket::INET;
use Fcntl ();
use Errno ();
use Socket ();

BEGIN {
    eval { require Net::SSLeay; 1 }
        or warn "Module Net::SSLeay is required for SSLeay.";
    for my $sub (qw(load_error_strings SSLeay_add_ssl_algorithms ENGINE_load_builtin_engines ENGINE_register_all_complete randomize)) {
        Net::SSLeay->can($sub)->();
    }
}

our @ISA = qw(IO::Socket::INET);
our $AUTOLOAD;

利用中の Net::SSLeay が 1.30 だったので 1.49 へアップグレードしてみたところ、無事 Starman のインストールが完了した。

[[email protected] ~]# cpanm Net::SSLeay
--> Working on Net::SSLeay
Fetching http://search.cpan.org/CPAN/authors/id/M/MI/MIKEM/Net-SSLeay-1.49.tar.gz ... OK
Configuring Net-SSLeay-1.49 ... OK
Building and testing Net-SSLeay-1.49 ... OK
Successfully installed Net-SSLeay-1.49 (upgraded from 1.30)
1 distribution installed

cpanm のおかげでモジュールのインストールは大分楽になったが、トラブルシューティングで少し長くなってしまった。続きはまた次回。

スポンサーリンク

シェアする

フォローする

スポンサーリンク