centos7 yum配置SCL国内源 作者:马育民 • 2025-08-09 23:11 • 阅读:10002 # 系统默认 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.repo` - `CentOS-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 源,需将这两个文件中的地址替换为阿里云、腾讯云等第三方镜像(如前文所述),否则会因官方地址失效而报错。 # 配置为国内源 ### 为什么要改为国内源 1. centos7已经不维护了,所以系统默认的SCL源在2024年停止维护,有些软件不能下载 2. 源服务器在国外,下载速度慢 ### 备份原配置文件 ``` 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 ``` 原文出处:http://www.malaoshi.top/show_1GW1e9OMj8N7.html