OrePAN と cpanm を使ったCPAN モジュールの部分ミラーの運用管理 :Yokohama.pm #8
Upcoming SlideShare
Loading in...5
×
 

OrePAN と cpanm を使ったCPAN モジュールの部分ミラーの運用管理 :Yokohama.pm #8

on

  • 3,408 views

 

Statistics

Views

Total Views
3,408
Views on SlideShare
3,134
Embed Views
274

Actions

Likes
6
Downloads
13
Comments
0

3 Embeds 274

http://d.hatena.ne.jp 271
http://paper.li 2
http://webcache.googleusercontent.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

OrePAN と cpanm を使ったCPAN モジュールの部分ミラーの運用管理 :Yokohama.pm #8 OrePAN と cpanm を使ったCPAN モジュールの部分ミラーの運用管理 :Yokohama.pm #8 Presentation Transcript

  • OrePAN と cpanm を使ったCPAN モジュールの部分ミラーの運用管理 大窪 聡 ボンヌ / bonnu / id:boxphere
  • アウトライン1. はじめに2. なぜ CPAN ミラーをローカルに作るのか3. ミラーを作り、維持するために必要な道具4. ローカルミラーを作る5. ローカルミラーを利用したデプロイ6. ローカルミラーを運用する7. ...チラ裏8. まとめ / おわりに
  • はじめに今回の発表の内容は kazeburo さんの11年2月時点のブログの内容が大元のベースになっています。 http://blog.nomadscafe.jp/2011/02/orepancpanmcpancpan.ht ml当時は kazeburo さん作の patch があたった状態での運用フローが紹介されていましたが、現在は本家 cpanm に patch の内容の一部が組み込まれたりなど、状況も少し変わりましたので、整理をかねつつ 僭越ながら発表させていただきます。
  • なぜ CPAN ミラーをローカルに作るのか 本家 CPAN の更新に影響を受けずにモジュールをインストールしたい  アプリケーションが依存するモジュールの挙動を保障するために バージョンを固定する必要があります。 アプリケーションをネットに依存せずに確実にインストールしたい  search.cpan.org やそのミラーは作者による取り下げも反映されてし まう。  何より必ず CPAN ネットワークが上がっている保障はない。 複数台をセットアップする際に外部ネットワークに接続したくない  数十台規模になればなおさら。セットアップを素早く行うためにも 重要。  企業によっては外部ネットワークへの接続ポリシーに縛られること も。 社内向けパッケージを CPAN モジュールと同様に扱いたい
  • ミラーを作り、維持するために必要な道具 cpanm (App::cpanminus)  http://search.cpan.org/dist/App-cpanminus/ OrePAN  https://github.com/tokuhirom/OrePAN pm-uninstall (App::pmuninstall)  http://search.cpan.org/dist/App-pmuninstall/
  • ミラーを作り、維持するために必要な道具 cpanm をセットアップする $ cd ~/bin $ curl -LO http://xrl.us/cpanm $ chmod +x cpanm OrePAN をセットアップする $ cpanm https://github.com/tokuhirom/OrePAN/tarball/master orepan.pl、orepan_index.pl にパスを通す ※ PERL5_LIB を local::lib で rc ファイルに追加する等、好みで設定します。 私の場合は環境変数に何も設定したくないので alias を rc に入れています。 $ alias orepan.pl=perl -Mlocal::lib=~/perl5 ~/perl5/bin/orepan.pl $ alias orepan_index.pl=perl -Mlocal::lib=~/perl5 ~/perl5/bin/orepan_index.pl
  • ローカルミラーを作る
  • ローカルミラーを作る.モジュールのダウンロード アプリケーションの Makefile.PL から依存モジュールをダウンロー ドする $ cd /path/to/Proj $ cat Makefile.PL use inc::Module::Install; name Proj; version 0.1; requires HTTP::Server::Simple::PSGI; requires Plack; ... WriteAll;
  • ローカルミラーを作る.モジュールのダウンロード アプリケーションの Makefile.PL から依存モジュールをダウンロー ドする $ cpanm -L local-tmp --mirror=http://backpan.perl.org/ --save-dists=cpan-mirror –n --installdeps . Configuring Proj-0.1 ... OK ==> Found dependencies: HTTP::Server::Simple::PSGI, URI, HTTP::Body, MIME::Types, LWP --> Working on HTTP::Server::Simple::PSGI Fetching http://backpan.perl.org/authors/id/M/MI/MIYAGAWA/HTTP-Server-Simple- PSGI-0.14.tar.gz ... OK Configuring HTTP-Server-Simple-PSGI-0.14 ... OK ==> Found dependencies: HTTP::Server::Simple ... <== Installed dependencies for .. Finishing. 21 distributions installed ※削除されたモジュールが必要な場合もあるため、ここでは backpan を指定してい ます。 ※ インストール先に指定している local-tmp は消してもよいディレクトリを指定し
  • ローカルミラーを作る.モジュールのダウンロード ダウンロードしたファイルの確認 $ find ./cpan-mirror -name "*.tar.gz" ./cpan-mirror/authors/id/R/RJ/RJBS/Test-Deep-0.108.tar.gz ./cpan-mirror/authors/id/P/PE/PETDANCE/HTML-Tagset-3.20.tar.gz ./cpan-mirror/authors/id/M/MA/MARKOV/MIME-Types-1.32.tar.gz ./cpan-mirror/authors/id/M/MI/MIYAGAWA/HTTP-Server-Simple-PSGI-0.14.tar.gz ...
  • ローカルミラーを作る.インデックスの作成 orepan_index.pl を利用してインデックスを作成する $ orepan_index.pl -r ./cpan-mirror 2011-11-16T20:22:46 [INFO] get package names of cpan- mirror/authors/id/R/RJ/RJBS/Test-Deep-0.108.tar.gz at /User/bonnu/perl5/bin/orepan_index.pl line 51 2011-11-16T20:22:46 [INFO] retrieve meta data at /User/bonnu/perl5/lib/perl5/OrePAN/Archive.pm line 72 ... 2011-11-16T20:22:47 [INFO] Adding HTTP-Server-Simple-0.44 at /User/bonnu/perl5/lib/perl5/OrePAN/Package/Index.pm line 64 2011-11-16T20:22:47 [INFO] Save cpan-mirror/modules/02packages.details.txt.gz at /User/bonnu/perl5/lib/perl5/OrePAN/Package/Index.pm line 92
  • ローカルミラーを作る.インデックスの作成 作成したインデックスファイルの確認 $ tree -L 2 ./cpan-mirror cpan-mirror |-- authors | |-- 00whois.xml | `-- id/ `-- modules `-- 02packages.details.txt.gz ローカルミラーが出来上がりました。
  • ローカルミラーを作る.バージョン管理システムへの登録 例として、アプリケーションのプロジェクト直下にミラーを登録す る $ git add cpan-mirror $ git commit -a -m initial mirror $ git push origin master ※ デプロイを行う際にローカルで完結するため非常に便利です。
  • ローカルミラーを利用してのデプロイ
  • ローカルミラーを利用してのデプロイ デプロイしたいサーバ上でプロジェクトをチェックアウトする $ git clone git@repos:bonnu/Proj.git プロジェクトに含まれるミラーを使って cpanm を実行する $ cd Proj $ cpanm -L local --mirror=$PWD/cpan-mirror --mirror-only --installdeps . --> Working on . Configuring Proj-0.1 ... OK ==> Found dependencies: HTTP::Server::Simple::PSGI, URI, HTTP::Body, MIME::Types, LWP --> Working on HTTP::Server::Simple::PSGI Fetching file:///pato/to/Proj/cpan-mirror/authors/id/M/MI/MIYAGAWA/HTTP-Server-Simple-PSGI-0.14.tar.gz ... OK ... Building and testing libwww-perl-6.03 ... OK Successfully installed libwww-perl-6.03 <== Installed dependencies for .. Finishing. 21 distributions installed
  • ローカルミラーを運用する
  • ローカルミラーを運用する.ミラーの共有・公開 ミラーを http で公開する $ perl -Mlocal::lib=$HOME/perl5 -MPlack::App::Directory $HOME/perl5/bin/plackup -p 8888 -e "Plack::App::Directory->new({root => /path/to/Proj/cpan-mirror})- >to_app"社内で立ち上がっているリポジトリサーバ等があればそこの httpd を使って配信するのがベターです。その場合はリポジトリサーバ上で、git などによるインデックスファイルの更新を定期的に取得するようにします(crontab や daemon によるgit pull / svn up 等。)
  • ローカルミラーを運用する.依存モジュールを追加する Makefile.PL に依存モジュールの記述を追加 $ cd /path/to/Proj $ vi Makefile.PL + requires Text::Xslate; cpanm を実行する $ cpanm -L local --mirror=$PWD/cpan-mirror --mirror=http://backpan.perl.org/ --save-dists=$PWD/cpan-mirror --installdeps . ...(ミラーに足りないもののみ CPAN からダウンロードされる)...
  • ローカルミラーを運用する.依存モジュールを追加する orepan_index.pl を使ってインデックスを再生成する $ rm ./cpan-mirror/modules/02packages.details.txt.gz $ orepan_index.pl -r ./cpan-mirror ... $ git commit –m update mirror cpan-mirror
  • ローカルミラーを運用する.オリジナルモジュールを追加する orepan.pl を利用してミラーに登録する $ orepan.pl -d /path/to/Proj/cpan-mirror -p BOXPHERE Encomp-0.01.tar.gz # 手前味噌のモジュールを作者 BOXPHERE で登録 ... github にはあるが CPAN にはない、というようなモジュールも orepan.pl を使えば問題ありません。 社内のみで利用可能なモジュールについても同様です。 $ cd /path/to/Proj $ vi Makefile.PL + requires Encomp;
  • ローカルミラーを運用するモジュールを削除/ダウングレードする ミラーでは: その tarball を削除してインデックスを再生成 $ rm ./cpan-mirror/authors/id/D/DA/DANKOGAI/Regexp-Optimizer- 0.15.tar.gz $ rm ./cpan-mirror/modules/02packages.details.txt.gz $ orepan_index.pl -r ./cpan-mirror ミラー上でダウングレードする場合は最新のバージョンが古いもの になるように更新... >< $ rm ./cpan-mirror/authors/id/D/DA/DAVECROSS/XML-Feed-0.46.tar.gz $ rm ./cpan-mirror/modules/02packages.details.txt.gz $ orepan_index.pl -r ./cpan-mirror $ wget http://search.cpan.org/CPAN/authors/id/S/SI/SIMONW/XML-Feed- 0.23.tar.gz $ orepan.pl –d cpan-mirror –p SIMONW XML-Feed-0.23.tar.gz
  • ローカルミラーを運用するモジュールを削除/ダウングレードする デプロイ先では: pm-uninstall を実行する $ cd /path/to/Proj $ pm-uninstall –L local -f XML::Feed ... Successfully uninstalled XML::Feed ダウングレードの場合は入れ直しも必要 $ git pull origin master # mirror と Makefile.PL を最新にしておく $ pm-uninstall –L local -f XML::Feed $ cpanm -L local --mirror=$PWD/cpan-mirror --mirror-only --installdeps . ※ダウングレードした後はアプリケーションの再起動やリロードが必要です ※デプロイ台数が多い場合、arch に対応しつつ rsync で local を配布したほうがよい かと...
  • チラ裏 Carton でミラーを利用する: carton.lock の生成 $ PERL_CARTON_PATH=$PWD/local PERL_CARTON_MIRROR=$PWD/cpan-mirror carton install Installing modules using Makefile.PL Successfully installed HTTP-Server-Simple-0.44 Successfully installed HTTP-Server-Simple-PSGI-0.14 Successfully installed Mouse-0.97 ... 29 distributions installed Complete! Modules were installed into /path/to/Proj/local やった!Complete ならばそのプロジェクトは配布できます!プロジェクトに carton.lock をコミットしてデプロイサーバで使いましょう。
  • チラ裏 Carton でミラーを利用する: デプロイ $ cd /path/to/Proj $ git pull origin master $ PERL_CARTON_PATH=$PWD/local PERL_CARTON_MIRROR=$PWD/cpan-mirror carton install --deployment Installing modules using carton.lock (deployment mode) Successfully installed HTTP-Server-Simple-0.44 Successfully installed HTTP-Server-Simple-PSGI-0.14 Successfully installed Mouse-0.97 ... 29 distributions installed Complete! Modules were installed into /path/to/Proj/local
  • チラ裏 minicpan_webserver で POD を見る $ cd; $ cpanm CPAN::Mini::Webserver # dummy file をインデックスに追加(使わない) $ touch /path/to/Proj/cpan-mirror/authors/01mailrc.txt.gz $ echo local: /path/to/Proj/cpan-mirror > ~/.minicpanrc $ minicpan_webserver  動くけど、改造したほうがよさそう・・・ 重い
  • まとめ / おわりに ミラーを運用することでサービスを簡単に設置できる状態を 整える  実際にはプロジェクトに関連づけて tarball をまとめておくだけです 3年後、今の CPAN モジュールをベースにして書かれたアプ リケーションを楽にセットアップできるように  昔話: CatMoose 以前のバージョンで書かれているプロジェクトを(リ ファクタなしで)すんなり動かせる気は僕はしません...  API が変更されるモジュールも時折ある。  一時期のブログで参照されていた野良リポジトリのモジュール等は、 リポジトリがなくなっていることも。  オリジナルが見つからなかったり、探すのに苦労したり... 開発者と運用者が違う場合にも有効な伝達ツールに  業務分掌、または今の自分と未来の自分/後輩。
  • 各種モジュール・ツール作者のtokuhirom さん、miyagawa さん、xaicron さん、 ベースとなった記事を書かれた kazeburo さん に感謝します。 ご清聴ありがとうございました。