封面来源:https://www.morfans.cn/app/uploads/2022/03/fedora_system-wide_upgrade.png
阅读须知
这个部分假定你会使用 dnf 或者 yum(对于老的发行版)安装、升级、查找、卸载软件包。在修改完软件源配置后,需要使用这些命令做测试。但是,如果已经遗忘了或第一次接触到 dnf 抑或是这个系列的发行版,这也没关系,你可以花点时间熟悉一下这些命令:
进行系统更新(如果后面接具体软件包,则是仅更新该软件包):
sudo dnf update
sudo yum update(Debian/Ubuntu:孩子们,我这一步只是刷新了软件包仓库缓存)
自动删除某些不需要的包(或者说孤立包):
sudo dnf autoremove
sudo yum autoremove安装某一个(或几个)软件包(以 fail2ban 为例,需要先安装 epel-release 软件源):
sudo dnf install fail2ban
sudo yum install fail2ban如果安装失败(例如有进程锁,网络环境差,系统出问题),需要重新安装(不会对依赖生效):
sudo dnf reinstall fail2ban
sudo yum reinstall fail2ban删除某一个(或几个)软件包(以 nginx 为例):
sudo dnf remove nginx
sudo yum remove nginx查找软件包的信息(以 httpd 为例,也就是大名鼎鼎的 Apache):
# Just for brief info
sudo dnf list httpd
sudo yum list httpd
# For more specific info
sudo dnf provides httpd
sudo yum provides httpd其中,list 输出的结果内@表示本机已经安装该软件包,而 provides 会直接从官方(或镜像)仓库内查找你想要的软件包。
查询软件源:
# Just repo name
sudo dnf repolist
sudo yum repolist
# ALL packages (too long)
sudo dnf list
sudo yum list清除软件包缓存:
sudo dnf clean packages
sudo yum clean packages从 CentOS 9 起,yum 只是 dnf 的软链接,执行 yum 实际上是 dnf.
配置软件源
一般来说,如果你身处中国大陆,甚至是港澳台、日本、韩国、马来西亚等国家/地区,你会发现直接访问官方的软件源速度是很慢的,尤其是当软件源服务器位于欧美地区时。不过好在,国内有很多的软件源镜像,我们可以通过修改软件源配置,以启用附近连接质量最好的软件源(请记住,最近的不一定是最好的,比如说上海交大的软件源,体验一言难尽,远远不如清华源)。
这里,我们以 CentOS 10 Stream 和 TUNA(清华源)为例(有人可能会问 CentOS 7 怎么设置,原理也是一样的,只要官方不改配置文件,就可以直接照搬!),详细说明一下该怎么改软件源。
(Ubuntu 24.04 LTS:孩子们,DEB 822 好用吗)
CentOS 包括 RHEL 的软件源配置都位于 /etc/yum.repos.d/ 目录下,具体的命名规则是 centos*.repo.
请注意:某些软件源可能不使用此种命名方式,例如 epel 或 docker.
常规软件源
随便打开一个配置,例如 centos.repo:

其中最常用的几个配置项如下:
生产环境下,强烈不建议开启 Debug 和 Source 源。稳定性(而不是开发时效性)是第一位的!
首先切换到软件源配置文件所在的目录/etc/yum.repos.d/)下,备份原有的文件:
mv centos.repo centos.repo.old
mv centos-addons.repo centos-addons.repo.old再按照原有的名称(就是你备份时新增后缀名的原文件)创建对应的文件。
这一步是为了防止后面修改不成功,导致系统无法更新的情况。
接下来,我们访问 TUNA 的官方网站,找到 centos-stream 的配置页面:

如果你仍然需要使用 CentOS 7,那么请访问这个页面:

一般来说,直接按照上面的流程操作就可以了,但具体来说,需要改下面的部分:
centos.repo:
把所有的 metalink 全部注释掉,启用 baseurl,并将其修改为 TUNA 所给出的网址。对于 debuginfo 和 source 源,如果你用不到,可以不用改。
centos.repo:
修改方法类似于 centos.repo.
修改完成后,使用 sudo dnf update 尝试更新系统(也可以先使用 dnf makecache 测试一下是否正常),具体观察获取软件源仓库信息的时间。你会发现原来需要等几分钟的 BaseOS 仓库,现在不到 20 秒就已经结束了。
EPEL
对于 EPEL,我们必须先安装这个软件源:
sudo dnf install epel-release完成后直接在终端执行下面这个命令(参考这里):
sed -e 's!^metalink=!#metalink=!g' \
-e 's!^#baseurl=!baseurl=!g' \
-e 's!https\?://download\.fedoraproject\.org/pub/epel!https://mirrors.tuna.tsinghua.edu.cn/epel!g' \
-e 's!https\?://download\.example/pub/epel!https://mirrors.tuna.tsinghua.edu.cn/epel!g' \
-i /etc/yum.repos.d/epel{,-testing}.repo按照之前的方法刷新软件源即可。
题外话:关于 rpm
rpm 是 Fedora/CentOS/RHEL 系的一个软件包安装工具,它和 Debian/Ubuntu 系的 dpkg 大差不差,就连优缺点都差不多。
rpm 不需要做额外的配置,可以直接安装本地的 .rpm 软件包,但是有一个致命的缺点:它不能解决依赖关系,也不能自行下载缺失的软件包。因此一旦出现安装过程中依赖项缺失的问题,还是要手动去安装,但依赖项检查的部分是在安装之前进行的,一旦报错就会立即中止安装进程。
要安装一个 .rpm 软件包:
sudo rpm -i fastfetch-linux-amd64.rpm
# i: install, v: verbose (show process), h: hash
# To show progress, you need to use -p要查询一个软件包:
sudo rpm -q fastfetch
# q: query要卸载一个软件包:
sudo rpm -e fastfetch-linux-amd64.rpm
# e: erase (uninstall)