nDiki : PAR

2004年7月19日 (月)

PAR

いやな日記で紹介されている PAR を試してみた。 PARWindows に限らず実行形式のファイルを生成する事ができる (UNIX 系ではメリットは少ないかもしれないが)。

PAR ファイル (ZIP) として必要なスクリプトやモジュールをパッケージ化できるのも嬉しい。 Perl は便利なのだが他人に使ってもらう時に面倒で JavaJAR ファイルが羨しかったのだが、まさにそれを実現してくれる (実行可能ファイルにしてしまうともっとお気楽)。

また PAR ファイルHTTPサーバ上においておいてリモートから取得できる機能もあり、Java Web Start に近い使い方ができそうである。

Debian BOX に入れて遊んでみた。sid でもパッケージになっていないので dh-make-perl でパッケージ化してつっこむ。

スクリプトを実行可能形式に

 $echo 'print "hello\n";' > hello.pl
 $perl hello.pl
 $pp -o hello hello.pl
 $ls -l hello
 -rwxr-xr-x  1 naney naney 1739227 2004-07-19 22:09 hello
 $file hello
 hello: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.0, dynamically linked (uses shared libs), stripped
 $./hello
 hello

スクリプトを PAR ファイル

 $pp -p -o hello.par hello.pl
 $zipinfo hello.par
 Archive:  hello.par   1184 bytes   5 files
 drwxr-xr-x  2.0 unx        0 b- stor 19-Jul-04 22:13 script/
 -rw-r--r--  2.0 unx       17 t- defN 19-Jul-04 22:12 script/hello.pl
 -rw-rw-rw-  2.0 unx      262 b- defN 19-Jul-04 22:13 script/main.pl
 -rw-rw-rw-  2.0 unx      434 b- defN 19-Jul-04 22:13 MANIFEST
 -rw-rw-rw-  2.0 unx      214 b- defN 19-Jul-04 22:13 META.yml
 5 files, 927 bytes uncompressed, 678 bytes compressed:  26.9%
 $parl hello.par
 hello

ワンライナーも実行可能形式に

 $pp -o hello -e 'print "hello\n"'
 $ls -l hello
 -rwxr-xr-x  1 naney naney 1739237 2004-07-19 22:19 hello
 $file hello
 hello: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.0, dynamically linked (uses shared libs), stripped
 $./hello
 hello
スポンサード リンク
[ 7月19日全て ]

2004年7月20日 (火)

PARActivePerl 5.6.1 build 638 に

昨日 Linux 上で実験してみた PARWindows にも入れてみる。 PDLを使っている関係で ActivePerl は 5.6.1。

インストール

ppm install で入るパッケージは古いので、最新のものを入れておく。 ちょっと手間。

ワンライナーを pp できるところまで動作確認。

モジュール + スクリプトを実行可能形式に

ExtUtils::Makemakerを使ってパッケージ化している開発中のモジュール(スクリプトあり、XS あり)を実行可能形式化してみる。

 perl Makefile.PL
 nmake
 nmake test
 cd blib
 set PERL5LIB=lib;arch (pp の -I オプションが効かなかったので)
 pp -o foo.exe -a lib -a arch -M ... -c  script/foo

Log::Log4perl::Appender::Screen、Jcode::Unicode::NoXS、Unicode::StringGD については依存関係を自動検出できなかったので、それぞれ -M で指定。

できた。動いた。素晴しい。 PDLGD を使っていたのでちょっと不安だったのだがうまく動いて感激。 これでCD-ROMとか USB メモリに入れておいて一発実行とかできる。

[ 7月20日全て ]

2004年7月21日 (水)

PAR + ActivePerl で実行形式ファイルを作った時のライセンスは?

PAR の pp のドキュメントによれば、pp を実行して生成したファイルについてはライセンス制限がないとの事(The Artistic License の第8条に従い)。 ただし、一緒にアーカイブされたモジュール群が Artistic License の下にない場合は別途チェックする必要あり。

ここで ActivePerl を使った場合はどうなるんだろ。 ActivePerl 自体は ActiveState Community License であるが、その中の Perl (perl とか)と Perl と同じライセンスを選択しているバンドルされているPerl モジュールThe Artistic License を選択するといった記述がサイトにある。 ということは pp でパッケージ化される際に含まれる Perlインタプリタ部分も特に気にしなくていいのかな?

後は各Perl モジュール(とそれが依存しているライブラリ)のライセンスをチェックしなければならないのだが、これも面倒。

[ 7月21日全て ]

2004年8月11日 (水)

NSISインストーラを作ってみる。

NSIS 2.0 を Windows BOX に入れて、プログラムのインストーラを作ってみる。 今まで Windows 用のインストーラを作った経験はなし。

NSISをインストールしたディレクトリの下の Examples の中にある NSISスクリプト (.nsi) をコピーして、ちょこちょこっと編集。 エクスプローラでそのファイルを右クリックして出るメニューに 'Compile NSIS Script' というのがあるのでこれを実行するとインストーラが出来上がる。 簡単。

NSISスクリプトはちょっと繁雑だが、複雑な事をしないならば気をつけて編集すれば問題ないか。

wxPerl + PAR + NSIS でそれなりに格好がつくプログラムができそうだ。 コマンドライン用コンパイラもあるので、Makefile.PLから一発でできるようにしたい。

[ 8月11日全て ]

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日全て ]

2004年8月22日 (日)

PPM リポジトリ作り

  • プロジェクトで使う依存モジュール(の特定バージョン)を確保しておく
  • PARを使う際にライセンスの確認をしていないモジュールが入らないようにする
    • そのために、依存関係解決のため自動的に芋蔓式にモジュールが入らないように標準の PPM リポジトリを無効化しておく
  • ビルド/ダウンロードした PPM パッケージを集めてプロジェクト専用の PPM リポジトリを用意する

ということで、もりもりパッケージ化作業。 依存モジュールも含めてそれなりの数になるので、チマチマと作業。

[ 8月22日全て ]

2004年8月24日 (火)

PAR で重複アーカイブされる

pp でうまく依存モジュールがアーカイブされていないようなので、確認しようと exe 化されたファイルを unzip。 ではじめて、同じモジュールが重複されたアーカイブされている事に気がつく。 blib の下で、

 pp -o foo.exe -a lib -a arch -M ... -c script/foo

としていたのだが、どうやら -M や -c でリストアップされたモジュールと -a で指定したものが重複していてもそのまま両方アーカイブしてしまっているらしい。

lib 以下に

  • eval で use するため依存関係では自動抽出されない
  • 画像ファイルなどのリソースもある

ということで '-a' で指定していたのだが。

これらのモジュールは -M で、リソースは -a でそれぞれきちんと明示的に指定しないと駄目か。 blib の下のファイルをスキャンするスクリプトをつくるかな。

[ 8月24日全て ]

2004年8月25日 (水)

PAR

  • eval されるモジュール群は Makefile.PL で抽出して、pp の -M オプションで全て指定するように。
  • PAR で実行形式化すると、PDL の slice 呼び出しの結果が lvalue にならなくなってしまった。この間まで PAR しても問題なかったのだが。slice 呼び出しのの結果を一旦一時変数に入れて使うように修正。
[ 8月25日全て ]

2004年9月13日 (月)

Template Toolkit + PAR

今回のプロジェクトに Template Toolkit を本格的に適用しようかと。 問題となるのは PAR にした時に、どのようにテンプレートを取得するか。 (PARでない場合は)テンプレートはモジュールと同じ位置にインストールしておき @INC から探すようにするつもり。

ということで泥臭いが「起動時に一時ディレクトリに展開してしまう」という方法を選択。 %PAR::LibCache を舐めて拡張子が 'tt2' であるものを、File::Temp で作ったディレクトリに放り込んで、Template の INCLUDE_PATH に指定する (実際には上記の処理を行うオブジェクトを作って INCLUDE_PATH で指定)。 Daemon 系ならこれで十分。

で、順次 Perl モジュールに散財していたHTML出力をテンプレートベースに変更。 コードがかなりすっきりしてきて気持ちいい。

今回の作業で @INC にサブルーチンリファレンスやら、オブジェクトやらを渡せることを初めてしった。実際 PAR で利用している。 CODE の混ざった @INC をそのまま Template の INCLUDE_PATH に渡すとエラーが起きるので除外したものを渡すように。

[ 9月13日全て ]

2004年12月8日 (水)

始めてアイコンを作ってみた。

GIMP32x3216x16 のインデックスカラーBMPを作って @icon変換 でコンバート favicon.icoへの設定、PARでexe化の際のアイコン設定をしてみる。

[ 12月8日全て ]

About Me

Naney Naney

Naney (なにい)です。株式会社ミクシィで SNS 事業の部長をしています。

About nDiki

nDiki1999年1月に始めたコンピュータ日誌を前身とする NaneyWeb 日記(兼パーソナルナレッジベース)です。

#nNote タグがついている記事は他の記事に比べて、より断片的・未整理・不完全なちょっとしたノートです。まだ結論に至っていない考えなども含まれます。頻繁/大幅に更新したり削除したりすることがあります。

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

Other Notes

ナレッジベースアプリケーション Obsidian で書いているノートの一部を notes.naney.org で 公開しています。

月別インデックス
Process Time: 0.060904s / load averages: 0.31, 0.35, 0.32
nDiki by WATANABE Yoshimasa (Naney)
Powered by DiKicker