Using Perl 5.24 Red Hat Software Collection

Red Hat Software Collection (RHSCL) 2.3 brings new rh-perl524 collection.

It includes Perl 5.24.0, which provides a number of bug fixes and enhancements over the previously released rh-perl520 Software Collection. The details about the changes can be found in 5.22.0 perldelta and 5.24.0 perldelta. The new collection adds package rh-perl524-perl-App-cpanminus, which contains the cpanm utility for getting, extracting, building, and installing modules from the Comprehensive Perl Archive Network (CPAN) repository.

RHSCL is distributed as a collection of RPM packages that can be installed, updated and uninstalled by using the standard package management tools or as a Docker image based on RHSCL.

Using collection of RPM packages

This way could be used on RHEL 6 and 7 systems

To start using Perl 5.24 RHSCL, we have to install the rh-perl524 as root:

# yum install rh-perl524

Now we can verify the Perl version:

# scl enable rh-perl524 'perl -v'
This is perl 5, version 24, subversion 0 (v5.24.0)

Now we create a Perl program that can be run from the command line:

$ cat
#!/usr/bin/env perl
print "Hello from Perl $^V\n";
$ chmod +x

We can run the scripts by using scl enable:

$ scl enable rh-perl524 './'

On the other hand, run shell session with a software collection as default and then run the script:

$ scl enable rh-perl524 bash

If we want to permanent enable a software collection in a development environment, then we add the following line to your ~/.bashrc:

# Add Perl 5.24 from RHSCL to my login environment
source scl_source enable rh-perl524

After making the change, you should log out and log back in again.

If we want to find additional Perl packages in RHSCL, run:

$ yum list available rh-perl524-\*

You can also see Red Hat Software Collection for more details.

Using Perl 5.24 Docker image for deploying PSGI application

This way can be used only for RHEL 7 servers.

The basic idea is to combine the application code from Git tree and Red Hat’s rhscl/perl-524-rhel7 base image into an application image that will run the application in an environment. Your application can either be a simple Common Gateway Interface (CGI) script or a full-fledged Perl Web Server Gateway Interface (PSGI) application.

First, we have to install docker and start the service:

# yum install docker
# systemctl start docker

Then we download the rhscl/perl-524-rhel7 Docker image:

# docker pull rhscl/perl-524-rhel7

Now we can verify that the base image really contains Perl 5.24:

# docker run --rm -ti rhscl/perl-524-rhel7 perl -v

This is perl 5, version 24, subversion 0 (v5.24.0) built for x86_64-linux-thread-multi
 (with 29 registered patches, see perl -V for more detail)

For creating the application image, we will use s2i. The tool is provided by the source-to-image package, so install it:

# yum install source-to-image

Then we will need git tool for creating application repository, so we will install it:

# yum install git

We will begin with an empty Git repository:

$ mkdir application
$ cd application
$ git init-db .
Initialized empty Git repository in /root/application/.git/

As an example application, we download application.psgiwhich provides simple form. We need to declare the application dependencies. We will use a cpanfile for that. cpanfile for this example is here:

If you haven’t yet configured your Git identity, you can do it now:

$ git config --global ""
$ git config --global "Developer"

Then commit the sources into Git tree:

$ git add application.psgi cpanfile
$ git commit -m 'Simple application'
[master (root-commit) 7d4cbc3] Simple application
2 files changed, 2 insertions(+)
create mode 100644 application.psgi
create mode 100644 cpanfile

Now we are ready to build our application image. The magic command to build an application from a base Docker image and a Git tree is:

# s2i build file://$PWD rhscl/perl-524-rhel7 application
 ---> Installing application source ...
 ---> PSGI application found in ./application.psgi
 ---> Installing modules from cpanfile ...
 <== Installed dependencies for .. Finishing.
 31 distributions installed

The second argument is a URL to the Git tree with your application. We used a current working directory in this example. But you can use any remote location. For example a repository on the GitHub. The third argument is base Docker image identifier. We used the Red Hat’s Perl 5.24 RHSCL image. The last argument is a tag for the resulting application image.

The application image was built successfully. And we can verify it in Docker images listing:

# docker images
REPOSITORY              TAG      IMAGE ID        CREATED           SIZE
application             latest   75ec8cce098e    16 seconds ago    497.2 MB
rhscl/perl-524-rhel7    latest   1c4d4f1b4d03    6 weeks ago       477 MB

Now, we can run the application:

# docker run --rm -ti application
[Fri Jan 13 12:25:48.981151 2017] [so:warn] [pid 1] AH01574: module perl_module is already loaded, skipping
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using Set the 'ServerName' directive globally to suppress this message

And the application will be available on the reported IP address and TCP port 8080. You can use docker’s option -p to publish the container’s port 8080 on a different external port number.

Finally, we can use a web browser to connect to the application and use it:

There is an example of building the test application from the public GitHub sti-perl repository, underneath the 2.4/test/psi/ directory:

# s2i build --context-dir=5.24/test/psgi rhscl/perl-524-rhel7 perl-524-rhel7-psgi
---> Installing application source ...
---> PSGI application found in ./application.psgi
---> Installing modules from cpanfile ...
<== Installed dependencies for .. Finishing.
44 distributions installed

The option –context-dir specifies sub-directory inside repository with application code.

You can see Using Red Hat Software Collections Container Images for more details.

Red Hat Software Collections are available for download, you can read more at Red Hat Software Collections


Leave a Reply