系统默认 yum 源的局限性
CentOS 作为企业级 Linux 发行版,设计理念是 “稳定性优先”,这导致默认 yum 源(如 base、updates 源)存在以下特点:
- 软件版本保守:默认源中的软件通常是系统发布时的稳定版本,且在系统生命周期内(如 CentOS 7 支持 10 年)不会大幅升级主版本。例如:
- CentOS 7 默认的 GCC 是 4.8.5(2013 年发布),而现代项目可能需要 GCC 7+ 才能支持 C++17 等新特性;
- 默认 Python 是 2.7(2020 年已停止维护),但大量现代应用依赖 Python 3.6+。
- 无法并行安装多版本:默认源的软件会直接安装到系统目录(如
/usr/bin),同一软件的不同版本会冲突(例如安装 Python 3 会覆盖 Python 2 的python命令)。
解决
SCL源
SCL源
SCL 源并非独立于 yum 之外的工具,而是一个 通过 yum 管理的特殊仓库,其设计目的是解决默认源的局限性:
- 提供更新版本的软件:SCLo 源中包含默认源没有的新版本开发工具(如
devtoolset-9提供 GCC 9)、编程语言(如rh-python38提供 Python 3.8)等,满足现代应用的依赖需求。 - 与系统默认版本隔离:SCLo 源的软件安装在
/opt/rh/目录下,不会覆盖系统默认路径的文件,也不会影响系统工具(如系统依赖的 Python 2.7 仍可正常运行)。 - 支持临时启用:通过
scl enable命令可临时将 SCLo 软件加入当前终端的环境变量,用完即失效,避免全局环境冲突(例如仅在开发时启用 Python 3.8,系统服务仍用默认 Python 2.7)。
总结
SCLo 源并非“取代 yum”,而是 yum 管理的众多仓库之一,其存在的意义是在不破坏系统稳定性的前提下,为用户提供默认源中没有的新版本软件。对于需要在老旧 CentOS 系统上运行现代应用的场景(如企业遗留系统),SCLo 源是简单且安全的解决方案。
不过,随着 CentOS 7 停止维护,SCLo 源的官方支持也已终止,现在更推荐通过容器(如 Docker)或迁移到 Rocky Linux/AlmaLinux 等 CentOS 替代发行版来管理软件版本,减少对特殊仓库的依赖。
配置文件
配置文件有以下两个:
CentOS-SCLo-scl.repoCentOS-SCLo-scl-rh.repo
用于配置 SCLo(Software Collections)源 的两个核心仓库文件,均用于提供较新版本的软件包,但二者的维护主体和包含的软件范围不同。
1. 共同作用
两者都是 SCLo 源的配置文件,核心目的一致:
在不影响系统默认软件的前提下,提供 更新版本的开发工具、编程语言、数据库 等软件(如 GCC 9、Python 3.8 等),且这些软件与系统默认版本隔离(安装在 /opt/rh/ 目录),避免冲突。
2. 区别:维护主体与软件范围
| 配置文件 | 维护主体 | 包含的软件范围 |
|---|---|---|
CentOS-SCLo-scl.repo |
CentOS 社区团队 | 主要包含 社区维护的软件包,如部分开发工具、编程语言扩展等(非 Red Hat 官方主导)。 |
CentOS-SCLo-scl-rh.repo |
Red Hat 官方 | 主要包含 Red Hat 官方维护的软件包,如 devtoolset(GCC 工具集)、rh-python(Python 新版本)、rh-nodejs(Node.js 新版本)等核心开发工具链。 |
具体差异说明
CentOS-SCLo-scl-rh.repo(更常用):
由 Red Hat 官方维护,包含的软件更核心、更稳定,是 SCLo 源的“主力”。例如:devtoolset-*(GCC 编译器工具集,如devtoolset-9对应 GCC 9);rh-python3*-*(Python 3 新版本,如rh-python38);rh-nodejs-*(Node.js 新版本,如rh-nodejs-14);
这些软件是企业开发中最常依赖的工具,因此该仓库的使用频率更高。
CentOS-SCLo-scl.repo:
由 CentOS 社区团队维护,包含的软件更多是社区贡献的扩展包,补充scl-rh仓库未覆盖的工具。例如:- 部分数据库客户端、小众编程语言版本、辅助开发工具等;
实际使用中,该仓库的依赖频率低于scl-rh。
- 部分数据库客户端、小众编程语言版本、辅助开发工具等;
总结
- 两者均为 SCLo 源的配置文件,用于提供新版本软件,且通过
yum管理。 - 核心区别在于维护主体:
scl-rh是 Red Hat 官方维护的核心工具包,scl是社区维护的补充包。 - 日常使用中,
CentOS-SCLo-scl-rh.repo更为重要,多数场景下的软件依赖(如 GCC、Python 新版本)都来自该仓库。
在 CentOS 7 停止维护后,若需继续使用 SCLo 源,需将这两个文件中的地址替换为阿里云、腾讯云等第三方镜像(如前文所述),否则会因官方地址失效而报错。
配置为国内源
为什么要改为国内源
centos7已经不维护了,所以系统默认的SCL源在2024年停止维护,有些软件不能下载
源服务器在国外,下载速度慢
备份原配置文件
mv /etc/yum.repos.d/CentOS-SCLo-scl.repo /etc/yum.repos.d/CentOS-SCLo-scl.repo.bak
mv /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo.bak
添加 CentOS-SCLo-scl.repo
vim /etc/yum.repos.d/CentOS-SCLo-scl.repo
按下 i 健,添加下面内容:
[SCLo-scl]
name=CentOS-7 - SCLo scl
baseurl=https://mirrors.aliyun.com/centos/$releasever/sclo/$basearch/sclo/
# 启用签名验证(1=启用,0=禁用)
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
enabled=1
按 esc,:wq 保存退出
修改 CentOS-SCLo-scl-rh.repo
vim /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo
按下 i 健,添加下面内容:
[SCLo-scl-rh]
name=CentOS-7 - SCLo scl-rh
baseurl=https://mirrors.aliyun.com/centos/$releasever/sclo/$basearch/rh/
# 启用签名验证(1=启用,0=禁用)
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
enabled=1
按 esc,:wq 保存退出
清理并重建缓存
清理缓存
sudo yum clean all
重建缓存
sudo yum makecache
验证配置是否生效
查看可用的软件包数量(正常情况下应返回数万条结果)
yum list | wc -l
测试更新(不会真正安装,仅显示可更新的包)
yum check-update
测试安装Vim
如果没有安装 Vim,执行下面命令,会提示安装Vim相关的依赖,此时不会真正安装,输入 n 敲回车,会终止安装
yum install vim