Packaging Perl Modules
-
Upload
alex-bayley -
Category
Business
-
view
10.989 -
download
2
description
Transcript of Packaging Perl Modules
![Page 1: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/1.jpg)
Packaging Perl ModulesKirrily Robert
![Page 2: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/2.jpg)
Look familiar?
~skud/.cpan/build/Archive-Any-0.093 $ lsBuild.PL META.yml README pm_to_blibChanges Makefile blib tMANIFEST Makefile.PL lib
![Page 3: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/3.jpg)
Today...
• How CPAN modules are packaged
• Why it rocks
• Why you should use it everywhere
• How to integrate it with release mgt
![Page 4: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/4.jpg)
Creating CPAN modules
• Always use h2xs
• Always use h2xs
• ALWAYS use h2xs
![Page 5: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/5.jpg)
Wrong.
![Page 6: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/6.jpg)
Two main options
• h2xs
• module-starter
![Page 7: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/7.jpg)
h2xs
• Old-school
• Comes with Perl
• Few modern features
• Good XS stubs, though
![Page 8: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/8.jpg)
module-starter
• Module::Starter on CPAN
• Modern features
• Better stubs
• Higher Kwalitee
![Page 9: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/9.jpg)
module-starter
$ module-starter --module Gift::BasketCreated starter directories and files
$ ls Gift-Basket/Build.PL MANIFEST libChanges README t
![Page 10: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/10.jpg)
Configuration
$ cat ~/.module-starter/configbuilder: Module::Buildauthor: Kirrily Robertemail: [email protected]
![Page 11: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/11.jpg)
Module layout
Build.PL MANIFEST libChanges README t
![Page 12: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/12.jpg)
Build.PLuse strict;use warnings;use Module::Build;
my $builder = Module::Build->new( module_name => 'Gift::Basket', license => 'perl', dist_author => 'Kirrily Robert <[email protected]>', dist_version_from => 'lib/Gift/Basket.pm', build_requires => { 'Test::More' => 0, }, add_to_cleanup => [ 'Gift-Basket-*' ],);
$builder->create_build_script();
![Page 13: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/13.jpg)
Changes
Revision history for Gift-Basket
0.03 2007-11-20 Added support for shipping gift baskets to addresses within Australia and NZ.
0.02 2007-11-05 Fixed a bug with adding chocolates to the basket.
0.01 2007-11-01 Initial release. Includes methods for building a gift basket and calculating prices. Not ready for production.
![Page 14: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/14.jpg)
MANIFEST
Build.PLChangesMANIFESTMETA.yml # Will be created by "make dist"READMElib/Gift/Basket.pmt/00-load.tt/boilerplate.tt/pod-coverage.tt/pod.t
![Page 15: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/15.jpg)
README
• Description
• Installation
• Support
• License
![Page 16: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/16.jpg)
lib/
$ find libliblib/Giftlib/Gift/Basket.pm
![Page 17: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/17.jpg)
t/
$ find ttt/00-load.tt/boilerplate.tt/pod-coverage.tt/pod.t
![Page 18: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/18.jpg)
Building modules
• ./Build dist
• ./Build disttest
• Upload to PAUSE
• http://pause.perl.org
• cpaninject
![Page 19: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/19.jpg)
Why this rocks
• Standard build/install tools
• Metadata and tests included by default
• Encourages modularity
![Page 20: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/20.jpg)
Non-CPAN CPAN Modules
![Page 21: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/21.jpg)
Standard build tools
• Save time and effort
• Already familiar to many developers
• Easy release path to CPAN
![Page 22: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/22.jpg)
Metadata and tests
• Encourage testing
• Specify dependencies
![Page 23: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/23.jpg)
Modularity
• Reduce spaghetti
• Share code between projects
• Easy release path to CPAN
![Page 24: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/24.jpg)
Example
$ ls code/GiftCo-CoreGiftCo-DBGiftCo-MailTools
GiftCo-Payments GiftCo-ReportingGiftCo-Website
![Page 25: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/25.jpg)
Web Server
GiftCo::Website
GiftCo::Core
GiftCo::DB
GiftCo::Payments
![Page 26: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/26.jpg)
Backend
GiftCo::Core
GiftCo::DB
GiftCo::Payments
GiftCo::Reporting
GiftCo::MailTools
![Page 27: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/27.jpg)
Installation
• Local CPAN
• Distro packages
![Page 28: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/28.jpg)
Local CPAN
• MiniCPAN
• Add local packages
• Configure CPAN.pm
![Page 29: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/29.jpg)
MiniCPAN
• perl -MCPAN -e ‘install CPAN::Mini’
• minicpan -l $LOCAL -r $REMOTE
![Page 30: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/30.jpg)
Inject
• perl -MCPAN -e ‘install CPAN::Mini::Inject’
• mcpani --add --module GiftCo::DB --authorid SKUD --modversion 0.01--file GiftCo::DB-0.01.tar.gz
![Page 31: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/31.jpg)
Configure
cpan[1]> o conf urllist urllist 0 [file:///Users/skud/mirrors/cpan/] 1 [ftp://cpan.pair.com/pub/CPAN/] 2 [ftp://cpan.hexten.net/]
![Page 32: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/32.jpg)
Distro packages
• Integrates with non-Perl packages
• Standardised install procedure
• Sysadmins like them
![Page 33: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/33.jpg)
DependenciesGiftCo::DB
DBD::mysql
DBI
mysql-lib
![Page 34: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/34.jpg)
Packaging
• cpan2rpm
• dh-make-perl
![Page 35: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/35.jpg)
cpan2rpm
• Creates RPMs from CPAN modules
• Redhat-derived distros
• cpan2rpm -U GiftCo::DB
• Creates full RPM package
![Page 36: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/36.jpg)
dh-make-perl
• Comes with Debian/Ubuntu
• Creates .deb packages
• dh-make-perl GiftCo-DB-0.01/
• Creates debian/ directory
![Page 37: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/37.jpg)
Issues
• Neither follows CPAN dependencies
• You must walk the dep tree (once)
• Can specify deps thereafter
![Page 38: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/38.jpg)
Example
GiftCo::Website
libgiftco-website-perl
GiftCo::DB
libgiftco-db-perl
becomes becomes
requires
requires
![Page 39: Packaging Perl Modules](https://reader031.fdocuments.in/reader031/viewer/2022020207/555832fdd8b42ac6078b467a/html5/thumbnails/39.jpg)
apt-get install
$ sudo apt-get install giftco-websiteReading package lists... DoneBuilding dependency tree... DoneThe following extra packages will be installed: libgiftco-website-perl libgiftco-db-perl libgiftco-core-perl libgiftco-payments-perl libdbi-perl libdbd-mysql-perl libmysqlThe following NEW packages will be installed: giftco-website libgiftco-website-perl libgiftco-db-perl libgiftco-core-perl libgiftco-payments-perl libdbi-perl libdbd-mysql-perl libmysql0 upgraded, 7 newly installed, 0 to remove and 0 not upgraded.Need to get 8.3MB of archives.After unpacking 25MB of additional disk space will be used.Do you want to continue [Y/n]?