cpan dependency heaven
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
CPAN Dependency Heaven
Jon Allen (JJ) – [email protected]
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!