centos7中安装了centos-release-scl后,之前的yum源变为不可用 解决方案

[复制链接]
发表于 2026-10-5 18:42:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

一、现场:装完 centos-release-scl,yum 就废了

在 CentOS 7 上想装 devtoolset(比如 yum install centos-release-scl 之后装 devtoolset-11 拿到更新的 GCC),装完 source 包之后,再跑任何 yum 命令都会报错。典型输出如下:

[root@localhost ~]# sudo yum install devtoolset-11
Could not retrieve mirrorlist http://mirrorlist.centos.org?arch=x86_64&release=7&repo=sclo-rh
error was 14: curl#7 - "Failed to connect to ... : 网络不可达"

One of the configured repositories failed (未知), and yum doesn't have enough cached data to continue.
...
Cannot find a valid baseurl for repo: centos-sclo-rh/x86_64

注意关键两行:centos-sclo-rh 这个仓库拿不到有效 baseurl,以及 sclo 相关的机器解析不到。这跟网络通不通其实两码事——机器能上网,只是那个域名已经不存在了。

二、先搞懂 SCL 是干什么的

SCL(Software Collections)是 RHEL/CentOS 官方推出的"并行安装多版本软件"机制。它的设计目标是:不覆盖系统自带的老版本,而是在同一台机器上同时装多个版本的运行时,互不干扰。

比如系统自带 Python 2.7,SCL 可以额外给你一个 Python 3.3/3.8,通过 scl enable 临时切换环境。常见的软件选集包括:

  • Ruby 1.9.3(ruby193)
  • Python 2.7 / 3.3(python27 / python33)
  • PHP 5.4(php54)
  • Perl 5.16.3(perl516)
  • Node.js 0.10(nodejs010)
  • MariaDB 5.5(mariadb55)、MySQL 5.5(mysql55)、PostgreSQL 9.2(postgresql92)

安装方式很简单,CentOS 7 是小写包名:

yum install centos-release-scl

CentOS 6 的包名首字母是大写 centos-release-SCL,大小写不同,别搞混,装错了会提示找不到包。

三、问题根源

装上 centos-release-scl 之后,/etc/yum.repos.d 下多出两个文件:

  • CentOS-SCLo-scl.repo
  • CentOS-SCLo-scl-rh.repo

问题就出在这里:这两个文件里写的是 mirrorlist= 指向官方 mirrorlist 服务,而这套服务已经停了。你之前手工配好的 CentOS-Base.repo(哪怕是阿里云源)只解决了 base 仓库,sclo 这两个新仓库依然是坏掉的,yum 一跑就会被它们绊倒。

四、解法:把 sclo 两个仓库的 baseurl 指向 vault

先看一眼目录里到底有啥:

cd /etc/yum.repos.d
ls

然后对 CentOS-SCLo-scl-rh.repo 改:

vi CentOS-SCLo-scl-rh.repo
# 改成下面这样
[centos-sclo-rh]
name=CentOS-7-SCLo rh
baseurl=http://vault.centos.org/centos/7/sclo/$basearch/rh/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

改完如果还是不行,把 CentOS-SCLo-scl.repo 也一并改:注意原文件里的方括号和仓库名容易写错,正确的段名是 centos-sclo-sclo(不是 centos-sclo-rh):

vi CentOS-SCLo-scl.repo
# 改成下面这样
[centos-sclo-sclo]
name=CentOS-7-SCLo sclo
baseurl=http://vault.centos.org/centos/7/sclo/$basearch/rh/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

两个都改完,清缓存重建索引:

yum clean all
yum makecache

此时再跑 yum install devtoolset-11,就能正常装了。

五、临时方案:绕开 sclo 仓库

如果只想尽快让 yum 恢复工作、暂时不想动 sclo,可以用 yum 自己给出的两条路:

yum-config-manager --disable centos-sclo-rh centos-sclo-sclo

或者让它在源不可用时不阻塞:

yum-config-manager --save --setopt=centos-sclo-rh.skip_if_unavailable=true
yum-config-manager --save --setopt=centos-sclo-sclo.skip_if_unavailable=true

第二条会持续生效,代价是每次 yum 都要先试着连一次失败的源,速度略慢。长期看还是把 baseurl 改到 vault 更干净。

六、验证与后续

装完 devtoolset 之后想用它自带的 GCC,需要临时启用环境:

scl enable devtoolset-11 bash
gcc --version

注意 scl enable 只对当前这次 shell 生效,新开一个终端就回到旧版本。要长期生效,把 enable 命令写进 ~/.bashrc。

七、小结

这套故障的规律其实很清楚:装 centos-release-scl 会往 repo 目录塞两个指向已下线 mirrorlist 的新文件,它们和你的 base 源互不相干,却能让整条 yum 停摆。解法只有两步——确认是 sclo 这两个仓库在报错,把它们的 baseurl 改成 vault 归档地址(顺手把段名 centos-sclo-sclo 改对),然后 clean + makecache。以后再做这类"装个扩展包把系统搞坏"的操作,第一件事永远是先 ls /etc/yum.repos.d 看看多了什么文件。

qidao123.com企服评测-应用市场 编辑提示

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表