トップ(最新) | <前

nDiki : PPM パッケージ

PPM パッケージ - PPM package

パッケージマネージャ PPM で扱うことのできるソフトウェアパッケージ。 通常 Perl モジュールをパッケージングしてある。

PPM パッケージPPM::Make に含まれている make_ppm コマンドで作成できる。

関連情報

スポンサード リンク

Related term

2006年7月3日 (月)

自前 PPM リポジトリの管理 このエントリーを含むはてなブックマーク

スポンサード リンク

Windows Perl アプリケーション用に PPM リポジトリを久しぶりに整理。

自分が使用する PPM パッケージは以下の理由から、以前より基本的に自前でビルド/保存し PPM リポジトリをローカルに作成するようにしている。

  1. 後でオフラインインストールできるようにする。
  2. 「公開リポジトリが無くなった」あるいは「公開リポジトリに欲しいパッケージが無くなった」時に困らないようにする。
  3. 動作確認された組み合わせでの PPM パッケージセットを作成・保持できるようにする。
  4. ライセンス的にクリアなものだけを含むリポジトリを用意する。 (芋蔓式インストールで、ライセンス的にクリアでないパッケージが入ってしまうのを防ぐ)。

@ 手元では以下のように管理

 PPM
  |-- <category>
  |   `-- 8xx
  |       |-- <projects A> [ 公開 / export ]
  |       |   |-- module1.ppd -> (A)
  |       |   |-- module1.tar.gz -> (B)
  |       |   `-- ...
  |       `-- ...
  `-- pool
      |-- module1-x.yy
      |   |-- module1.x.yy.tar.gz
      |   |-- some documents...
      |   `-- build817
      |       |-- module1.ppd (A)
      |       `-- module1.tar.gz (B)
      `-- ...
@ pool
  • pool ディレクトリに「[モジュール]-[バージョン]」ディレクトリを作成する。同じバージョンでも、異なるバージョンは両方とも別々にキープしておく。
  • その下にソース tarball を置く。
  • ライセンス情報ファイルなども置く (touch Perl-License 等空のファイルを作成しておく)
  • PPM パッケージPPM::Make で作成し、その時に使用した ActivePerlビルド番号別にサブディレクトリを作って .tar.gz と .ppd を置く。
@ リポジトリ
  • ActivePerlビルド番号別にリポジトリを作成する。基本的には 6xx 系、8xx 系それぞれの中ではバイナリ互換性がある (PAR などは、ビルド番号に1対1でしか互換性がない)。
  • 必要に応じてカテゴリ別サブディレクトリを用意 (アクセス制限の都合などにより)
  • 必要に応じてプロジェクト毎にサブディレクトリを用意 (プロジェクト毎にパッケージセットを作るため)
  • リポジトリディレクトリからは pool 内の .ppd、.tar.gz へシンボリックリンクを張る。欲しいモジュールのバージョン、ビルド番号を選んでリンクする。
@ 公開
  • SambaApache などで、PPM ディレクトリ全部あるいは特定のリポジトリ部分を公開する。
  • 必要なら export して別サーバに置く。rsync や cp の -L オプションでシンボリックリンクを実ファイルに置き換えてアーカイブを作成する。

◇ Twitter やってます。この記事が気にいったらぜひ twitter.com/Naney の follower になってください。


[ 7月3日全て ]

2006年12月12日 (火)

PAR::Repositoryビルド済み Perl モジュールをネットワーク配信 このエントリーを含むはてなブックマーク

@ 実行可能ファイル作成としての PAR

PAR といえば Perl スクリプトを実行可能ファイル(Windows なら EXE 形式ファイル)に変換するモジュールとして有名である。

ちなみに実行可能ファイルを作成する部分はは PAR 0.97 より PAR-Packer パッケージに分けられ、PAR 自体はインストールしやすい pure Perl なパッケージになっている。

@ PAR モジュールアーカイブからのローダとしての PAR

PAR が提供するもう一つの(こちらが本来はメイン?)機能は、プログラムの実行時に必要な Perl モジュールPAR ファイルと呼ばれる Perl モジュールアーカイブファイルからロードする機能である。 XS モジュールなどもコンパイルすることができるどこかの環境で1度ビルドして PAR ファイルにしておけば、同じアーキテクチャのホスト上でそのまま利用することができる。

@ PAR リポジトリ

ロードしたい PAR ファイルはファイルパスだけではなく URL でも指定することができ、必要な時にオンデマンドでフェッチさせることができる。 これを使えば Perl プログラムの集中管理可能だ。

PAR 0.951 からは PAR リポジトリというコンセプトが追加され、パッケージ毎に作った PAR ファイルをサーバ上(あるいはローカル)のリポジトリに蓄積してオンデマンドでロードできるようになった。

個別に PAR ファイルを指定する従来の方式に比べてかなり便利そうである。 ということで試用してみた。

まずは

あたりをインストールし準備 OK。

@ 1. PAR リポジトリを作成する

最初に PAR-Repository に含まれている parrepo で。

 parrepo create -r /tmp/PAR

PAR リポジトリファイルの中にはデータベースファイルが作成されるが、これは DBM::Deep というアーキテクチャ非依存のものを使っているので、Linux でも Windows でもどちらからでもアクセス可能である (つまり Linux 上でリポジトリをメンテできるということだ)。

@ 2. Perl パッケージを PAR ファイル化する

次に必要な PAR ファイルを作成する。 作成したいパッケージを展開してビルドし、blib ができている状態で PAR::Dist を使ってパッケージ化する。

 perl Makefile.PL
 make
 make test
 perl -MPAR::Dist -e blib_to_par

例えば ActivePerl*1 上で WWW-Mechanize-1.20 を PAR ファイル化すると

 WWW-Mechanize-1.20-MSWin32-x86-multi-thread-5.8.8.par

というファイルが作成される。

普段から ActivePerl で必要なライブラリは基本的に自前で PPM パッケージ化して、動作確認した上で PPM リポジトリに蓄積するようにしているので、合わせて次の手順でパッケージを作ることになる。

 perl Makefile.PL
 nmake
 nmake test
 perl -MPAR::Dist -e blib_to_par
 make_ppm

*1ここでは Windows 上の

@ 3. PAR リポジトリPAR ファイルを登録する

PAR ファイルができたら parrepo でリポジトリに登録する。

 parrepo inject -r /tmp/PAR -f xxx.par

@ 4. PAR リポジトリ上のライブラリを使用してみる

例えば先ほどの WWW::Mechanize がリポジトリに登録されている状態で

 #!/usr/bin/perl
 use PAR { repository => 'file:///tmp/PAR/' };
 use WWW::Mechanize;
 my $mech = WWW::Mechanize->new;
 $mech->get('http://www.example.com');
 print $mech->content;

というスクリプトを書いて実行すると、PAR リポジトリから WWW::Mechanize がロードされて正しく実行される。

ここでリポジトリを Web サーバアップロードして、repository のところに URL を指定するようにすることもできる。 例えばリポジトリを http://www.example.com/PAR/ に配置したとすると

 #!/usr/bin/perl
 use PAR { repository => 'http://www.example.com/PAR/' };
 use WWW::Mechanize;
 my $mech = WWW::Mechanize->new;
 $mech->get('http://www.example.com');
 print $mech->content;

と書き換えることで、インストールしていない WWW::Mechanize を使用できるようになる。

@ Perl プログラムを実行形式化する

先ほどの Perl スクリプトを get_top_page.pl という名前で保存して pp で実行可能ファイル化する。

 pp -o get_top_page.exe -M PAR::Repository::Client get_top_page.pl

とすれば get_top_page.exe という実行可能ファイルが作成される。 WWW::Mechanize はオンデマンドで http://www.example.com/PAR/ からフェッチされるので、アップデートが必要な場合は新しい PAR ファイルを作成してリポジトリを更新するだけでよい。 EXE ファイルを作成しなおして利用者に配付しなすといった作業も不要だ。

@ スクリプトもリポジトリにおく

さらには実行するスクリプトをも PAR リポジトリに置いておくことが可能だ。

例えば WWW-Mechanize に含まれている mech-dump をオンデマンドにフェッチして実行する実行形式ファイルは以下のコマンドで作成できる。

 pp -o mech-dump.exe -M PAR::Repository::Client \
   -e "use PAR { repository => 'http://www.example.com/PAR/', \
                 run => 'mech-dump' }"

@ まとめ

ActivePerl では PPM があるとはいえ、普通のユーザにちょっとしたプログラムを使ってもらうのに「ActivePerlインストールして、PPM パッケージインストールして、……」というのは手間すぎる。

pp で プログラムに必要なものを全てバンドルした実行形式化ファイルにするという方法ももちろんあるのだが、頻繁にアップデートするようなスクリプトの場合には、起動のための部分だけ pp で作成しておいてあとは PAR リポジトリで集中管理するというのもちょっと魅力的である。


[ 12月12日全て ]

2006年12月13日 (水)

wxPerl PPM パッケージ このエントリーを含むはてなブックマーク

PAR リポジトリでいろいろ遊べそうなので、GUI 作成に wxPerl の方も久しびりにまた使おうかなと。

ただ wxPerl の本家が配布しているビルド済み PPM パッケージは、いまだに Wx 0.26 + wxWidgets 2.6.2 だったりして使う気になれない。 かといって、自分でビルドするのも結構手間だし。

で探していたところ Wx::Perl::Packager の開発者が、自身のサイトで PPM パッケージを配布しているのを発見。

最新のパッケージがあるのが嬉しい。

というか12月12日 にリリースされた wxWidgets 2.8.0 と、 CPAN にもまだない CVS 版 Wx (次の 0.66 のためのスナップショット)が、同じ12月12日に公開されているという早さ。

これがあれば、最新の機能が堪能できそうだ。


[ 12月13日全て ]

2007年2月5日 (月)

ActivePerl 5.8.8.820PPM では ppd/tar.gz を置いただけの PPM リポジトリを使えなくなった このエントリーを含むはてなブックマーク

ActivePerl 5.8.8.819 までは .ppd と .tar.gz ファイルを置いたディレクトリを Web サーバで公開しておけば、そのディレクトリの URLPPM リポジトリとして指定して使うことができた。

これが build 820 付属の PPM だとスキャンしてくれなくなった。 リポジトリの URL を指定する際、package.xml を指定しないと駄目らしい。

@ PPM リポジトリとして必要なファイル群を生成する

PPM リポジトリとして必要なファイル群は PPM-Make に含まれている rep_summary コマンドで生成することができる。

 rep_summary --rep /path/to/ppm/repository

今後はこれで package.xml その他のファイルを生成しておくことにする。

@ 複数の PPM リポジトリ

一方複数の PPM リポジトリの扱いは良くなった。build 819 付属の PPM では、複数のリポジトリにまたがってパッケージの依存解決ができなくなっていて不便だったのだが、build 820 のものでは、以前のバージョンのもののようにまたがれるようになった。

基本的な PPM パッケージ群用と、プロジェクト毎の PPM パッケージ群用の PPM リポジトリを組み合わせて使うときに、依存解決できないと厄介だったのでこれは○。

@ PATH

build 819 のインストーラでは site\bin に PATH を通してくれないので、site にインストールしたパッケージ付属のコマンドが呼び出せず不便であった(もちろん自分で PATH を通せばよいのだが)。

build 820 のインストーラでは site\bin も PATH にいれてくれるようになった。○。


[ ActivePerl ]


[ 2月5日全て ]

2007年2月9日 (金)

XAMPPWiKicker を動かしてみた。PPM インストール OK。 このエントリーを含むはてなブックマーク

Perl で書いた Web アプリケーションのポータブルな Win32 デモ環境として XAMPP を使ってみるとどんな感じになるか試してみた。

使ったバージョンは以下。

(http://www.apachefriends.org/jp/xampp-windows.html)

@ C: ドライブで試す

それぞれ 自己解凍型 7-ZIP アーカイブをとってくる。 最初に XAMPP を展開し、次にその xampp ディレクトリの中で Perl アドオンを展開。 xampp ディレクトリを c: の直下に移動する。

次にコマンドプロンプトを開き c:\xampp\perl\bin へ移動後 ppm コマンドを起動して作成済みの PPM パッケージインストールする。 インストール先は \xampp\perl 以下とドライブ無しのパスで指定されているようで、問題なく必要な Perl ライブラリをインストールできた。

次に \xampp\xampp-control.exe を実行して GUI 管理ツールを立ち上げ、その画面から Apache を起動。 普通の Win32Apacheインストールしてある PC だったため、xampp-control から Apache を起動したらそちらが立ち上がってしまったが、これは Svc にチェックが入っていたからだった。Svc を外せば \xampp 以下の Apache がきちんと起動する。

あとは \xampp\htdocs 以下で WiKicker CGI プログラムの配置や設定ファイルを作成すれば OK。 もともと WiKicker は相対パスだけで動くようになっている*1ので、問題なく実行することができた。

*1多分

@ 他のドライブに移す

一度セットアップできた \xampp ディレクトリを TrueCrypt 仮想ドライブにコピーして起動してみた。

こちらも問題なく OK。

ということで XAMPP でお手軽に Perl CGI プログラムの動く Web サーバ環境を作れることを確認できた。

問題があるとすれば XAMPP + Perl アドオンが馬鹿でかいところか。400MB オーバー。 今回何が一番時間がかかったかって、XAMPP + Perl アドオンを展開した直後の xampp ディレクトリを、後でまた使えるように 7-ZIP の最高圧縮する処理に時間がかかった。 使っている PC では 50分以上かかったよ。


[ 2月9日全て ]

2008年8月5日 (火)

Twitter への書き込みを自動的に Skype ムードメッセージに設定する for Windows このエントリーを含むはてなブックマーク

半年ぐらい前に Skype for LinuxTwitter への書き込みを自動的に Skype ムードメッセージに設定するスクリプト(記事)を作って cron で 10分毎に更新するようにした。

Windows BOX 上 Skype を使っている時も同様にできるように、Skype4COM を使うバージョンも書いてみた。 D-Bus ではなく Skype4COM を使うようにすることと、Skype4COM にはシフト JIS の文字列を渡すようにすること以外はほとんど同じ。

Skype4COM の DLL を登録し、Skype が起動している状態で以下の Perl スクリプトを実行。

 #!/usr/bin/perl

 use strict;
 use warnings;
 use Win32::OLE;
 use URI::Fetch;
 use XML::RSS;
 use Date::Parse;
 use Encode;

 my $id = '自分の Twitter ID';

 my $time = time;
 my $fetch_response
   = URI::Fetch->fetch(
               "http://twitter.com/statuses/user_timeline/$id.rss?dummy=$time")
   or die URI::Fetch->errstr;
 my $rss = XML::RSS->new;
 $rss->parse($fetch_response->content);
 die 'no items' if @{$rss->{items}} == 0;
 my $item = $rss->{items}->[0];
 my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst)
   = localtime(str2time($item->{pubDate}));
 my $title = $item->{title};

 my $mood
   = sprintf("$title [%02d/%02d %02d:%02d]", $mon + 1, $mday, $hour, $min);

 $mood = Encode::encode('shiftjis', $mood);

 my $skype = Win32::OLE->new('Skype4COM.Skype');
 $skype->Client->Start unless $skype->Client->IsRunning;
 my $profile = $skype->CurrentUserProfile;
 $profile->{MoodText} = $mood;

インストール済みだった ActivePerl 5.8.8.822 で動作を確認(ちなみに現時点での最新は ActivePerl 5.10.0.1003)。なお URI::FetchXML::RSS、Date::Parse(TimeDate) は標準では入っていないので PPM パッケージインストール

タスク スケジューラで10分毎に上記のスクリプトを wperl.exe で実行するように設定。 これで Windows 上でもさえずりをムードメッセージに設定できるようになった。


[ 8月5日全て ]

2009年2月9日 (月)

今日のさえずり - Doing リストが思ったよりよい このエントリーを含むはてなブックマーク

@ 2009年02月06日

  • 11:25 ここ数日探しているのだが、microSDカードリーダがでてこない。 *P3
  • 18:36 Linux 再起動繰り返しているので、ちょっと浮気して Twit 最新版にしてみた。P3 に慣れちゃっている自分を実感。 *Tw*
  • 23:28 ようやく今日、Linux kernel 2.6.26 に移行できた。 *P3

@ 2009年02月07日

  • 08:18 北方領土の日。 [mb]
  • 23:44 通帳見ながら去年の光熱費入力しようと思ったら、途中からクレジット支払いにかえたんだった。集計面倒だな。 *P3

@ 2009年02月09日


[ 2月9日全て ]

2009年2月22日 (日)

ActivePerl 5.8.9 build 825 + MinGW 5.1.4 + PARPerl スクリプトを実行可能ファイル このエントリーを含むはてなブックマーク

久しぶりに PAR の出番。 休日出勤して環境作り。

今回実行可能ファイルにしたい Perl プログラムが Perl 5.8 で開発・テストされているものの改訂版で、必要な PPM パッケージも 8xx 用に作りだめしてあるので、ActivePerl 5.8.9.825 上で行うことにした。

PAR::Packer は ActivePerl の build と合っていないとうまく動かないので、自分でソースからビルドして PPM パッケージ化する。 必要な依存モジュールのバージョンも軒並み上がっているので、それらもビルド

今まで Visual Studio 6.0 でビルドしていたのだけれど、この間 PC をかえてから入れていなかったので、今回は MinGW を使うことにした。 SourceForge.net 上から g++ をダウンロードしてネットワークインストールできないようなので、そこだけ SourceForge.JP で探してきてインストール

MinGW の bin ディレクトリを PATH に追加したら、特に問題なく Perl モジュールコンパイルできている。素晴しい。ExtUtils::FakeConfig 無くてもいいのかな。


[ 2月22日全て ]

2009年8月12日 (水)

今日のさえずり - 哭きの竜のポーズの人発見(多分寝てる) このエントリーを含むはてなブックマーク

naney:3819175819

@ 2009年08月10日

@ 2009年08月11日

  • 11:11 return foo = bar ? true : false; とか、やめてほしい。 *P3
  • 12:43 FriendFeed の友達リストの一括整理の仕方をようやく把握した。 *P3
  • 12:49 FriendFeed からポストしてみる。 http://ff.im/-6qNVn
  • 12:52 2009年8月8日の歩行: 3515歩、2.69km、33分、4.84km/h、消費 130.6kcal、脂肪燃焼 18.7g、1.7エクササイズ。 *P3
  • 12:53 2009年8月9日の歩行: 4570歩、3.51km、41分、5.02km/h、消費 171.9kcal、脂肪燃焼 24.5g、2.4エクササイズ。 *P3
  • 12:55 2009年8月10日の歩行: 4801歩、3.82km、35分、6.37km/h、消費 179.7kcal、脂肪燃焼 25.7g、2.6エクササイズ。 *P3
  • 16:32 哭きの竜のポーズの人発見(多分寝てる)。 *P3
  • 18:25 Dropbox がつまってリズムが崩れた。 *P3
  • 18:38 あ、/home が 6.9MB しか残っていなかった。 *P3
  • 18:57 ソフトウェアダウンロードアーカイブを一部 microSDHCカードに移動して /home を広げている最中。 *P3

@ 2009年08月12日

  • 09:31 今年の夏コミ日程を確認。8月14日から8月16日か。今週末なのね。 [mb]
  • 09:46 ソフマップ新店舗について。 L:秋葉原http://movapic.com/...
  • 12:24 2009年8月11日の歩行: 7514歩、6.01km、55分、6.49km/h、消費 282.5kcal、脂肪燃焼 40.4g、4.1エクササイズ。 *P3
  • 12:34 茶月のお持ち帰り限定お買い得セールってなんだ? あの店舗でイートインあるの? (と書いていて配達という選択肢の可能性に気づいた) [mb]
  • 12:37 水鉄砲って100円しないのな。 L:シモジマ [mb]
  • 12:49 クーピーペンシル買った。 [mb]
  • 12:54 マーボードワーフ。 [mb]
  • 12:57 @shuwatto クーピーペンシル、缶箱のデザインも昔と同じです。逆にキャラクター物とかお店で見つかりませんでした。 [mb]
  • 13:21 @HeroesC 子供用のクーピーペンシル店頭で見たのですが、あれ子供にも短すぎたりしないですか? (値段的にも割高感があったので今日は普通のをチョイス) *P3
  • 14:57 社内サーバにはいっている svnsvn merge --reintegrate できないバージョンです。 *P3
  • 15:42 危うくセブン-イレブンで生茶パンダ先生 in ボトル買うところだった。手にしたけど考えてみたら777円も出せん。 [mb]

[ 8月12日全て ]

2009年8月25日 (火)

ActivePerl をやめて Strawberry Perl このエントリーを含むはてなブックマーク

ActivePerl 5.10.0.1005 + Visual Studio 2005 SP1 上で PAR::Packer を使って実行可能ファイル化したものの、今日別の環境で動かしたら「このアプリケーションの構成が正しくないため、アプリケーションを開始できませんでした」というエラーがでてしまった。

今まで Visual Studio 6.0 で PPM パッケージの作成やら PAR::Packer による実行可能ファイル化をしていたので気がつかなかったのだが、調べてみると Visual Studio 2005 以降だとどうもいろいろ面倒らしい。

ActivePerl + PPM パッケージだと自分で PPM リポジトリを用意しておくことで、開発環境の統一が楽になるという利点があったのだけれどもしばらく一筋縄ではいかなさそうなので、別の Perl ディストリビューションを使ってみることにした。

Windows 上の Perl としてしばらく使ってみることにしたのは Strawberry Perl。現在のバージョンは 5.10.0.6。 以前にもちょっと入れてみたことはあったけれども、きちんと使ってみるのは初めて。

MinGW や dmake が同梱されており、CPAN.pm を使って UNIX 上と近い感覚で Perl モジュールインストールができる。 PAR::Packer を使って実行可能ファイル化した Perl スクリプトも実行できることを確認。

しばらく乗り替えてみることにする。


[ 8月25日全て ]

この日記のはてなブックマーク数 Add to Google RSS

Process Time: 0.0815900000000001s / load averages: 0.36, 0.26, 0.19
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)