2007年09月01日

Wake On LanをWebブラウザで行う

先のエントリーでWOL(Wake On Lan)に成功したことを記したが、それをより効果的に利用出来るように考えて成功したので備忘録しておく。

要するに常時起動のVine Linuxマシンから、TVサーバのマシンの電源ONの制御をしようって考えだ。それをWebブラウザを使ってやりたいと言う話。

もちろんこの方法なら、ルーター越しのWOLも可能だということだ。職場などの出先のPCからはもちろん、最近の携帯電話ならブラウザが付いているのでそれも可能だと思う。技術的には大した事無いが一つの方法として参考になれば幸いである。

問題は私がPerlを全く理解していない事である。よってCGIもシェルスクリプトで書かざるを得ない。でも本当にそれって可能なのだか?調べてみたら同じことをやっている方のブログで「ルーターの外からwol」を発見したので、シェルスクリプトでCGIを書くのも可能なんだなと裏づけが取れたので実践することにした。

しかし、シェルスクリプトでCGIを書くのって本当は良くない方法らしいから、せめてベーシック認証をかけたディレクトリに設置することにした。ついでにhtmlファイルを置いてちょっとだけ見栄えもよくしてみる。実行ボタンをクリックするだけなんだが。

注意:下記にURLが出てきますが架空のものです。ハックしようとかしないでね。そもそも存在しないURLを例にしていますから、認証を破ってやろうなんて事は無駄です。

 

まず、wolコマンドを実行するシェルスクリプトを書いてしまおう。
難しいのは嫌なので極めてシンプルに書いてしまう。

$ which sh
/bin/sh

$ cd
$ vi wol.sh 

wol.sh という名前で保存するとする
-----------------------------------------------
#!/bin/sh
wol 192.168.1.255 xx:xx:xx:xx:xx:xx
-----------------------------------------------

本当にwolが動くか確認しておこう

$ chmod 705 wol.sh
$ ./wol.sh

リモートで起動することに成功したら次のステップに進もう

既に公開しているWebサーバにスクリプトと、簡単なhtmlのページを作る。
ちなみに私はpublic_htmlディレクトリをベーシック認証して設置することにした。
(ベーシック認証についてはどこかに記した記憶があるので、ここでは書きません)

$ cd public_html/
$ vi wol.cgi

wol.cgi という名前で保存する(Perlではなくshで書いてる)
-------------------------------------------------
#!/bin/sh
echo Content-type: text/html
echo
echo "<title>sending wol</title>"
echo "<p>"
echo "sending wol to fluorite"
echo "..."
sh /home/wol/wol.sh
echo "..."
echo "</p>"
echo "<p>"
echo "done."
echo "</p>"
-------------------------------------------------

$ chmod 705 wol.cgi 

Webブラウザ用にHTMLのページを作っておくとちょと自己満足に浸れそう(w

$ vi wol.html

wol.html という名前で保存する
-------------------------------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>WOL-SH</title>
</head>
<BODY BGCOLOR="#ffe0c0">
<H3 align="center">WOL-SH</H3>
<HR>
<p align="center">テレビサーバの電源をWake on LANで入れるっちゃ</p>
<form action="./wol.cgi" method="post" name="wol" id="wol">
<div align="center">
<input type="submit" name="Submit" value="送信">
</div>
</form>
<HR>
</body>
</html>
------------------------------------------------- 

これで出来たのでWebブラウザからアクセスしてみた

http://www.sasapurin.com/~wol/wol.html

ベーシック認証がかかっていて、ユーザー名とパスワードを入力した

極めてシンプルなページとボタンが一個出てきたので、ボタンをクリックする。 

Internal Server Error .......

 なんじゃそりゃ~

 

httpdのエラーログ確認

Resource temporarily unavailable:
couldn't spawn child process: /home/wol/public_html/wol.cgi

チャイルドプロセスが作れないとかぬかしてるな..

 

そもそもシェルで書いたCGIは機能するんか?

$ ./wol.cgi

あらら、ちゃんとWOLでリモート起動がかかってメッセージも出てきた

Content-type: text/html
<title>sending wol</title>
<p>
sending wol to fluorite
...
...
</p>
<p>
done.
</p>

 

って事は、シェルスクリプト(sh)でCGIを書いているから、Apacheが拒否してるって感じだろうな。
そういえば、ExecCGIとかのところに、CGIファイルの拡張子を定義するところ(AddHandler)があったはず。

$ su -
# less /etc/httpd/conf/httpd.conf

/AddHandler

みぃつけた(w

けど待てよ..ここを書き換えちゃうと、Apache全体に適用されちゃうよな。それはまずいな。

 

ってことで、.htaccessを利用することに決定。既にベーシック認証の為に設置してるから追記するだけでいけるはず。

# exit
$ cd ~/public_html
$ vi .htaccess

AddHandler cgi-script .cgi.sh

 

気を取り直して、もう一度テストをやってみた

http://www.sasapurin.com/~wol/wol.html

ボタンをクリック!

カチン、ピコッという音と共に電源ファンの音が鳴って、LEDが点灯した!

やったぜ成功!!やるじゃん俺(w

という訳でWebブラウザでWOLに成功したのでありました。

実は、メールを送ってそれをトリガーにしてシェルを実行させるって方法も考えたんだけどね。それはまたの機会にしようかな。とりあえず上手く出来てよかった。

冗長しますが、上記のURLは架空のもので存在しません。わざわざ秘密の入り口をネットで公開するほど間抜けではないっす(w



投稿者 sasapurin : 18:41 | コメント (0) | トラックバック

2007年02月15日

Perlモジュールの容易な設置方法

先日以来、Perlのモジュールには苦戦させられっぱなしなのだが、ちょっと興味深いテクニックを見付けたので備忘録。未検証なのだが、モジュールをインストールせず、Perlスクリプトを設置するフォルダに階層的に設置すれば動くらしいのだ。

基本的にわが家の場合は自宅サーバ、及びテスト用のマシンがあるので、モジュールをCPANコンソールからインストールすれば良いのだが、次々とモジュールを入れると訳が分からなくなる。実際素手に私のテストマシンは、Perlモジュールがわんさかと入っている。

さて、情報元となったページは「指定したディレクトリ中のファイル一覧をRSSにするCGI」である。ここに興味深いテクニックがさりげなく書かれているのだ。

モジュール「XML::RSS」が必要です。ない場合はCPANから入手して下さい。サーバにインストールすることが不可能な場合は、このCGIと同じディレクトリ内に ./XML/RSS/ というディレクトリを掘って、そこに格納すればOKです。

ようするに、ファイル一覧をRSSにするCGIを配布して下さっているのだが、XML::RSSモジュールが必要なCGIなので、それがないと動かない訳である。しかし、レンタルサーバ等の場合は、必ずしも必要としているPerlモジュールがサーバにインストールされているとは限らない。

そこでこのテクニックである。hogehoge.cgiを設置したディレクトリに、XMLというフォルダを作成し、その中に更にRSSというフォルダを作成して、CPANから入手したXMR::RSSモジュールいに該当する"RSS.pm"を入れておけば良いということである。

まだ検証できていないのだが、CGIを作っている人が書いているのだから間違いないだろう。検証の為に何か他のモジュールを要求するCGIで試してみようかな。なぜならaptでXML::RSSをインストールしちゃったから既に入っているんです。てな訳で一応備忘録でした。



投稿者 sasapurin : 17:26 | コメント (0) | トラックバック

2007年02月13日

Perlライブラリの検索PATHを格納した配列@INC

io氏から昨日のエントリにコメントを頂いた。
私が適当にPerlがモジュールを認識しそうなPATHへ、頂いたurl_get.pmを置いたのだが、あながち間違っていないということであった。

そして、Perlがモジュール等のライブラリを認識するPATHは、INCという配列に記録されているとの情報も頂いた。これを手がかりにGoogle先生に聞いてみると色々な情報が見付かった。

まず、手っ取り早くシェルから確認する方法である。Vine Linux 3.2 のbashから操作した。

perl -V

最後の方に@INCというところがあり、検索PATHが表示される。

もうひとつの方法は下記の通りだ。こっちの方がシンプルな結果が得られる

perl -le 'print for @INC'

 更に興味深い情報も見付けた。

KMsWiki:Perl/@INC

ここでは、環境変数PERL5LIBに環境変数としてPATHを追加して置けば、標準ライブラリよりも先に捜し出してくれるとの記述がある。PERL5LIBで検索すれば、まだ詳しい情報が出てくるがきりがないので割愛します。まだまだ勉強しなくては太刀打できない。



投稿者 sasapurin : 23:04 | コメント (0) | トラックバック

Perlモジュールの一覧を取るCGI

ここ数日、Perlのモジュールのことで四苦八苦しとります。
Googleで捜し出した情報の中から、今知りたいことを少しずつ学習中。
ふと目に止まったのが、サーバーにインストールされているPerlモジュールの一覧を取れるCGIを無償で公開して下さっているサイトを発見したので、早速試してみると動作成功しましたので、記しておきます。

Perl専門サイト - futomi's CGI Cafe

サーバーアナライザーと言うページから、CGIスクリプト一個と、REAEMEファイルがダウンロード出来ます。こいつをサーバーにアップして、パーミッション変更で実行権をあたえて、ブラウザでアクセスすると、綺麗に整理された情報が表示されます。

こいつは便利だけど、情報的にやばい様な気もするので、URLが分からない場所、もしくはアクセス制限をかけておいた方がよろしいかと思います。

なんか、Perlモジュールがいっぱいリストされるんだけど、こんなにいっぱい入れた覚えはないぞ。もしやCPANコンソールで一括更新した際に入ったのかな。なんとか整理しないと。



投稿者 sasapurin : 21:13 | コメント (0) | トラックバック

rss_stock.cgi ( io 氏作) その2

多分でたらめなやり方なのでしょうが、我流でrss_stock.cgiが動きました。
やはり躓いていたのは、Perlのモジュールについての理解が足りないという事に尽きます。もちろん私にはコードが書けないのですが、誰かが作ったスクリプトを設置するしても、モジュールの理解は必須だなと痛感したのであります。

取り合えず手がかりとなるのは、Apacheが吐き出すエラーメッセージだけです。これを手がかりにどうやって対処して(無理矢理)動くようにした か備忘録です。実際かなり地味な作業でした。しかし動いたという結果には満足しています。(出来れば詳しい方から指導を受けて裏付けをとりたいものです ね)

下記のエラーが /var/log/httpd/error.log に記されていました。
少しずつ対処していきます。


Can't locate XML/RSS.pm in @INC (@INC contains: /usr/lib/perl5/5.8.2/i386-linux-thread-multi /usr/lib/perl5/5.8.2 /usr/lib/perl5/site_perl/5.8.2/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.2 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.2/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.2 /usr/lib/perl5/vendor_perl /usr/local/lib/site_perl/5.8.2/i386-linux-thread-multi /usr/local/lib/site_perl/5.8.2 /usr/local/lib/site_perl .) at /home/sasakis/public_html/rss_stock/rss_stock.cgi line 3.

早い話、XML/RSS.pmというモジュールがないというエラーだ。
このモジュールは、Vine Linux 3.2の場合、aptでインストール出来ることがわかった。

apt-cache search XML::RSS
perl-XML-RSS - creates and updates RSS files with Perl
apt-get install perl-XML-RSS

これで、XML/RSS.pmが見付からないというエラーは出なくなった。


Can't locate url_get.pm in @INC (@INC contains: /usr/lib/perl5/5.8.2/i386-linux-thread-multi /usr/lib/perl5/5.8.2 /usr/lib/perl5/site_perl/5.8.2/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.2 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.2/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.2 /usr/lib/perl5/vendor_perl /usr/local/lib/site_perl/5.8.2/i386-linux-thread-multi /usr/local/lib/site_perl/5.8.2
/usr/local/lib/site_perl.) at /home/sasakis/public_html/rss_stock/rss_stock.cgi line 4.

url_get.pmというモジュールがないと言うエラーである。
昨日のエントリーに記したよう、このモジュールは io 氏の自家製モジュールだと分かったので、ソースをそのままダウンロードして、url_get.pmとして保存した。
問題は保存場所だ。どこに保存したらPerlがモジュールとして認識してくれるのだろうか?
冷静に考えてみたら答えらしきものが、Apacheのエラーメッセージにあるではないか!おそらくこれがPerlが認識している、環境変数らしきものだと推測し、一番最後に書かれているPATHに保存してみた。結果はOK!、このエラーメッセージも出なくなった。


Can't locate LWP/Simple.pm in @INC (@INC contains: /usr/lib/perl5/5.8.2/i386-linux-thread-multi /usr/lib/perl5/5.8.2 /usr/lib/perl5/site_perl/5.8.2/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.2 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.2/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.2 /usr/lib/perl5/vendor_perl /usr/local/lib/site_perl/5.8.2/i386-linux-thread-multi /usr/local/lib/site_perl/5.8.2 /usr/local/lib/site_perl .) at /usr/local/lib/site_perl/url_get.pm line 21.

LWP/Simple.pmというモジュールがないというメッセージだ。

apt-cache search LWP::Simple
perl-libwww-perl - libwww-perl module for perl
apt-get install perl-libwww-perl

これでLWP/Simple.pmのエラーも記録されなくなった。


Can't locate Template/Extract.pm in @INC (@INC contains: /usr/lib/perl5/5.8.2/i386-linux-thread-multi /usr/lib/perl5/5.8.2 /usr/lib/perl5/site_perl/5.8.2/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.2 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.2/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.2 /usr/lib/perl5/vendor_perl /usr/local/lib/site_perl/5.8.2/i386-linux-thread-multi /usr/local/lib/site_perl/5.8.2 /usr/local/lib/site_perl .) at /home/sasakis/public_html/rss_stock/rss_stock.cgi line 5.

Template/Extract.pmというモジュールがないというエラーメッセージだ。
残念ながらaptでは見付けられなかった。あんまりやりたくないのだがCPANコンソールからインストールするしか無さそうだ。

perl -MCPAN -e shell

cpan> install Template::Extract
cpan> quit

おおー、なんとかインストール出来たみたい。Template/Extract.pmのエラーも記録されなくなったぞ。


Can't locate Jcode.pm in @INC (@INC contains: /usr/lib/perl5/5.8.2/i386-linux-thread-multi /usr/lib/perl5/5.8.2 /usr/lib/perl5/site_perl/5.8.2/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.2 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.2/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.2 /usr/lib/perl5/vendor_perl /usr/local/lib/site_perl/5.8.2/i386-linux-thread-multi /usr/local/lib/site_perl/5.8.2 /usr/local/lib/site_perl .) at /home/sasakis/public_html/rss_stock/rss_stock.cgi line 6.

Jcode.pmというモジュールがないと言うエラーだ。Jcode.plってのは、KENTさんのCGIでもよく見掛けた覚えがある。これのモジュールはaptで手に入るのだろうか?

apt-cache search jcode
jcode.pl - 日本語コード変換用Perlライブラリ
perl-Jcode - さまざまな日本語文字コードを Perl で扱うための Module
perlftlib - Perlftlib は、fonts.dir を作成するツールです。
apt-get install perl-Jcode
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了
以下のパッケージが新たにインストールされます:
  perl-Jcode
アップグレード: 0 個, 新規インストール: 1 個, 削除: 0 個, 保留: 0 個
165kB のアーカイブを取得する必要があります。
展開後に 546kB のディスク容量が追加消費されます。
取得:1 http://updates.vinelinux.org 3.2/i386/plus perl-Jcode 0.83-0vl4 [165kB]
165kB を 0s 秒で取得しました (379kB/s)
変更を適用しています...
準備中...                    ########################################### [100%]
   1:perl-Jcode             ########################################### [100%]
完了

見事にaptでインストール出来ちゃいました。もちろん Jcode.pmのエラーもこれで解消。


てな訳でかなり強引な手順?で、解決させたのですが、url_get.pmの設置方法については、全く根拠が無いというか思い付きなので、本来はどうすべきか調べなくてはと思っています。

そもそも、Perlがモジュールを認識するPATHがどこかに定義されていると思うのですが(シェルの環境変数と同じように)、それが何処で定義されているか全く不明です。持ってるPerl本にはそんな解説無かったしなぁ。



投稿者 sasapurin : 18:17 | コメント (1) | トラックバック

2007年02月12日

rss_stock.cgi ( io 氏作)

昨日に引き続きPerlと戯れてみる。正直言って昨日一日頑張ったが無理だと投げてしまっていた。しかし嬉しい事に、rss_stock.cgiの作者であるio氏からコメントをいただけた。今の私の知識ではどう頑張っても無理だったという理由が分かったからもう一頑張りしてみた。

io氏が作ったrss_stock.cgiは、日本株式の銘柄番号を指定すれば、その株価情報をRSSで返してくれるというCGIだ。氏のサイトに解説が3ステップに分けて書かれている。

恐らく氏にとってはPerlでスクリプトを書く事は簡単な事なのだろう。しかし私にとってはかなり高い壁である。Perl使いにしてみれば当然の事さえも知らないであろう。(Perl本は数冊買って読んだがちんぷんかんぷんである..orz)

後は、Googleで初心者に分かりやすく、かつ簡潔にまとめてくれているサイトと出会えるかどうかだ。今の時代にはむしろその方が、出会える確率が高いと思う。本を何冊買っても自分にしっくり来ないという事は多々あるが、ネット上の様々な性格の人の説明を読み比べると、自分の思考にピッタリ来る人が大抵見つかるものだ。但しニッチなジャンルでは絶対数が少ないので出会える確率も当然低い。

Perlから話が逸れたので軌道修正する。rss_stock.cgiは、Perlモジュールを必用とするuse記述があり、そこでurl_getを要求すると定義している。その存在の有無を把握せずに自前のサーバでrss_stock.cgiを実行してみたところ、WebブラウザにはInternal Server Errorが表示された。Webサーバプログラム(Apache)のログには、url_get.pmが見つからんと言う意味合いのエラーメッセージが記録されていた。そこで"url_get"というモジュールについてGoogle先生に相談してみたのだが、どうもこのケースに該当する情報が見つからない。"url_get.pm"とすると一件も見つからないのだ。これは抜け出る事が出来ない迷路にはまったのではないかと、昨夜ようやく気づいたのだ。

それで、ダメもとでio氏のBlogにトラックバック&コメントをしておいたのだが、今日、嬉しい事にコメントをいただき、"url_get"というスクリプトが、io氏の自家製だという事を知る事が出来たのだ。ご厚意で"url_get"のソースも早速公開して下さっている。

そう言う流れで、早速昨夜の続きを、と思いソースをコピペしつつ眺めてみたが、やはり良く分からない。分かるのはuse記述で何というモジュールが必用なのかだけだ。ぶっちゃけ私の現時点のスキルはその程度である。ファイル名は"url_get.pm"として、"rss_stock.cgi"と同じディレクトリに置いた。

動作環境は、Vine Linux 3.2 FTP版でフルインストール状態だ。普段は最小インストールにするのだが、Perlモジュールが足りないとかで躓くのを恐れて全て入れてみた。とにかく自前の鯖で動くのを確認するのが一番急ぐ改題だ。ちなみにマシンは我が家で最速のCPUを実装したThinkPad X31である。Linuxカーネル2.4系のVine Linux 3.2は流石にこのハードウェア環境では小気味良く動く。これでコンパイル処理なんかもイイ感じで進められるはずだ。

しかし、昨夜と状況は変わらない。WebブラウザにはInternal Server Errorが表示され、Apacheのログには、"url_get.pm"が見つからんうんぬんという意味合いと取れる英語が記録されている。

だめもとで、"url_get.pm"を"url_get.pl"としてみたが変化は無い。Apacheのログから推測すると、Perlは明らかに"url_get.pm"を探しており、それが見つからないとApacheに報告しているんだと思う。なので"url_get.pl"ではなく、"url_get.pm"としなくてはならないのだろうという想像は私にもつく。

さて一体、どこにその"url_get.pm"というPerlモジュールを配置すれば良いのだろうか?どうしたらPerlが"url_get.pm"の在処を認識してくれるのだろうか?この観点からGoogle先生に聞いてみたのだが、有力な情報は見つけられない。

という事で9割方愚痴の様な内容になったが、今日やってみた事、疑問に思った事を記してみた。出来ればio氏にも初心者が落ちる落とし穴を知って頂きたいので、今日もトラックバックを打たせていただくことにする。余りにも低レベルで恥ずかしい限りだが..

ああ、自分にはプログラミングは無理なんだなぁと、つくづく感じる。モノクロMacの時代から何度プログラミングで挫折しただろう。どうもプログラミングとなると、苦手意識が出てくる。どうやらトラウマになっているようだ。何とかして克服したい。あんまり思い詰めると憂鬱になりそうだから今日はこれまでにしようっと。



投稿者 sasapurin : 21:01 | コメント (0) | トラックバック

Perl モジュールの一括更新

Perlには正直手を焼いています。必要なモジュールが無い。

それはさておき、PerlモジュールのインストールにCPANコンソールが使えるという事を覚えたので、それなら一気にモジュールを更新するすべは無いのか?と普通に疑問に思った。無いはずは無いやろと、調べてみたらあったので備忘録。

まずはバージョンの現状と最新の比較コマンドのおさらい。

# perl -MCPAN -e "CPAN::Shell->r"

次に覚えたての、モジュール一括バージョンアップ。

perl -MCPAN -e "CPAN::Shell->install(CPAN::Shell->r)"

放置しておけば終わるかと思ったら甘かった。一々オプションをどうするか聞いてくる。
まぁ、一個ずつ更新する事を考えたらかなり楽だから良しとしましょう。



投稿者 sasapurin : 06:27 | コメント (0) | トラックバック

2007年02月11日

Perl のモジュールを追加する方法

訳あってPerlのモジュールを自宅サーバに追加インストールしたい。
まぁ早い話、他人の作ったCGIを動かしたいのだ。しかし特定のモジュールに依存している為に動作しないからモジュールを入れないといけないんだと思う。

ことの発端は、x Laboratory-株価のRSSである。株価をRSSで表示出来ると面白いなと思ってGoogleで検索したら、CGI構造とかを解説してくれているので読み入ってしまったのだ。しかし私は現時点プログラミングが出来ない。だけど言語は何でも良いから頑張って役立つものを作れる技術を身につけたい。

株価のRSS
株価のRSS(その2)
株価のRSS(その3)

とりあえず三話完結っぽい。

最初はFreeBSD上で行おうとしたが、XML::RSSのインストールが上手くできないので、Vine Linux 3.2上で行う事にした。

$ su -
# apt-cache  search  XML::RSS
perl-XML-RSS - creates and updates RSS files with Perl
# apt-get install perl-XML-RSS

XML::RSSはインストール出来たが、困った事にインターナル・サーバー・エラーとなってしまう。調べてみたら、"url_get.pm"が見つからないと言うエラーがApacheのログに記されていた。

なんだかよく分からないのだが、せっかくソースを公開しているのだから、読めよと言われそうだから覚悟を決めてエディタで開いてみたら、一番最初に下記の様な記述を発見。

#!/usr/bin/perl -w
use XML::RSS;
use url_get;
use Template::Extract;
use Jcode;

検索してみたら、どうやらこのuse宣言は、モジュールを要求している(多分)という事が分かった。
残念ながら"url_get.pm"なんてモジュールは持ってないし、aptでも見つけられない。(Googleでさえ見つけられない)。それに、"Template::Extract"も多分入って無さそうだ。

どうやらこの辺りの、Perlモジュール環境を整えてやらないといけないらしい。 知っている人にしてみれは簡単な事なんだろうが、プログラミングビギナーにはかなり辛い試練。

FreeBSDのPortsでダメ、Vineのaptでダメとなると、一体どうしたら良いものか..

諦めずに検索してみたら、CPANを使ってモジュールをインストールする方法を解説してくれているページを発見。CPANってモジュールのバージョンを確認する為に、今日使ったばかりだ。CPANのコンソールからインストール出来るのか。 

perl -MCPAN -e shell
Terminal does not support AddHistory.

cpan shell -- CPAN exploration and modules installation (v1.7601)
ReadLine support available (try 'install Bundle::CPAN')

cpan>install url_get
CPAN: Storable loaded ok
Going to read /root/.cpan/Metadata
  Database was generated on Sun, 11 Feb 2007 05:09:24 GMT
Warning: Cannot install url_get, don't know what it is.
Try the command

    i /url_get/

to find objects with matching identifiers.

cpan>i /url_get/
No objects found of any type for argument /url_get/

だめじゃ~、そんなもんは知らんと怒られてしまう。一体どこに"url_get.pm"が有るんだろうか? 検索エンジン色々使っても見つからないとなると、初心者にはどうしようもないよなぁ。

 


追記

 

レンタルサーバーでモジュールをインストール出来ない場合、CGIファイルを編集して、インクルード記述を書き変えてしまうと言う方法も発見。なるほどというか、色々勉強になりますね。

レンタルサーバーでWWW::Mechanize使う方法

 



投稿者 sasapurin : 20:25 | コメント (0) | トラックバック

Perl モジュールのバージョンチェック

私は現時点、プログラミングが出来ないので、正直言ってPerlなんて苦手なのだが、多くのCGIスクリプトがPerlで書かれているので、自宅サーバで、それらを使う為には否応なしに最低限の知識は身につけておかなければならない。

Perlには膨大なモジュールがあり、それらはCPAN(Comprehensive Perl Archive Network)と呼ばれるライブラリからインストールする事が出来るらしい。これはこれで使い方を覚えるのが厄介なのだが、とりあえずインストールされているモジュール、バージョンの新旧、位はチェック出来る様になっていた方が良いと思われる。

IBMのサイトに、「Perlモジュールの展開を自動化する」という記事を見つけた。良く読むと主旨は全然違ってもっと高いレベルにあるのだが、インストールされているモジュールのバージョンチェックは出来るので、備忘録に記しておこうと思う。

具体的には、シェルを起動して下記の様にコマンドを投入すれば良いだけだ。

$ perl -MCPAN -e 'CPAN::Shell->r'

ズラズラとモジュールが表示されて、現在のバージョンと最新のバージョン番号が表示される。
しかしどうやって最新に更新するのだろう?まだまだ勉強が足りないと実感する。



投稿者 sasapurin : 20:05 | コメント (0) | トラックバック