如果你是一位公司负责人,公司花钱开发了一套系统,通常情况下,你总是希望你这台系统在生命周期中一直稳定运行下去。那么,很明显,像RHEL那样的提供10年长期支持的发行版是非常适合你那样的企业用户的,如果你暂时不想花太多的钱,RHEL的社区版本CentOS显然是很适合你的。在支持期内,Redhat会维持系统的内核大的版本号不变,有时会把高版本内核中的一些特性移植到老的内核中,在这个过程中,会维持内核和各类软件的API、ABI接口兼容性,真是非常的贴心。

但是,问题来了,这种话大量代价维护的“稳定性”,导致的一个结果就是系统默认软件源中的软件非常老旧,没有那些“先进”的社区发行版有那些最近最时髦的版本。举例来说,centos6的内置的python版本还是2.6.6的,mysql数据库是5.1版本的,这些在它10年的生命周期中是不会改变的,顶多只会进行版本内的小升级,一句话还是为了良好的兼容性。

有些软件还好一点,顶多自己通过源码编译安装就好了,有些软件和系统集成较深的,安装时依赖处理不好,很可能对破坏原系统的组件,或者等你yum安装时,造成各类问题。所以,我建议,像python这样与系统集成比较深的软件,最好不要手动安装升级。

Software Collections (SCL)源就是为了解决RHEL和CentOS用户这类问题的,redhat把这个翻译成中文好像叫“软件精选”,似乎挺形象的。以centos6为例,它的scl源目前大致提供这些软件:

  • git1.9 git2.5 svn1.9
  • php5.4 5.5 5.6
  • Ruby on Rails 4.2
  • httpd 2.4.12
  • ruby 1.9.3 2.0 2.2
  • python 2.7 3.3
  • gcc 5.2.1 4.9.2 及相应其他的开发工具
  • mysql 5.5 5.6 mariadb 5.5 10.0

还是其他的,不如perl,nginx,反正常用的一些软件,又有很多高版本需求的,scl上还是很多的,基本能满足我们使用。

如何使用scl软件源

以centos6为例,

yum -y install centos-release-scl

查看scl上有哪些软件:

yum --disablerepo="*" --enablerepo="centos-sclo-sclo" list available
yum --disablerepo="*" --enablerepo="centos-sclo-rh" list available

搜索软件包:

yum --disablerepo="*" --enablerepo="centos-sclo-sclo" search <keyword>
yum --disablerepo="*" --enablerepo="centos-sclo-rh" search <keyword>

比如要安装python3.3,只需要

yum -y install python33

查看已经安装了哪些scl软件包:

scl --list

会显示你安装的软件,这里是

python33

scl安装的软件包,不会覆盖系统的软件,通常,scl上的软件都是安装再/opt目录的,你此时在系统执行

python -V

结果是:

Python 2.6.6

要启用scl软件包

scl enable <scl-package-name> <command>

此处就是:

scl enable python33 'python -V'

结果是

Python 3.3.2

通常,我们会系统整个软件包在当前shell一直可用,这时候,我们执行:

scl enable python33 bash

这样在当前的shell中,和python相关的命令都是3.3的了,退出当前shell后,失效。

总而言之,scl和python的virtualenv有点相似,scl除了可以开启禁用python外,还可以有大量其他的软件可供选择。

如何在centos中使用Software Collections (SCL)源

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注