最近升级了一下服务器配置,主要是想自建一个 gitlab(最低安装标准 2 核 4 g)。找到了一篇通过 yum 安装 gitlab 的教程。在尝试通过 yum 安装 postfix(发送邮件服务)时报错:Cannot retrieve repository metadata (repomd.xml) for repository: base

仔细观察了一下报错信息,里面提到文件 404 Not Found。毫无疑问,这是访问不到内容。查看 /etc/yum.repo.d 下的 CentOS-Base.repo 内容,因为服务器是阿里云的,所以默认配置的是阿里云的镜像(不要问为什么用镜像,国外的服务你懂的)。镜像地址:http://mirrors.cloud.aliyuncs.com,尝试直接 http 访问,挂了。当然这个地址下的 repomd.xml 也无法访问了。

尝试百度这个错误,搜索到一个更换镜像源的教程。以下是原作者推荐的几个镜像源:

mirrors.stuhome.net

mirrors.ustc.edu.cn

ftp.jaist.ac.jp

mirror.bjtu.edu.cn

mirrors.163.com

原作者使用的是 163 的镜像源,系统也是 CentOS 6。整理了以下对方的 yum 源配置:

[base]
name=CentOS-$releasever - Base
baseurl=http://mirrors.163.com/centos/6/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-6

#released updates
[updates]
name=CentOS-$releasever - Updates
baseurl=http://mirrors.163.com/centos/6/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-6

[extras]
name=CentOS-$releasever - Extras
baseurl=http://mirrors.163.com/centos/6/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-6

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
baseurl=http://mirrors.163.com/centos/6/centosplus/$basearch/
gpgcheck=1
enabled=0

将原来的 CentOS-Base.repo 保存(mv CentOS-Base.repo CentOS-Base.repo2),再上传 163 版本的。加载新的 yum 源:

yum clean all
yum makecache

结果依然报错,还是找不到这个 repomd.xml 文件。感觉到哪里不对劲,因为我之前有确认 http://mirrors.163.com/ 地址是可以访问的。根据文件地址去看以下具体情况 http://mirrors.163.com/centos/6/os/x86_64/repodata/repomd.xml,发现 http://mirrors.163.com/centos/6.10/ 下只有一个 readme 文件,所以这个版本的镜像源是空的。继续浏览发现,CentOS 版本 6 的镜像文件夹都是空的。以下为 readme 内容:

This directory (and version of CentOS) is deprecated. Please see this FAQ
concerning the CentOS release scheme:

https://wiki.centos.org/FAQ/General

Please keep in mind that 6.0, 6.1, 6.2, 6.3, 6.4 , 6.5, 6.6, 6.7, 6.8 , 6.9 and 6.10 no longer get any updates, nor
any security fix's.
The whole CentOS 6 is *dead* and *shouldn't* be used anywhere at *all*

大概意思是 CentOS 6 已经被废弃了,也不再维护和更新,有点 win7 的意思。查看其他几个镜像源,也都是同样的情况。你不更新也就算了,但你把源文件也都干掉了是有是有点太过分了。没办法,想着去升级系统到 CentOS 7。因为 6 到 7 是不能直接通过指令升级的需要重新安装系统,这意味这我得把所有的代码和软件重要配置都做备份。

昨晚将代码压缩下载,花费了几乎一个下午(几百 k,代码 9 个 G)。还是不甘心,这么搞两天都不一定弄得完,就去阿里云帮助文档里查找相关的信息(没报太大的希望,毕竟官方都弃疗了)。只能说运气好,真让我找到了阿里云的解决方案:CentOS 6 EOL如何切换源。这的 EOL 指的就是 CentOS 6 结束了生命周期,不再维护。

根据网络类型(专有和经典)去替换(自己改过一次,地址变化的地方较多,比较容易出错)相应的 repo 内容。需要修改两个文件:CentOS-Base.repoepel.reo。以下是我摘录的内容:

CentOS-Base.repo

[base]
name=CentOS-6.10
enabled=1
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos-vault/6.10/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-6

[updates]
name=CentOS-6.10
enabled=1
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos-vault/6.10/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-6

[extras]
name=CentOS-6.10
enabled=1
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos-vault/6.10/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-6

epel.reo

[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
baseurl=http://mirrors.aliyun.com/epel-archive/6/$basearch
failovermethod=priority
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
 
[epel-debuginfo]
name=Extra Packages for Enterprise Linux 6 - $basearch - Debug
baseurl=http://mirrors.aliyun.com/epel-archive/6/$basearch/debug
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
gpgcheck=0
 
[epel-source]
name=Extra Packages for Enterprise Linux 6 - $basearch - Source
baseurl=http://mirrors.aliyun.com/epel-archive/6/SRPMS
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
gpgcheck=0

注意:原文档上的配置内容中地址依然是 http://mirrors.cloud.aliyuncs.com,这是不对的,在文档浅蓝色的说明中有提到,需要替换成 http://mirrors.aliyun.com。我的已经修改过了。

最后在更新一下 yum 缓存:

yum clean all
yum makecache

大功告成!