Software Collections

介绍

SCL(Software Collections)可以让你在同一个操作系统上安装和使用多个版本的软件,而不会影响整个系统的安装包。SCL为社区的以下需求而设计:创建和使用软件集合生产系统、概念验证系统、开发测试平台。SCL目前已经支持Fedora和RHEL(衍生版本如CentOS也包含在内)。

SCL的创建就是为了给RHEL/CentOS用户提供一种以方便、安全地安装和使用应用程序和运行时环境的多个(而且可能是更新的)版本的方式,同时避免把系统搞乱。与之相对的是第三方源,它们可能会在已安装的包之间引起冲突。

现有软件选集:

Ruby 1.9.3 (ruby193)
Python 2.7 (python27)
Python 3.5 (Python5)
PHP 5.4 (php54)
MySQL 5.5 (mysql55)
Apache 2.4 (Apache2)
Perl 5.16.3 (perl516)
Node.js 0.10 (nodejs010)
MariaDB 5.5 (mariadb55)
PostgreSQL 9.2 (postgresql92)

更多的软件集

SCL安装Python 开发环境

关于 Software Collections 官方有一个指导

  1. 安装 Software Collections yum源

    yum install centos-release-scl
    
  2. 如果你是RedHat, 你需要开启RHSCL 源使用

    yum-config-manager --enable rhel-server-rhscl-7-rpms
    
  3. 安装 scl-utils

    yum install scl-utils
    
  4. 安装 Python 开发环境

    yum install python27
    
  5. 激活 Python 开发环境

    安装完后可以执行 scl --list

    [root@localhost ~]# scl --list
    python27
    

    激活 Python27 环境

    scl enable python27 bash
    

    你将进入一个新的bash环境,执行 python --version

    [root@localhost ~]# python --version
    Python 2.7.13
    

关于使用,这里多说一点,scl-utils 只是方便 Software Collections 使用,比如要查看当前安装了哪些 Software Collections,可以 scl --list,我们也可以不用这个工具。scl 安装的所有都东西默认都在 /opt/rh 里面,可以到想要激活的应用集里面去激活环境。

比如你可以通过执行 source /opt/rh/python27/enable 来激活Python27。

SCL应用场景

开发环境

说到这里可能很多人会说这个 Virtualenv 也可以做到啊,需要注意的是Virtualenv 它的出现是为了给开发者提供可以随时在本地部署不同版本的python环境,在不同的开发项目中能够灵活的切换python环境来适应不同的开发需求。

但是: 当我们构建好一个python环境再上面开发好了之后将env的环境打个包,把项目代码打个包放的别的机器上运行。问题来了~ 你会发现各种报错,各种python无法运行,说找不到等等等。。。 其实Virtualenv 他它在给你本地构建不同的python环境的时候,为了节省本地磁盘空间它是以软连接的形式创建的, 你如果只是打包env那个文件夹是不行的,你还需要cp 各种库到到这个env文件夹替换掉软连接。麻烦不说了还各种问题,而且python 编译的系统的一些so文件也会缺少。所以 Virtualenv 只适合是在本地构建环境开发,不能当做一个完整的python环境拿到别的机器上运行。

我们可以看到SCL 安装好的应用集下面有一个root目录,可以理解为 /(根) 目录,这个应用集需要的系统库,编译的文件都会在这里面,和系统的是完全分开的。 (就像是Linux 急救模式 chroot 的感觉)

[root@localhost ~]# ls /opt/rh/python27/root/
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var

应用部署

Software Collections 顾名思义它提供一个应用集,他不单帮助你构建python环境,不用考虑python不同版本的问题,而且其他应用也都是可以的,比如本地你装了一个mysq5.5, 但是你又想用mysql 5.6,SCL也是可以做到的。甚至如果你想做一个自己参与开源项目的开发,你也可以为你自己的应用做一个应用集提供给其他开发者使用。

  • 有时我们会用docker 快速部署一些服务,比如mysql、Apache、php、等等,来协助自己开发,不需要将时间浪费在部署环境上面,那样的开发环境是多么快捷和高效。
  • 但是交付的时候就苦恼了,如果客户那边也有docker,我可以把我docker的开发环境做好镜像和代码直接给客户,几乎哪到就能用,不需要做任何调试。
  • 如果客户没有docker,或者实际情况不允许使用docker,那怎么办呢。 也有人想到了办法,以前是自己会将自己的环境做成一个个RPM软件包,然后加一个shell脚本自动完成后续工作。
  • 但我想说那个太low了,那都是以前的做法了,如果有更新每次还要重新build 新的RPM包,或者改脚本。现在你可以使用SCL, 你可以想docker一样快速使用SCL中已经存在的应用集,把你需要的应用集在本地安装好后,激活状态下开发。开发完后,退出激活,你把程序和你用的SCL打个包一块交付,在新的环境只需要重新激活SCL就可直接运行程序,不需要调试。没错就是这么方便~
文章目录
  1. 1. 介绍
  2. 2. SCL安装Python 开发环境
  3. 3. SCL应用场景
    1. 3.1. 开发环境
    2. 3.2. 应用部署
|