Strawberry Perl+Proxy接続環境でCPANモジュールをインストールする
Strawberry Perl+Proxy接続環境でCPANモジュールをインストールする方法について紹介します。
1.問題点
Strawberry PerlでCPANモジュールを追加するには、スタートメニューから「Strawberry Perl」→「tools」→「CPAN Client」を起動します。
そのあと、
install モジュール名
を実行すれば簡単にインストールできます。
が、企業で利用しているサーバは、外部にアクセスする際にプロキシサーバを経由することになっているため、正常にインストールすることができません。
ネットでは「そういうときはcpanにプロキシサーバのURLとポートを設定」という記事をみかけますが、proxy.pacという自動プロキシ設定ファイルを利用しているケースもあり、その中からプロキシサーバを導き出すのは非常に面倒ですし、うまくいかない可能性もあります。
ということで、ここではそういった環境でもCPANモジュールを追加できる方法を紹介します。
端的にいうと、CPANモジュールは手動でダウンロードして、それをWindows上でmakeします。
2.CPANモジュールのダウンロード
インストールしたいCPANモジュールをダウンロードします。ここではDBI.pmを例にします。
DBIの場合、「DBI - search.cpan.org」にあるDBI-1.630.tar.gzをクリック(バージョンは2014年1月現在)。
3.アーカイブの展開
ダウンロードしたアーカイブを展開します。
ここではCドライブ直下に「DBI-1.630」というフォルダを展開し、フォルダ直下にMakefile.PLというファイルがある前提で話を進めます。
4.Makefileの作成
コマンドプロンプトを起動して展開したフォルダに移動し、Makefileを作成します。
C:\>cd C:\DBI-1.630
C:\DBI-1.630>perl Makefile.PL
実行結果は次の通りです。
C:\DBI-1.630>perl Makefile.PL
Your perl was compiled with gcc (version 4.7.3), okay.
Creating test wrappers for DBD::Gofer:
t/zvg_01basics.t
t/zvg_02dbidrv.t
t/zvg_03handle.t
(中略)
t/zvxgnp_85gofer.t
I see you're using perl 5.018001 on MSWin32-x86-multi-thread-64int, 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.
Windows users need to use the correct make command.
That may be nmake or dmake depending on which Perl you are using.
If using the Win32 ActiveState build then it is recommended that you
use the ppm utility to fetch and install a prebuilt DBI instead.
Writing Makefile for DBI
Writing MYMETA.yml and MYMETA.json
5.ビルド
Makefileができればあとはビルドを行います。
ここではStrawberry Perlに同梱されているdmakeを利用します。
最初にコンパイルを実施します。
C:\DBI-1.630>dmake
実行結果は次の通りです。
C:\DBI-1.630>dmake
C:\strawberry\perl\bin\perl.exe -MExtUtils::Command -e mkpath -- blib\lib\DBI
C:\strawberry\perl\bin\perl.exe -MExtUtils::Command -e rm_f -- blib\lib\DBI\Changes.pm
C:\strawberry\perl\bin\perl.exe -MExtUtils::Command -e cp -- Changes blib\lib\DBI\Changes.pm
cp lib/DBD/File/Roadmap.pod blib\lib\DBD\File\Roadmap.pod
cp lib/DBD/Gofer/Policy/classic.pm blib\lib\DBD\Gofer\Policy\classic.pm
cp lib/DBD/File/HowTo.pod blib\lib\DBD\File\HowTo.pod
(中略)
g++ -o blib\arch\auto\DBI\DBI.dll -Wl,--base-file -Wl,dll.base -mdll -s -L"C:\strawberry\perl\lib\CO
RE" -L"C:\strawberry\c\lib" DBI.o C:\strawberry\perl\lib\CORE\libperl518.a -lmoldname -lkernel32 -
luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -lnetapi32 -luuid -lws
2_32 -lmpr -lwinmm -lversion -lodbc32 -lodbccp32 -lcomctl32 dll.exp
dlltool --def DBI.def --base-file dll.base --output-exp dll.exp
g++ -o blib\arch\auto\DBI\DBI.dll -mdll -s -L"C:\strawberry\perl\lib\CORE" -L"C:\strawberry\c\lib" D
BI.o C:\strawberry\perl\lib\CORE\libperl518.a -lmoldname -lkernel32 -luser32 -lgdi32 -lwinspool -l
comdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -lnetapi32 -luuid -lws2_32 -lmpr -lwinmm -lversion
-lodbc32 -lodbccp32 -lcomctl32 dll.exp
C:\strawberry\perl\bin\perl.exe -MExtUtils::Command -e chmod -- 755 blib\arch\auto\DBI\DBI.dll
C:\strawberry\perl\bin\perl.exe "-Iblib\arch" "-Iblib\lib" dbilogstrip.PL dbilogstrip
Extracted dbilogstrip from dbilogstrip.PL with variable substitutions.
C:\strawberry\perl\bin\perl.exe -MExtUtils::Command -e cp -- dbilogstrip blib\script\dbilogstrip
pl2bat.bat blib\script\dbilogstrip
C:\strawberry\perl\bin\perl.exe "-Iblib\arch" "-Iblib\lib" dbiprof.PL dbiprof
Extracted dbiprof from dbiprof.PL with variable substitutions.
C:\strawberry\perl\bin\perl.exe -MExtUtils::Command -e cp -- dbiprof blib\script\dbiprof
pl2bat.bat blib\script\dbiprof
C:\strawberry\perl\bin\perl.exe "-Iblib\arch" "-Iblib\lib" dbiproxy.PL dbiproxy
Extracted dbiproxy from dbiproxy.PL with variable substitutions.
C:\strawberry\perl\bin\perl.exe -MExtUtils::Command -e cp -- dbiproxy blib\script\dbiproxy
pl2bat.bat blib\script\dbiproxy
続いて、コンパイルしてできたものが正しく動作するか検証するためのコマンドを実行します。
C:\DBI-1.630>dmake test
実行結果は次の通りです。
C:\DBI-1.630>dmake test
C:\strawberry\perl\bin\perl.exe "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harne
ss::Switches; test_harness(0, 'blib\lib', 'blib\arch')" t/*.t
t/01basics.t .................... ok
t/02dbidrv.t .................... ok
t/03handle.t .................... ok
(中略)
t/zvxnp_51dbm_file.t ............ ok
t/zvxnp_52dbm_complex.t ......... skipped: DBI::SQL::Nano is being used
t/zvxnp_85gofer.t ............... ok
All tests successful.
Files=182, Tests=7465, 93 wallclock secs ( 2.09 usr + 1.09 sys = 3.18 CPU)
Result: PASS
C:\strawberry\perl\bin\perl.exe "-Iblib\lib" "-Iblib\arch" test.pl
test.pl
DBI test application $Revision$
Switch: DBI 1.63 by Tim Bunce, 1.63
Available Drivers: ADO, DBM, ExampleP, File, Gofer, ODBC, Pg, Proxy, SQLite, Sponge, mysql
dbi:ExampleP:: testing 3 sets of 20 connections:
Connecting... 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Disconnecting...
Connecting... 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Disconnecting...
Connecting... 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Disconnecting...
connect 20 and disconnect them, 3 times: 0.0080s / 60 = 0.0001s
Testing handle creation speed...
35650 NullP sth/s perl 5.018002 MSWin32-x86-multi-thread-64int (gcc 4.7.3 -s -O2) 0.000028s
test.pl done
最後にインストールを実行します。
C:\DBI-1.630>dmake install
実行結果は次の通りです。
C:\DBI-1.630>dmake install
Files found in blib\arch: installing files in blib\lib into architecture depende
nt library tree
Installing C:\strawberry\perl\site\lib\auto\DBI\dbd_xsh.h
Installing C:\strawberry\perl\site\lib\auto\DBI\DBI.bs
Installing C:\strawberry\perl\site\lib\auto\DBI\DBI.dll
Installing C:\strawberry\perl\site\lib\auto\DBI\dbipport.h
Installing C:\strawberry\perl\site\lib\auto\DBI\dbivport.h
Installing C:\strawberry\perl\site\lib\auto\DBI\DBIXS.h
Installing C:\strawberry\perl\site\lib\auto\DBI\dbixs_rev.h
Installing C:\strawberry\perl\site\lib\auto\DBI\dbi_sql.h
Installing C:\strawberry\perl\site\lib\auto\DBI\Driver.xst
Installing C:\strawberry\perl\site\lib\auto\DBI\Driver_xst.h
Installing C:\strawberry\perl\site\lib\DBI.pm
(中略)
Installing C:\strawberry\perl\site\bin\dbiproxy
Installing C:\strawberry\perl\site\bin\dbiproxy.bat
Appending installation info to C:\strawberry\perl\lib/perllocal.pod
dmake: Warning: -- Target [install] was made but the time stamp has not been up
dated.
これでC:\strawberry\perl\site\libにDBI.pmおよび関連モジュールがインストールされます。
6.参考サイト
参考サイトは以下です。ありがとうございました。
- Perlでansibleライブラリを作成する方法
- perlのCPANモジュールからRPMを作成する方法
- Perlで「Subroutine permission redefined at~」を抑止する方法
- XML::Simpleのインストールでエラーになる場合の対処
- YAML::Tinyで「YAML::Tiny found bad indenting in line~」というエラーになる場合の対処
- Perlの正規表現を使って文字列をまとめて取得する方法
- Perlのハッシュでキーの有無を調べる方法
- perlで配列の途中の要素を削除する方法
- YAML::Tinyでコロンを利用する方法
- Perlで改行コードがCRのファイルを読み込む方法
- Perlで「Possible precedence issue with control flow operator」という警告の対処
- PerlのLWPで「Can't verify SSL peers without knowing which Certificate Authorities to trust」というエラーになったときの対処
- Perl+Windowsでファイルを再帰的にリネームする方法
- Perlプログラムの中でファイルの一部を書き換える方法
- Perlの「Bareword "%s" not allowed while "strict subs" in use~」というエラーについて