CentOS 8 《软件包管理》
RedHat 系软件包格式
- RPM 的二进制软件包:一个应用程序由一个或多个 RPM 格式软件包组成。
- SRPM 的源码软件包:查看应用程序源代码和编译 RPG 软件包等特别的情况才会用到。
软件包命名方式
package-version-release-arch.rpm 软件包名-版本号-发型版本号-硬件平台.rpm
RPM 软件包的依赖关系
由于开源软件分散开发和相互继承的特点,RPM 软件包间存在着依赖关系。
常见的依赖关系有:
- Depends:A 依赖于 B,即安装 A 时必须已安装 B。
- Conflicts:A 与 B 无法共存。B 已安装,A 安装的时候可能要自动卸载掉 B。
- Recommends:推荐安装 A 的同时也安装 B。
软件仓库管理
CentOS 8 所维护的 RPM 软件包都保存在相应的软件仓库,而且是对应 Linux 发行版和对应版本专用的。正如 CentOS 8 无法使用 CentOS 7 或 CentOS 6 的软件仓库一样。这些专用的软件仓库暴露在互联网上为用户提供服务,客户端可以便捷地使用 yum 或 dnf 命令下载和安装各种应用。
CentOS 软件库又成软件源,是由软件包维护者维护并发布的 RPM 软件包的集合。通常包括 CentOS 官方源、第三方源。而镜像(Mirror)仓库主要是为了加速来自于世界各地的用户,使用镜像仓库可以提高应用程序的下载和安装速度。通常 YUM 是通过默认的 yum-fastestmirror 插件自动选择速度最快的 mirror。
CentOS 8 最大的变化之一就是软件仓库分为 BaseOS、Application Stream 两大部分。前者提供了大部分基础软件包,后者则负责不断的引入新功能,侧重于开发软件的软件。Application Stream 还可以保留同一个软件包的多个版本,以 PostgreSQL 为例:
1# 安装最新的稳定版本PostgreSQL 10
2dnf install @postgresql
3
4# 指定安装版本
5dnf install @postgresql:9.6
软件包管理工具
常见后端程序事 rpm、yum、dnf 等。rpm 是最底层的后端程序、被其他更高阶的程序封装调用,是安装、卸载、查询、配置 RPM 软件包的真正实施者。yum 是 CentOS 8 之前的主力,最新的 CentOS 8 种依旧可以使用 yum,并且版本更新到 4。同时还提供了速度更快的 dnf(Dandified Yum)了,一个华丽的 yum,一个逼格更高的 yum。不是地下城与勇士!不是地下城与勇士!不是地下城与勇士!dnf 其实是 yum 的一个分支,拥有较低的内存消耗和高效的软件包管理能力。
dnf 用法与 yum 几乎完全相同,最简单的方法只需将 yum 替换成 dnf 即可。dnf 默认已经自带了 fasttestmirror 功能,只需在配置文件/etc/dnf/dnf.conf 追加如下配置,启动该插件:
1# 开启mirror功能
2[root@master ~]# cat /etc/dnf/dnf.conf
3[main]
4gpgcheck=1
5installonly_limit=3
6clean_requirements_on_remove=True
7best=True
8fastestmirror=true #追加如下配置
9
10# 重新生成源
11[root@master ~]# dnf clean all
12Repository epel is listed more than once in the configuration
1357 files removed
14[root@master ~]# dnf makecache
15
16# 升级时经常不需要升级全部软件包,只想更新安全补丁,只需运行如下命令:
17[root@master ~]# dnf --security check-update
18
19# 列出最近的安全补丁
20[root@master ~]# dnf update --security
高级软件包管理工具 dnf
1# 搜索软件
2[root@master ~]# dnf search mariadb
3
4# 获得软件信息
5[root@master ~]# dnf info mariadb
6
7# 安装软件
8[root@master ~]# dnf install mariadb
9
10# 下载软件包(仅仅是下载)
11[root@master ~]# dnf download ncurses-c++-libs.x86_64
12
13# 删除软件包
14[root@master ~]# dnf remove mariadb
15
16# 更新软件仓库列表
17[root@master ~]# dnf check-update
18
19# 更新软件
20[root@master ~]# dnf update
21
22# 迅速找出程序所属软件包
23[root@master ~]# dnf provides semanage
24policycoreutils-python-utils-2.8-16.1.el8.noarch : SELinux policy core python utilities
25[root@master ~]# dnf install policycoreutils-python-utils -y
26
27# 列出软件包group
28[root@master ~]# dnf grouplist
29
30# 安装/卸载一组软件包(可以使用@代替group)
31[root@master ~]# dnf groupinstall 'Development Tools'
32[root@master ~]# dnf groupremove 'Development Tools'
33[root@master ~]# dnf install '@Development Tools'
34[root@master ~]# dnf remove '@Development Tools'
EPEL、ELRepo 第三方软件源
默认情况,CentOS 软件仓库只包含了必要的应用,与其他发行版 Linux 相比,CentOS 的应用数量远远低于 Ubuntu。这时就需要安装 EPEL 或者 ELRepo 第三方软件仓库,这也是 CentOS 官方推荐的两个第三方软件仓库。
EPEL(Extra Packages for Enterprise Linux)企业版额外软件包的缩写。
EPEL 也类似。
1# 安装EPEL软件仓库
2[root@master ~]# dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
3
4# 安装ELRepo软件仓库
5[root@master ~]# rpm -import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
6[root@master ~]# dnf install https://www.elrepo.org/elrepo-release-8.0-2.el8.elrepo.noarch.rpm -y
更换阿里云软件仓库(国内加速)
1# 备份
2[root@master yum.repos.d]# cp CentOS-Base.repo CentOS-Base.repo.bak
3[root@master yum.repos.d]# cp CentOS-AppStream.repo CentOS-AppStream.repo.bak
4[root@master yum.repos.d]# cp CentOS-Epel.repo CentOS-Epel.repo.bak
5
6# CentOS-Base.repo
7[root@master yum.repos.d]# cat /etc/yum.repos.d/CentOS-Base.repo
8[BaseOS]
9name=CentOS-$releasever - Base
10baseurl=http://mirrors.aliyun.com/centos/$releasever/BaseOS/$basearch/os/
11gpgcheck=1
12enabled=1
13gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
14
15# CentOS-AppStream.repo
16[root@master yum.repos.d]# cat /etc/yum.repos.d/CentOS-AppStream.repo
17[AppStream]
18name=CentOS-$releasever - AppStream
19baseurl=http://mirrors.aliyun.com/centos/$releasever/AppStream/$basearch/os/
20gpgcheck=1
21enabled=1
22gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
23
24# CentOS-Extras.repo
25[root@master yum.repos.d]# cat /etc/yum.repos.d/CentOS-Extras.repo
26[Extra]
27name=CentOS-$releasever - Extras
28baseurl=https://mirrors.aliyun.com/centos/$releasever/extras/$basearch/os/
29gpgcheck=1
30enabled=1
31gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
32
33# 重新生成缓存
34[root@master yum.repos.d]# dnf clean all
35[root@master yum.repos.d]# dnf makecache