以前、俺が Perl で書いた API プログラムについて「別サーバに移したら DBI モジュールが無くて動かないみたいなのでヨロシク」・・・という指示がお客さんからあったので対応。
CentOS サーバなのだが、
# perl
use DBI;
Can't locate DBI.pm in @INC (@INC contains: /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 <略> .) at - line 1.
BEGIN failed--compilation aborted at - line 1.
確かに DBI モジュールがインストールされていないようなので入れる。
このサーバ、ローカルネットワークの外には出れないようになっているので、インターネットに接続できる Windows PC でダウンロードしたファイルをサーバに SFTP アップして作業をする。
取ってくるファイルは、最新のアーカイブ。
CPAN サイト
から、DBI-1.636.tar.gz をダウンロードし、サーバに上げて以下作業を行った。
# tar xvfz DBI-1.636.tar.gz
DBI-1.636/
DBI-1.636/Changes
DBI-1.636/dbd_xsh.h
DBI-1.636/DBI.pm
<略>
DBI-1.636/ex/corogofer.pl
DBI-1.636/ex/perl_dbi_nulls_test.pl
DBI-1.636/ex/profile.pl
# cd DBI-1.636
# perl Makefile.PL
*** Your LANG environment variable is set to 'ja_JP.UTF-8'
*** This may cause problems for some perl installations.
*** If you get test failures, please try again with LANG unset.
*** If that then works, please email dbi-dev@perl.org with details
*** including the output of 'perl -V'
Your perl was compiled with gcc (version 4.1.2 20080704 (Red Hat 4.1.2-55)), okay.
Creating test wrappers for DBD::Gofer:
t/zvg_01basics.t
<略>
Checking if your kit is complete...
Looks good
Warning: prerequisite ExtUtils::MakeMaker 6.48 not found. We have 6.30.
Warning: prerequisite Test::Simple 0.90 not found. We have 0.62.
I see you're using perl 5.008008 on x86_64-linux-thread-multi, okay.
Remember to actually *read* the README file!
Use 'make' to build the software (dmake or nmake on Windows).
Then 'make test' to execute self tests.
Then 'make install' to install the DBI and then delete this working
directory before unpacking and building any DBD::* drivers.
Writing Makefile for DBI
ExtUtils::MakeMaker
Test::Simple
この2つのバージョンが古いって警告(Warning)が出てるけど、この2つを入れ直そうとすると依存関係すごそう(^^;
上に書いたように、依存関係のあるモジュールについても一個一個手動インストールするしかないんで、「ま、Warning なんで・・・」と、とりあえず無視してインストールしちゃう。
# make
<略>
Manifying blib/man3/DBI::DBD.3pm
Manifying blib/man3/Win32::DBIODBC.3pm
Manifying blib/man3/DBI::DBD::SqlEngine.3pm
Manifying blib/man3/DBI::PurePerl.3pm
Manifying blib/man3/DBI::ProfileData.3pm
特にエラーは出てない。問題なく make できたっぽいなあ。
まあ、make test は予想どおりボロボロですけど。
# make test
<略>
Failed Test Stat Wstat Total Fail Failed List of Failed
-------------------------------------------------------------------------------
t/06attrs.t 255 65280 ?? ?? % ??
t/08keeperr.t 255 65280 ?? ?? % ??
t/10examp.t 255 65280 238 476 200.00% 1-238
t/42prof_data.t 255 65280 31 58 187.10% 3-31
t/48dbi_dbd_sqlengine.t 255 65280 ?? ?? % ??
<略>
t/zvxnp_52dbm_complex.t 255 65280 ?? ?? % ??
t/zvxnp_85gofer.t 255 65280 ?? ?? % ??
32 tests and 225 subtests skipped.
Failed 74/194 test scripts, 61.86% okay. 1010/4579 subtests failed, 77.94% okay.
make: *** [test_dynamic] エラー 255
ずいぶんエラーが発生しているけど、
t/zvp_10examp.t 255 65280 238 476 200.00% 1-238
のように、全テスト件数が 238 なのに、faild になったエラーが 476件あって、エラー発生率 200%というおかしなものも混ざっているので、とりあえず無視。
インストールしてみる。
# make install
Installing /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto/DBI/DBIXS.h
Installing /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto/DBI/Driver.xst
Installing /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto/DBI/DBI.bs
<略>
Installing /usr/bin/dbiprof
Installing /usr/bin/dbilogstrip
Writing /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto/DBI/.packlist
Appending installation info to /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/perllocal.pod
まあ、インストールはファイルのコピーするだけだからイクわな。
# perl
use DBI;
とりあえず、エラーは出なくなった。
次は DBD::Pg モジュールのインストール。