Red Hat Software Collections "Software Collections give you the power to build, install, and use multiple versions of software on the same system, without affecting system-wide installed packages"

For instance, RHEL6 comes with gcc 4.4.7, but also provides 6.3.1 (and later) via Software Collections (SCL).  

ksa@rhel6-64 $ scl enable devtoolset-6 'gcc --version' | head -1
gcc (GCC) 6.3.1 20170216 (Red Hat 6.3.1-3)
ksa@rhel6-64 $ scl enable devtoolset-7 'gcc --version' | head -1
gcc (GCC) 7.3.1 20180303 (Red Hat 7.3.1-5)
ksa@rhel6-64 $ scl enable devtoolset-8 'gcc --version' | head -1
gcc (GCC) 8.2.1 20180905 (Red Hat 8.2.1-3)

Newer versions of build-time package are available (eg, gcc, valgrind, make, etc) and run-time packages too (python, ruby, php, git, mariadb, maven, nodejs, perl, java, nginx, mysql, mongodb, postgresql, redis, etc).

And there are other related RPMs (fortran, c++, etc.). To see what is available run the command

scl -l
yum list installed | grep rhscl | grep -v '^ '

The yum repo for SCL is SLAC RHEL6 Server Software Collections (slac-rhel-x86_64-server-6-rhscl-1). These are installed on public login hosts, if you do not have sudo on a host where it is needed, please send an email to unix-admin@slac.stanford.edu. 

For  Red Hat Developer Toolset Product Life Cycle please see:  https://access.redhat.com/support/policy/updates/dts/ 

The current RPM names (versions subject to change) for the versions of gcc are:

ksa@rhel6-64l $ rpm -q devtoolset-6
devtoolset-6-6.1-1.el6.x86_64

The meta RPM "devtoolset-6" will install other meta RPMs: devtoolset-6-{perftools, runtime, toolchain}.  Here's an example with devtoolset-6:

ksa@rhel6-64l $ rpm -q --requires devtoolset-6
devtoolset-6-perftools 
devtoolset-6-runtime 
devtoolset-6-toolchain  

To use the newer versions in a bash script after the RPMs are installed (or see below for another method)

#-----------------------------------------
# to enable newer gcc from software collections:
# (replace devtoolset-6 with current version of devtoolset)
#-----------------------------------------
if [ -x /opt/rh/devtoolset-6/enable ]; then
echo Enabling GCC from Developer Toolset
source /opt/rh/devtoolset-6/enable
fi

To use the newer versions on the command line after the RPMs are installed
(this example is from devtoolset-4, but the same idea works for devtoolset-6):

user@host $ scl enable devtoolset-4 bash
bash-4.1$ gcc --version
gcc (GCC) 5.2.1 20150902 (Red Hat 5.2.1-2)
bash-4.1$ exit
ksa@iris02 $ scl enable devtoolset-4 'gcc --version'
gcc (GCC) 5.2.1 20150902 (Red Hat 5.2.1-2)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

How to install Developer Toolset / Software Collections on CentOS 7:

$ sudo yum install centos-release-scl
$ sudo yum install devtoolset-6
$ scl enable devtoolset-6  'gcc --version | head -1'
gcc (GCC) 6.2.1 20160916 (Red Hat 6.2.1-3)

How to use the Software Collections version of a runtime program (eg, perl, python) from a script (the alternative process above might be safer since it checks to see if the software collection is installed first)

#!/usr/bin/scl enable rh-perl524 -- perl
print "$^V\n";
The output of that script shows the version of perl found and used is perl 5.24 from SCL:
ksa@cdlogin3 $ scl --list | grep perl
rh-perl524

ksa@cdlogin3 $ cat ~ksa/public/perl.scl.example.pl
#!/usr/bin/scl enable rh-perl524 -- perl
print "$^V\n";

ksa@cdlogin3 $ ~ksa/public/perl.scl.example.pl
v5.24.0

Here is a python 3.7 example:

ksa@lnxcron $ cat ~ksa/bin/python-scl-test.py
#!/usr/bin/scl enable rh-python36 -- python
from platform import python_version
print('Hello, this is Python', python_version())
ksa@lnxcron $ ~ksa/bin/python-scl-test.py
Hello, this is Python 3.6.3

 Here is an example of how to write a script for a cronjob which enables a Software Collections (mysql) and also accepts parameters:

[ksa@mysql01b ~]$ cat ~ksa/t.sh
#!/usr/bin/scl enable rh-mysql57 -- bash
echo hi, you entered $1 and this is the mysql version:
mysql --version

[ksa@mysql01b ~]$ ~ksa/t.sh Karl
hi, you entered Karl and this is the mysql version:
mysql Ver 14.14 Distrib 5.7.24, for Linux (x86_64) using EditLine wrapper

You can see that it accepts the parameter to the script, and also that the mysql 5.7 SCL is enabled.



The Red Hat Developer Toolset (DTS) is intended to give developers access to updated compilers and tools for C and C++ development.

This fast-moving product will update frequently and will have a much shorter product life cycle and support term than Red Hat Enterprise Linux.

For more information on Red Hat Software Collections and Developer Toolset:

https://access.redhat.com/support/policy/updates/rhscl
https://access.redhat.com/support/policy/updates/dts/
https://www.softwarecollections.org/


  • No labels