― Web Technology and Life ―

楽にDarkPAN作れるOrePAN2::ServerでCPAN Authorになったよ!

2013-11-06
DarkPANをOrePAN2ベースでサーバーとして立ち上げられるOrePAN2::ServerなるものをsongmuさんとCPANにあげたとももに、それによってCPAN Authoerになったことを謹んでご報告いたします。で、使い方とか個人的な回想録をば。

DarkPANとかOrePAN2って何?メリットとラストワンマイル

DarkPANとはCPANにあげられないモジュールや、CPANにアクセスできない環境で、CPANモジュールをキャッシュ的にためておく社内用のCPANミラーのことです。OrePAN2は、DarkPANを作成できるコマンドラインツールで大変便利にできています。

ただ、OrePAN2はサーバーではないので、cpanm,cartonから落とすにはplackupするなりApacheとかNginxとかかませる必要があるし、プッシュも、SSH経由でOrePAN2のコマンドをたたいたりする必要があるので、なんとなくそのあたりが個人的にラストワンマイルだと思ったのです。

要は、

  • 普通にShipIt的な感じであげたり
  • cpanm --mirror=http://orepan/ OreOreModuleできたり

するものがほしいよ!って思った。

OrePAN2::Serverとその使い方

そんなことをつぶやいていたら、sonmguさんがさくっとスクリプト書いてくれてもろもろやりとりして出来上がったのが、OrePAN2のラッパーのOrePAN2::Serverで、暫定の使い方を以下に日本語で書いておきますが、とりあえず、SYNOPSISをコピると要はこんな感じ。

    #launch orepan2 standalone server http://localhost:5888/
    % orepan2-server.pl -p 5888

    #upload git managed module to my orepan2 by curl 
    curl --data-urlencode 'module=git@github.com:Songmu/p5-App-RunCron.git' --data-urlencode 'author=SONGMU' http://localhost:5888/
    curl --data-urlencode 'module=git+ssh://git@mygit/home/git/repos/MyModule.git' --data-urlencode 'author=SONGMU' http://localhost:5888/
    curl --data-urlencode 'module=git+file:///home/hirobanex/project/MyModule.git' --data-urlencode 'author=SONGMU' http://localhost:5888/

    #install by cpanm
    cpanm --mirror=http://localhost:5888/orepan Your::Module

    #install by carton install
    PERL_CARTON_MIRROR=http://localhost:5888/orepan carton install

一応、目次というかこんなことができるよってサマリ

サーバーを立ち上る

  • 付属のスクリプトを使う
  • Basic authとかつけたいからって既存のpsgiアプリにくっつける

立ち上げたDarkPANにモジュールをアップロードする

  • curlとかでhttp postする~git+ssh://,git@github.com~
  • minillaと連携して、minil releaseする

DarkPANからのモジュールのインストール

  • cpanm
  • carton

サーバーを立ち上る

付属のスクリプトを使う

cpanm OrePAN2::Serverして、

    orepan2-server.pl -p 5888 -E production -S Starlet

すると、以下のようになります。

  • http://localhost:5888/でサーバーが立ち上がる
  • http://localhost:5888/orepanってダウンロード用ディレクトリができる
  • http://localhost:5888/authenqueryってアップロードURLができる

/authenqueryとか/orepanのパスかえたければ、

    orepan2-server.pl --delivery-dir=hogepan --authenquery-path=upload

とかって立ち上げればよいです。

その他、orepan2-server.plのドキュメント参照

Basic authとかつけたいからって既存のpsgiアプリにくっつける

単純に、くっつけたっかたらこんな感じで

    use Plack::Builder;
    use OrePAN2::Server::CLI;
    use Your::App;

    my $orepan = OrePAN2::Server::CLI->new_with_options(
        delivery_dir     => "orepan",
        delivery_path    => "/",
        authenquery_path => "/authenquery",
        compress_index   => 1,
    );

    builder {
        mount '/'       => Your::App->to_app();
        mount '/orepan' => $orepan->app;
    };

アップローダーだけほしかったりしたら、以下のようにかけます。

    use Plack::Builder;
    use OrePAN2::Server;
    use Your::App;

    my $orepan_uploader = OrePAN2::Server->uploader(
        directory        => "orepan",
        compress_index   => 1,
    );

    builder {
        mount '/'            => Your::App->to_app();
        mount '/authenquery' => builder {
            enable "Auth::Basic", authenticator => sub { return ($_[0] eq 'userid' && $_[1] eq 'password') };
            $orepan_uploader;
        }
    };

もっとこったことをしたかったら、OrePAN2をベースに自分でOrePAN2::Server2を書く感じですねw

立ち上げたDarkPANにモジュールをアップロードする

curlとかでhttp postする~git+ssh://,git@github.com~

    curl --data-urlencode 'module=git@github.com:Songmu/p5-App-RunCron.git' --data-urlencode 'author=SONGMU' http://localhost:5888/
    curl --data-urlencode 'module=git+ssh://git@mygit/home/git/repos/MyModule.git' --data-urlencode 'author=SONGMU' http://localhost:5888/
    curl --data-urlencode 'module=git+file:///home/hirobanex/project/MyModule.git' --data-urlencode 'author=SONGMU' http://localhost:5888/

githubのをさくっとHTTPでリモートのサーバーにつっこめるし、社内に立っている野良gitリポジトリからもいれられる。なお、OrePAN2でgit+ssh://oreoregit/repos/OreOreModuleで落とせるようになったのは数日前に0.16がリリースされてから。

minillaと連携して、minil releaseする

これは大きな注意と三つのステップが必要です。

まず、minil.tomlに以下のように書きます。これ書かないと、~/.pauseみてCPANにアップしちゃうからマジで注意w

    [release]
    pause_config="/path/to/your-module/.pause"

で/path/to/your-module/.pauseに以下のように書きます。

    upload_uri http://localhost:5888/orepan
    user hirobanex
    password password

そしたら、

    minil release

すればあとはよしなに。今ではMinillaのドキュメントにもOrePAN2::Serverが言及されております!(ぼくがドキュメントのパッチ書いたんだけどねw)

マジでtokuhirom++ですね!

DarkPANからのモジュールのインストール

これは簡単に以下の通り。

    #install by cpanm
    cpanm --mirror=http://localhost:5888/orepan Your::Module

    #install by carton install
    PERL_CARTON_MIRROR=http://localhost:5888/orepan carton install

おわりに ~リリースまでの話と謝辞~

いろいろ書いたのですが、スピリチュアル的な感じでひとつ記事書けそうだったので、ここでは簡単に。

上述のとおりベーススクリプト書いたりクラス化したりしたのがsongmuさんで、ぼくは周辺かためた感じでひとつのモジュールになりまして、大変昨今の流行のコーディングスタイルだったのではないかと思います。

で、なによりも、YAPCに参加する度とかそもそも今年の目標にそろそろCPANに何かあげてここ数年の見える成果的なのして一区切りつけたいなーと思っていた中で、ほぼsongmuさんのコードなんだけどpushしてもらってCPAN Authorにさせてもらい、またCLIの実装を中心に大変勉強させて頂き、songmuさんには大変感謝です。songmu++!!

Perl update_at : 2013-11-06T12:14:40
hirobanex.netの更新情報の取得
 RSSリーダーで購読する   
blog comments powered by Disqus