Software Collections Quickstart


As I discussed in an article entitled Red Enterprise Linux Release Speed, developers sometimes have a problem with how slow Red Hat’s Enterprise Linux releases new versions of software. Well, the good news is, Software Collections are here. Software Collections provide Red Hat Enterprise Linux users with newer versions of programming languages and server daemons like python, perl, ruby, php, mysql, mariadb, etc.

This is a quick start guide to help you get comfortable with both programming languages and server daemons provided as software collections.

Installation

First, add the right channel to your system

rhn-channel -u fatherlinux --add --channel=rhel-x86_64-server-6-rhscl-1-beta

To discover what packages are available, do a quick list, and grep for rhscl.

yum list available | grep rhscl
mariadb55.x86_64                      1-6.el6               rhel-x86_64-server-6-rhscl-1-beta
mariadb55-mariadb.x86_64              5.5.30-9.el6          rhel-x86_64-server-6-rhscl-1-beta
mariadb55-mariadb-bench.x86_64        5.5.30-9.el6          rhel-x86_64-server-6-rhscl-1-beta
mariadb55-mariadb-devel.x86_64        5.5.30-9.el6          rhel-x86_64-server-6-rhscl-1-beta
mariadb55-mariadb-libs.x86_64         5.5.30-9.el6          rhel-x86_64-server-6-rhscl-1-beta
mariadb55-mariadb-server.x86_64       5.5.30-9.el6          rhel-x86_64-server-6-rhscl-1-beta
mariadb55-mariadb-test.x86_64         5.5.30-9.el6          rhel-x86_64-server-6-rhscl-1-beta
....

Now, let’s install a few interesting packages

yum install python33-*
yum install python27-*
yum install mariadb55-mariadb-server

Basic Usage & Testing

To test python 3.3, let’s fire up Idle, the built in editor

scl enable python33 idle

It’s also easy to enable a software collection, for the duration of a shell session

scl enable python27 bash

Enabling Servers

Servers provided by Software Collections are configured and used similar to normal system daemons. One important thing to note, is that with Software Collections, multiple servers that require the same port may be installed side by side, so care must be taken to determine which one is started by default. Historically, this is something that systems administrators did not have to frequently worry about.

Before starting MariaDB, make sure that the system version of MySQL 5.1 is not installed or has been disabled.

chkconfig --list mysqld
mysqld         	0:off	1:off	2:off	3:off	4:off	5:off	6:off

Now, start MariaDB. As things start, you will notice that everything happens in /opt. All of the MariaDB system tables are created in /opt and do not interfere with the system version of mysqld.

chkconfig mariadb55-mysqld on
/etc/init.d/mariadb55-mysqld start

A few other important thing to note are; the logs and socket are placed in the system directories, so a standard MySQL client can and will connect by default.

/var/lib/mysql/mysql.sock
/var/log/mariadb55-mysqld.log

Also, notice that the normal MySQL port is used and looks like a standard MySQL server daemon.

netstat -anp | grep 3306
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      21104/mysqld

Integration

Now, we are going to put Python 2.7 and MariaDb in action using SQLAlchemy. Enable both at the same time.

scl enable python33 mariadb55 bash

Notice that the binary is in /opt/rh. Also, notice that the version is correct.

which mysql
/opt/rh/mariadb55/root/usr/bin/mysql
mysql --version
mysql  Ver 15.1 Distrib 5.5.30-MariaDB, for Linux (x86_64) using readline 5.1

A little bit of SQL Alchemy, and you can create a new database.

>>> import sqlalchemy
>>> print(sqlalchemy.__version__)
0.7.9
>>> engine = sqlalchemy.create_engine('mysql://root@localhost')
>>> engine.execute("CREATE DATABASE test5")

Finally, check that the database was created.

mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 11
Server version: 5.5.30-MariaDB MariaDB Server

Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| test5              |
+--------------------+
5 rows in set (0.00 sec)

For more information about Red Hat Software Collections or Red Hat Developer Toolset, visit developer.redhat.com/RHEL.


This entry was posted in Community, Software Collections and tagged , , , , , , by Scott McCarty (fatherlinux). Bookmark the permalink.

About Scott McCarty (fatherlinux)

As a Red Hat Solutions Architect, I work with customers on a daily basis. We collaborate to solve architectural and technical challenges enabling our businesses to grow and be strategic. As a subject matter expert in systems management and a member of Red Hat's cloud working group, I also focus on enabling developers and systems administrators in highly automated operating system and application infrastructure environments. At a personal level, I volunteer in all manners of open source. I develop, test and provide bug fixes in several projects, speak at conferences globally, and teach.

12 thoughts on “Software Collections Quickstart

    • The “enablement” of a collection only lasts for the running of the process that “scl enable” started. Any other application on the machine will run using the native installs (assuming it has some). Does that answer your question?

    • To add to what Landon said, the daemons will start and run permanently. The chkconfig is like any other damon on the box.

      The enablement of a software collection is not permanent. You must run “scl enable COLLECTION PROGRAM” every time you want to enable the collection.

      For example, if you have a Ruby 1.9 script called cleanup.rb, you would have to run “scl enable ruby193 cleanup.rb” every time you want to run it or in your cron jobs, etc.

      • Is there a way to permanently enable a software collection? I need to use python2.7 on the RHEL server and access it using python fabic (using ssh commands beneath).

      • Pawel, There is not a way to enable it permanently, but, here are a couple of bash tricks that might help.

        You can create a function that takes command line options. Think of this as an alias on steroids. Add the following to your .bashrc

        python27() {
        scl enable python27 “python $*”
        }

        Then test:

        python27 –version
        Python 2.7.5

        This doesn’t help with your magic line in scripts, but will make it easier to call scripts:

        [smccarty@keith ~]$ cat script.py
        #!/usr/bin/python

        import sys

        print “Hello, World!”, sys.version

        Call it normal and notice, the default installation of python is used:

        [smccarty@keith ~]$ ./script.py
        Hello, World! 2.6.6 (r266:84292, Sep 4 2013, 07:46:00)
        [GCC 4.4.7 20120313 (Red Hat 4.4.7-3)]

        Call it with our alias, and notice that Python 2.7 is used:

        [smccarty@keith ~]$ python27 script.py
        Hello, World! 2.7.5 (default, May 23 2013, 06:08:09)
        [GCC 4.4.7 20120313 (Red Hat 4.4.7-3)]

        Hope that helps!!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s