CPAN Dependency Heaven

Post on 05-Dec-2014

1.098 views 0 download

description

Installing CPAN modules and managing their dependencies has got much easier over recent years thanks to tools like cpanm. But what about the DarkPAN, i.e. all the code that *isn't* on CPAN? In this talk we will look at how to build our own private CPAN, upload our own DarkPAN modules, and easily mix private and public dependencies. From this we will build cross-platform installation packages which can be used on any system with Perl installed (no external dependencies or even Internet access required). Presented at the YAPC::Europe 2012 conference in Frankfurt, Germany.

Transcript of CPAN Dependency Heaven

CPAN Dependency Heaven

Jon  Allen  (JJ)  –  jj@opusvl.com  

www.opusvl.com!

www.opusvl.com!

CPAN

www.opusvl.com!

perl myscript.plCan't locate SomeModule.pm in @INC (@INC contains: /Users/jj/perl/perl-5.14.1/lib/site_perl/5.14.1/darwin-2level /Users/jj/perl/perl-5.14.1/lib/site_perl/5.14.1 /Users/jj/perl/perl-5.14.1/lib/5.14.1/darwin-2level /Users/jj/perl/perl-5.14.1/lib/5.14.1 .) ...

www.opusvl.com!

perl myscript.plCan't locate OtherModule.pm in @INC (@INC contains: /Users/jj/perl/perl-5.14.1/lib/site_perl/5.14.1/darwin-2level /Users/jj/perl/perl-5.14.1/lib/site_perl/5.14.1 /Users/jj/perl/perl-5.14.1/lib/5.14.1/darwin-2level /Users/jj/perl/perl-5.14.1/lib/5.14.1 .) ...

www.opusvl.com!

CPAN Dependency

Hell

www.opusvl.com!

www.opusvl.com!

solved problem?

www.opusvl.com!

cpanm"local::lib

www.opusvl.com!

bootstraps

www.opusvl.com!

curl -L"http://cpanmin.us |"perl - --self-upgrade

www.opusvl.com!

www.opusvl.com!

DarkPAN

www.opusvl.com!

DarkPAN

www.opusvl.com!

DarkPAN

www.opusvl.com!

DarkPAN

www.opusvl.com!

DarkPAN

www.opusvl.com!

all your code not on CPAN

www.opusvl.com!

rpm?"deb?

www.opusvl.com!

token Mac user

www.opusvl.com!

token Windows user

www.opusvl.com!

not cross-platform

www.opusvl.com!

use CPAN packaging

www.opusvl.com!

build your own CPAN

www.opusvl.com!

CPAN::Mini

www.opusvl.com!

CPAN::Mini::Inject

www.opusvl.com!

can be tricky "to use

www.opusvl.com!

build your own PAUSE

www.opusvl.com!

CPAN::Mini::"Inject::REST

www.opusvl.com!

REST API for CPAN::Mini::Inject

www.opusvl.com!

inject modules remotely

www.opusvl.com!

supports authentication

www.opusvl.com!

enforces version

changes

www.opusvl.com!

client?

www.opusvl.com!

CPAN::Mini::"Inject::REST::"

Client

www.opusvl.com!

command-line app

www.opusvl.com!

workflow

www.opusvl.com!

build CPAN package

www.opusvl.com!

perl Makefile.PL"make"

make dist

www.opusvl.com!

upload to your CPAN

www.opusvl.com!

mcpani-client"add "

--host cpan.local"MyModule-0.1.tar.gz

www.opusvl.com!

install

www.opusvl.com!

cpanm --mirror "http://cpan.local "

--mirror-only My::Module

www.opusvl.com!

easily mix local and CPAN

dependencies

www.opusvl.com!

distribution

www.opusvl.com!

Elaine’s Law

www.opusvl.com!

“Just make it fucking easy to

install!”

www.opusvl.com!

App::cpackage

www.opusvl.com!

creates install packages for Perl modules

www.opusvl.com!

self-contained (dependencies

included)

www.opusvl.com!

very simple

www.opusvl.com!

someone else did the hard

work!

www.opusvl.com!

www.opusvl.com!

thin wrapper around

cpanminus

www.opusvl.com!

analyses dependencies

www.opusvl.com!

downloads dependencies

www.opusvl.com!

writes install.pl script

www.opusvl.com!

cpanm App::cpackage

www.opusvl.com!

cpackage Module::Name

www.opusvl.com!

cpackage "--mirror "

http://cpan.local "--mirror-only My::Module

www.opusvl.com!

./packages/…"./bin/cpanm"

./install.pl

www.opusvl.com!

perl install.pl

www.opusvl.com!

perl install.pl"--sudo

www.opusvl.com!

no internet required

www.opusvl.com!

no CPAN client required

www.opusvl.com!

self-contained installer

www.opusvl.com!

CPAN Dependency Heaven

www.opusvl.com!

done.

www.opusvl.com!

done. :-)

www.opusvl.com!