The information in this post is about a project in motion. The final delivery may differ from what is discussed here, especially as we consider the feedback you have.
Update: the changes discussed in this article are delayed until a future version of cPanel & WHM. They are not in version 11.34.
Our last article discussed changing from compile-on-demand to delivery of pre-compiled binary packages, using the RPM format. A primary driver behind this was our use of perl. To deliver perl via pre-built RPM packages required a number of changes to the product.
cPanel & WHM will no longer install perl from source. Rather pre-built RPMs will deliver perl and its dependencies.
Installation Layout
From an architectural standpoint we will treat /usr/local/cpanel/3rdparty as the root file system (/) for the purpose of third party applications. This means you will find a bin, lib, include and other standard directories therein.
There is some deviation in the directory organization. For example we have historically installed mailman to /usr/local/cpanel/3rdparty/mailman. These historical uses will remain for now. In fact we build on that variation in order to support multiple versions of an application, or language, being installed simultaneously.
For this project we will upgrade the external (more on that in a moment) perl from 5.8.8 to 5.14. It is installed to /usr/local/cpanel/3rdparty/perl/514. The executables are symlinked to /usr/local/cpanel/3rdparty/bin (e.g. /usr/local/cpanel/3rdparty/bin/perl).
Barring a few special circumstances all CPAN modules will be distributed as RPMs with cPanel & WHM. The checkperlmodules, and similar scripts, no longer exist. These modules likewise are all in /usr/local/cpanel/3rdparty.
Environment and Use
Most of the perl scripts we distribute with cPanel & WHM will have their shebangs adjusted to /usr/local/cpanel/3rdparty/bin/perl. This perl currently has the following include paths:
@INC:
/usr/local/cpanel
/usr/local/cpanel/3rdparty/perl/514/lib64/perl5/cpanel_lib/x86_64-linux-64int
/usr/local/cpanel/3rdparty/perl/514/lib64/perl5/cpanel_lib
/usr/local/cpanel/3rdparty/perl/514/lib64/perl5/5.14.2/x86_64-linux-64int
/usr/local/cpanel/3rdparty/perl/514/lib64/perl5/5.14.2
/opt/perl5/514/site_lib/x86_64-linux-64int
/opt/perl5/514/site_lib
(Substitute lib for lib64 on a 32-bit system.)
Note: I believe the /opt locations will change prior to shipping.
CPAN modules can be installed using /usr/local/cpanel/3rdparty/perl/514/bin/cpan (or /usr/local/cpanel/3rdparty/perl/514/bin/cpanm). These install to the @INC locations listed above.
Applications and scripts are free to use the cPanel-provided perl. To do this they will need to modify their shebang. If an application needs to support both newer and older versions of cPanel & WHM, modifying the first line of your script to the following should ensure multi-version compatibility:
#!/bin/sh
eval 'if [ -x /usr/local/cpanel/3rdparty/bin/perl ]; then exec /usr/local/cpanel/3rdparty/bin/perl -x -- $0 ${1+"$@"}; else exec /usr/bin/perl -x $0 ${1+"$@"}; fi;'
if 0;
#!/usr/bin/perl
From the foregoing it should be apparent that beginning with these changes systems can have two or more of the following perl implementations present:
* cPanel provided RPM
* cPanel provided source install
* OS Provided RPM
Fresh installs should only have two of the above. Upgrades from older versions of cPanel & WHM could have all three. We are leaving the existing source installed implementation in place after the upgrade so existing applications continue to function.
CPAN Modules
How do I install a CPAN module and have it be available for everything?
In particular, how do I install a CPAN module once and have it be usable by:
- Applications used by cpsrvd
- Command line scripts
This is really determined by the perl shebang used by the script or applications. The tools we provide to install CPAN modules, such as scripts/perlinstaller, have always installed the modules to /usr/lib or /usr/local/lib. These are the search paths normally used by the perl binary at /usr/bin/perl. This will not change.
Using the cpan and cpanm utilities provided by our RPM will install to a location outside of /usr/local/cpanel. These modules will not be overwritten or managed in any fashion by cPanel & WHM. If you want them updated, you will need to maintain them in your own fashion.
Given the above, if you want the experience of ‘install a CPAN module once, have it work every where’ then:
- Change your shebang to /usr/local/cpanel/3rdparty/bin/perl
- Use the cpan and cpanm utilities in /usr/local/cpanel/3rdparty/perl/514/bin/ to perform your installs.
What About the CPAN Installers in cPanel & WHM?
The cPanel interface has always installed to the user’s home directory. This behavior will not change anytime soon.
The WHM interface has always installed to the system location (/usr/lib or /usr/local/lib). This behavior will not change soon.
What CPAN Modules Come as RPMs?
At the time of writing these are:
- Acme-Bleach
- Acme-Damn
- Acme-Spork
- Algorithm-Diff
- Any-Moose
- App-Cmd
- AppConfig
- App-cpanminus
- App-Nopaste
- App-perlbrew
- Archive-Any
- Archive-Extract
- Archive-Tar
- Archive-Tar-Streamed
- Archive-Zip
- Attribute-Handlers
- Authen-Libwrap
- Authen-SASL
- autobox
- autodie
- AutoLoader
- B-C
- B-Debug
- B-Flags
- B-Hooks-EndOfScope
- B-Hooks-OP-Check
- B-Hooks-OP-PPAddr
- bignum
- B-Keywords
- B-Lint
- Browser-Open
- BSD-Resource
- Bundle-CPAN
- Bundle-Interchange
- Business-ISBN
- Business-ISBN-Data
- Business-OnlinePayment
- Business-OnlinePayment-AuthorizeNet
- Business-UPS
- B-Utils
- Cache-FastMmap
- Capture-Tiny
- Carp-Always
- Carp-Assert
- Carp-Assert-More
- Carp-Clan
- Catalyst-Action-RenderView
- Catalyst-Action-REST
- Catalyst-ActionRole-ACL
- Catalyst-Authentication-Store-DBIx-Class
- Catalyst-Component-InstancePerContext
- Catalyst-Controller-ActionRole
- Catalyst-Devel
- Catalyst-Log-Logperl
- Catalyst-Model-DBIC-Schema
- Catalyst-Plugin-Authentication
- Catalyst-Plugin-Authorization-Roles
- Catalyst-Plugin-AutoCRUD
- Catalyst-Plugin-Browser
- Catalyst-Plugin-Cache
- Catalyst-Plugin-Cache-FastMmap
- Catalyst-Plugin-ConfigLoader
- Catalyst-Plugin-HashedCookies
- Catalyst-Plugin-Redirect
- Catalyst-Plugin-Session
- Catalyst-Plugin-Session-State-Cookie
- Catalyst-Plugin-Session-Store-FastMmap
- Catalyst-Plugin-StackTrace
- Catalyst-Plugin-Static-Simple
- Catalyst-Plugin-Unicode-Encoding
- Catalyst-Plugin-UploadProgress
- Catalyst-Runtime
- Catalyst-TraitFor-Request-BrowserDetect
- Catalyst-View-JSON
- Catalyst-View-TT
- CatalystX-Component-Traits
- CatalystX-RoleApplicator
- CDB_File
- CGI-FormBuilder
- CGI-FormBuilder-Source-Perl
- CGIpm
- CGI-Session
- CGI-Simple
- CHI
- Class-Accessor
- Class-Accessor-Chained
- Class-Accessor-Grouped
- Class-Base
- Class-C
- Class-C-Adopt-NEXT
- Class-C-Componentised
- Class-Data-Inheritable
- Class-ErrorHandler
- Class-Factory-Util
- Class-Inner
- Class-Inspector
- Class-Load
- Class-Loader
- Class-Load-XS
- Class-MakeMethods
- Class-MethodMaker
- Class-Method-Modifiers
- Class-Singleton
- Class-Std
- Class-Std-Utils
- Class-Unload
- Class-XSAccessor
- Clipboard
- Clone
- common-sense
- Compress-Bzip
- Compress-Raw-Bzip
- Compress-Raw-Zlib
- Config-Any
- Config-Crontab
- Config-General
- Config-GitLike
- Config-INI
- Config-MVP
- Config-MVP-Reader-INI
- Config-Tiny
- constant
- Context-Preserve
- Convert-ASCII-Armour
- Convert-ASN
- Convert-BinHex
- Convert-PEM
- CPAN
- CPAN-DistnameInfo
- Cpanel-Class
- Cpanel-Cleanup
- cPanel-MemTest
- cPanel-SyncUtil
- Cpanel-TaskQueue
- CPAN-Meta
- CPAN-Meta-YAML
- CPAN-Perl-Releases
- CPANPLUS
- CPANPLUS-Dist-Build
- CPAN-SQLite
- CPAN-Uploader
- Crypt-Blowfish
- Crypt-CAST_PP
- Crypt-CBC
- Crypt-DES
- Crypt-DES_EDE
- Crypt-DSA
- Crypt-GPG
- Crypt-IDEA
- Crypt-OpenPGP
- Crypt-OpenSSL-Bignum
- Crypt-OpenSSL-DSA
- Crypt-OpenSSL-Random
- Crypt-OpenSSL-RSA
- Crypt-Passwd-XS
- Crypt-Primes
- Crypt-Random
- Crypt-RC
- Crypt-Rijndael
- Crypt-RIPEMD
- Crypt-RSA
- Crypt-SSLeay
- Crypt-Twofish
- Curses
- Curses-UI
- Danga-Socket
- Data-Buffer
- Data-Compare
- Data-Dump
- Data-Dumper
- Data-Dumper-Concise
- Data-Dump-Streamer
- Data-OptList
- Data-Page
- Data-Section
- Data-Serializer
- Data-UUID
- Data-Visitor
- Date-Simple
- DateTime
- DateTime-Format-Builder
- DateTime-Format-Mail
- DateTime-Format-Pg
- DateTime-Format-Strptime
- DateTime-Format-WCDTF
- DateTime-Locale
- DateTime-TimeZone
- DateTime-Tiny
- Date-Tiny
- DBD-Mock
- DBD-mysql
- DBD-Pg
- DBD-SQLite
- DBD-SQLite
- DB_File
- DBI
- DBIx-Class
- DBIx-Class-Schema-Loader
- DBIx-MyParsePP
- Devel-Caller
- Devel-Cover
- Devel-Cycle
- Devel-Declare
- Devel-GlobalDestruction
- Devel-Hide
- Devel-LexAlias
- Devel-NYTProf
- Devel-PartialDump
- Devel-PatchPerl
- Devel-PPPort
- Devel-REPL
- Devel-Size
- Devel-StackTrace
- Devel-StackTrace-AsHTML
- Devel-Symdump
- Diff-LibXDiff
- Digest
- Digest-BubbleBabble
- Digest-HMAC
- Digest-JHash
- Digest-MD
- Digest-MD
- Digest-MD-File
- Digest-Perl-MD
- Digest-SHA
- Digest-SHA
- Dist-CheckConflicts
- Dist-Zilla
- Dist-Zilla-Plugin-Git
- Dist-Zilla-Plugin-GitHub
- dualcore-metacpnoarch
- Email-Abstract
- Email-Address
- Email-Date-Format
- Email-MessageID
- Email-MIME
- Email-MIME-ContentType
- Email-MIME-Encodings
- Email-MIME-Kit
- Email-Sender
- Email-Simple
- Email-Valid
- Encode
- Encode-Detect
- Encode-Locale
- encoding-warnings
- Env
- Error
- Eval-Closure
- Exception-Class
- Expect
- Exporter
- Exporter-Declare
- Exporter-Lite
- ExtUtils-CBuilder
- ExtUtils-Command
- ExtUtils-Constant
- ExtUtils-Depends
- ExtUtils-Install
- ExtUtils-MakeMaker
- ExtUtils-Manifest
- ExtUtils-ParseXS
- File-BaseDir
- File-ChangeNotify
- File-chdir
- File-Comments
- File-Copy-Recursive
- File-DesktopEntry
- File-Fetch
- File-Find-Rule
- File-Find-Rule-Filesys-Virtual
- File-Find-Rule-Perl
- File-HomeDir
- File-Listing
- File-MimeInfo
- File-MMagic
- File-MMagic-XS
- File-Next
- File-Path
- File-Path-Tiny
- File-pushd
- File-Remove
- File-ShareDir
- File-ShareDir-Install
- File-Slurp
- Filesys-Df
- Filesys-Notify-Simple
- Filesys-Statvfs
- Filesys-Virtual
- File-Tail
- File-Temp
- File-Touch
- File-Which
- Filter
- Filter-Simple
- forks
- GD
- GDGraph
- GDTextUtil
- Gearman
- Geography-Countries
- Geo-IPfree
- Getopt-Euclid
- Getopt-Long
- Getopt-Long-Descriptive
- Getopt-Param
- Getopt-Param-Tiny
- Git-Repository
- Git-Wrapper
- Graph-Easy
- Graph-Easy-As_svg
- Graph-Easy-Manual
- Graph-Flowchart
- GSSAPI
- Hash-Merge
- Hash-Merge-Simple
- Hash-MoreUtils
- Hash-MultiValue
- Hash-Util-FieldHash-Compat
- Hook-LexWrap
- HTML-Form
- HTML-Parser
- HTML-StripTags
- HTML-Tagset
- HTML-Template
- HTML-Tree
- HTTP-Body
- HTTP-BrowserDetect
- HTTP-Cookies
- HTTP-Daemon
- HTTP-Daemon-App
- HTTP-Daemon-SSL
- HTTP-Date
- HTTP-Lite
- HTTP-Message
- HTTP-Negotiate
- HTTP-Parser-XS
- HTTP-Request-AsCGI
- HTTP-Server-Simple
- HTTP-Tiny
- Image-Base
- Image-Info
- Image-Size
- Image-Xbm
- Image-Xpm
- IO
- IO-AIO
- IO-All
- IO-Compress
- IO-Interactive
- IO-Interactive-Tiny
- IO-Interface
- IO-Prompt
- IO-Socket-ByteCounter
- IO-Socket-INET
- IO-Socket-SSL
- IO-String
- IO-stringy
- IO-TieCombine
- IO-Tty
- IO-Zlib
- IPC-Cmd
- IP-Country
- IPC-Pipeline
- IPC-Run
- IPC-Run
- IPC-SysV
- JSON
- JSON-Any
- JSON-XS
- Lchown
- Lexical-Persistence
- libnet
- lib-restrict
- libwww-perl
- libxml-perl
- Lingua-EN-Inflect
- Lingua-EN-Inflect-Number
- Lingua-EN-Inflect-Phrase
- Lingua-EN-Tagger
- Lingua-PT-Stemmer
- Lingua-Stem
- Lingua-Stem-Fr
- Lingua-Stem-It
- Lingua-Stem-Ru
- Lingua-Stem-Snowball-Da
- Linux-Inotify
- List-Cycle
- List-MoreUtils
- Locale-Codes
- Locale-Maketext
- Locale-Maketext-Pseudo
- Locale-Maketext-Simple
- Locales
- local-lib
- Log-Any
- Log-Contextual
- Log-Dispatch
- Log-Dispatch-Array
- Log-Dispatch-Config
- Log-Dispatchouli
- Log-Logperl
- Log-Message
- Log-Message-Simple
- LWP-MediaTypes
- LWP-Protocol-https
- Mail-Alias-Reader
- Mail-DKIM
- Mail-DomainKeys
- Mail-SendEasy
- Mail-Sender
- Mail-Sender-Easy
- Mail-SpamAssassin
- Mail-SPF
- Mail-SRS
- MailTools
- Math-Base
- Math-BigInt
- Math-BigInt-FastCalc
- Math-BigInt-GMP
- Math-BigInt-Pari
- Math-BigRat
- Math-Complex
- Math-Fibonacci
- Math-Fibonacci-Phi
- Math-Pari
- Math-Round
- MD
- Memoize
- Memoize-ExpireLRU
- Meta-Builder
- MIME-Base
- MIME-Base
- MIME-Lite
- MIME-Types
- Mixin-Linewise
- MLDBM
- Modern-Perl
- Module-Build
- Module-CoreList
- Module-Extract-VERSION
- Module-Find
- Module-Implementation
- Module-Install
- Module-Load
- Module-Load-Conditional
- Module-Loaded
- Module-Metadata
- Module-Pluggable
- Module-Refresh
- Module-Runtime
- Module-ScanDeps
- Module-Signature
- Module-Want
- Moo
- Moose
- Moose-Autobox
- MooseX-App-Cmd
- MooseX-AttributeHelpers
- MooseX-AttributeShortcuts
- MooseX-ClassAttribute
- MooseX-Clone
- MooseX-ConfigFromFile
- MooseX-Daemonize
- MooseX-Declare
- MooseX-Emulate-Class-Accessor-Fast
- MooseX-Getopt
- MooseX-GlobRef
- MooseX-Has-Sugar
- MooseX-InsideOut
- MooseX-Iterator
- MooseX-LazyLogDispatch
- MooseX-LazyRequire
- MooseX-LogDispatch
- MooseX-Log-Logperl
- MooseX-Meta-TypeConstraint-ForceCoercion
- MooseX-MethodAttributes
- MooseX-Method-Signatures
- MooseX-NonMoose
- MooseX-Object-Pluggable
- MooseX-OneArgNew
- MooseX-Param
- MooseX-Params-Validate
- MooseX-POE
- MooseX-RelatedClassRoles
- MooseX-Role-Cmd
- MooseX-Role-Parameterized
- MooseX-Role-TraitConstructor
- MooseX-Role-WithOverloading
- MooseX-SemiAffordanceAccessor
- MooseX-SetOnce
- MooseX-SimpleConfig
- MooseX-Singleton
- MooseX-Storage
- MooseX-StrictConstructor
- MooseX-Traits
- MooseX-Traits-Pluggable
- MooseX-Types
- MooseX-Types-Common
- MooseX-Types-DateTime
- MooseX-Types-LoadableClass
- MooseX-Types-Path-Class
- MooseX-Types-Perl
- MooseX-Types-Set-Object
- MooseX-Types-Structured
- MooseX-Workers
- Mozilla-CA
- MRO-Compat
- namespace-autoclean
- namespace-clean
- NetAddr-IP
- Net-AIM
- Net-CIDR
- Net-Daemon
- Net-Daemon-SSL
- Net-DAV-Server
- Net-DNS
- Net-DNS-SEC
- Net-FTPSSL
- Net-HTTP
- Net-HTTPS-Any
- Net-Ident
- Net-IP
- Net-IP-Match-Regexp
- Net-IPvAddr
- Net-Jabber
- Net-Jabber-Bot
- Net-LDAP-Server
- Net-LibIDN
- Net-OpenSSH
- Net-OSCAR
- Net-Ping
- Net-Server
- Net-SFTP-Foreign
- Net-SNMP
- Net-SOCKS
- Net-SSLeay
- Net-TCPwrappers
- Net-Telnet
- Net-XMPP
- NEXT
- Number-Compare
- Object-Accessor
- Object-Signature
- OLE-Storage_Lite
- Opcodes
- Package-Constants
- Package-DeprecationManager
- Package-Stash
- Package-Stash-XS
- PadWalker
- Params-Check
- Params-Util
- Params-Validate
- PAR-Dist
- parent
- Parse-CPAN-Meta
- Parse-Method-Signatures
- Parse-RecDescent
- Path-Class
- Path-Iter
- PathTools
- Perlbal
- Perl-Critic
- PerlIO-via-QuotedPrint
- Perl-Junction
- perl-ldap
- Perl-MinimumVersion
- Perl-OSType
- Perl-PrereqScanner
- Perl-Tidy
- Perl-Version
- Plack
- Plack-Middleware-ReverseProxy
- Plack-Test-ExternalServer
- Pod-Coverage
- Pod-Coverage-Moose
- Pod-Escapes
- Pod-Eventual
- Pod-LaTeX
- podlators
- Pod-Parser
- Pod-Perldoc
- Pod-Readme
- Pod-Simple
- Pod-Spell
- POE
- POE-Test-Loops
- PPI
- PPIx-Regexp
- PPIx-Utilities
- Pristine-Tar
- Probe-Perl
- Proc-Daemon
- Proc-ProcessTable
- Quota
- Readonly
- Readonly-XS
- Regexp-Common
- Regexp-Parser
- REST-Google
- REST-Google-Translate
- Role-HasMessage
- Role-Identifiable
- RRDs
- Safe
- Safe-Hole
- Scalar-List-Utils
- Scope-Guard
- Scope-Upper
- SelfLoader
- Set-Crontab
- Set-Object
- Shell
- Smart-Comments
- Snowball-Norwegian
- Snowball-Swedish
- SOAP-Lite
- Socket
- Software-License
- Sort-Versions
- Spreadsheet-ParseExcel
- Spreadsheet-ParseExcel-Simple
- Spreadsheet-WriteExcel
- Spreadsheet-WriteExcel-Simple
- SQL-Abstract
- SQL-Statement
- SQL-Translator
- Starman
- Storable
- strictures
- String-BOM
- String-CamelCase
- String-CRC
- String-Errf
- String-Flogger
- String-Format
- String-Formatter
- String-RewritePrefix
- String-ToIdentifier-EN
- String-Unquotemeta
- Sub-Exporter
- Sub-Exporter-ForMethods
- Sub-Exporter-GlobExporter
- Sub-Install
- Sub-Name
- Sub-Uplevel
- SVG-TT-Graph
- Sysadm-Install
- Sys-Hostname-Long
- Sys-Mmap
- Sys-SigAction
- Sys-Syscall
- Sys-Syslog
- System-Command
- Task-Cpanel-Catalyst
- Task-Cpanel-Core
- Task-Cpanel-EA
- Task-Cpanel-Internal
- Task-Cpanel-Kensho
- Task-Cpanel-rdparty
- Task-Weaken
- Template-Timer
- Template-Toolkit
- Term-ANSIColor
- Term-Cap
- Term-ProgressBar
- Term-ProgressBar-Quiet
- Term-ProgressBar-Simple
- TermReadKey
- Term-UI
- Test
- Test-Carp
- Test-Class
- Test-CPAN-Meta
- Test-CPAN-Meta-YAML
- Test-Deep
- Test-Differences
- Test-Exception
- Test-File-Contents
- Test-Harness
- Test-LongString
- Test-Manifest
- Test-Memory-Cycle
- Test-MinimumVersion
- Test-Mock-Cmd
- Test-MockModule
- Test-MockObject
- Test-Most
- Test-NoWarnings
- Test-Object
- Test-Output
- Test-Pod
- Test-Pod-Coverage
- Test-Script
- Test-SharedFork
- Test-Simple
- Test-SubCalls
- Test-TCP
- Test-Tester
- Test-Unit
- Test-use-ok
- Test-Warn
- Test-WWW-Mechanize
- Test-YAML-Meta
- Test-YAML-Valid
- Text-Balanced
- Text-CSV
- Text-CSV_XS
- Text-Diff
- Text-Extract-MaketextCallPhrases
- Text-Fold
- Text-German
- Text-Glob
- Text-Iconv
- Text-ParseWords
- Text-SimpleTable
- Text-Soundex
- Text-Tabs+Wrap
- Text-Template
- Text-Trim
- Text-Unidecode
- Thread-Queue
- Thread-Semaphore
- Throwable
- Tie-DBI
- Tie-EncryptedHash
- Tie-File
- Tie-IxHash
- Tie-RefHash
- Tie-ShadowHash
- Tie-ToObject
- TimeDate
- Time-Duration
- Time-Duration-Parse
- Time-HiRes
- Time-Local
- Time-modules
- Time-Piece
- Time-Tiny
- Tree-DAG_Node
- Tree-MultiNode
- Tree-Simple
- Tree-Simple-VisitorFactory
- TryCatch
- Try-Tiny
- Unicode-Collate
- Unicode-Normalize
- UNIVERSAL-can
- UNIVERSAL-isa
- Unix-PID
- Unix-PID-Tiny
- Unix-Syslog
- URI
- URI-Find
- Variable-Magic
- version
- Version-Next
- Version-Requirements
- Want
- WWW-Form
- WWW-Mechanize
- WWW-Mechanize-TreeBuilder
- WWW-Pastebin-PastebinCom-Create
- WWW-RobotRules
- XML-Atom
- XML-DOM
- XML-Filter-BufferText
- XML-Generator-PerlData
- XML-LibXML
- XML-NamespaceSupport
- XML-Parser
- XML-RegExp
- XML-RSS
- XML-SAX
- XML-SAX-Base
- XML-SAX-Expat
- XML-SAX-Writer
- XML-Simple
- XML-Stream
- XML-Writer
- XML-XPath
- XSLoader
- YAML
- YAML-LibYAML
- YAML-Syck
- YAML-Tiny
If there is something you want added to the list, please let us know.
Versions of perl
Earlier I referred to the perl delivered by our RPM as ‘external.’ What does this mean?
In the context of cPanel & WHM there are two types of perl: external and internal. The external version is used by non-compiled scripts and applications. For example scripts/upcp uses the external version.
The internal version is used by compiled code. This is limited to perl 5.6.2 and the modules installed to /usr/local/cpanel/perl. The long term goal is to switch the compiled version to use the same perl version as non-compiled code. That was not attainable for this release.
The distinction between internal versus external is only of relevance if you are developing, or deploying, perl applications that will be called directly by our compiled code.
More
This is the second article in our series on migrating to pre-built RPMs. Other articles, written and pending are:
Discuss this article on our forum.