q103 centos 7.9 换源

symptom 现象

在 CentOS 7.9 上执行安装依赖包的命令(比如安装 NVIDIA 驱动依赖)时,如果看到类似下面的报错,提示连不上 mirrorlist.centos.org

[lxkt@localhost ~]$ sudo yum install -y gcc kernel-devel-$(uname -r) kernel-headers-$(uname -r)
Loaded plugins: fastestmirror
Determining fastest mirrors
Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock error was
14: curl#6 - "Could not resolve host: mirrorlist.centos.org; Unknown error"
 
 
 One of the configured repositories failed (Unknown),
 and yum doesn't have enough cached data to continue. At this point the only
 safe thing yum can do is fail. There are a few ways to work "fix" this:
 
     1. Contact the upstream for the repository and get them to fix the problem.
 
     2. Reconfigure the baseurl/etc. for the repository, to point to a working
        upstream. This is most often useful if you are using a newer
        distribution release than is supported by the repository (and the
        packages for the previous distribution release still work).
 
     3. Run the command with the repository temporarily disabled
            yum --disablerepo=<repoid> ...
 
     4. Disable the repository permanently, so yum won't use it by default. Yum
        will then just ignore the repository until you permanently enable it
        again or use --enablerepo for temporary usage:
 
            yum-config-manager --disable <repoid>
        or
            subscription-manager repos --disable=<repoid>
 
     5. Configure the failing repository to be skipped, if it is unavailable.
        Note that yum will try to contact the repo. when it runs most commands,
        so will have to try and fail each time (and thus. yum will be be much
        slower). If it is a very temporary problem though, this is often a nice
        compromise:
 
            yum-config-manager --save --setopt=<repoid>.skip_if_unavailable=true
 
Cannot find a valid baseurl for repo: base/7/x86_64

(这一大段报错不需要逐字看懂,只要看到关键字 mirrorlist.centos.org 或者 “Cannot find a valid baseurl” 就可以判断是本篇说的这个问题。上面示例里 [lxkt@localhost ~]$ 中的 lxkt 是这台示例机器的用户名,跟报错原因无关,你机器上的用户名可能不一样,这是正常的。)

原因

centos 7 官方不再维护, 源不可用

解决方案

依次执行下面的命令(建议从头到尾整段复制粘贴,包括中间的 sudo tee … EOF 那一整块,不要拆开分段执行):

sudo mkdir /etc/yum.repos.d/bak
sudo mv /etc/yum.repos.d/CentOS-*.repo /etc/yum.repos.d/bak/
 
 
sudo tee /etc/yum.repos.d/CentOS-Base.repo > /dev/null <<'EOF'
[base]
name=CentOS-$releasever - Base
baseurl=http://mirrors.aliyun.com/centos-vault/7.9.2009/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-7
enabled=1
 
[updates]
name=CentOS-$releasever - Updates
baseurl=http://mirrors.aliyun.com/centos-vault/7.9.2009/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-7
enabled=1
 
[extras]
name=CentOS-$releasever - Extras
baseurl=http://mirrors.aliyun.com/centos-vault/7.9.2009/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-7
enabled=1
EOF

执行完成后(没有报错的话不会有太多输出),重新执行之前报错的那条 yum install 命令,正常就能成功了。