q103: Switching mirrors on CentOS 7.9

Symptom

On CentOS 7.9, when you run a command to install dependency packages (e.g. installing NVIDIA driver dependencies), if you see an error like this one, saying it can't reach 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

(You don't need to read this whole block carefully — as long as you see the keyword mirrorlist.centos.org or “Cannot find a valid baseurl”, you can be fairly confident this is the issue described here. In the example above, the lxkt in [lxkt@localhost ~]$ is just this example machine's username and has nothing to do with the cause of the error — the username on your own machine may well be different, and that's completely normal.)

Cause

CentOS 7's official repositories are no longer maintained, so the mirrors are no longer available.

Fix

Run the following commands in order (we recommend copying and pasting the whole block from start to finish, including the entire sudo tee … EOF block — don't split it up and run it in pieces):

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

Once this finishes (with no error, there won't be much output), run the yum install command that failed earlier again — it should succeed normally now.