FC2ブログ


Eclipse-Perl環境でハマった件

   プログラミング [2019/10/07]
「VS2017-はじめの・・・」で説明してきた、Winタブレット向けのアプリの相方(サーバ側)の試作をしていたときの話です。
なにはともあれ、perlが大嫌いになりました。

事の起こりは、DBサーバからデータを抜き出して、加工して戻すという単純なプログラムを作ることだった。
サーバーにはApacheが組み込まれているという話だったので、少し慣れてるPHPでサーバスクリプトを書いた。

ところが、そもそも本番サーバにPHPは組み込まれていないらしい。
そこでPHPの追加を依頼したが、PHPと古いApacheのバージョンで不整合があって動かなかったそうだ。
(事前に有効バージョンを確認しなかったんですね・・・・ ^^;)
暗号化系の処理を行うためには、PHPの新めのバージョン(5.5以降)が必要なのだが、
「もう勘弁してくだせぇ。Perlでお願いします。」とのこと。
「コードをPerlで書き直す作業と、Apache環境にPHPを追加するのとどっちが効率いいですか?」
後者ですよねー。
かなり納得いかないが、まあしゃあない。やってあげようじゃありませんか。

手元のパソコンにはEclipseをインストールしてあり(その環境でデモ用PHPスクリプトを作った。)、
確かPerlも使えたはずと思って、コーディングを始めた。

ほぼ、はじめてのPerlです。
かなり、なじめねー。

・どこぞのサイトの説明も分かる人にはわかりやすいのかもしれないが、虫食い状態でしか説明を読まないど素人には殆ど歯が立たない。
・公式リファレンスのperldoc.jpの日本語訳が参照できるが、まったく十分な印象は受けない。何をどう指定したらいいのか、何を指定したらだめなのか・・・結局、要領を掴めなかった。

まあ、勉強する気も無いのが良くないんだけど。

Perlのわけわかんない文法もイライラしたが、そこはそれでも大したことはなかった。(ここまで3日くらい。)
※詳細は省略します。

なんとかかんとか、大雑把な動きの部分を一通りのコーディングを完了して、
じゃあちょっくら動かしてみましょう・・・

※以降、絵が小さいときは、クリックすると読める程度の絵が出ると思います。


さるの試行錯誤の結果をだらだら記述します。
参考にはほぼならないと思います。念のため。

■Eclipse上でPerl CGIをデバッグする環境
確かにPerl開発環境はEclipseに組み込まれていて、Eclipse内に「プロジェクト」を作成できた。
この時点で、フラグ取りもほとんどできます。

◆パッケージの追加(ああ勘違い)
だが、ここで、「use Xxxx::Yyy」とか記述している先頭のライブラリ(パッケージ)のインポート?部分でエラーがでる。
「Can't locate Xxxx/Yyy.pm in @INC ....」
Eclipseに含まれるPerl環境は、それほど十分なパッケージ類は組み込まれていないらしい。

足りないとメッセージされるパッケージ名でググると、「meta::CPAN」とタイトルされているサイトにぶち当たる。
そこから、「Xxxx::Yyy」と検索すると、確かにYyy.pmというソースをダウンロードすることができた。
なので、.pmをダウンロードしては、xampp\perl\vendor\lib配下にせっせとコピーした。
コピーすると、そのエラーは消えて、次の足りないものが示されるという繰り返し。

でも、最終的には、該当の名前の.pmをコピーしても消えないものに行き着く。
そもそもコピーで済ますものではない?と、ココに来て初めて疑う。

.pmと同じところからダウンロードできる何種類かのファイルあるのに気付いて、それぞれ中身を確認してみた。
Makefile.PLという名前のファイルがある。それとREADME。
READMEを見てみると、なんかインストールするのにmakeが必要な書き方。
とりあえず関係ファイルを.pmに仕込んで、perl Makefile.PLを実行してみる。
うまく行ったかどうか判断付かず。

作った(?).plをデバッグ実行しても結果は変わらず。そうこうしている内に、
CPANサイトからパッケージをダウンロードしてインストールするのに
専用のコマンドcpanがあるとの記述にやっと出会う。

そうなのー?

なので、cpan Crypt::OpenSSL::AES とやってみた。
一応いっぱいメッセージが出て、なんか処理したように見えた。
でも結局、これまでの同じように、何か足りない的なメッセージが出る。

◆Eclipseの標準perl環境を使わないという選択
もう、Eclipseで標準で入っていた vender\lib の中もだいぶ弄ってしまったので、仕切りなおし。
=ダメもとで、以下のサイトを参考に、ActivePerlのインストールからやって見た。

「http://www.brainchild.co.jp/blog/develop/2010/09/activeperl3.html」
「http://wordpress.hitsuji.me/10-install-perl-and-use-it-on-eclipse-epic-and-padwalker/」

EclipseのPerl設定を変更するような記述がない。
そう、Perl環境を「一から追加」することを前提で書かれているから。

「https://www.maconey.info/adagio/2011/03/16111450/」

上記を参考に「追加」した後にEclipseを起動しなおして、Perlプロジェクトを開き、デバッグ実行を試みた。
「Error displaying local variables. install PadWalker and restart Eclipse oer disable displaying of local variables.」とメッセージボックスが出る。
エラーではあるが、前よりは前進した感。
「PadWalker」を仕込むところもやったはずだが・・・。

よくは分からないが、Perlの動作環境は2重になってます。
元々あった、・・・xampp\perl と新たにインストールした C:\Perl64。
で、デバッグするためのPadWalkerというパッケージ?は、C:\Perl64 側に組み込んだはずだから、元からあった xampp\perl 側には確かに入ってないかも。

Eclipseの「ウィンドウ」-「設定」メニューで、左側のツリービューから「Perl」を選んで、
右側の「Perl実行可能ファイル」の指定を C:\Perl64\bin\perl.exe に変更。

これで、再度デバッグを試してみる。

PadWalker絡みのエラーは出なくなった。
でも、またまた、パッケージが足りてないエラーが発生。
今度は、 C:\Perl64\ 下の環境に不足しているものを追加しないといけないらしい。
まずは一応、PadWalkerが使える状態なのか確認する。

...> cd \Perl64\bin
C:\\Perl64\bin> perl -e "use PadWalker"

何もエラーが出なければ、使えるということらしい。
何も出ないから使えるんだな。

次に、エラーになった Crypt::PBKDF2を追加のために以下を実行。
C:\\Perl64\bin> cpan Cript::PBKDF2

大量にメッセージが出た。関連するものも含めてインストールしてくれてる感じ。

次に
C:\\Perl64\bin> cpan Crypt::EBC

何やら大量にエラーが出た。
なので、Crypt::CBCで、「Rijndael」を使えばいいのかな・・・ソースを書き換えて、
C:\\Perl64\bin> cpan Crypt::CBC

こっちは、比較的すんなり行ったと・・・思う。
でも結局、CBC&Rijndaelだと、キー長が16bitまで制限されているので、使えないことに気付く。

なので、もとい。
ECB経由でAES(Crypt::OpenSSL::AES)を使う方向に戻した。
※Crypt::OpenSSL::AESを実行するためには、前提としてダウンロードしたパッケージをビルドする必要があるようで、cpanコマンドだけではなく、ppmコマンドを使う必要があった。

・・・確かdmakeはppmでインストールできたと思う。
※これ以降しっかりメモしてなくて、後でもう一度苦労することになる。

ともかく、それが終わったら、今度は、
DBIのバージョンとDynaLoaderというやつが期待しているバージョンが違うと出た。
「DBI object version 1.637 dose not match $DBI::VERSION 1.623 in DynaLoader...」
どうすりゃいいのー
・・・

あれこれ弄っている内に、Eclipseでのデバッグモードが起動したようで、最初のステップでブレークした。
やったー\(^ o ^)/

この時点で上記DBIの問題は放置。
少し、デバッグができた。


◆HTTPでパラメタを渡してデバックモードで動作させるには(徒労に終わる)
でも、POST/GETでパラメタをどうやって渡すんだ?
Eclipseの「デバッグ構成」設定にはそれらしい設定枠は見当たらない。

ここで、使っていたEclipse上のプロジェクトが、「Perlローカル」というもので、「Perl CGI」でも「Perlリモート」でもないことに気が付く。
たぶん、「Perl CGI」じゃないと、クライアントからURLを叩いて起動する確認ができないんじゃ?
と思ってプロジェクトを「Perl CGI」で作り直してみた。
でも、やっぱり「デバッグ構成」の設定項目にGETでパラメタを渡すような設定はない。
しかも今度は、HTTPスタータスが404で、作ったスクリプトまで制御が来ない!!!
なんなんだもー。

※これ以降は、見当違いのあがきの内容なので読み飛ばしてください。

さんざんあっちこっちのプロパティをいじってみたり、Apacheのcgi-binにスクリプトを移動して普通のブラウザアクセスを試してみたが、解決にはいらなかった。
「http://d.hatena.ne.jp/guccyon/20080314/p1」

そうこうしている内に、こんな情報を見つけた。
「http://amimekirin.seesaa.net/article/131841061.html」
リモートデバックするためのプラグインが有るらしい。

まあ、デバッグの段階としては、
1)「デバッグ構成」で、GETメソッドでパラメタを渡してデバッグ
2)実際のクライアントプログラムからURL指定でアクセスしてデバッグ
というのが、PHPのときにやった手順なので、この際、今回は「2)の環境を作ってしまえ」ということで、路線変更。

前出のプラグイン(Target Management)がそれを実現できるものなのかは・・・ちょっと良く分からない。

早速ダウンロードして、Exlipseの環境に追加。
ただし、ここで疑問が発生。
説明によると「FTPのみ」を選択し、接続時にID/パスワードを入れるとある。
???制御用にFTPを使うということなのか???

でも、さるが使っていたEclipseの環境でFilezillaは・・・動作していない!!
XAMMPコントローラで見てもStartできるようには、表示されていない。
xammp-controll.iniでは、Enableになっているが、必要そうなFilezillaなんちゃらというファイルがほぼ見当たらない。
オーノー! 使う予定ないからってインストールしなかった?

慌てて、再度Eclipseを再ダウンロード。20分くらい掛かった。
追加の手順は、↓で説明してくれていたので、それを見ながらやってみた。
http://tips.recatnap.info/add_filezila_xampp/
解凍にも15分は掛かった。
で、解凍結果を見てみたら・・・なんか説明と違う。Filezillaなんちゃらの名前の付いたファイルがここにも見当たらない。
そもそも、もう1クッションのインストール素材なので、最終形には展開されていないみたい。
たぶん、上記のサイトのEclipseとはバージョンが違うのかもしれない。
ともかく深追いするのをやめて。
仕方ないので、Filezilla(Server)単独でダウンロードして、半ばあてずっぽうで、xampp\FilezillaFTP にインストールした。

スタートメニューからFilezilla Interfaceを起動して、一切の設定はデフォルトのままとし、
直行で[Edit]-[Users]メニューで「General」にアカウントを登録した。
パスワード有りにチェックして、パスワードを指定する。

Eclipseに戻って、作成した「Perlリモート」を選択して、デバック実行させてみる。

FTPのID/Passwordを聞いてきた。
入れてみる。・・・ログインしたようだ。
で?
普通のブラウザから、「http://localhost/.../Xxxx.pl?param=.....」としてみたが変化なし。エラー500が出る。
デバッグモードでEclipse側に制御がくるようなことはない。

結局、無駄なことにほぼ1日費やした。(T^T)

◆HTTPでパラメタを渡してデバックモードで動作させるには
ほぼ、何をどうしてそこに辿りついたか覚えてないが、
以下の手順でどうにかGETパラメタ指定でスクリプトをデバッグモードで動作させることができました。

①「Perl CGI」プロジェクトを作成する
メニュー[ファイル」-「新規」・・・でPerlのプロジェクトを作成します。
20191007_1.jpg
作成したperlプロジェクトを選択して右クリックして表示されたメニューから「デバッグ」-「デバッグの構成」を選択します。

20191007_2.jpg
表示されたダイアログ左側のリストから「Perl CGI」をダブルクリックし、左側に「メイン」タブ内の入力欄に名前を入れます。
「Webサーバ」タブを選択して「HTML開始ファイル」を指定します。
※結果的にこの指定を有効にすることができませんでしたが、指定しないと次へいけないので。

20191007_3.jpg

「ブラウザ」タブで、「ビルトイン・ブラウザー」を選択します。
※これじゃなきゃダメというわけではない。
20191007_4.jpg

残りのタブはほっといて、[デバッグ]ボタンをクリックします。

②デバッグ実行する。
前述操作で、デバッグは開始されますが、エラーで終わります。
20191007_5.jpg

「指定したページが見つかりません。」
①で指定した、「HTML開始ファイル」に指定したのが、間違ってた?かとも思いましたが、
「コンソール」タブの内容を見てみましたが、指定されたパスはアクセスしようともしていない雰囲気です。
この理由がさっぱり分かりませんでした。
どなたか知ってたら、教えてください。

エラーにはなってますが、「デバッグ」タブを見ると、タスクは終了してない表示になってます。
・・・もしや。

③ブラウザのアドレス欄にパスとGETパラメタを追加してEnterする
藁にもスガル・・・でビルトイン・ブラウザのアドレス入力欄に
目的のPerlソースコードのパスとGETパラメタを指定してみたら・・・・
20191007_6.jpg

画面がデバッグ時の配置に表示しなおされて、
ソースコードの先頭処理行で、ブレークしました。
20191007_7.jpg

お~ ブラゥボ~!

よって、ファイルダウンロードテストはなんとかデバッグできる手法に辿り着きました。

でも、ファイルのアップロードはこれではテストできません。

アップロードは、実際のクライアント側アプリを使って、デバッガなし(メッセージ・ログ)でもできないことはないからいっか。


【お詫び というか・・・】
最終的には、使っているパッケージ類、および関連パッケージをcpanかppmを使ってインストールしたのだが、それぞれどうやったかメモしてませんでした。でも、わけあってもう一回この問題にぶち当たるので、詳細はいずれそのときの説明で書きます。

そっちも同じように試行錯誤の連続で、無駄な文章が延々と続くかと思います。
悪しからず。
この回はこの辺で。
m(__m)
スポンサーサイト





コメントの投稿

非公開コメント

カレンダー
10 | 2019/11 | 12
- - - - - 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 30
プロフィール

さるもすなる

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

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

-天気予報コム- -FC2-








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



ブログランキング・にほんブログ村へ にほんブログ村 ハンドメイドブログへ



マニュアルのお申し込み



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

この人とブロともになる

QRコード
QR