FC2ブログ

Perl環境でまたハマった件

   プログラミング [2019/12/04]
「VS2017-はじめの1/10歩・・・」でタブレット向けのアプリをWin32SDKベースのレガシーなテクでこさえた後、そのプログラムの通信先サーバプログラムの開発環境を仕立てる話をこのブログに書いてきていたのですが、その続きです。

ちょっと間が空いてしまいました。

要約するとActivePerl環境にCrypt関連のパッケージをオフラインで組み込む際に四苦八苦した話です。
※「オフラインで」と書きましたが、単にプロキシ越えの環境設定をやれなかっただけです。ですが、一度集めたダウンロードファイル群を使うと、例えば別のサーバを同一Perl環境にしたい場合、本当にオフラインでインストールできるはずです。(だから何。そんなシチュエーションある?)

Eclipseの環境でやっとこさ動作するものができたので、本番環境(Oracle+Apache)での動作確認しようと準備に取り掛かりました。予想はしてたのですが、再度ハマりました。試行錯誤の結果をそのまま記録しています。真面目に読んだら疲れます。それに正しい方法が何なのか分かりにくいので、たぶん参考にはならないと思います。
自分用の備忘録です。


◆初動:作った.plを動かしてみる
「Apacheは動くし、Oracleも入って、DBの中身は入ってる。ActivePerlもインストールしてあります。」という、ありがたーい環境がありました。
Apatch2.2とPerl64が入っていました。perlは動かせるようです。

暗号化のライブラリを使っている.plを動かしてみました。
予想通り、エラーです。
ここまでは、Eclipse環境で作っているときもそうだったので想定の範囲内。


ブラウザ上では以下のエラー。
--------------------------------------------------------
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, aaa@com and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
--------------------------------------------------------


さあ、ここからの右往左往・・・

まずは、Apacheのエラーログを見てみます。」
--------------------------------------------------------
[Mon Apr 15 10:14:50 2019] [error] [client 127.0.0.1] Premature end of script headers: xxxxx.pl
[Mon Apr 15 10:14:50 2019] [error] [client 127.0.0.1] Can't locate Crypt/ECB.pm in @INC (you may need to install the Crypt::ECB module) (@INC contains: C:/Perl64/site/lib C:/Perl64/lib .) at C:/Program Files (x86)/Apache Software Foundation/Apache2.2/cgi-bin/pltrans/xxxxx.pl line 15.
[Mon Apr 15 10:14:50 2019] [error] [client 127.0.0.1] BEGIN failed--compilation aborted at C:/Program Files (x86)/Apache Software Foundation/Apache2.2/cgi-bin/pltrans/xxxxx.pl line 15.
--------------------------------------------------------

やっぱり、パッケージが入ってないというエラー。

コマンドプロンプトを開いて、Perl64/binにカレントを移動して、cpanを実行してみる。
--------------------------------------------------------
C:\Perl64\bin>cpan Crypt::ECB

It looks like you don't have a C compiler and make utility installed. Trying
to install dmake and the MinGW gcc compiler using the Perl Package Manager.
This may take a a few minutes...

ppm.bat install failed: Can't find any package that provides MinGW

It looks like the installation of dmake and MinGW has failed. You will not
be able to run Makefile commands or compile C extension code. Please check
your internet connection and your proxy settings!

Loading internal null logger. Install Log::Log4perl for logging messages
:
--------------------------------------------------------

MinGWなるもの(GNUのコンパイラのWindows版のミニセット)をインストールしようとして失敗したらしい記述。
プロキシのセッティングを見直せとある。

「そもそも、MinGWはどうやってインストールするものだっけ?」

前回(Eclipse環境構築時)は、プロキシなんて意識してない環境だった。
なので、前のメモはあまり参考にならんかな・・・・

ちゃんとしたプロキシ環境なので、何の知識のないさるには手のだせないもの。
んー、困ったな。


◆MinGWをインストール(でも駄目だったので読み飛ばしてね)
以下を参考にした。
https://osdn.net/projects/mingw/releases/
ページ上に以下の記述の左側にボタンがあるので、それをクリック
「mingw-get-setup.exe(Date: 2017-09-06, Size: 91.00 KB)」
ダウンロードされるので、それを実行する。
インストール先はデフォルトで「C:\MinGW」。

[Continue]ボタンを押すとインストールが開始したらしい。
ただし、しばらくすつとエラーが出まくる。
--------------------------------------------------------
mingw-get: *** WARNING *** http://osdn.net/dl/mingw/mingw-get-0.6.3-mingw32-pre-20170905-1-bin.tar.xz: opened with unexpected status: code = 407
mingw-get: *** WARNING *** please report this to the mingw-get maintainer
mingw-get: *** ERROR *** Get package: http://osdn.net/dl/mingw/mingw-get-0.6.3-mingw32-pre-20170905-1-bin.tar.xz: download failed


mingw-get: *** ERROR *** unpack: required archive file is not available
mingw-get: *** ERROR *** unpack: aborted due to previous download failure
mingw-get: *** INFO *** setup: unpacking mingw-get-0.6.3-mingw32-pre-20170905-1-gui.tar.xz
mingw-get: *** ERROR *** unpack: required archive file is not available
mingw-get: *** ERROR *** unpack: aborted due to previous download failure
mingw-get: *** INFO *** setup: unpacking mingw-get-0.6.3-mingw32-pre-20170905-1-lic.tar.xz
mingw-get: *** ERROR *** unpack: required archive file is not available
mingw-get: *** ERROR *** unpack: aborted due to previous download failure
mingw-get: *** INFO *** setup: unpacking mingw-get-setup-0.6.3-mingw32-pre-20170905-1-dll.tar.xz
mingw-get: *** ERROR *** unpack: required archive file is not available
mingw-get: *** ERROR *** unpack: aborted due to previous download failure
mingw-get: *** INFO *** setup: unpacking mingw-get-setup-0.6.3-mingw32-pre-20170905-1-xml.tar.xz
mingw-get: *** ERROR *** unpack: required archive file is not available
mingw-get: *** ERROR *** unpack: aborted due to previous download failure
mingw-get: *** ERROR *** setup: unable to continue
--------------------------------------------------------

続行できないと最後に出てるので、止まってるのかな?
[Quit]ボタンを押すと、何やら入ってないとメッセージが出てインストーラーは閉じた。
ダウンロードフォルダに残っている「mingw-get-setup.exe」を再度実行してみるが、同じ結果。

「tar.xz: opened with unexpected status: code = 407」とかでぐぐると、どうもやっぱりプロキシ認証で失敗している模様。

改めてCPANについて調べてみる。
以下のサイトでCPANプロキシの設定について解説されていた。
https://tutorial.perlzemi.com/blog/20100504127089.html

説明に従い、以下のようにコマンドを実行。
--------------------------------------------------------
C:\Perl64\bin>cpan
:
cpan>o conf
:
cpan>o conf http_proxy http://プロキシサーバー

cpan>o conf ftp_proxy http://プロキシサーバー

cpan>o conf commit
Your C:\Perl64\lib/CPAN/Config.pm file
is not writable. I will attempt to write your configuration to
C:\Users\uluser\AppData\Local\.cpan\CPAN\MyConfig.pm instead.

commit: wrote 'C:\Users\uluser\AppData\Local\.cpan\CPAN\MyConfig.pm'

cpan>
--------------------------------------------------------

何か怪しげなメッセージも出たが、最終的には「wrote」なので、たぶんいいんだろう。

さらに先のサイトの解説によると「urllistの先頭がftpだと・・・・」とある。urllistって何?
同じく「o conf」の仲間だそうです。なので、以下で内容を確認します。
--------------------------------------------------------
cpan> o conf urllist
urllist
0 [http://ppm.activestate.com/CPAN]
1 [http://cpan.perl.org]
Type 'o conf' to view all configuration items
--------------------------------------------------------

FTPは確かにプロキシが通してくれなさそうなのですが、上記でftp:が含まれていないので大丈夫そう。

ちなみに、urllistへのサーバの追加/削除は、以下だそうです。
--------------------------------------------------------
cpan> o conf urllist pop 削除したい url名
cpan> o conf urllist push 追加したい url名
--------------------------------------------------------


再度、「cpan Crypt::ECB」とやってみたが、やはりMinGWねーよというメッセージが出る。
以下のサイトでは、cpan.bat内でパスを追加するようにとあったのでやってみた。
https://hail2u.net/blog/software/install-cpan-on-activeperl.html

---cpan.bat-----------------------------------------------
@rem = '--*-Perl-*--
@echo off
set PATH=%PATH%;C:\Perl64\site\bin; ←この行を追加
if "%OS%" == "Windows_NT" goto WinNT
perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
goto endofperl
:WinNT

--------------------------------------------------------

変化なし。

以下のサイトで「Perl Package Manager」からインストールするように書かれてある。
https://teratail.com/questions/41259
そういえば、前の開発環境(Eclipse)にActivePerlをインストールしたときにも、GUIのppmで何かインストールした気がする。
もう詳細は覚えてない。

でも、スタートメニューから「Perl Package Manager」起動してみたが、リストに「MinGW64」とは出てこない。
ウィンドウの下の「Status」欄を見ると以下メッセージが出ている。
--------------------------------------------------------
Synchronizing Database ...
Downloading ActiveState Package Repository packlist ... failed 500 Can't connect to ppm4.activestate.com:80
Synchronizing Database done
--------------------------------------------------------


以下サイトによると、Windowsのファイアーウォールのせいだそうです。
https://teratail.com/questions/37781
http://garapon.hatenablog.com/entry/20070811/1186857841
ファイアーウォールでフィルタの対象からwperl.exeを除外してみた。

「Perl Package Manager」を再起動してみたところ、「Status」欄内の上記のエラーは出なくなった。
ただし、相変わらず「MinGW64」は出てこない。

以下のサイトから直接ダウンロードしてみた。
https://code.activestate.com/ppm/MinGW/

ダウンロードした.ppmxをインストールするために「MinGW-4.6.3.ppmx」を「C:\Perl64\bin」直下にコピーして、コマンドプロンプトでppm-shellを起動してみた。
--------------------------------------------------------
C:\Perl64\bin>ppm-shell
ppm 4.20 (ActivePerl 2200)
Copyright (C) 2013 ActiveState Software Inc. All rights reserved.

ppm> install MinGW-4.6.3.ppmx
ppm install failed: Can't find any package that provides dmake for MinGW
--------------------------------------------------------

今度は、dmakeが足りないそうだ。


◆dmakeのインストール(はぁ、結局徒労)
dmakeをダウンロードできるサイトを探すと、さっきMinGWをダウンロードしてきたサイトからダウンロードできそう。
ただし、ActivePerl4.22用のdmakeがない。ちょっと違和感を感じつつ、4.20用のものをダウンロードしてみた。
「dmake-4.11.20080107.ppmx」を「C:\Perl64\bin」直下にコピーして
--------------------------------------------------------
ppm> install dmake-4.11.20080107.ppmx
ppm install failed: The PPD does not provide code to install for this platform
--------------------------------------------------------

PPDが・・・プラットフォームに合ってない?・・・つまり対象Perlのバージョンが違うと言っているんでしょう。
でPPDというファイルの中身を書き換えればいいようなことが書いてあるサイトをめっけたものの、
.ppmxからPPDファイルを取り出して書き換える方法なんてあるのか?

ppmのバージョンも一応確認。
--------------------------------------------------------
C:\Perl64\site\lib>ppm --version
ppm 4.20 (ActivePerl 2200)
Copyright (C) 2013 ActiveState Software Inc. All rights reserved.
--------------------------------------------------------


ppmのプロキシ設定でシステムのPATH設定が必要そうな記述があったのでやってみた。
「コントロールパネル」-「システム」-[詳細設定]-「環境変数」で出たダイアログで以下を追加してみた。
「http_proxy」-「プロキシサーバー」
やっぱり変化なし。

ppm-shellでプロキシの設定が入っているか見てみる。
--------------------------------------------------------
C:\Perl64>ppm-shell
ppm 4.20 (ActivePerl 2200)
Copyright (C) 2013 ActiveState Software Inc. All rights reserved.

ppm> ?
Unrecognized ppm command '?'; try one of area, config, describe, files,
gui, help, info, install, list, log, profile, query, remove, repo,
search, tree, uninstall, update, upgrade, verify, or version
Usage: ppm ...
Run 'ppm help' to learn more.

ppm> info
arch = MSWin32-x64-multi-thread-5.22
be_serial =
be_state = invalid
box_chars = dos
db_file = C:\Users\uluser\AppData\Local/ActiveState/ActivePerl/2200/ppm-MSWin32-
x64-multi-thread-5_22.db
etc = C:\Users\uluser\AppData\Local/ActiveState/ActivePerl/2200
http_proxy = http://xxx.xxx.co.jp/xxxxxy.pac
log_file = C:\Users\uluser\AppData\Local\Temp\ppm4.log
perl = ActivePerl-5.22.0.2200
perl_path = C:\Perl64\bin\perl.exe
perl_version = 5.022000
ppm_path = C:/Perl64/bin/ppm
ppm_version = 4.20

ppm> exit
--------------------------------------------------------

んー、入ってる。
行き詰る。


◆dmakeのプロキシを気にしないインストール(これは大丈夫)
再度、プロキシ経由をあきらめて、
ダウンロード&オフラインインストールできないか調べた結果、やり方が書いてあるサイトをめっけた。
(そこの環境内からは、警告が出てアクセスを禁止されていた・・・。ここで、1日目終了。)

①まずは、dmakeをダウンロード
https://code.activestate.com/ppm/dmake/

②「dmake-4.11.20080107.ppmx」の拡張子を「.ppm」から「.tar.gz」に変更して、7zで解凍する。gz→tarで2回解凍する必要がある。
※lhaplusとかは試してない。

③「dmake-4.11.20080107」フォルダ内に、「dmake-4.11.20080107.ppd」ファイルと「blib」フォルダが作成された。

④「dmake-4.11.20080107.ppd」をテキストエディタで開く。
 中身はこんな感じ。
--------------------------------------------------------
<SOFTPKG NAME="dmake" VERSION="4.11.20080107" DATE="2008-01-07">
<AUTHOR CPAN="SHAY">Steve Hay <shay@cpan.org></AUTHOR>
<ABSTRACT>Utility to manage software builds</ABSTRACT>
<IMPLEMENTATION>
<ARCHITECTURE NAME="MSWin32-x86-multi-thread-5.8"/>
<CODEBASE HREF="dmake-4.11.20080107.tar.gz"/>
</IMPLEMENTATION>
<IMPLEMENTATION>
<ARCHITECTURE NAME="MSWin32-x86-multi-thread-5.10"/>
<CODEBASE HREF="dmake-4.11.20080107.tar.gz"/>
</IMPLEMENTATION>>
<IMPLEMENTATION>
<ARCHITECTURE NAME="MSWin32-x86-multi-thread-5.12"/>
<CODEBASE HREF="dmake-4.11.20080107.tar.gz"/>
</IMPLEMENTATION>
<PROVIDE NAME="dmake" VERSION="4.11.20080107"/>
</SOFTPKG>
--------------------------------------------------------

 上記にインストール先のActivePerlバージョンが記述されてないから失敗するんだそうだ。

⑤インストール先のperlバージョン、ARCHITECTURE NAMEを調べる。
 コマンドプロンプトを開いて、以下を実行してみる。
--------------------------------------------------------
C:\Perl64>perl -v
This is perl 5, version 22, subversion 0 (v5.22.0) built for MSWin32-x64-multi-thread
(with 1 registered patch, see perl -V for more detail)

Copyright 1987-2015, Larry Wall

Binary build 2200 [299195] provided by ActiveState http://www.ActiveState.com
Built Jul 20 2015 10:50:36
--------------------------------------------------------


⑥上記出力のアンダーライン部分を使って「dmake-4.11.20080107.ppd」に以下を追加し、セーブする。
--------------------------------------------------------
<SOFTPKG NAME="dmake" VERSION="4.11.20080107" DATE="2008-01-07">
<AUTHOR CPAN="SHAY">Steve Hay <shay@cpan.org></AUTHO>
<ABSTRACT>Utility to manage software builds</ABSTRACT>
<IMPLEMENTATION>



</IMPLEMENTATION>
<IMPLEMENTATION>
<ARCHITECTURE NAME="MSWin32-x64-multi-thread-5.22"/>
<CODEBASE HREF="dmake-4.11.20080107.tar.gz"/>
</IMPLEMENTATION>
<PROVIDE NAME="dmake" VERSION="4.11.20080107"/>
</SOFTPKG>
--------------------------------------------------------


⑦7zで「dmake-4.11.20080107.ppd」ファイルと「blib」フォルダを選択して、.tarを作成し、さらにそのtarを選択して、.gzで圧縮する。
「.tar.gz」の拡張子を「.ppmx」に変更する。

⑧作成した「dmake-4.11.20080107.ppmx」を適当なフォルダに入れて(例えば、C:\Perl64\cpan)、以下のコマンドを実行する。
--------------------------------------------------------
C:\Perl64\cpan>ppm install dmake-4.11.20080107.ppmx
Unpacking dmake-4.11.20080107...done
Generating HTML for dmake-4.11.20080107...done
Updating files in site area...done
130 files installed
--------------------------------------------------------

⑨たぶん、「%ActivePerlフォルダ%\site\bin」の下にdmake.exeができてたらOK。

やっと進んだ。


◆MinGWのインストール
すでにMinGWはPPMサイトからダウンロードしてあったので、それを、dmake同様のやり方でインストールできます。
※C:\Perl64\offlineフォルダを作って、そこをカレントにして実行しました。
--------------------------------------------------------
C:\Perl64\cpan>cd ..\offline

C:\Perl64\offline>ppm install MinGW-4.6.3.ppmx
Unpacking MinGW-4.6.3...done
Generating HTML for MinGW-4.6.3...done
Updating files in site area...done
3567 files installed
--------------------------------------------------------

成功したんだよね・・・たぶん。

◆Crypt::ECBのインストール(プロキシをどうしても越えられないとき)
やっと振り出しに戻れた。
以下のコマンドを実行してみる。
--------------------------------------------------------
C:\Perl64\offline>cpan Crypt::ECB
Loading internal null logger. Install Log::Log4perl for logging messages
CPAN: Term::ANSIColor loaded ok (v4.03)
CPAN: Win32::Console::ANSI loaded ok (v1.08)
CPAN: Storable loaded ok (v2.53)
Reading 'C:\Perl64\cpan\Metadata'
Database was generated on Mon, 15 Apr 2019 08:29:03 GMT
Running install for module 'Crypt::ECB'
CPAN: LWP::UserAgent loaded ok (v6.13)
Proxy must be specified as absolute URI; 'http_proxy=http://xxxx.xxxx.xxxx./xxxxxy.pac' is not at C:\Perl64\lib/CPAN/FTP.pm line 349.

C:\Perl64\offline>cpan
Loading internal null logger. Install Log::Log4perl for logging messages

cpan shell -- CPAN exploration and modules installation (v2.11)
Enter 'h' for help.
--------------------------------------------------------

結局プロキシを越えられていない模様。

cpanのconfの設定をもう一度見てみる。

まとめると以下の設定でいいはず。
--------------------------------------------------------
cpan> o conf ftp_proxy http://<Proxyサーバ>:<Port番号>/
cpan> o conf http_proxy http://<Proxyサーバ>:<Port番号>/
cpan> o conf proxy_user <ユーザ名>
cpan> o conf proxy_pass <パスワード>
cpan> o conf commit
--------------------------------------------------------

ポートの設定は良くわからなかったで80にしてあったが・・・

そもそも作業しているところの環境は、「ちゃんとした環境」の中でやってるので、プロキシの設定も単にサーバを指定するのではなくスクリプトを使う設定になっている。
なのでポートもよくわからない。
試しに.pacとなっているスクリプトのURLをそのままブラウザのアドレス欄に入れてみたら、ファイルがダウンロードできた。
でも、何が書かれているのか意味は皆目分かるわけもなく。たまにポート指定らしく「:8080」とか「:8880」とか書かれているのを見たのみ。
ポート指定を8080にしてみたら・・・
--------------------------------------------------------
cpan> o conf http_proxy http://xxxx.xxxx.co.jp/xxxxxy.pac:8080
http_proxy [http://xxxx.xxxx.co.jp/xxxxxy.pac:8080]
Please use 'o conf commit' to make the config permanent!

cpan> o conf commit
commit: wrote 'C:\Users\uluser\AppData\Local\.cpan/CPAN/MyConfig.pm'

cpan> install Crypt::ECB
Running install for module 'Crypt::ECB'
Fetching with LWP:
http://ppm.activestate.com/CPAN/authors/id/A/AP/APPEL/Crypt-ECB-2.21.tar.gz
LWP failed with code[500] message[Can't connect to ppm.activestate.com:80]
Warning: no success downloading 'C:\Perl64\cpan\sources\authors\id\A\AP\APPEL\Cr
ypt-ECB-2.21.tar.gz.tmp796'. Giving up on it.
Fetching with LWP:
http://cpan.perl.org/authors/id/A/AP/APPEL/Crypt-ECB-2.21.tar.gz
LWP failed with code[500] message[Can't connect to cpan.perl.org:80]
Warning: no success downloading 'C:\Perl64\cpan\sources\authors\id\A\AP\APPEL\Cr
ypt-ECB-2.21.tar.gz.tmp796'. Giving up on it.
Fetching with LWP:



No external ftp command available
--------------------------------------------------------

大量にメッセージが出た。

プロキシ越えには成功していないが、
どうも「o conf urllist」で出てくるサーバを順繰りに試している模様。

いいことを考えました。
ppmでのインストール同様ダウンロード&オフラインもどきのインストールです。

そもそも、仕立てようとしている環境は、DBありWebサーバです。
なので、localhostにCPANサイト同様のダウンロードフォルダを作成してそこに.tar.gzを仕込んでおいて、cpanにアクセスさせれば、プロキシを経由しないでインストールできるんじゃね?

さっそくやってみました。

準備として、
①localhostサーバ(通常Apacheフォルダのhtdocs下)にCPANフォルダ相当を作成します。
※Program Files下にApache環境がある場合、コマンドプロンプトは「管理者として実行」が必要です。

②cpanのo conf urllistでサーバを表示させて、

③そのうち1つのサーバだけを残します。

④localhostのCPANフォルダをurllistに登録します。
--------------------------------------------------------
C:\Perl64\offline>mkdir "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\perllib"
C:\Perl64\offline>
cpan> o conf urllist
urllist
0 [http://ppm.activestate.com/CPAN]
1 [http://cpan.perl.org]
2 [http://ftp.nara.wide.ad.jp/pub/CPAN]
Type 'o conf' to view all configuration items

cpan> o conf urllist pop http://ftp.nara.wide.ad.jp/pub/CPAN
Please use 'o conf commit' to make the config permanent!

cpan> o conf urllist pop http://cpan.perl.org
Please use 'o conf commit' to make the config permanent!

cpan> o conf urllist push http://localhost/perllib/
Please use 'o conf commit' to make the config permanent!

cpan> o conf commit
commit: wrote 'C:\Users\uluser\AppData\Local\.cpan/CPAN/MyConfig.pm'

cpan> o conf urllist
urllist
0 [http://ppm.activestate.com/CPAN]
1 [http://localhost/perllib/]
Type 'o conf' to view all configuration items
--------------------------------------------------------


⑤install「cpan> install Xxxx::XXX」を実行してみます。

⑥エラー表示されている、正規のアクセス先からダウンロードしようとした「.tar.gz」のURLをコピーします。

⑦ブラウザのアドレス欄にURLをペーストして、[Enter]します。
 「.tar.gz」がダウンロードされます。

⑧ダウンロードした「.tar.gz」をlocalhostのCPANフォルダに移動します。

⑨もう一回installします。
 今度はlocalhost中に物があるので、インストールが先に進むはずです。
※Crypt::ECBのときは、「CHECKSUM」というファイルがもう一個必要で、それもウラウザを使ってダウンロードさせて仕込んだらうまくいきました。

長かった~

ここで、イッキに「use Xxxxx::XXX」しているパッケージをインストールしたいところでしたが、地道にエラーを確認しながら不足分をインストールしてみます。


◆Crypt::OpenSSL::AESのインストール
次に.plをブラウズさせてみたら、今度は「Crypt::OpenSSL::AES」がないと出ました。
はいその通りでしょう。
上記と同じやり方をしようと⑤をしましたが、メッセージの出方が違いました。

--------------------------------------------------------
cpan> install Crypt::OpenSSL::AES
Running install for module 'Crypt::OpenSSL::AES'
Catching error: "Proxy must be specified as absolute URI; 'http_proxy=xxxx.xxxx.co.jp/xxxxxy.pac'
is not at C:\\Perl64\\lib/CPAN/FTP.pm line 349.\cJ" at C:/Perl64/lib/CPAN.pm line 391.
CPAN::shell() called at C:/Perl64/lib/App/Cpan.pm line 395
App::Cpan::_process_options("App::Cpan") called at C:/Perl64/lib/App/Cpan.pm line 492
App::Cpan::run("App::Cpan") called at C:\Perl64\bin/cpan.bat line 25

cpan>
--------------------------------------------------------

外のサーバまで行かない? 途中のOpenSSLが無いから?

--------------------------------------------------------
cpan> install Crypt::OpenSSL
Warning: Cannot install Crypt::OpenSSL, don't know what it is.
Try the command

i /Crypt::OpenSSL/

to find objects with matching identifiers.

cpan> i /Crypt::OpenSSL/
Module < Crypt::OpenSSL::AES (TTAR/Crypt-OpenSSL-AES-0.02.tar.gz)
Module < Crypt::OpenSSL::Bignum (KMX/Crypt-OpenSSL-Bignum-0.09.tar.gz)


Module < Crypt::OpenSSL::Guess (AKIYM/Crypt-OpenSSL-Guess-0.11.tar.gz)
Module < Crypt::OpenSSL::PBKDF2 (SKUPSY/OpenSSL/Crypt-OpenSSL-PBKDF2-0.04.tar.gz)
Module < Crypt::OpenSSL::PKCS10 (JONOZZZ/Crypt-OpenSSL-PKCS10-0.16.tar.gz)
Module < Crypt::OpenSSL::PKCS12 (JONASBN/Crypt-OpenSSL-PKCS12-1.2.tar.gz)


33 items found

cpan> i /Crypt::OpenSSL::AES/
Module id = Crypt::OpenSSL::AES
CPAN_USERID TTAR (Tolga Tarhan )
CPAN_VERSION 0.02
CPAN_FILE T/TT/TTAR/Crypt-OpenSSL-AES-0.02.tar.gz
INST_FILE (not installed)

cpan> i /Crypt::ECB/
Module id = Crypt::ECB
CPAN_USERID APPEL (Christoph Appel )
CPAN_VERSION 2.21
CPAN_FILE A/AP/APPEL/Crypt-ECB-2.21.tar.gz
UPLOAD_DATE 2016-09-26
MANPAGE Crypt::ECB - Use block ciphers using ECB mode
INST_FILE C:\Perl64\site\lib\Crypt\ECB.pm
INST_VERSION 2.21

cpan>
--------------------------------------------------------

「install Crypt::OpenSSL」には、そんなの知らん!と返してきてます。
でも、インストール状態を見るコマンド「i /Crypt::OpenSSL/」では、「Crypt::OpenSSL::Xxx」というパッケージ(Module)が表示されます。
「i」コマンドで、インストール済みの「Crypt::ECB」と表示の仕方を比較してみました。
「Crypt::OpenSSL::AES」は確かに未インストールの状態です。パッケージの入手元は、「T/TT/TTAR/Crypt-OpenSSL-AES-0.02.tar.gz」だと記されてます。

cpanのローカルサーバインストールで可能なのかもしれません。
でも、ここでふとEclipse環境のインストール時にはppmを使ったような、そうで無かったような。
いまだに、ppmとcpanがどういう区分けでされてるのか分からない。

ppmのサイトで探したら、「Crypt-OpenSSL-AES-0.02.ppmx」が入手できました。
cpanのミラーサイトでも「http://ppm.activestate.com/CPAN/authors/id/T/TT/TTAR/Crypt-OpenSSL-AES-0.02.tar.gz」とやったらダウンロードできました。
どっちなんでしょう。

ただ、cpanの「install」コマンドの失敗時のメッセージの出方が微妙に違っていて、最初のMinGWが入ってないときのような感じなので、先にppmを使ってみます。

--------------------------------------------------------
C:\Perl64>cd offline

C:\Perl64\offline>ppm install Crypt-OpenSSL-AES-0.02.ppmx
Syncing site PPM database with .packlists...done
Unpacking Crypt-OpenSSL-AES-0.02...done
Generating HTML for Crypt-OpenSSL-AES-0.02...done
Updating files in site area...done
3 files installed

C:\Perl64\offline>
--------------------------------------------------------

うまく行ったみたいです。

cpanの「i」コマンドでも確認してみました。
--------------------------------------------------------
C:\Perl64\offline>cpan
Loading internal null logger. Install Log::Log4perl for logging messages

cpan shell -- CPAN exploration and modules installation (v2.11)
Enter 'h' for help.

cpan> i /Crypt::OpenSSL::AES/
Reading 'C:\Perl64\cpan\Metadata'
Database was generated on Mon, 15 Apr 2019 08:29:03 GMT
Module id = Crypt::OpenSSL::AES
CPAN_USERID TTAR (Tolga Tarhan )
CPAN_VERSION 0.02
CPAN_FILE T/TT/TTAR/Crypt-OpenSSL-AES-0.02.tar.gz
MANPAGE Crypt::OpenSSL::AES - A Perl wrapper around OpenSSL's AES library
INST_FILE C:\Perl64\site\lib\Crypt\OpenSSL\AES.pm
INST_VERSION 0.02

cpan>
--------------------------------------------------------

いいんですねこれでも。


◆Crypt::PBKDF2のインストール
「cpan> install Crypt::PBKDF2」とやったら、AESのときと同じ感じのメッセージだったので、再度ppmを使用。
「Crypt-PBKDF2-0.160410.ppmx」というファイルがダウンロードできました。
「ppm install Crypt-PBKDF2-0.160410.ppmx」とやってみましたが、今度はほかの足りんものがたくさん出ました。

--------------------------------------------------------
C:\Perl64\offline>ppm install Crypt-PBKDF2-0.160410.ppmx
Syncing perl PPM database with .packlists...done
ppm install failed: Can't find any package that provides Moo:: for Crypt-PBKDF2
Can't find any package that provides namespace::autoclean for Crypt-PBKDF2
Can't find any package that provides Types::Standard for Crypt-PBKDF2
Can't find any package that provides Digest::SHA3 for Crypt-PBKDF2
Can't find any package that provides Moo::Role for Crypt-PBKDF2
Can't find any package that provides Type::Tiny for Crypt-PBKDF2
Can't find any package that provides strictures:: for Crypt-PBKDF2

C:\Perl64\offline>
--------------------------------------------------------


そういえば、Eclipse環境のときも「Moo」が無いって出てたのを思い出した。
たしか、「Moo」モーちゃんをインストールしたときに、物凄いインストールが動いてたような気がする。

ダウンロードして「ppm install Moo-2.003002.ppmx」とやったら
--------------------------------------------------------
C:\Perl64\offline>ppm install Moo-2.003002.ppmx
ppm install failed: Can't find any package that provides Devel::GlobalDestructio
n version 0.11 for Moo
Can't find any package that provides Sub::Quote for Moo
Can't find any package that provides Role::Tiny for Moo
Can't find any package that provides Class::Method::Modifiers for Moo
Can't find any package that provides Sub::Defer for Moo

C:\Perl64\offline>
--------------------------------------------------------

やっぱりかー。
エンドレスかー?
「全部入り」無いのかよ!!

①モーちゃん以降の不足分を一旦ppmサイト「https://code.activestate.com/ppm/」から探す。
 サイトの右上にSearch欄があるので、「Sub::Quote」とか入れると、候補をリスト表示してくれる。
 そこからピッタリな感じのものを選んでダウンロードする。

②ダウンロードppmxをC:\Perl64\offlineにコピーする。

③「ppm install xxxxx.ppmx」を実行。

※以下のリストの「+」がppmでインストールしたものです。


それでも、ppmサイトでピッタリするものが発見できない/わからないものがあった場合、
そっちは以降の手順。

①「cpan」コマンド→「i Xxxx::Xxxxx」とかやって表示されるメッセージからCPAN以下のパスを推測。
 「T/TT/TTAR/Crypt-OpenSSL-AES-0.02.tar.gz」と出た場合は、
 「http://ミラーサイト/CPAN/authors/id/T/TT/TTAR/」をブラウザで表示。
 ※「i」コマンドの名前の前後を/で挟むのは、LIKEの意味。名前が曖昧なときに使うといいみたい。

②「i」コマンドで表示された.tar.gzファイルをクリックしてダウンロードする。

③同じフォルダに「CHECKSUMS」というファイルもあるのでそれもダウンロードする。
 -「CHECKSUMS」を右クリックして「名前を付けてリンク先を保存」でローカルフォルダに保存する。
 -たぶん、CHECKSUM.txtとかになってしまうので、「.txt」をとる(リネーム)

④localhost上に作ったCPANフォルダ(ここの説明の例ではperllib)下に「authors/id」以降のパスを作成する。
 例えば、「authors\id」までは前の作業で既にあるので、「\T\TT\TTAR\」を作成。

⑤作成したパス(フォルダ)に.tar.gzファイルとCHECKSUMファイルをコピーする。

⑥「cpan> install Xxxx::Xxxxx」を実行。

⑦まだ足りないものがあると再度エラーが表示されるので、再度①からの手順で不足分を追加。

以下のリストの「-」がcpanローカルサーバからインストールさせたもの。

--------------------------------------------------------
Crypt::PBKDF2 →Crypt-PBKDF2-0.160410.ppmx
 +Moo →Moo-2.003002.ppmx
  +Sub::Quote →Sub-Quote-2.004000.ppmx
  +Role::Tiny →Role-Tiny-2.000005.ppmx
  +Class::Method::Modifiers →Class-Method-Modifiers-2.12.ppmx
  +Sub::Defer →Sub-Deferrable-0.05.ppmx
   +Devel::GlobalDestruction →Devel-GlobalDestruction-0.14.ppmx
 +namespace::autoclean →namespace-autoclean-0.28.ppmx
 -Types::Standard  →T/TO/TOBYINK/Type-Tiny-1.004004.tar.gz
 +Digest::SHA3 →Digest-SHA3-0.25.ppmx
 -Moo::Role →H/HA/HAARG/Moo-2.003004.tar.gz
  -Test::Fatal →R/RJ/RJBS/Test-Fatal-0.014.tar.gz
 +Type::Tiny →Type-Tiny-1.002001.ppmx
 -strictures →H/HA/HAARG/strictures-2.000006.tar.gz
  -indirect →V/VP/VPIT/indirect-0.38.tar.gz
  -bareword::filehandles →I/IL/ILMARI/bareword-filehandles-0.006.tar.gz
  -B::Hooks::OP::Check →E/ET/ETHER/B-Hooks-OP-Check-0.22.tar.gz
  -multidimensional →I/IL/ILMARI/multidimensional-0.014.tar.gz
  -ExtUtils::Depends →X/XA/XAOC/ExtUtils-Depends-0.8000.tar.gz
--------------------------------------------------------

上記リストは、やりながら「不足」と判明した順番に記述しているので、
本来、階層の深いところ(下)からインストールしてしまえば、無駄なお試しをしなくていいはずです。

最後に「ppm install Crypt-PBKDF2-0.160410.ppmx」を再実行。
うまく行きました。

最初にやったブラウザからの.pl起動をやってみたら、エラーは相変わらず出た。
でも、apacheのエラーログでは、.plに制御を渡した後のエラーになっている。
.plで出してたローカルなエラーログも吐き出されてて、「パラメタ指定がないよ」と記録されていた。
想定の動きです。(^o^)/(ここまでで2日掛かった。)

だらだら長々と書いちゃいました。(作業していたときのメモのまま)

では、この話はこの辺で。
m(__)m

スポンサーサイト





コメントの投稿

非公開コメント

No title

strawberryperlだとdmakeなど一式含まれていますよ

Re: No title

> strawberryperlだとdmakeなど一式含まれていますよ
それらしい記事は読みました。選べればよかったんだけど、「前提」がActivePerlだったもんで仕方なく。
カレンダー
01 | 2024/02 | 03
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 - -
プロフィール

さるもすなる

Author:さるもすなる
さるです。別HPサイト「さるもすなる」から侵食してきました。 山菜/きのこ、それとタイトルにしたPPバンド籠のことをメインに徒然に・・・・暇を持て余したさるの手仕事:男手芸のブログってことで。

最新記事
最新コメント
月別アーカイブ
カテゴリ
天気予報

-天気予報コム- -FC2-
本家のHPのトップ
山菜や茸の話です
PPバンドの籠作品と作り方です
投稿をお待ちしております



PVアクセスランキング にほんブログ村 にほんブログ村 ハンドメイドブログへ



マニュアルのお申し込み



検索フォーム
リンク
RSSリンクの表示
ブロとも申請フォーム

この人とブロともになる

QRコード
QR