如果你是一位公司负责人,公司花钱开发了一套系统,通常情况下,你总是希望你这台系统在生命周期中一直稳定运行下去。那么,很明显,像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外,还可以有大量其他的软件可供选择。