SlideShare a Scribd company logo
perlall

      do something with all my perls




Reini Urban / rurban        houston.pm, 2012
Design Goals

parallel perl installations as supported by Configure (or not).
no chdir or switching to other perls (better perlbrew)

/usr/local/bin/perl5.15.8
/usr/local/bin/perl5.14.2
/usr/local/bin/perl5.12.4
/usr/local/bin/perl5.10.1
/usr/local/bin/perl5.8.9
/usr/local/bin/perl5.8.8
/usr/local/bin/perl5.8.5
/usr/local/bin/perl5.8.4
/usr/local/bin/perl5.6.2
Design Goals

Build, maintain and test with a lot of perls, on a lot of machines.
Your private cpantesters framework.

Standardize feature names: DEBUGGING and threads.

Single file - scp to all remote vm's. Only 4 external modules -
self-installer independent on CPAN.
perlall                vs     perlbrew

Globally shared non-arch      Private non-arch - good for
modules                       usedevel testing

manual installation process   automatic bash installation
(root, sudo or non-sudo)

Not only build. Use it:       No parallel usage
 init cpan cpanm
 maketest makeinstall, ...

MSWin32, msys                 No MSWin32, what is msys?
Common tasks: setup + test + install

for p in 6.2 8.4 8.5 8.8 8.9 10.1 12.4 14.2 15.8
do
   perlall build 5.${p}; perlall build 5.${p}-nt
   perlall build 5.${p}d; perlall build 5.${p}d-nt
   perlall build 5.${p}-m
done                   # and wait ~2h

perlall list          # what failed?
perlall=5.15.* perlall cpanm -f --sudo YAML
perlall init          # installs e.g. Bundle::CPANReporter2
                         # wait and prompt for the next 2hrs

cd ~/Perl/B-Generate
perlall maketest
perlall makeinstall        # generate and upload cpanreports
Creating test reports

cd ~/Perl/B-Generate

perlall maketest               local

perlall testvm --all           and remote (vm or phys)


=> log.test-osx10.6.8-5.10.1d-nt, log.test-linuxmint1-
5.15.8d-nt, log.test-freebsd7.4-5.10.1, log.test-
cygwin1.7.10s_winxp-5.14.2d-nt, ... (> 50 logfiles)


$ ../B-C/store_rpt                save reports away
Working with test reports
$ ../B-C/status_upd -fqd

cygwin1.7.10s_winxp-5.14.2d-nt:
t/cc.t Failed tests: 10, 38, 46, 101
t/e_perlcc.t Failed tests: 22, 52

linuxmint1-5.14.2-m:
t/c_o1.t Failed test: 15
t/c_o2.t Failed test: 15
t/c_o3.t Failed test: 15
t/c_o4.t Failed test: 15
t/cc.t Failed test: 15
t/e_perlcc.t Failed tests: 53..54

linuxmint1-5.15.8d:

linuxmint1-5.15.8d-nt:
t/c_o1.t Failed test: 15
t/c_o2.t Failed test: 15
t/c_o3.t Failed test: 15
t/e_perlcc.t Failed tests: 53..54
Working with test reports
Download external cpanreports:

$ ../B-C/t/download-reports 1.43


And check all reports, yours and theirs:

$ ../B-C/status_upd -fqd t/reports/1.43

-fqd        fail only, quiet, no dump display (broken)


Reports are created by:
  make test TEST_VERBOSE=1 2>&1 | tee log.test
  git diff >> log.test
  perl -V >> log.test
Cfg and Shortcuts in ~/.perlall

.perlall is in bash format. source it from your .profile

env and alias

PERLALL_BUILDROOT=~/perl5/src
alias perl-git='cd /usr/src/perl/blead/perl-git'
# currently used perl (set by perlall)
alias p=perl5.15.8d-nt
Shortcuts in ~/.perlall
# some aliases suggestions
alias pb="p -Iblib/arch -Iblib/lib" # no -Mblib!
alias pmf="if [ -f Makefile.PL ]; then p Makefile.PL; else rm -rf _build; p Build.PL; fi"
alias pm='pmf && m'
alias ppan='p -S cpan'

alias m=make
alias mt='make -j4 test'
alias mi='mt && smi'
alias mtee='mt 2>&1 | tee log.test'
alias smi='sudo make install'

#set p alias from current Makefile
function ppm { p=$(perl -ane'print $F[2] if /^FULLPERL =/' Makefile); echo alias
p=$p; test -n "$p" && alias p=$p; }
alias pgrp='pgrep -fl perl'
Typical test session

alias pb="p -Iblib/arch -Iblib/lib"
alias pmf="if [ -f Makefile.PL ]; then p Makefile.PL; else rm -rf _build; p Build.PL; p
Build; fi"
alias pm='pmf && m'

$ pm                                               # make with your current perl
$ pb t/02failing_test.t                            # single test
$ pb -d t/02failing_test.t                         # debug it

$ mt                                               # test with this perl
$ perlall -m --nogit maketest                      # all major perls
perlall do

# who has no YAML?
perlall do -MYAML -e0

# install on older versions
perlall=5.8.* perlall cpanm -f -S YAML

# check memory leaks, with fresh make before
# use current p as $p    (pb not, sorry)
perlall make '-e1 && valgrind $p -Mblib test.pl'

perlall make does always a do, i.e $p $@
testvm

Need to setup every vm, with perlall of course. See INSTALL.
ssh-copy-id your .ssh key, adjust .profile or .bashrc.
Create the same layout as on the master for your work
modules.
ssh win mkdir -p Perl/MyModule
perlall testvm win centos5 freebsd10 --fork

If win is on a vm, then the vm is started/resumed. (kvm only so
far). Switched from vmware,xen,virtualbox to kvm.
With -j4 ensure that max. 4 vm's run concurrently. Memory and
IO pressure destabilizes the system, esp. with cgroups and 3.x
kernels.
TODO: Automated mingw/activeperl testing. ssh with cmd.exe?
New perl release
perl-git                       # cd to git srcdir
git co blead; git fetch        # get new tags
perl-root                      # cd to buildroot

# for testing
perlall build 5.15.8d
perlall build 5.15.8d-nt
# for benchmarking
perlall build 5.15.8-nt
# start CPAN update
perlall=5.15.8* perlall init
# how does it look like?
cd ~/Perl/MyModule
alias p=perl5.15.8d-nt
pm && mtee
Test blead
perl-git                               # cd to git srcdir
git co blead; git fetch                # get latest
perlall -v build bleadd-nt --link -Dcc=gcc-mp-4.7
=> /usr/local/bin/perl5.15.8d-nt@8129baca installed

  blead - magic version, --link   -Dmksymlinks to perl-git

perlall -v build bleadd-nt --link -Dcc=clang 
    -Dld=clang --as perl5.15.8d-nt-clang
...test error...
perlall -v build bleadd-nt 
    --as perl5.15.8d-nt-clang --install  # continue

perlall build bleadd-nt smoke-me/khw-tk # branch
=> perl5.15.8d-nt@khw-tk
Planned

perlall smoke -j4 bleadd-nt smoke-me/*

=> TODO: send smoke reports

perlall=5*[0-9]-nt perlall -m bench t/benchscript.t

=> TODO: stable Benchmark.pm (check load, wait until stable)

perlall cpan Devel::*Prof*

=> query CPAN for matching modules. metacpan not yet good
enough. CPAN is better
cpan App::perlall

cd ~/Perl
git clone https://github.com/rurban/App-perlall.git
cd App-perlall
perl Makefile.PL && make test install
cd ~/bin
ln -s ~/Perl/App-perlall/scripts/perlall

ln perlall perlall-maketest
ln perlall perlall-do
ln perlall perlall-cpan
ln perlall perlall-init

# See INSTALL

More Related Content

PPTX
Hls за час
PDF
Mass-Migration of 5000 Servers to Foreman/Katello with bootstrap.py - Evgeni ...
PDF
Intro to pl/PHP Oscon2007
PDF
Test Driven Development with Puppet - PuppetConf 2014
PPTX
Modern Perl toolchain (help building microservices)
PDF
CPAN Training
PDF
Refactoring Katello Installer modules - Ewoud Kohl van Wijngaarden
PDF
Os Treat
Hls за час
Mass-Migration of 5000 Servers to Foreman/Katello with bootstrap.py - Evgeni ...
Intro to pl/PHP Oscon2007
Test Driven Development with Puppet - PuppetConf 2014
Modern Perl toolchain (help building microservices)
CPAN Training
Refactoring Katello Installer modules - Ewoud Kohl van Wijngaarden
Os Treat

What's hot (20)

PPT
Adventures in infrastructure as code
PDF
Zend Framework 1.8 workshop
KEY
The problem with Perl
PPTX
Build & test Apache Hawq
PDF
Perl 5.14 for Pragmatists
ODP
Drupal and Varnish Reverse Proxy
KEY
Deploying and maintaining your software with RPM/APT
PPTX
Nodejs Performance Debug
PDF
톰캣 #04-환경설정
DOCX
Lamp configuration u buntu 10.04
PPTX
Plenv and carton
PDF
PDF
aptly: Debian repository management tool
PDF
Zero Downtime Deployment with Ansible
PDF
Teste de software Desafios e oportunidades no mundo da Virtualizacao, dos Con...
PDF
キレイ会議 on Laravel
PDF
Docker: ao vivo e a cores
PDF
How to inspect a RUNNING perl process
PDF
Drupal and Open shift (and php)
DOCX
How to install squid proxy on server or how to install squid proxy on centos o
Adventures in infrastructure as code
Zend Framework 1.8 workshop
The problem with Perl
Build & test Apache Hawq
Perl 5.14 for Pragmatists
Drupal and Varnish Reverse Proxy
Deploying and maintaining your software with RPM/APT
Nodejs Performance Debug
톰캣 #04-환경설정
Lamp configuration u buntu 10.04
Plenv and carton
aptly: Debian repository management tool
Zero Downtime Deployment with Ansible
Teste de software Desafios e oportunidades no mundo da Virtualizacao, dos Con...
キレイ会議 on Laravel
Docker: ao vivo e a cores
How to inspect a RUNNING perl process
Drupal and Open shift (and php)
How to install squid proxy on server or how to install squid proxy on centos o
Ad

Similar to perlall (20)

PDF
CPAN 模組二三事
KEY
Perlbrew
PDF
perlbrew yapcasia 2010
ODP
30 Minutes To CPAN
PDF
Perl Development Environment Tooling
PDF
CPANci: Continuous Integration for CPAN
PDF
Modern Perl for the Unfrozen Paleolithic Perl Programmer
PDF
Packaging perl (LPW2010)
PDF
Perl for System Automation - 01 Advanced File Processing
PDF
Smoking docker
PDF
Modern Perl Toolchain
DOCX
Perl 20tips
KEY
PHPerのためのPerl入門@ Kansai.pm#12
PDF
Managing Perl Installations: A SysAdmin's View
PPTX
ODP
Perl - laziness, impatience, hubris, and one liners
PDF
How CPAN Testers helped me improve my module
PDF
PDF
PDF
IO Streams, Files and Directories
CPAN 模組二三事
Perlbrew
perlbrew yapcasia 2010
30 Minutes To CPAN
Perl Development Environment Tooling
CPANci: Continuous Integration for CPAN
Modern Perl for the Unfrozen Paleolithic Perl Programmer
Packaging perl (LPW2010)
Perl for System Automation - 01 Advanced File Processing
Smoking docker
Modern Perl Toolchain
Perl 20tips
PHPerのためのPerl入門@ Kansai.pm#12
Managing Perl Installations: A SysAdmin's View
Perl - laziness, impatience, hubris, and one liners
How CPAN Testers helped me improve my module
IO Streams, Files and Directories
Ad

Recently uploaded (20)

PDF
From MVP to Full-Scale Product A Startup’s Software Journey.pdf
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Zenith AI: Advanced Artificial Intelligence
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PPTX
Programs and apps: productivity, graphics, security and other tools
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Approach and Philosophy of On baking technology
PDF
Video forgery: An extensive analysis of inter-and intra-frame manipulation al...
PPTX
Group 1 Presentation -Planning and Decision Making .pptx
PDF
project resource management chapter-09.pdf
PDF
Mushroom cultivation and it's methods.pdf
PPTX
Chapter 5: Probability Theory and Statistics
PDF
Hindi spoken digit analysis for native and non-native speakers
PPTX
TechTalks-8-2019-Service-Management-ITIL-Refresh-ITIL-4-Framework-Supports-Ou...
PDF
A comparative analysis of optical character recognition models for extracting...
PDF
A comparative study of natural language inference in Swahili using monolingua...
PPTX
SOPHOS-XG Firewall Administrator PPT.pptx
PDF
DASA ADMISSION 2024_FirstRound_FirstRank_LastRank.pdf
PDF
A novel scalable deep ensemble learning framework for big data classification...
From MVP to Full-Scale Product A Startup’s Software Journey.pdf
Building Integrated photovoltaic BIPV_UPV.pdf
Zenith AI: Advanced Artificial Intelligence
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Programs and apps: productivity, graphics, security and other tools
Digital-Transformation-Roadmap-for-Companies.pptx
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Approach and Philosophy of On baking technology
Video forgery: An extensive analysis of inter-and intra-frame manipulation al...
Group 1 Presentation -Planning and Decision Making .pptx
project resource management chapter-09.pdf
Mushroom cultivation and it's methods.pdf
Chapter 5: Probability Theory and Statistics
Hindi spoken digit analysis for native and non-native speakers
TechTalks-8-2019-Service-Management-ITIL-Refresh-ITIL-4-Framework-Supports-Ou...
A comparative analysis of optical character recognition models for extracting...
A comparative study of natural language inference in Swahili using monolingua...
SOPHOS-XG Firewall Administrator PPT.pptx
DASA ADMISSION 2024_FirstRound_FirstRank_LastRank.pdf
A novel scalable deep ensemble learning framework for big data classification...

perlall

  • 1. perlall do something with all my perls Reini Urban / rurban houston.pm, 2012
  • 2. Design Goals parallel perl installations as supported by Configure (or not). no chdir or switching to other perls (better perlbrew) /usr/local/bin/perl5.15.8 /usr/local/bin/perl5.14.2 /usr/local/bin/perl5.12.4 /usr/local/bin/perl5.10.1 /usr/local/bin/perl5.8.9 /usr/local/bin/perl5.8.8 /usr/local/bin/perl5.8.5 /usr/local/bin/perl5.8.4 /usr/local/bin/perl5.6.2
  • 3. Design Goals Build, maintain and test with a lot of perls, on a lot of machines. Your private cpantesters framework. Standardize feature names: DEBUGGING and threads. Single file - scp to all remote vm's. Only 4 external modules - self-installer independent on CPAN.
  • 4. perlall vs perlbrew Globally shared non-arch Private non-arch - good for modules usedevel testing manual installation process automatic bash installation (root, sudo or non-sudo) Not only build. Use it: No parallel usage init cpan cpanm maketest makeinstall, ... MSWin32, msys No MSWin32, what is msys?
  • 5. Common tasks: setup + test + install for p in 6.2 8.4 8.5 8.8 8.9 10.1 12.4 14.2 15.8 do perlall build 5.${p}; perlall build 5.${p}-nt perlall build 5.${p}d; perlall build 5.${p}d-nt perlall build 5.${p}-m done # and wait ~2h perlall list # what failed? perlall=5.15.* perlall cpanm -f --sudo YAML perlall init # installs e.g. Bundle::CPANReporter2 # wait and prompt for the next 2hrs cd ~/Perl/B-Generate perlall maketest perlall makeinstall # generate and upload cpanreports
  • 6. Creating test reports cd ~/Perl/B-Generate perlall maketest local perlall testvm --all and remote (vm or phys) => log.test-osx10.6.8-5.10.1d-nt, log.test-linuxmint1- 5.15.8d-nt, log.test-freebsd7.4-5.10.1, log.test- cygwin1.7.10s_winxp-5.14.2d-nt, ... (> 50 logfiles) $ ../B-C/store_rpt save reports away
  • 7. Working with test reports $ ../B-C/status_upd -fqd cygwin1.7.10s_winxp-5.14.2d-nt: t/cc.t Failed tests: 10, 38, 46, 101 t/e_perlcc.t Failed tests: 22, 52 linuxmint1-5.14.2-m: t/c_o1.t Failed test: 15 t/c_o2.t Failed test: 15 t/c_o3.t Failed test: 15 t/c_o4.t Failed test: 15 t/cc.t Failed test: 15 t/e_perlcc.t Failed tests: 53..54 linuxmint1-5.15.8d: linuxmint1-5.15.8d-nt: t/c_o1.t Failed test: 15 t/c_o2.t Failed test: 15 t/c_o3.t Failed test: 15 t/e_perlcc.t Failed tests: 53..54
  • 8. Working with test reports Download external cpanreports: $ ../B-C/t/download-reports 1.43 And check all reports, yours and theirs: $ ../B-C/status_upd -fqd t/reports/1.43 -fqd fail only, quiet, no dump display (broken) Reports are created by: make test TEST_VERBOSE=1 2>&1 | tee log.test git diff >> log.test perl -V >> log.test
  • 9. Cfg and Shortcuts in ~/.perlall .perlall is in bash format. source it from your .profile env and alias PERLALL_BUILDROOT=~/perl5/src alias perl-git='cd /usr/src/perl/blead/perl-git' # currently used perl (set by perlall) alias p=perl5.15.8d-nt
  • 10. Shortcuts in ~/.perlall # some aliases suggestions alias pb="p -Iblib/arch -Iblib/lib" # no -Mblib! alias pmf="if [ -f Makefile.PL ]; then p Makefile.PL; else rm -rf _build; p Build.PL; fi" alias pm='pmf && m' alias ppan='p -S cpan' alias m=make alias mt='make -j4 test' alias mi='mt && smi' alias mtee='mt 2>&1 | tee log.test' alias smi='sudo make install' #set p alias from current Makefile function ppm { p=$(perl -ane'print $F[2] if /^FULLPERL =/' Makefile); echo alias p=$p; test -n "$p" && alias p=$p; } alias pgrp='pgrep -fl perl'
  • 11. Typical test session alias pb="p -Iblib/arch -Iblib/lib" alias pmf="if [ -f Makefile.PL ]; then p Makefile.PL; else rm -rf _build; p Build.PL; p Build; fi" alias pm='pmf && m' $ pm # make with your current perl $ pb t/02failing_test.t # single test $ pb -d t/02failing_test.t # debug it $ mt # test with this perl $ perlall -m --nogit maketest # all major perls
  • 12. perlall do # who has no YAML? perlall do -MYAML -e0 # install on older versions perlall=5.8.* perlall cpanm -f -S YAML # check memory leaks, with fresh make before # use current p as $p (pb not, sorry) perlall make '-e1 && valgrind $p -Mblib test.pl' perlall make does always a do, i.e $p $@
  • 13. testvm Need to setup every vm, with perlall of course. See INSTALL. ssh-copy-id your .ssh key, adjust .profile or .bashrc. Create the same layout as on the master for your work modules. ssh win mkdir -p Perl/MyModule perlall testvm win centos5 freebsd10 --fork If win is on a vm, then the vm is started/resumed. (kvm only so far). Switched from vmware,xen,virtualbox to kvm. With -j4 ensure that max. 4 vm's run concurrently. Memory and IO pressure destabilizes the system, esp. with cgroups and 3.x kernels. TODO: Automated mingw/activeperl testing. ssh with cmd.exe?
  • 14. New perl release perl-git # cd to git srcdir git co blead; git fetch # get new tags perl-root # cd to buildroot # for testing perlall build 5.15.8d perlall build 5.15.8d-nt # for benchmarking perlall build 5.15.8-nt # start CPAN update perlall=5.15.8* perlall init # how does it look like? cd ~/Perl/MyModule alias p=perl5.15.8d-nt pm && mtee
  • 15. Test blead perl-git # cd to git srcdir git co blead; git fetch # get latest perlall -v build bleadd-nt --link -Dcc=gcc-mp-4.7 => /usr/local/bin/perl5.15.8d-nt@8129baca installed blead - magic version, --link -Dmksymlinks to perl-git perlall -v build bleadd-nt --link -Dcc=clang -Dld=clang --as perl5.15.8d-nt-clang ...test error... perlall -v build bleadd-nt --as perl5.15.8d-nt-clang --install # continue perlall build bleadd-nt smoke-me/khw-tk # branch => perl5.15.8d-nt@khw-tk
  • 16. Planned perlall smoke -j4 bleadd-nt smoke-me/* => TODO: send smoke reports perlall=5*[0-9]-nt perlall -m bench t/benchscript.t => TODO: stable Benchmark.pm (check load, wait until stable) perlall cpan Devel::*Prof* => query CPAN for matching modules. metacpan not yet good enough. CPAN is better
  • 17. cpan App::perlall cd ~/Perl git clone https://github.com/rurban/App-perlall.git cd App-perlall perl Makefile.PL && make test install cd ~/bin ln -s ~/Perl/App-perlall/scripts/perlall ln perlall perlall-maketest ln perlall perlall-do ln perlall perlall-cpan ln perlall perlall-init # See INSTALL