目录

SCL基本用法

目录

Software collections(SCLs)是一个Linux软件多版本共存的解决方案,适用于RHEL/CentOS/Fedora。

SCL不修改已安装的软件版本,也不会与其产生冲突。

CentOS是RHEL的社区版,服务器环境偏向于稳定安全,官方YUM源的软件版本相对保守,开发时经常遇到某些工具版本较低无法满足需求的问题,比如GCC、CMake等, 过去我一般是下载源码包编译安装,直到后来遇到SCL。

我的系统是CentOS 7.2,官方YUM源提供的GCC最高版本是4.8.5,下面演示如何安装并使用GCC 5。

首先安装scl工具和SCL软件源:

1
2
yum install scl-utils
yum install centos-release-scl

然后安装devtoolset-4:

1
yum install devtoolset-4

SCL一般包含多个RPM包,devtoolset-4集合下软件包数量众多,有C相关的,有Java相关的,可以选择安装指定RPM包,如yum install devtoolset-4-gcc

此时系统已安装两个版本的GCC:

  • GCC 4.8.5(官方YUM源)
  • GCC 5.3.1(SCL)
1
2
3
4
5
6
7
8
9
# which gcc
/usr/bin/gcc
# gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36)

# scl enable devtoolset-4 -- which gcc
/opt/rh/devtoolset-4/root/usr/bin/gcc
# scl enable devtoolset-4 -- gcc --version
gcc (GCC) 5.3.1 20160406 (Red Hat 5.3.1-6)

scl命令用于激活SCL版本和在该环境下执行其他操作,可以同时激活多个SCL,执行其他命令的方式有:

  • 直接运行应用程序

    对于不带参数的命令

    1
    
    scl enable SCL_NAME_1 SCL_NAME_2 command
    

    对于带参数的命令,有两种写法:引号和命令分隔符。

    1
    2
    3
    
    scl enable SCL_NAME_1 SCL_NAME_2 'command --argument'
    scl enable SCL_NAME_1 SCL_NAME_2 "command --argument"
    scl enable SCL_NAME_1 SCL_NAME_2 -- command --argument
    
  • 新建一个Shell环境

    在当前shell环境下新建一个shell并激活一个或多个SCL

    1
    
    scl enable SCL_NAME_1 SCL_NAME_2 bash
    

    在新的shell环境下,执行命令echo $X_SCLS,查看已激活的SCL; 退出环境,执行命令exit

  • 执行记录在文件中的命令

    一般用于批量执行命令

    1
    
    cat cmd_file | scl enable SCL_NAME_1 SCL_NAME_2 -
    

查看已安装的SCL

1
scl --list

查看指定SCL下已安装的RPM包

1
scl --list SCL_NAME

卸载整个SCL

1
yum remove SCL_NAME\*

参考