SlideShare a Scribd company logo
1 of 27
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 さん
             に感謝します。


     ご清聴ありがとうございました。

More Related Content

What's hot

カオスエンジニアリング入門〜ChaosBladeの紹介〜
カオスエンジニアリング入門〜ChaosBladeの紹介〜カオスエンジニアリング入門〜ChaosBladeの紹介〜
カオスエンジニアリング入門〜ChaosBladeの紹介〜Nobuhide Watanabe
 
CMSとPerlで遊ぼう
CMSとPerlで遊ぼうCMSとPerlで遊ぼう
CMSとPerlで遊ぼうDaiki Ichinose
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Masahiro Nagano
 
omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜Sotaro Omura
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略Hiroshi SHIBATA
 
Mod lua
Mod luaMod lua
Mod luado_aki
 
AOSPをミラーしてみた
AOSPをミラーしてみたAOSPをミラーしてみた
AOSPをミラーしてみたkinneko
 
最近、僕がハマったFuelPHPの紹介
最近、僕がハマったFuelPHPの紹介最近、僕がハマったFuelPHPの紹介
最近、僕がハマったFuelPHPの紹介Naoto Mawatari
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefnpsg
 
10分で作る Node.js Auto Scale 環境 with CloudFormation
10分で作る Node.js Auto Scale 環境 with CloudFormation10分で作る Node.js Auto Scale 環境 with CloudFormation
10分で作る Node.js Auto Scale 環境 with CloudFormationKazuyuki Honda
 
第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会Yasutaka Hamada
 
ChefとPuppetの比較
ChefとPuppetの比較ChefとPuppetの比較
ChefとPuppetの比較Sugawara Genki
 
Cakephp tokyo5
Cakephp tokyo5Cakephp tokyo5
Cakephp tokyo5ichikaway
 
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-靖 小田島
 
15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )hiro345
 
Dockerでデプロイ
DockerでデプロイDockerでデプロイ
Dockerでデプロイoshiro_seiya
 

What's hot (20)

カオスエンジニアリング入門〜ChaosBladeの紹介〜
カオスエンジニアリング入門〜ChaosBladeの紹介〜カオスエンジニアリング入門〜ChaosBladeの紹介〜
カオスエンジニアリング入門〜ChaosBladeの紹介〜
 
Puppetのススメ
PuppetのススメPuppetのススメ
Puppetのススメ
 
CMSとPerlで遊ぼう
CMSとPerlで遊ぼうCMSとPerlで遊ぼう
CMSとPerlで遊ぼう
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
 
omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜
 
最近のRails事情 - 4.1!
最近のRails事情 - 4.1!最近のRails事情 - 4.1!
最近のRails事情 - 4.1!
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
 
Mod lua
Mod luaMod lua
Mod lua
 
AOSPをミラーしてみた
AOSPをミラーしてみたAOSPをミラーしてみた
AOSPをミラーしてみた
 
最近、僕がハマったFuelPHPの紹介
最近、僕がハマったFuelPHPの紹介最近、僕がハマったFuelPHPの紹介
最近、僕がハマったFuelPHPの紹介
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chef
 
10分で作る Node.js Auto Scale 環境 with CloudFormation
10分で作る Node.js Auto Scale 環境 with CloudFormation10分で作る Node.js Auto Scale 環境 with CloudFormation
10分で作る Node.js Auto Scale 環境 with CloudFormation
 
第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会
 
ChefとPuppetの比較
ChefとPuppetの比較ChefとPuppetの比較
ChefとPuppetの比較
 
Cakephp tokyo5
Cakephp tokyo5Cakephp tokyo5
Cakephp tokyo5
 
Tottoruby 20110903
Tottoruby 20110903Tottoruby 20110903
Tottoruby 20110903
 
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
 
15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )
 
about Perl5.10
about Perl5.10about Perl5.10
about Perl5.10
 
Dockerでデプロイ
DockerでデプロイDockerでデプロイ
Dockerでデプロイ
 

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

今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門Masahito Zembutsu
 
microPCFを使ってみよう
microPCFを使ってみようmicroPCFを使ってみよう
microPCFを使ってみようHiroaki_UKAJI
 
恋に落ちるデプロイツール
恋に落ちるデプロイツール恋に落ちるデプロイツール
恋に落ちるデプロイツールtotty jp
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on dockerHiroshi Miura
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on dockerHiroshi Miura
 
シンプルなシステム構成フレームワークalnair
シンプルなシステム構成フレームワークalnairシンプルなシステム構成フレームワークalnair
シンプルなシステム構成フレームワークalnairNaoya Inada
 
(続) はじめてのCloud Foundry
(続) はじめてのCloud Foundry(続) はじめてのCloud Foundry
(続) はじめてのCloud FoundryTomohiro Ichimura
 
20140612_Docker上でCloudStackを動かしてみる!!
20140612_Docker上でCloudStackを動かしてみる!!20140612_Docker上でCloudStackを動かしてみる!!
20140612_Docker上でCloudStackを動かしてみる!!Midori Oge
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Masahito Zembutsu
 
Nseg20120929
Nseg20120929Nseg20120929
Nseg20120929hiro345
 
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境Masashi Shinbara
 
Nseg20120825
Nseg20120825Nseg20120825
Nseg20120825hiro345
 
Capistranoで自動デプロイ
Capistranoで自動デプロイCapistranoで自動デプロイ
Capistranoで自動デプロイtoyoshi
 
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座Masahito Zembutsu
 
Dockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックDockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックEmma Haruka Iwao
 
環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介Etsuji Nakai
 
CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1Kotaro Noyama
 

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

今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
 
microPCFを使ってみよう
microPCFを使ってみようmicroPCFを使ってみよう
microPCFを使ってみよう
 
恋に落ちるデプロイツール
恋に落ちるデプロイツール恋に落ちるデプロイツール
恋に落ちるデプロイツール
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
 
How to run P4 BMv2
How to run P4 BMv2How to run P4 BMv2
How to run P4 BMv2
 
シンプルなシステム構成フレームワークalnair
シンプルなシステム構成フレームワークalnairシンプルなシステム構成フレームワークalnair
シンプルなシステム構成フレームワークalnair
 
(続) はじめてのCloud Foundry
(続) はじめてのCloud Foundry(続) はじめてのCloud Foundry
(続) はじめてのCloud Foundry
 
20140612_Docker上でCloudStackを動かしてみる!!
20140612_Docker上でCloudStackを動かしてみる!!20140612_Docker上でCloudStackを動かしてみる!!
20140612_Docker上でCloudStackを動かしてみる!!
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
 
Nseg20120929
Nseg20120929Nseg20120929
Nseg20120929
 
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
 
Nseg20120825
Nseg20120825Nseg20120825
Nseg20120825
 
Capistranoで自動デプロイ
Capistranoで自動デプロイCapistranoで自動デプロイ
Capistranoで自動デプロイ
 
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
【18-E-3】クラウド・ネイティブ時代の2016年だから始める Docker 基礎講座
 
Dockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックDockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニック
 
環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介
 
CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1
 
曖昧 RPM 講座
曖昧 RPM 講座曖昧 RPM 講座
曖昧 RPM 講座
 
130412 kayac-cinnamon
130412 kayac-cinnamon130412 kayac-cinnamon
130412 kayac-cinnamon
 

Recently uploaded

デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 

Recently uploaded (8)

デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 

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

  • 1. OrePAN と cpanm を使った CPAN モジュールの部分ミラーの運用管 理 大窪 聡 ボンヌ / bonnu / id:boxphere
  • 2. アウトライン 1. はじめに 2. なぜ CPAN ミラーをローカルに作るのか 3. ミラーを作り、維持するために必要な道具 4. ローカルミラーを作る 5. ローカルミラーを利用したデプロイ 6. ローカルミラーを運用する 7. ...チラ裏 8. まとめ / おわりに
  • 3. はじめに 今回の発表の内容は kazeburo さんの11年2月時点のブログの内 容が大元のベースになっています。  http://blog.nomadscafe.jp/2011/02/orepancpanmcpancpan.ht ml 当時は kazeburo さん作の patch があたった状態での運用フロー が紹介されていましたが、現在は本家 cpanm に patch の内容の 一部が組み込まれたりなど、状況も少し変わりましたので、整 理をかねつつ 僭越ながら発表させていただきます。
  • 4. なぜ CPAN ミラーをローカルに作るのか  本家 CPAN の更新に影響を受けずにモジュールをインストールしたい  アプリケーションが依存するモジュールの挙動を保障するために バージョンを固定する必要があります。  アプリケーションをネットに依存せずに確実にインストールしたい  search.cpan.org やそのミラーは作者による取り下げも反映されてし まう。  何より必ず CPAN ネットワークが上がっている保障はない。  複数台をセットアップする際に外部ネットワークに接続したくない  数十台規模になればなおさら。セットアップを素早く行うためにも 重要。  企業によっては外部ネットワークへの接続ポリシーに縛られること も。  社内向けパッケージを CPAN モジュールと同様に扱いたい
  • 5. ミラーを作り、維持するために必要な道具  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/
  • 6. ミラーを作り、維持するために必要な道具  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'
  • 8. ローカルミラーを作る. モジュールのダウンロード  アプリケーションの 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;
  • 9. ローカルミラーを作る. モジュールのダウンロード  アプリケーションの 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 は消してもよいディレクトリを指定し
  • 10. ローカルミラーを作る. モジュールのダウンロード  ダウンロードしたファイルの確認 $ 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 ...
  • 11. ローカルミラーを作る. インデックスの作成  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
  • 12. ローカルミラーを作る. インデックスの作成  作成したインデックスファイルの確認 $ tree -L 2 ./cpan-mirror cpan-mirror |-- authors | |-- 00whois.xml | `-- id/ `-- modules `-- 02packages.details.txt.gz ローカルミラーが出来上がりました。
  • 13. ローカルミラーを作る. バージョン管理システムへの登録  例として、アプリケーションのプロジェクト直下にミラーを登録す る $ git add cpan-mirror $ git commit -a -m 'initial mirror' $ git push origin master ※ デプロイを行う際にローカルで完結するため非常に便利です。
  • 15. ローカルミラーを利用してのデプロイ  デプロイしたいサーバ上でプロジェクトをチェックアウトする $ 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
  • 17. ローカルミラーを運用する. ミラーの共有・公開  ミラーを 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 等。)
  • 18. ローカルミラーを運用する. 依存モジュールを追加する  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 からダウンロードされる)...
  • 19. ローカルミラーを運用する. 依存モジュールを追加する  orepan_index.pl を使ってインデックスを再生成する $ rm ./cpan-mirror/modules/02packages.details.txt.gz $ orepan_index.pl -r ./cpan-mirror ... $ git commit –m 'update mirror' cpan-mirror
  • 20. ローカルミラーを運用する. オリジナルモジュールを追加する  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';
  • 21. ローカルミラーを運用する モジュールを削除/ダウングレードする  ミラーでは: その 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
  • 22. ローカルミラーを運用する モジュールを削除/ダウングレードする  デプロイ先では: 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 を配布したほうがよい かと...
  • 23. チラ裏  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 をコミットしてデプロイサーバで使いましょう。
  • 24. チラ裏  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
  • 25. チラ裏  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  動くけど、改造したほうがよさそう・・・ 重い
  • 26. まとめ / おわりに  ミラーを運用することでサービスを簡単に設置できる状態を 整える  実際にはプロジェクトに関連づけて tarball をまとめておくだけです  3年後、今の CPAN モジュールをベースにして書かれたアプ リケーションを楽にセットアップできるように  昔話: CatMoose 以前のバージョンで書かれているプロジェクトを(リ ファクタなしで)すんなり動かせる気は僕はしません...  API が変更されるモジュールも時折ある。  一時期のブログで参照されていた野良リポジトリのモジュール等は、 リポジトリがなくなっていることも。  オリジナルが見つからなかったり、探すのに苦労したり...  開発者と運用者が違う場合にも有効な伝達ツールに  業務分掌、または今の自分と未来の自分/後輩。
  • 27. 各種モジュール・ツール作者の tokuhirom さん、miyagawa さん、xaicron さん、 ベースとなった記事を書かれた kazeburo さん に感謝します。 ご清聴ありがとうございました。