Slide 1

Slide 1 text

mod_perl to PSGI/Plack Gotanda.pm #4 LT すずきまさし / @masasuz 2015/03/17 1

Slide 2

Slide 2 text

おまえだれよ すずきまさし / @masasuz 五反田の辺りにある中小web企業 開発/運用基盤的整備 社内システム開発 zsh / perl / MySQL / Ubuntu / Debian / i☆Ris 2

Slide 3

Slide 3 text

最近使っている ツール/技術/ミドルウェア Elasticsearch + Kibana Fluentd Gitbucket 3

Slide 4

Slide 4 text

今年使いたい ツール/技術/ミドルウェア Docker Ansible Sensu 4

Slide 5

Slide 5 text

mod_perl to PSGI/Plack Gotanda.pm #4 LT すずきまさし / @masasuz 2015/03/17 5

Slide 6

Slide 6 text

8年近く前から動いているmod_perlなプ ロジェクト群をPSGI/Plack化しようと している。というお話です。 新規で作るプロジェクトはPSGI/Plack で動いてます。 現在進行形です。 6

Slide 7

Slide 7 text

もくじ 現状がどうなってるのか どう変えるのか やったこと 発生した問題 7

Slide 8

Slide 8 text

新しめの プロジェクト現状 Amon2 Starlet + Server::Starter + Upstart 独自ビルドしたperl(5.18) (Perl::Build) cpanfileでのモジュール管理(Carton) 社内モジュールはDarkpanで管理 (OrePAN2::Server) 8

Slide 9

Slide 9 text

古めの プロジェクトの現状 Sledge+MoFedge (Splite, Amon2) Apache+mod_perl system perl deb package + CPANプロジェクト 9

Slide 10

Slide 10 text

古めのプロジェクト 何がつらかったか 10

Slide 11

Slide 11 text

sytem perlつらい ディストリビューションが変わる (updateする)とperlのバージョンが変 わる ディストリビューションupdateのた びの検証つらい とはいえ、セキュリティー関連でい つまでも古いディストリビューショ ンを使うわけにはいかない 11

Slide 12

Slide 12 text

Apache+mod_perlつらい プロジェクト同居しているときにプロ ジェクト毎にextlibが設定できない。 同じプロセスのメモリに載ってるた め update . . . . . 12

Slide 13

Slide 13 text

debian packageつらい 全システム同じバージョンのモジュー ル 新しいモジュール使いにくい バージョン上げにくい 13

Slide 14

Slide 14 text

CPANプロジェクト? 14

Slide 15

Slide 15 text

CPANプロジェクト? CPANモジュールを雑多に突っ込んだプ ロジェクト バージョン管理? 食べられるの? アーキテクチャ? 美味しいの? パッチ管理? 必要なの? 15

Slide 16

Slide 16 text

CPANプロジェクト つらい どのバージョンが入ってるのかよく分 からん x86でビルドされたXS ※現在はない 独自パッチあたってる。けど、どれが あたってるのかよく分からん 16

Slide 17

Slide 17 text

つらい 17

Slide 18

Slide 18 text

新しめの プロジェクト現状 Amon2 Starlet + Server::Starter + Upstart 独自ビルドしたperl (Perl::Build) cpanfileでのモジュール管理(Carton) 社内モジュールはDarkpanで管理 (OrePAN2::Server) 18

Slide 19

Slide 19 text

アーキテクチャ変更 Sledge+MoFedge => PSGI対応する Apache+mod_perl => Starlet + Server::Starter + Upstart system perl => 独自ビルドしたperl deb package + CPANプロジェクト => carton cpanfile 19

Slide 20

Slide 20 text

WAF以外は新しめの プロジェクトと同じ 20

Slide 21

Slide 21 text

やらないといけないこと SledgeのPSGI対応 CPANに上がっていないにSledge系のモジュールを Darkpanに登録 CPANに雑多に突っ込まれてるモジュールの分離。 Darkpanへの登録 プロジェクトで使用しているモジュールのバージョン の特定およびcpanfile作成 基本今動いてるのと同じバージョンを使うように プロジェクトコード自体をPSGI対応する 21

Slide 22

Slide 22 text

SledgeのPSGI対応 PSGI対応してあるSledgeに社内の独自 パッチがあたったSledgeをマージ https://github.com/tokuhirom/ Sledge/tree/feature-psgi Sledge::DispatcherもPSGI対応 22

Slide 23

Slide 23 text

CPANプロジェクトからの モジュール分離 ディストリビューション名を把握 バージョンを把握 パッチがあたってないかを把握 あたっていればバージョン番号を変 えた上で、Darkpanに登録 23

Slide 24

Slide 24 text

プロジェクトで使用している モジュールの特定 dpkg-query —show ‘lib*-perl’の結果 からモジュール名とバージョンを抽出 その結果からmetacpanのElasticsearchに 問い合わせて https://gist.github.com/masasuzu/ b9da1890c51ae2dbc724 scan-prereqs-cpanfileの結果と照合して あげる 24

Slide 25

Slide 25 text

プロジェクトコードの PSGI対応 頼みの綱はテスト %ENVを参照しているところを$req->env から取るように変える。 Apache::Request前提になっている箇所 を変えてあげる 25

Slide 26

Slide 26 text

ふー 26

Slide 27

Slide 27 text

予想しない問題 古めモジュールがcarton install出来 ない 古めの記法を使っているがゆえの 大量のwarnings よく分からないsyntax error 27

Slide 28

Slide 28 text

古めのモジュールが carton installできない cpanfileに指定してるバージョンが見つ からないと言われる 仕方ないのでtarを落としてきてDarkpan に登録する cpanfileでバージョン指定しないとこ の古いバージョンで入るのが罠 現状全てのプロジェクトが同じ Darkpanを参照してるので。。。 28

Slide 29

Slide 29 text

古い記法 for $hoge qw( ) { } defined @hoge defined %hoge 29

Slide 30

Slide 30 text

依存モジュール内の 古い記法 パッチを当てて、Darkpanに登録。。。 30

Slide 31

Slide 31 text

ふー 31

Slide 32

Slide 32 text

古い依存モジュール (細かい系) Jcode Data::Visitor::Encode base これだけはparentに変えた UNIVERSAL::require 32

Slide 33

Slide 33 text

まとまらないまとめ Sledge自体のPSGI対応は楽 テストさえ書かれてれば、プロジェクトの対応はそれ ほど難しくない。 まだ本番には投入してない プロジェクトの人のチェック待ち 熟成されたコードをいきなり直すのはだいぶつらいの で、悪い意味で熟成される前に対処した方がよい。 ホントに。。。 33

Slide 34

Slide 34 text

ありがとう ございました 34