nDiki : libwww-perl

2004年6月1日 (火)

HTTP/1.0 Simple-Response

「ある無線基地局のWeb管理画面の制御をスクリプトでしようとリクエストを送ったら、Status-Line 無しでボディが返ってきたよ」という話。 でRubyのライブラリや wget だとエラーになるとのこと。

HTTP/0.9 Simple-Response

RFC1945 6. Response で、Status-Line をともなわない「Simple-Response」というのが定義されている(HTTP/1.1 RFC2616 にはない)。

HTTP/0.9 Simple-Request (RFC1945 5. Request) を受けた時のみ Simple-Response を送信すべきとあるが must ではないようだ。 HTTP/1.0 Full-Request を送信して Status-Line で始まらないレスポンスを受けたら、Simple-Response とみなすべきとある。

 GET Request-URI HTTP/1.1 CRLF

を受信した HTTP/1.0 サーバが Simple-Request を返しても違反とはいえないのかな。 まぁ行儀が悪いことには違いないが。

Perl libwww-perl の場合

Perl のライブラリをみてみた。

libwww-perlNet::HTTP::Methods::read_response_headers では laxed => 1 が指定されると、Status-Line が無い場合 HTTP/0.9 な 200 と判断するようになっている。

LWP::UserAgent を使うと laxed => 1 が設定された状態で呼ばれるので、Simple-Response もうまく処理できるはず。

Server: GR-HTTPD Server/2.20

Server レスポンスヘッダフィールドにある GR-HTTPD っていうのは国産の組み込みWebサーバのようだ。

スポンサード リンク
[ 6月1日全て ]

2004年8月19日 (木)

ActivePerl 5.6.1 Build 638 にバンドルされているモジュールとライセンス

ExtUtils::Installed でリストアップしてチェック。

aActivePerl::DocTools
ActiveState::RelocateTree
aActiveState::Rx
*Archive::Tar
oArchive::Zip
*Compress::Zlib
oData::Dump
*Digest
*Digest::HMAC
*Digest::MD2
*Digest::MD4
*Digest::MD5
*Digest::SHA1
*File::CounterFile
*Font::AFM
*HTML-Tree
*HTML::Parser
*HTML::Tagset
oIO::Zlib
*MD5
*MIME::Base64
*Net (libnet)
*PPM
PPM-Agent-Perl
PPM::Shell
*Perl
*SOAP::Lite
*Storable
oTest::Simple
oText::Autoformat
*Tk
*URI
oUnicode::String
*Win32 (libwin32)
aWin32::AuthenticateUser
*XML::Parser
*XML::Simple
*libwww-perl

'*' は Copyright.html で オリジナルがオープンソースのものとして列挙されているもの。 'o' は列挙されていないが、オリジナルが Perl と同じライセンスThe Artistic License のもの。 'a' は ActiveState の Copyright があるもの (ActiveState Community License)。 それ以外は明記がないもの。

PAR でパッケージ化するには、Perl と同じライセンスの(あるいは再配布の問題のないもの)もののみストールしてある状態にしておき、PAR 化した中身に

  • ActivePerl/*
  • ActiveState/*
  • PPM/* (一部)
  • ppm-conf/*
  • Win32/AuthenticateUser.pm

が含まれていないかをチェック。

[ 8月19日全て ]

2006年2月11日 (土)

野良パッケージと依存 Perl モジュールインストールセット をCPAN::Site

WiKickerオフラインで簡単にインストールできるようにしたい。 WiKicker 自体は

 perl Makefile.PL
 make
 make test
 make install

で簡単にインストールできるのだが、事前に CPAN にある依存 Perl モジュール(とそれらが依存している Perl モジュールら)をインストールしておかなければならない。

オンライン環境では CPAN.pm を使って芋蔓式にインストールできる。 WiKicker は次回のリリースから Module::Install を採用するので、perl Makefile.PL 時にそれらを行うことができるようにもなる。

しかしオフライン環境になると、話は変わってくる。

普通にやろうとするとあらかじめ依存関係を全部洗い出して事前にダウンロードしておき、依存関係の順番を考えながらインストールしていかなければならない。

これがかなり面倒。しかも各モジュールのバージョンアップにともない、その時その 時で変化する可能性があるので、適宜確認しなければならない。

でれば CPAN.pm の力を借りたい。

CPAN.pm はインストール時に $CPAN::Config->{keep_source_where} (通常 ~/.cpan/sources) に溜め込むので、これを CD-ROM 等に書き込んでオフラインインストールで使用することができる (cf. perldoc CPAN)。

だいたいはこれでうまくいくのだが問題もあって、この方法だと(WiKicker などの)野良パッケージを、うまく一緒にすることができない。

野良パッケージを扱うには CPAN::Site、あるいは CPAN::Mini::Inject あたりを使えば良さそうだ。

今回はまず、CPAN::Site での手順を調べてみる。

~/perl-5.8.8 以下にクリーンな Perl 5.8.8インストールしてインストールセットを作成していく。

CPAN::Siteインストールする (オンライン)

 rm -rf ~/.cpan
 ~/perl-5.8.8/bin/perl -MCPAN -e shell
 cpan> install LWP
 cpan> install CPAN::Site
 cpan> exit

これで CPAN::Site が使えるようになるとともに、CPAN::Site と LWP および依存モジュールのソースアーカイブが ~/.cpan/sources 以下にたまる。

WiKickerインストール中に libwww-perl を途中で入れると CPAN.pm が使ってこともあってかうまくいかないので、先に一緒に入れてしまう。

インストールしたい野良パッケージ用のローカル CPAN サーバを作成する

野良パッケージら (今回は WiKicker のみ)を含んだ ローカル pseudo CPAN サーバを作成する。

 mkdir -p ~/public_html/CPAN/authors/id/N/NA/NANEY
 cp WiKicker-0.xx.tar.gz ~/public_html/CPAN/authors/id/N/NA/NANEY
 ~/perl-5.8.8/bin/mkpackages ~/public_html/CPAN

CPAN::Site に含まれている mkpackages を使うことで、CPAN::Site が参照することのできるインデックスファイルが作成される。

WiKicker と依存するモジュールをインストールする (オンライン)

次に ローカル CPAN サーバと、CPAN (ミラー) からパッケージを自動ダウンロードしてインストールする。ここでは CPAN.pm のかわりに CPAN::Site を使用する。

 ~/perl-5.8.8/bin/perl -MCPAN::Site -e shell
 cpan> o conf urllist unshift http://localhost/~myname/CPAN
 cpan> reload index
 cpan> install WiKicker
 cpan> exit

ここでローカル CPAN サーバを file:/// 等で指定すると、そこから読みとったファイルは ~/.cpan/sources/ 以下にコピーされないので一箇所にまとめることができないので注意 (かなりはまった)。

これが終わると、WiKicker とそれに必要なファイルが ~/.cpan/sources にたまる。

これを適宜アーカイブして保存する。

オフラインインストールする

別の環境で例えば /usr/local/perl-5.8.8 にインストールされた PerlWiKickerオフラインインストールするとする。

先の工程で作成したファイルセットが /tmp/CPAN においてあるものとする。

 /usr/local/perl-5.8.8/bin/perl -MCPAN -e shell
 # 初期化でオフラインのため CPAN ミラーの選択ができずに URL の入力を
 # 求められたところで file:///tmp/CPAN を指定
 cpan> install LWP
 cpan> install CPAN::Site
 cpan> exit

まずは以上で CPAN::Site が入るで、CPAN::Site で shell を起動しなおす。

 /usr/local/perl-5.8.8/bin/perl -MCPAN::Site -e shell
 cpan> install WiKicker
 cpan> exit

これで /tmp/CPAN から芋蔓式に WiKickerインストールされる。

ポイント

Debian のパッケージリポジトリなどとは違って、CPAN は基本的に「一つのリポジトリおよびそのミラー」という概念しかないようである。 したがってモジュールのインデックスファイルも1組しかなく、複数のサイトから異なるモジュールセットを配布するということができるようになっていない。

これに対し、自前パッケージ群用にも1セットインデックスファイルを作って扱えるようにしようというのが CPAN::Site である。

これを用いると「もう一つのリポジトリ」を扱えるようになるが、逆にいうと利用する場合は CPAN::Siteインストールしなければならないということでもある。

[ 2月11日全て ]

About Me

Naney Naney (なにい)です。株式会社ミクシィでマネージャー・プロダクトオーナーをしています。

nDiki1999年1月に始めたコンピュータ日誌を前身とする NaneyWeb 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。

follow us in feedly

※内容は個人的見解であり所属組織とは関係ありません。

月別インデックス
Process Time: 0.05098s / load averages: 0.47, 0.75, 0.66
nDiki by WATANABE Yoshimasa (Naney, Google profile)
Powered by DiKicker