Staff Member

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:

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:

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:

Staff Member

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?

Click to expand...

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.

Kenneth
Development
cPanel, Inc.

Stop hovering to collapse...Click to collapse...Hover to expand...Click to expand...

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.

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.

Could I do a Perl upgrade, via cpan, via:
/usr/local/cpanel/3rdparty/perl/514/bin/cpan
...or doesn't it work like that?

Click to expand...

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.

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.

Click to expand...

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?

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. ^_^

Staff Member

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.

Click to expand...

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.