SlideShare uma empresa Scribd logo
1 de 19
Baixar para ler offline
Jeffrey Thalhammer


S o f t w a r e   S y s t e m s




jeff@imaginative-software.com
Using CPAN For Private
        Code
     San Francisco Perlmongers
         February 23, 2010
On The Menu Tonight...

 Reasons To Create CPAN Distros

 Case Study: Foo Financial Company

 Assorted Tools You Can Use
This presentation was originally titled...



Why You Should Create
   CPAN Distros
But it really is about...


Why Perl Applications
 Should Have Build
     Systems
...and CPAN is just one way to do it.
Well, why?
Organization!
   Products
 Distributions

   Modules
  Subroutines
  Statements
A Well-Known Layout
   A proper place for...


         scripts
         libraries
         tests
Dependency
       Management
CPAN.pm Does All The Work
Meta-Version Control
Detect Circular Dependencies
Identify Dependency Flavors:
  “requires”
  “build_requires”
  “configure_requires”
  “author_requires”
Separation Of
           Concerns
Author-time    Build-time     Install-time

         Usernames and Passwords
         Resource Paths
         Configuration Stuff
Sharing And
        Distribution

Easy to identify (i.e. named, versioned)

Easy to transport (as *.tar.gz files)

Well-known install procedure
Tool Chain Support

    CPAN

    Module::Build

    More on this later...
Case Study:
Foo Financial Company
 500k lines of Perl code
 100s of scripts, 100s of modules
 No automated test cases
 RCS-like version control
 Quasi-separate DEV and PROD
 Deploy by manually copying to PROD
Havoc Ensued

Which files need to be deployed?
Which versions of the files?
How do I role back?
What are the parts of this system?
How do changes affect other parts?
A Solution:

Divide product into Distros.
Publish Distros into a private CPAN.
Assemble product from private CPAN.
Automate everything!
SVN                                 CruiseControl
             commit   trunk/
                        Foo-Reporting/               checkout
                                                                     $ ./Build
                        Foo-Interfaces/
                                                                     $ ./Build test
                        Foo-Utilities/
 Empty Distro.                                                       $ ./Build install
Simply depends          Foo-Everything/
 on other top-                                                       $ ./Build dist
  level Foo::*                                         add &                                                     Every
    modules           trunk/CPAN/authors/id/F/FOO/    commit                                                   commit
                        Foo-Reporting-8.01.tar.gz                    Foo-Reporting-8.01.tar.gz                produces a
                                                                                                             Distro with a
                        Foo-Interfaces-2.37.tar.gz                                                           new version
A private CPAN,
   containing
                        Foo-Utilities-6.01.tar.gz                                                              number
everything that         Foo-Everything-1.02.tar.gz
Foo depends on                                       HTTP GET
                                                                      $ cpan Foo-Everything


  A temporary
location, that will    /tmp/lib/perl5/site_perl
contain all Foo::*                                    installs
  modules and           Foo/Reporting.pm
 their non-core         Foo/Interfaces.pm
  dependencies
                        Foo-Utilities.pm
                                                                                         Finished product!

                                                          archives
                                                                                Foo-1.45.tar.gz
Some Tips:
At first, put Everything in one fat Distro.
But later, may 1000 Distros bloom!
Think about how to name & number versions.
Create special accounts for automated jobs.
Any SCM and build server will do the job.
Know your target Perl environment.
Some Supporting Tools
      CPAN::Mini
      CPAN::Mini::Inject
      CPAN::Site
      Module::Starter
      Dist::Zilla
Jeffrey Thalhammer


S o f t w a r e   S y s t e m s




jeff@imaginative-software.com

Mais conteúdo relacionado

Mais procurados

Deploying and maintaining your software with RPM/APT
Deploying and maintaining your software with RPM/APTDeploying and maintaining your software with RPM/APT
Deploying and maintaining your software with RPM/APTJoshua Thijssen
 
aptly: Debian repository management tool
aptly: Debian repository management toolaptly: Debian repository management tool
aptly: Debian repository management toolAndrey Smirnov
 
Make container without_docker_6-overlay-network_1
Make container without_docker_6-overlay-network_1 Make container without_docker_6-overlay-network_1
Make container without_docker_6-overlay-network_1 Sam Kim
 
Tonehammer Requiem Professional [KONTAKT] .rar
Tonehammer Requiem Professional [KONTAKT] .rarTonehammer Requiem Professional [KONTAKT] .rar
Tonehammer Requiem Professional [KONTAKT] .rarDeborahPadilla1
 
Linux internet server security and configuration tutorial
Linux internet server security and configuration tutorialLinux internet server security and configuration tutorial
Linux internet server security and configuration tutorialannik147
 
SquirrelMail for webmail
SquirrelMail for webmailSquirrelMail for webmail
SquirrelMail for webmailAryman Gautam
 
Rpi python web
Rpi python webRpi python web
Rpi python websewoo lee
 
Porting Gentoo to DragonFly
Porting Gentoo to DragonFlyPorting Gentoo to DragonFly
Porting Gentoo to DragonFlyNaohiro Aota
 
Internet Archive Video Presentation
Internet Archive Video Presentation Internet Archive Video Presentation
Internet Archive Video Presentation tracey jaquith
 
Device Tree Overlay implementation on AOSP 9.0
Device Tree Overlay implementation on AOSP 9.0Device Tree Overlay implementation on AOSP 9.0
Device Tree Overlay implementation on AOSP 9.0Cheng Wig
 
FreeBSD - LinuxExpo
FreeBSD - LinuxExpoFreeBSD - LinuxExpo
FreeBSD - LinuxExpowebuploader
 
Make container without_docker_7
Make container without_docker_7Make container without_docker_7
Make container without_docker_7Sam Kim
 
Deploy, Scale and Sleep at Night with JRuby
Deploy, Scale and Sleep at Night with JRubyDeploy, Scale and Sleep at Night with JRuby
Deploy, Scale and Sleep at Night with JRubyJoe Kutner
 
Tibet 5.0 / CouchDB
Tibet 5.0 / CouchDBTibet 5.0 / CouchDB
Tibet 5.0 / CouchDBbedney
 
嵌入式Linux課程-GNU Toolchain
嵌入式Linux課程-GNU Toolchain嵌入式Linux課程-GNU Toolchain
嵌入式Linux課程-GNU Toolchain艾鍗科技
 
Linux Security Quick Reference Guide
Linux Security Quick Reference GuideLinux Security Quick Reference Guide
Linux Security Quick Reference Guidewensheng wei
 

Mais procurados (20)

Deploying and maintaining your software with RPM/APT
Deploying and maintaining your software with RPM/APTDeploying and maintaining your software with RPM/APT
Deploying and maintaining your software with RPM/APT
 
aptly: Debian repository management tool
aptly: Debian repository management toolaptly: Debian repository management tool
aptly: Debian repository management tool
 
Apache solr configuration with drupal 7
Apache solr configuration with drupal 7Apache solr configuration with drupal 7
Apache solr configuration with drupal 7
 
Make container without_docker_6-overlay-network_1
Make container without_docker_6-overlay-network_1 Make container without_docker_6-overlay-network_1
Make container without_docker_6-overlay-network_1
 
Tonehammer Requiem Professional [KONTAKT] .rar
Tonehammer Requiem Professional [KONTAKT] .rarTonehammer Requiem Professional [KONTAKT] .rar
Tonehammer Requiem Professional [KONTAKT] .rar
 
Linux internet server security and configuration tutorial
Linux internet server security and configuration tutorialLinux internet server security and configuration tutorial
Linux internet server security and configuration tutorial
 
SquirrelMail for webmail
SquirrelMail for webmailSquirrelMail for webmail
SquirrelMail for webmail
 
Rpi python web
Rpi python webRpi python web
Rpi python web
 
Porting Gentoo to DragonFly
Porting Gentoo to DragonFlyPorting Gentoo to DragonFly
Porting Gentoo to DragonFly
 
Internet Archive Video Presentation
Internet Archive Video Presentation Internet Archive Video Presentation
Internet Archive Video Presentation
 
Device Tree Overlay implementation on AOSP 9.0
Device Tree Overlay implementation on AOSP 9.0Device Tree Overlay implementation on AOSP 9.0
Device Tree Overlay implementation on AOSP 9.0
 
PHP selber bauen
PHP selber bauenPHP selber bauen
PHP selber bauen
 
FreeBSD - LinuxExpo
FreeBSD - LinuxExpoFreeBSD - LinuxExpo
FreeBSD - LinuxExpo
 
Make container without_docker_7
Make container without_docker_7Make container without_docker_7
Make container without_docker_7
 
ExaBGP at LINX 83
ExaBGP at LINX 83ExaBGP at LINX 83
ExaBGP at LINX 83
 
Deploy, Scale and Sleep at Night with JRuby
Deploy, Scale and Sleep at Night with JRubyDeploy, Scale and Sleep at Night with JRuby
Deploy, Scale and Sleep at Night with JRuby
 
Sahul
SahulSahul
Sahul
 
Tibet 5.0 / CouchDB
Tibet 5.0 / CouchDBTibet 5.0 / CouchDB
Tibet 5.0 / CouchDB
 
嵌入式Linux課程-GNU Toolchain
嵌入式Linux課程-GNU Toolchain嵌入式Linux課程-GNU Toolchain
嵌入式Linux課程-GNU Toolchain
 
Linux Security Quick Reference Guide
Linux Security Quick Reference GuideLinux Security Quick Reference Guide
Linux Security Quick Reference Guide
 

Destaque

2010 St. Cloud KNOW Event
2010 St. Cloud KNOW Event2010 St. Cloud KNOW Event
2010 St. Cloud KNOW EventFlint Group
 
Blog World East 2011 Recap
Blog World East 2011 RecapBlog World East 2011 Recap
Blog World East 2011 RecapFlint Group
 
The Importance of Blogging
The Importance of BloggingThe Importance of Blogging
The Importance of BloggingFlint Group
 
Crisis Planning & Management in a Social Media World
Crisis Planning & Management in a Social Media WorldCrisis Planning & Management in a Social Media World
Crisis Planning & Management in a Social Media WorldFlint Group
 
Managing social media with limited resources
Managing social media with limited resourcesManaging social media with limited resources
Managing social media with limited resourcesFlint Group
 
FM CVB Claiming Social Spaces
FM CVB Claiming Social SpacesFM CVB Claiming Social Spaces
FM CVB Claiming Social SpacesFlint Group
 
Chamber Lunch Time Learning presentation
Chamber Lunch Time Learning presentationChamber Lunch Time Learning presentation
Chamber Lunch Time Learning presentationFlint Group
 
Advanced modulinos
Advanced modulinosAdvanced modulinos
Advanced modulinosbrian d foy
 
Statistics and Data Mining with Perl Data Language
Statistics and Data Mining with Perl Data LanguageStatistics and Data Mining with Perl Data Language
Statistics and Data Mining with Perl Data Languagemaggiexyz
 

Destaque (11)

2010 St. Cloud KNOW Event
2010 St. Cloud KNOW Event2010 St. Cloud KNOW Event
2010 St. Cloud KNOW Event
 
Dependency Management With Pinto
Dependency Management With PintoDependency Management With Pinto
Dependency Management With Pinto
 
Blog World East 2011 Recap
Blog World East 2011 RecapBlog World East 2011 Recap
Blog World East 2011 Recap
 
The Importance of Blogging
The Importance of BloggingThe Importance of Blogging
The Importance of Blogging
 
Crisis Planning & Management in a Social Media World
Crisis Planning & Management in a Social Media WorldCrisis Planning & Management in a Social Media World
Crisis Planning & Management in a Social Media World
 
Managing social media with limited resources
Managing social media with limited resourcesManaging social media with limited resources
Managing social media with limited resources
 
FM CVB Claiming Social Spaces
FM CVB Claiming Social SpacesFM CVB Claiming Social Spaces
FM CVB Claiming Social Spaces
 
Chamber Lunch Time Learning presentation
Chamber Lunch Time Learning presentationChamber Lunch Time Learning presentation
Chamber Lunch Time Learning presentation
 
Advanced modulinos
Advanced modulinosAdvanced modulinos
Advanced modulinos
 
Statistics and Data Mining with Perl Data Language
Statistics and Data Mining with Perl Data LanguageStatistics and Data Mining with Perl Data Language
Statistics and Data Mining with Perl Data Language
 
Pinto+Stratopan+Love
Pinto+Stratopan+LovePinto+Stratopan+Love
Pinto+Stratopan+Love
 

Semelhante a CPAN For Private Code

20111011 bigbluebutton
20111011 bigbluebutton20111011 bigbluebutton
20111011 bigbluebuttonhs1250
 
Puppet without Root - PuppetConf 2013
Puppet without Root - PuppetConf 2013Puppet without Root - PuppetConf 2013
Puppet without Root - PuppetConf 2013Puppet
 
Advanced Level Training on Koha / TLS (ToT)
Advanced Level Training on Koha / TLS (ToT)Advanced Level Training on Koha / TLS (ToT)
Advanced Level Training on Koha / TLS (ToT)Ata Rehman
 
Bringing-it-all-together-overview-of-rpm-packaging-in-fedora
Bringing-it-all-together-overview-of-rpm-packaging-in-fedoraBringing-it-all-together-overview-of-rpm-packaging-in-fedora
Bringing-it-all-together-overview-of-rpm-packaging-in-fedoraLalatendu Mohanty
 
IPS: Image Packaging System
IPS: Image Packaging SystemIPS: Image Packaging System
IPS: Image Packaging SystemEric Sproul
 
Dockerizing Symfony Applications - Symfony Live Berlin 2014
Dockerizing Symfony Applications - Symfony Live Berlin 2014Dockerizing Symfony Applications - Symfony Live Berlin 2014
Dockerizing Symfony Applications - Symfony Live Berlin 2014D
 
A Fabric/Puppet Build/Deploy System
A Fabric/Puppet Build/Deploy SystemA Fabric/Puppet Build/Deploy System
A Fabric/Puppet Build/Deploy Systemadrian_nye
 
Managing Plone Projects with Perl and Subversion
Managing Plone Projects with Perl and SubversionManaging Plone Projects with Perl and Subversion
Managing Plone Projects with Perl and SubversionLuciano Rocha
 
Composer - Panada Conference 2014
Composer - Panada Conference 2014Composer - Panada Conference 2014
Composer - Panada Conference 2014Mulia Nasution
 
Symfony Components
Symfony ComponentsSymfony Components
Symfony Componentsguest0de7c2
 
Symfony Components
Symfony ComponentsSymfony Components
Symfony Componentsguest0de7c2
 
Composer Panada Conference 2014 by Mulia Nasution
Composer Panada Conference 2014 by Mulia NasutionComposer Panada Conference 2014 by Mulia Nasution
Composer Panada Conference 2014 by Mulia Nasutionk4ndar
 
Foreman and Puppet Master Install process - Customer Used Case
Foreman and Puppet Master Install process - Customer Used Case Foreman and Puppet Master Install process - Customer Used Case
Foreman and Puppet Master Install process - Customer Used Case Kanwar Batra
 
Deployment Tactics
Deployment TacticsDeployment Tactics
Deployment TacticsIan Barber
 
Docker for Java developers at JavaLand
Docker for Java developers at JavaLandDocker for Java developers at JavaLand
Docker for Java developers at JavaLandJohan Janssen
 
Fortran compiling 2
Fortran compiling 2Fortran compiling 2
Fortran compiling 2najenssr
 
Ruby and Rails Packaging to Production
Ruby and Rails Packaging to ProductionRuby and Rails Packaging to Production
Ruby and Rails Packaging to ProductionFabio Kung
 

Semelhante a CPAN For Private Code (20)

Running Symfony
Running SymfonyRunning Symfony
Running Symfony
 
20111011 bigbluebutton
20111011 bigbluebutton20111011 bigbluebutton
20111011 bigbluebutton
 
Puppet without Root - PuppetConf 2013
Puppet without Root - PuppetConf 2013Puppet without Root - PuppetConf 2013
Puppet without Root - PuppetConf 2013
 
Advanced Level Training on Koha / TLS (ToT)
Advanced Level Training on Koha / TLS (ToT)Advanced Level Training on Koha / TLS (ToT)
Advanced Level Training on Koha / TLS (ToT)
 
Bringing-it-all-together-overview-of-rpm-packaging-in-fedora
Bringing-it-all-together-overview-of-rpm-packaging-in-fedoraBringing-it-all-together-overview-of-rpm-packaging-in-fedora
Bringing-it-all-together-overview-of-rpm-packaging-in-fedora
 
IPS: Image Packaging System
IPS: Image Packaging SystemIPS: Image Packaging System
IPS: Image Packaging System
 
Dockerizing Symfony Applications - Symfony Live Berlin 2014
Dockerizing Symfony Applications - Symfony Live Berlin 2014Dockerizing Symfony Applications - Symfony Live Berlin 2014
Dockerizing Symfony Applications - Symfony Live Berlin 2014
 
A Fabric/Puppet Build/Deploy System
A Fabric/Puppet Build/Deploy SystemA Fabric/Puppet Build/Deploy System
A Fabric/Puppet Build/Deploy System
 
Managing Plone Projects with Perl and Subversion
Managing Plone Projects with Perl and SubversionManaging Plone Projects with Perl and Subversion
Managing Plone Projects with Perl and Subversion
 
Composer - Panada Conference 2014
Composer - Panada Conference 2014Composer - Panada Conference 2014
Composer - Panada Conference 2014
 
Symfony Components
Symfony ComponentsSymfony Components
Symfony Components
 
Symfony Components
Symfony ComponentsSymfony Components
Symfony Components
 
Symfony Components
Symfony ComponentsSymfony Components
Symfony Components
 
Composer Panada Conference 2014 by Mulia Nasution
Composer Panada Conference 2014 by Mulia NasutionComposer Panada Conference 2014 by Mulia Nasution
Composer Panada Conference 2014 by Mulia Nasution
 
Foreman and Puppet Master Install process - Customer Used Case
Foreman and Puppet Master Install process - Customer Used Case Foreman and Puppet Master Install process - Customer Used Case
Foreman and Puppet Master Install process - Customer Used Case
 
Deployment Tactics
Deployment TacticsDeployment Tactics
Deployment Tactics
 
Docker for Java developers at JavaLand
Docker for Java developers at JavaLandDocker for Java developers at JavaLand
Docker for Java developers at JavaLand
 
Fortran compiling 2
Fortran compiling 2Fortran compiling 2
Fortran compiling 2
 
Ruby and Rails Packaging to Production
Ruby and Rails Packaging to ProductionRuby and Rails Packaging to Production
Ruby and Rails Packaging to Production
 
JavaCro'15 - Conquer the Internet of Things with Java and Docker - Johan Jans...
JavaCro'15 - Conquer the Internet of Things with Java and Docker - Johan Jans...JavaCro'15 - Conquer the Internet of Things with Java and Docker - Johan Jans...
JavaCro'15 - Conquer the Internet of Things with Java and Docker - Johan Jans...
 

Último

Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfhans926745
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 

Último (20)

Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 

CPAN For Private Code

  • 1. Jeffrey Thalhammer S o f t w a r e S y s t e m s jeff@imaginative-software.com
  • 2. Using CPAN For Private Code San Francisco Perlmongers February 23, 2010
  • 3. On The Menu Tonight... Reasons To Create CPAN Distros Case Study: Foo Financial Company Assorted Tools You Can Use
  • 4. This presentation was originally titled... Why You Should Create CPAN Distros
  • 5. But it really is about... Why Perl Applications Should Have Build Systems ...and CPAN is just one way to do it.
  • 7. Organization! Products Distributions Modules Subroutines Statements
  • 8. A Well-Known Layout A proper place for... scripts libraries tests
  • 9. Dependency Management CPAN.pm Does All The Work Meta-Version Control Detect Circular Dependencies Identify Dependency Flavors: “requires” “build_requires” “configure_requires” “author_requires”
  • 10. Separation Of Concerns Author-time Build-time Install-time Usernames and Passwords Resource Paths Configuration Stuff
  • 11. Sharing And Distribution Easy to identify (i.e. named, versioned) Easy to transport (as *.tar.gz files) Well-known install procedure
  • 12. Tool Chain Support CPAN Module::Build More on this later...
  • 13. Case Study: Foo Financial Company 500k lines of Perl code 100s of scripts, 100s of modules No automated test cases RCS-like version control Quasi-separate DEV and PROD Deploy by manually copying to PROD
  • 14. Havoc Ensued Which files need to be deployed? Which versions of the files? How do I role back? What are the parts of this system? How do changes affect other parts?
  • 15. A Solution: Divide product into Distros. Publish Distros into a private CPAN. Assemble product from private CPAN. Automate everything!
  • 16. SVN CruiseControl commit trunk/ Foo-Reporting/ checkout $ ./Build Foo-Interfaces/ $ ./Build test Foo-Utilities/ Empty Distro. $ ./Build install Simply depends Foo-Everything/ on other top- $ ./Build dist level Foo::* add & Every modules trunk/CPAN/authors/id/F/FOO/ commit commit Foo-Reporting-8.01.tar.gz Foo-Reporting-8.01.tar.gz produces a Distro with a Foo-Interfaces-2.37.tar.gz new version A private CPAN, containing Foo-Utilities-6.01.tar.gz number everything that Foo-Everything-1.02.tar.gz Foo depends on HTTP GET $ cpan Foo-Everything A temporary location, that will /tmp/lib/perl5/site_perl contain all Foo::* installs modules and Foo/Reporting.pm their non-core Foo/Interfaces.pm dependencies Foo-Utilities.pm Finished product! archives Foo-1.45.tar.gz
  • 17. Some Tips: At first, put Everything in one fat Distro. But later, may 1000 Distros bloom! Think about how to name & number versions. Create special accounts for automated jobs. Any SCM and build server will do the job. Know your target Perl environment.
  • 18. Some Supporting Tools CPAN::Mini CPAN::Mini::Inject CPAN::Site Module::Starter Dist::Zilla
  • 19. Jeffrey Thalhammer S o f t w a r e S y s t e m s jeff@imaginative-software.com