The Community Forums

Interact with an entire community of cPanel & WHM users!
  1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Providing the perl stack as RPMs

Discussion in 'cPanel Announcements' started by cPanelKenneth, Jun 14, 2012.

  1. cPanelKenneth

    cPanelKenneth cPanel Development
    Staff Member

    Joined:
    Apr 7, 2006
    Messages:
    4,460
    Likes Received:
    22
    Trophy Points:
    38
    cPanel Access Level:
    Root Administrator
    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.

    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 11.34. In fact we build on that variation in order to support multiple versions of an application, or language, being installed simultaneously.

    For 11.34 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. Modules formerly managed by checkperlmodules, and similar scripts, are now provided by RPM. The scripts that installed modules from source 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:
    Code:
        @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 11.34 and older versions of cPanel & WHM, modifying the first line of your script to the following should ensure multi-version compatibility:
    Code:
        #!/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 11.34 systems can have two or more of the following perl implementations present:
    • cPanel provided RPM
    • cPanel provided source install
    • OS Provided RPM

    Fresh installs of 11.34 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 in 11.34.

    The WHM interface has always installed to the system location (/usr/lib or /usr/local/lib). This behavior will not change in 11.34.


    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:
     
  2. chirpy

    chirpy Well-Known Member

    Joined:
    Jun 15, 2002
    Messages:
    13,475
    Likes Received:
    20
    Trophy Points:
    38
    Location:
    Go on, have a guess
    Thank you for that Kenneth. Very interesting. It will be difficult to comment more until we can see and test 11.34 in EDGE, unless you have a DEVEL or BETA release?
     
  3. cPanelKenneth

    cPanelKenneth cPanel Development
    Staff Member

    Joined:
    Apr 7, 2006
    Messages:
    4,460
    Likes Received:
    22
    Trophy Points:
    38
    cPanel Access Level:
    Root Administrator
    You're welcome, Jonathan. I don't anticipate this being in a public development release until late July or August. Of course I could be surprised ;)

    We're still working on making the update system more robust, now that we rely more heavily on the RPM database than we did in the past. The upcoming article about the update system will discuss this. Until those changes are good we won't make the perl RPM system available.

    In the coming sprints we will test some of the common applications people use with cPanel & WHM. This will give us a better view of how these changes will impact our customers and users. Information we glean from that testing will be provided to the application vendor (if we can get ahold of them).

    In the meantime we are open to suggestions and questions regarding these changes.
     
  4. ajmetz

    ajmetz Registered

    Joined:
    Dec 8, 2012
    Messages:
    4
    Likes Received:
    0
    Trophy Points:
    1
    cPanel Access Level:
    Root Administrator
    11.34 is out now.

    Did it ship with Perl 5.14?

    I help out on a website that's hosted via Neostrada.nl.
    They have Cpanel and WHM 11.34.0 (build 11) installed.
    The Stats on the Cpanel home page show the Perl version to be 5.8.8.

    I used OSX's Terminal.app to login to the web server remotely, and navigated to /usr/local/cpanel/3rdparty/ but there is no perl file or directory.
    /usr/local/cpanel/3rdparty/perl/514 does not exist.
    /usr/local/cpanel/3rdparty/bin/perl does not exist (as far as I can tell).

    How would I get Perl 5.14 installed on this server?
    Will I need to speak to Neostrada, or is there anything I can do myself?
    I have root access.

    Many thanks,

    Andrew (ajmetz).
     
  5. cPanelToddR

    cPanelToddR Member
    Staff Member

    Joined:
    Oct 8, 2009
    Messages:
    21
    Likes Received:
    1
    Trophy Points:
    3
    Sorry, This got delayed to 11.36. The changes are already merged and 11.36 is about to go into final testing.
     
  6. ajmetz

    ajmetz Registered

    Joined:
    Dec 8, 2012
    Messages:
    4
    Likes Received:
    0
    Trophy Points:
    1
    cPanel Access Level:
    Root Administrator
    Have now got WHM 11.38 (build 6) with Perl 5.14.3 at:
    /usr/local/cpanel/3rdparty/bin/perl

    Before I start installing frameworks,
    and/or coding scripts/apps,
    is it possible to upgrade the perl version any higher?

    Could I do a Perl upgrade, via cpan, via:
    /usr/local/cpanel/3rdparty/perl/514/bin/cpan
    ...or doesn't it work like that?
    And given that it's in a cpanel/3rdparty/ directory - is it relatively independent, and upgrading wouldn't be a problem;
    or like an OS installation of Perl, is it recommended to leave it at the version you found it at?

    I'm also curious about the line:
    "In fact we build on that variation in order to support multiple versions of an application, or language, being installed simultaneously."
    Is it possible to have more than one Perl installation in the cpanel/3rdparty/ directory then?
    Perhaps I could leave the 5.14.3 installation as it is, and independently install 5.16 or 5.18, in separate folders?
    Would I use Perlbrew for this? Or is there another way of doing this?

    I'm a total n00b at setting all this stuff up, so soz for all the questions.
     
  7. cPanelToddR

    cPanelToddR Member
    Staff Member

    Joined:
    Oct 8, 2009
    Messages:
    21
    Likes Received:
    1
    Trophy Points:
    3
    Short answer: No. cPanel was built and tested with the RPM maintained files located in that path. Doing so would risk breaking at least some of cPanel.

    You mention frameworks. What modules would you like to see come with cPanel-Perl by default that are not already there?

    The cpan app is for upgrading modules, not the Perl binary. You can install additional modules using this script, but they will go to /opt/perl/514 in order to maintain proper separation of locally installed modules and cPanel provided modules.

    cPanel in the future plans to provide additional versions of Perl. We will optionally leave the 5.14 that is currently in place for any who need it. If the version we next provide was 5.18, then the new Perl would show up under /usr/local/cpanel/3rdparty/perl/518. This path is not for users to install binaries to.

    If you want your own Perl, you would be better served to install to an alternate path outside of /usr/local/cpanel. Can you clarify why you want to provide a newer Perl in this path?
     
  8. ajmetz

    ajmetz Registered

    Joined:
    Dec 8, 2012
    Messages:
    4
    Likes Received:
    0
    Trophy Points:
    1
    cPanel Access Level:
    Root Administrator
    I think for now then, I'll keep things simple, and stick with the 5.14.3 =).

    I merely intend to learn Catalyst and Mojolicious, and the latter recommends Perl 5.16, although only requires 5.10.1+ according to the site's homepage - so I assume I'll still be okay.

    There's no reason why I'd need a newer Perl specifically in the /usr/local/cpanel path. I merely wondered if the version in that path could be upgraded, or if this new approach to cPanel Perl, encouraged multiple version installs in that path.

    It's off topic, and the answers may be but a google away, but I'm tempted to ask how you install Perl to an alternate path outside of /usr/local/cpanel. Y'know, all I wanted was the latest Perl, and I've been told I had to change to a new VPS, with a new version of CentOS, and a new version of cPanel, and so far, the only other way I've heard to install Perl is via Perlbrew. If I'm missing something here, and there's a straight forward install process to put 5.16 in a folder somewhere on the server I can then have the shebang at the top of my scripts reference, then do enlighten me.

    Otherwise, I think for the time being, I'll keep it simple, and stick to cPanel's 5.14.3 =).
    I'm much more comfortable coding scripts in notepad, than messing about with servers at the command line. ^_^

    Many thanks for your speedy reply by the way, =).

    Yours gratefully,
    Andrew.
     
  9. cPanelToddR

    cPanelToddR Member
    Staff Member

    Joined:
    Oct 8, 2009
    Messages:
    21
    Likes Received:
    1
    Trophy Points:
    3
    The version of Catalyst that comes with cPanel works more than fine on 5.14.3. We added Catalyst to see how customers would react if we started shipping a cPanel that came with it out of the box. I would try using that first. If you find out that you need a newer Catalyst or some other module we do not yet ship, then come and give us feedback (cPanel Feature Requests) with reasons why. We're much more likely to provide a fix when we have a practical reason for the improvement.
     
Loading...
Similar Threads - Providing perl stack
  1. cPanelCory
    Replies:
    0
    Views:
    1,823

Share This Page