本章主要介绍使用yum对软件包进行管理
使用rpm安装包时经常会遇到一个问题就是包依赖
[root@redhat8 ~]# rpm -ivh /mnt/AppStream/Packages/httpd-2.4.37-41.module+el8.5.0+11772+c8e0c271.x86_64.rpm
错误:依赖检测失败:
httpd-filesystem 被 httpd-2.4.37-41.module+el8.5.0+11772+c8e0c271.x86_64 需要
httpd-filesystem = 2.4.37-41.module+el8.5.0+11772+c8e0c271 被 httpd-2.4.37-41.module+el8.5.0+11772+c8e0c271.x86_64 需要
httpd-tools = 2.4.37-41.module+el8.5.0+11772+c8e0c271 被 httpd-2.4.37-41.module+el8.5.0+11772+c8e0c271.x86_64 需要
libapr-1.so.0()(64bit) 被 httpd-2.4.37-41.module+el8.5.0+11772+c8e0c271.x86_64 需要
libaprutil-1.so.0()(64bit) 被 httpd-2.4.37-41.module+el8.5.0+11772+c8e0c271.x86_64 需要
mod_http2 被 httpd-2.4.37-41.module+el8.5.0+11772+c8e0c271.x86_64 需要
system-logos(httpd-logo-ng) 被 httpd-2.4.37-41.module+el8.5.0+11772+c8e0c271.x86_64 需要
[root@redhat8 ~]#
这里<tab>的意思是按【Tab】键
所谓包依赖,就是在安装A时必须先把B和C安装上去。如果用rpm一个个安装是非常困难的,这里可以使用dnf或yum命令来解决。yum命令其实是软链接到dnf命令上的,所以输入yum或dnf都可以,后文都使用yum命令介绍
为了方便理解,先看图
可能我们经常会使用360软件管家管理软件包,在360服务器上有各种软件,在PC上的 360软件管家中搜索想要安装的软件,然后单击【安装】按钮,这样就可以把软件自动安装 到本地了,很方便
yum的架构也是类似的
在服务器上存在某个目录中存储了大量的软件包,然后通过ftp或http把此目录共享出去,使得客户端可以通过ftp或http能访问到此目录
在服务器端所存储的这些软件包中,服务器是知道哪些包之间有依赖关系的,例如,A、 B、C三者之间存在依赖关系,所以当客户端发布一个请求说要安装A时,如图
此时发现A和B、C有依赖关系,所以客户端会把A、B、C三 者都从服务器下载到本机的缓存,然后再把这三个包一起给安装上去
如果假设A和B、C、X有依赖关系,但是X这个包并没有出现 在现在的这个源中,那么当客户端要安装A时,因为缺少了X,所 以安装是失败的。此时我们就需要在客户端上指定多个源,保证所有的这些源中包含了所有需要的包,如图
因为客户端指定了两个源,所以当客户端发布一个请求说要 安装A时,此时从第一个源中检测到了需要的依赖包B、C,然 后从第二个源中找到了X,客户端就会把这四个包一起下载到本地缓存中并进行安装
实验结构
两台Linux系统的虚拟机(redhat8和node1)
因为光盘中包括了最常用的软件包,所以现在就把光盘的内容作为源,用vsftpd将光盘的内容共享出去。在rpm章节 已经将 vsftpd安装上去了,如果没有安装请按前面章节讲过的内容自行安装好
注意
下面的操作都是在redhat8上做的
修改letc/vsftpd/vsftpd.conf中的anonymous enable选项
由anonymous_enable=NO修改为anonymous_enable=YES,并添加如下命令
1 pasv_min_port=10010
2 pasv_max_port=10020
保存退出并启动vsftpd
[root@redhat8 vsftpd]# systemctl enable vsftpd --now
Created symlink /etc/systemd/system/multi-user.target.wants/vsftpd.service → /usr/lib/systemd/system/vsftpd.service.
[root@redhat8 vsftpd]#
如果已经启动过了,则通过systemctl restart vsftpd重启一下,使刚做的配置生效
修改防火墙
[root@redhat8 vsftpd]# firewall-cmd --add-port=20-21/tcp --permanent
success
[root@redhat8 vsftpd]# firewall-cmd --add-port=10010-10020/tcp --permanent
success
[root@redhat8 vsftpd]# firewall-cmd --reload
success
[root@redhat8 vsftpd]#
把SELinux服务关闭
创建目录/var/ftp/dvd,然后把光盘挂载到此目录上
[root@redhat8 ~]# mkdir /var/ftp/dvd
[root@redhat8 ~]# mount /dev/cdrom /var/ftp/dvd/
mount: /var/ftp/dvd: WARNING: device write-protected, mounted read-only.
[root@redhat8 ~]#
这样其他机器通过ftp访问/var/ftp/dvd时,访问的就是光盘中的内容了。设置开机自动挂载,修改/etc/fstab
[root@redhat8 ~]# grep ftp /etc/fstab
/dev/cdrom /var/ftp/dvd iso9660 defaults 0 0
[root@redhat8 ~]#
至此,服务器上的yum 源就已经配置好了,/var/ftp/dvd中的内容
[root@redhat8 ~]# ls /var/ftp/dvd/
AppStream EULA images RPM-GPG-KEY-redhat-beta
BaseOS extra_files.json isolinux RPM-GPG-KEY-redhat-release
EFI GPL media.repo TRANS.TBL
[root@redhat8 ~]#
此时客户端不能直接把此目录作为源来使用,服务器是知道每个包和其他包之间的依赖关系的,因为系统会把某个目录(包括子目录)中的rpm包的元数据信息放在repodata目录中
但是在/var/ftp/dvd中并没有repodata目录(不能单纯地用mkdir命令把此目录创建出 来,创建出来里面没有元数据是没用的),所以 /var/ftp/dvd并不能直接作为源来使用。先 来看AppStream目录的内容
[root@redhat8 ~]# ls /var/ftp/dvd/AppStream/
Packages repodata
[root@redhat8 ~]#
这里repodata是 AppStream下的目录,记录了AppStream目录下所有的rpm信息,此处AppStream中所有的rpm都存储在Packages目录下了。repodata中的内容大概是这样的
[root@redhat8 ~]# ls /var/ftp/dvd/AppStream/repodata/
167822ee59a5cbd329d31b2ff030cb2146b0fd624e390ffe3ac98fb641fb62f4-comps-AppStream.x86_64.xml.gz
2adf8b14deae5cde9dd015b563abdfba1d2a4c96659bf8386ff182f9400b023b-comps-AppStream.x86_64.xml
689bd45a22fedbffbc3e3b9d82109a2c6ed02ee8b2962136d63a3026f24d6ef0-filelists.xml.gz
99f06c9bf207d0b64dfecfeb768d255367de7e22522ae4669c2bf8361a2df4ef-other.xml.gz
b591d9fa12e0ba5c6d75b84b605f44c1daefd514068152a3fd8ba53fdb5975eb-primary.xml.gz
d12f84e558ef647914eb6d20f034920765390d579888595800f915a133457a22-modules.yaml.gz
ee6f2ed466e70c8ee4dd48d8aa3897707349e31e3f546a82e121cc53cc82d8a8-productid.gz
productid
repomd.xml
TRANS.TBL
[root@redhat8 ~]#
再来看BaseOS目录的内容
[root@redhat8 ~]# ls /var/ftp/dvd/BaseOS/
Packages repodata
[root@redhat8 ~]#
这里repodata是 BaseOS下的目录,记录了BaseOS目录下所有的rpm信息,此处BaseOS中所有的rpm都存储在Packages目录下了
总结:repodata目录中记录了repodata所在目录下所有的rpm信息,例如BaseOS 下 的repodata 记录了BaseOS目录下所有的rpm信息
所以,当前server上有两个源,分别是/var/ftp/dvd/AppStream 和/var/ftp/dvd/BaseOS。客户端要访问这两个源,分别通过 ftp://192.168.26.101/dvd/AppStream和 ftp://192.168.26.101/dvd/BaseOS 即可
在server上利用光盘对外提供了两个源分别是/var/ftp/dvd/ AppStream和 /var/ftp/dvd/BaseOS,这两个源是光盘中自带的。下面练习如何创建一个自定义的源
先配置server使用光盘作为源,在redhat8(192.168.161.16这台机器)中把光盘挂载 到/mnt 上,并在/etc/fstab中设置开机自动挂载
[root@redhat8 ~]# grep mnt /etc/fstab
/dev/cdrom /mnt iso9660 defaults 0 0
[root@redhat8 ~]#
这样访问/mnt时访问的就是光盘了。创建/etc/yum.repos.d/aa.repo的内容如下
[root@redhat8 ~]# cat /etc/yum.repos.d/aa.repo
[aa]
name=aa
baseurl=file:///mnt/AppStream
enabled=1
gpgcheck=0
[bb]
name=bb
baseurl=file:///mnt/BaseOS
enabled=1
gpgcheck=0
[root@redhat8 ~]#
需要注意的是,这里file:后面是3个/,file:是类似于http;/l、ftp:;这样的写法,第三个/表 示的是绝对路径
通过yum install安装createrepo工具包
[root@redhat8 ~]# yum -y install createrepo
正在更新 Subscription Management 软件仓库。
然后创建一个目录/var/ftp/myrepo
[root@redhat8 ~]# mkdir /var/ftp/myrepo
[root@redhat8 ~]#
从光盘中拷贝一个测试用的安装包,这里就选择vsftpd的安装包。拷贝 vsftpd到 /var/ftplmyrepo中
[root@redhat8 ~]# cp /mnt/AppStream/Packages/vsftpd-3.0.3-34.el8.x86_64.rpm /var/ftp/myrepo/
[root@redhat8 ~]#
现在/var/ftp/myrepo中包含了一个 vsftpd的安装包
通过createrepo工具包对/var/ftp/myrepo进行操作
[root@redhat8 ~]# createrepo -v /var/ftp/myrepo/
12:18:44: Version: 0.17.2 (Features: DeltaRPM LegacyWeakdeps )
12:18:44: Signal handler setup
12:18:44: Thread pool ready
Directory walk started
12:18:44: Adding pkg: /var/ftp/myrepo/vsftpd-3.0.3-34.el8.x86_64.rpm
12:18:44: Dir to scan: /var/ftp/myrepo/.repodata
12:18:44: Package count: 1
Directory walk done - 1 packages
Temporary output repo path: /var/ftp/myrepo/.repodata/
12:18:44: Creating .xml.gz files
12:18:44: Setting number of packages
Preparing sqlite DBs
12:18:44: Creating databases
12:18:44: Thread pool user data ready
Pool started (with 5 workers)
Pool finished
12:18:44: Generating repomd.xml
12:18:44: Old repodata doesn't exists: Cannot rename /var/ftp/myrepo/repodata/ -> /var/ftp/myrepo/repodata.old.2406.20231212121844.195356: No such file or directory
12:18:44: Renamed /var/ftp/myrepo/.repodata/ -> /var/ftp/myrepo/repodata/
12:18:44: Memory cleanup
12:18:44: All done
[root@redhat8 ~]#
/var/ftp/myrepo目录中的内容如下
[root@redhat8 ~]# ls /var/ftp/myrepo/
repodata vsftpd-3.0.3-34.el8.x86_64.rpm
[root@redhat8 ~]#
这里生成了repodata,里面包含了/var/ftp/myrepo中所有的rpm包(这里就一个 vsftpd)的信息,那么/var/ftp/myrepo也可以作为一个源来使用了
客户端要安装软件包必须指定使用哪些源,在客户端上指定源的方法是在目录/etc/yum.repos.d中创建后缀是repo的文件。文件名是什么无所谓,但后缀必须是 repo,格式如下
1 [名称] ‐‐‐‐用于标注不同的源
2 name= ‐‐‐‐注释信息
3 baseurl= ‐‐‐‐指定源的URL地址
4 enabled= ‐‐‐用于指定是否启用这个源,值有0和1
5 0‐‐‐不使用这个源
6 1‐‐‐使用这个源
7 enabled也可以写成enable
8 gpgcheck= ‐‐‐‐用于指定安装的软件包是否要进行数字签名的验证,值有0和1
9 0‐‐不对每个安装包进行数字签名验证
10 1‐‐对每个包做数字签名的验证
11 gpgkey=/path/如果上面 gpgcheck的值设置为1,需要使用此选项指定公钥;如果上面gp
gcheck的值设置为0,这个选项可以不写。
在服务器端已经配置了两个源,下面配置客户端让其能使用这两个源
在/etc/yum.repos.d中创建aa.repo(node1)
[root@node1 ~]# cat /etc/yum.repos.d/aa.repo
[aa]
name=aa
baseurl=ftp://192.168.161.16/dvd/AppStream
enabled=1
gpgcheck=0
[bb]
name=bb
baseurl=ftp://192.168.161.16/dvd/BaseOS
enabled=1
gpgcheck=0
[root@node1 ~]#
这里在aa.repo中配置了两个源,分别标记为aa和 bb。可以把多个源写在同一个repo文 件中,也可以把多个源写在不同的repo文件中
当通过ftp://192.168.8.11来访问服务器时,访问的是服务器的/var/ftp目录,千万不要写成ftp://192.168.26.101/var/ftp了,否则对应的就是服务器的/var/ftp/var/tp目录了
ftp://192.168.8.11/dvd对应的是服务器的/var/ftp/dvd目录,但是这个不能作为源,因为/var/ftp/dvd下没有对应的repodata目录记录/var/ftp/dvd中的 rpm信息
因为rpm包都是存储在Packages中的,所以有人可能说我怕系统找不到软件包,所以写成baseurl=ftp:/192.168.26.101/dvd/BaseOS/Packages行不行?答案是不行的,你不用担心系统找不到rpm在哪里。写成baseurl=ftp://192.168.26.100/dvd/BaseOS,会通过读取它的子目录repodata中的数据从而知道rpm在哪个目录中
此时/etc/yum.repos.d中的文件如下
[root@node1 ~]# ls /etc/yum.repos.d/
aa.repo redhat.repo
[root@node1 ~]#
这里/etclyum.repos.d下面的redhat.repo是系统自动生成的可以不用管,删除不删除都 无所谓
node1通过ftp访问redhat8上的源。如果想直接使用本地光盘作为yum源,那么可以把光盘挂载到某个目录上,然后直接使用此目录作为源
?通过yum repolist查看当前正在使用的源
[root@node1 ~]# yum repolist
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: ftp.sjtu.edu.cn
源标识 源名称 状态
aa aa 6,220
base/7/x86_64 CentOS-7 - Base 10,072
bb bb 1,708
extras/7/x86_64 CentOS-7 - Extras 518
updates/7/x86_64 CentOS-7 - Updates 5,434
repolist: 23,952
[root@node1 ~]#
可以看到,现在正在使用两个源aa和 bb,由/etc/yum.repos.d/aa.repo文件里中括号的部分定义
如果/etc/yum.repos.d/aa.repo的内容发生了改变,需要用yum clean all 命令清空一下缓存
[root@node1 ~]# yum clean all
已加载插件:fastestmirror, langpacks
正在清理软件源: aa base bb extras updates
Cleaning up list of fastest mirrors
Other repos take up 62 k of disk space (use --verbose for details)
[root@node1 ~]#
重新创建缓存数据用yum makecache命令
[root@node1 ~]# yum makecache
已加载插件:fastestmirror, langpacks
Determining fastest mirrors
x^H * base: mirrors.nju.edu.cn
* extras: mirrors.nju.edu.cn
* updates: mirrors.aliyun.com
aa | 3.2 kB 00:00
base | 3.6 kB 00:00
bb | 2.8 kB 00:00
extras | 2.9 kB 00:00
updates | 2.9 kB 00:00
(1/18): aa/group_gz | 109 kB 00:00
(2/18): aa/primary | 1.7 MB 00:00
(3/18): aa/other | 1.1 MB 00:00
(4/18): aa/filelists | 5.4 MB 00:00
(5/18): bb/group_gz | 74 kB 00:00
(6/18): bb/filelists | 1.2 MB 00:00
(7/18): bb/primary | 1.1 MB 00:00
(8/18): bb/other | 443 kB 00:00
(9/18): base/7/x86_64/group_gz | 153 kB 00:06
(10/18): extras/7/x86_64/filelists_db | 303 kB 00:06
(11/18): extras/7/x86_64/other_db | 150 kB 00:00
(12/18): extras/7/x86_64/primary_db | 250 kB 00:00
(13/18): base/7/x86_64/other_db | 2.6 MB 00:12
(14/18): updates/7/x86_64/other_db | 1.5 MB 00:05
(15/18): updates/7/x86_64/primary_db | 24 MB 00:17
(16/18): base/7/x86_64/primary_db | 6.1 MB 00:24
(17/18): base/7/x86_64/filelists_db | 7.2 MB 00:41
(18/18): updates/7/x86_64/filelists_db | 13 MB 00:40
aa 6220/6220
aa 6220/6220
aa 6220/6220
bb 1708/1708
bb 1708/1708
bb 1708/1708
元数据缓存已建立
[root@node1 ~]#
这步不是必需的,即使不重新创建缓存数据,当我们下次使用yum时也会自动创建
想查询yum源中是否存在某个包,可以通过 yum search或 yum list来查询。例如,要查询lrzsz这个包
[root@node1 ~]# yum search lrzsz
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.nju.edu.cn
* extras: mirrors.nju.edu.cn
* updates: mirrors.aliyun.com
============================ N/S matched: lrzsz =============================
lrzsz.x86_64 : The lrz and lsz modem communications programs
名称和简介匹配 only,使用“search all”试试。
[root@node1 ~]#
对于yum search 来说,可以在yum源中查找包名中含有lrzsz的包,如果输入的是yumsearch lrzs,它也是能查找到的
[root@node1 ~]# yum search lrzs
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.nju.edu.cn
* extras: mirrors.nju.edu.cn
* updates: mirrors.aliyun.com
============================= N/S matched: lrzs =============================
lrzsz.x86_64 : The lrz and lsz modem communications programs
名称和简介匹配 only,使用“search all”试试。
[root@node1 ~]#
也就是yum search后面跟的包名可以不是完整的包名,但是这个命令查询的结果无法判断这个包在系统上是否安装。可以使用yum list命令查看包是否已经安装
[root@node1 ~]# yum list lrzsz
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.nju.edu.cn
* extras: mirrors.nju.edu.cn
* updates: mirrors.aliyun.com
已安装的软件包
lrzsz.x86_64 0.12.20-36.el7 @anaconda
可安装的软件包
lrzsz.x86_64 0.12.20-43.el8 bb
[root@node1 ~]#
这里显示“可安装的”说明在系统中并没有安装,最后的bb说明lrzsz是在bb这个源中 的
对于yum list来说,后面必须跟上完整的包名,如果跟的不是完整的包名则是查询不出来的
[root@node1 ~]# yum list lrzs
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.nju.edu.cn
* extras: mirrors.nju.edu.cn
* updates: mirrors.aliyun.com
错误:没有匹配的软件包可以列出
[root@node1 ~]#
所以,在使用yum list命令时,可以结合通配符一起使用
[root@node1 ~]# yum list lrzs\*
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.nju.edu.cn
* extras: mirrors.nju.edu.cn
* updates: mirrors.aliyun.com
已安装的软件包
lrzsz.x86_64 0.12.20-36.el7 @anaconda
可安装的软件包
lrzsz.x86_64 0.12.20-43.el8 bb
[root@node1 ~]#
这里的意思是在yum源中查找以lrzs开头的包,*前面加上\的目的是防止 bash把*解析了,希望到yum源中去解析而不是在bash中解析。到底使用yum search还是yum list就要看个人习惯了
安装软件包用“yum install 包名”命令,现在安装 lrzsz
[root@node1 ~]# yum -y install lrzsz
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.nju.edu.cn
* extras: mirrors.nju.edu.cn
* updates: mirrors.aliyun.com
正在解决依赖关系
--> 正在检查事务
---> 软件包 lrzsz.x86_64.0.0.12.20-36.el7 将被 升级
---> 软件包 lrzsz.x86_64.0.0.12.20-43.el8 将被 更新
--> 解决依赖关系完成
依赖关系解决
.....输出信息.....
更新完毕:
lrzsz.x86_64 0:0.12.20-43.el8
完毕!
[root@node1 ~]#
这里已显示“已安装”
不管是安装还是卸载,每次安装(或卸载)时都会询问,如果不想被询问,可以加上y选项,y加在下面1、2、3的位置都可以
yum 1 install 2 包名 3
卸载软件包用“yum remove 包名”命令,现在把 Irzsz卸载掉
[root@node1 ~]# yum -y remove lrzsz
已加载插件:fastestmirror, langpacks
正在解决依赖关系
--> 正在检查事务
---> 软件包 lrzsz.x86_64.0.0.12.20-43.el8 将被 删除
--> 解决依赖关系完成
依赖关系解决
=============================================================================
Package 架构 版本 源 大小
=============================================================================
正在删除:
lrzsz x86_64 0.12.20-43.el8 @bb 187 k
事务概要
=============================================================================
移除 1 软件包
安装大小:187 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在删除 : lrzsz-0.12.20-43.el8.x86_64 1/1
验证中 : lrzsz-0.12.20-43.el8.x86_64 1/1
删除:
lrzsz.x86_64 0:0.12.20-43.el8
完毕!
[root@node1 ~]#
这样就把lrzsz卸载了。下面查看系统中是否还有Irzsz
[root@node1 ~]# rpm -qa | grep lezsz
[root@node1 ~]#
如果要更新系统中的某个软件包,则用“yum update包名y”命令。如果要更新系统中所有的软件包,则直接使用yum udpate -y命令即可
查询包的信息用“yum info包名”命令
[root@node1 ~]# yum info lrzsz
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.nju.edu.cn
* extras: mirrors.nju.edu.cn
* updates: mirrors.aliyun.com
可安装的软件包
名称 :lrzsz
架构 :x86_64
版本 :0.12.20
发布 :43.el8
大小 :84 k
源 :bb
简介 : The lrz and lsz modem communications programs
网址 :http://www.ohse.de/uwe/software/lrzsz.html
协议 : GPLv2+
描述 : Lrzsz (consisting of lrz and lsz) is a cosmetically modified
: zmodem/ymodem/xmodem package built from the public-domain version
: of the rzsz package. Lrzsz was created to provide a working GNU
: copylefted Zmodem solution for Linux systems.
[root@node1 ~]#
使用yum 安装软件包时,先把要安装的软件包及所依赖的包都下载到本地缓存中,然后再一起安装。如果只想把这些包下载下来并不安装,可以使用--downloadonly和-- downloaddir=/dir选项,其中--downloadonly 只让yum把软件包下载下来并不执行安装操作,下载到哪个目录由--downloaddir来指定
现在想把 httpd及其依赖的包全部下载到/bb目录,首先创建/bb目录
[root@node1 ~]# mkdir /bb
[root@node1 ~]#
然后开始下载指定的包
[root@node1 ~]# yum -y install httpd --downloadonly --downloaddir=/bb
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.nju.edu.cn
* extras: mirrors.nju.edu.cn
* updates: mirrors.aliyun.com
正在解决依赖关系
--> 正在检查事务
---> 软件包 httpd.x86_64.0.2.4.37-41.module+el8.5.0+11772+c8e0c271 将被 安装
.............
查看一下/bb中的内容
1 [root@node1 ~]# ls /bb/
2 apr‐1.6.3‐12.el8.x86_64.rpm httpd‐filesystem‐2.4.37‐
41.module+el8.5.0+11772+c8e0c271.noarch.rpm
3 apr‐util‐1.6.1‐6.el8.x86_64.rpm httpd‐tools‐2.4.37‐41.module+el8.5.0+1
1772+c8e0c271.x86_64.rpm
4 apr‐util‐bdb‐1.6.1‐6.el8.x86_64.rpm mod_http2‐1.15.7‐
3.module+el8.4.0+8625+d397f3da.x86_64.rpm
5 apr‐util‐openssl‐1.6.1‐6.el8.x86_64.rpm redhat‐logos‐httpd‐84.5‐
1.el8.noarch.rpm
6 httpd‐2.4.37‐41.module+el8.5.0+11772+c8e0c271.x86_64.rpm
7 [root@node1 ~]#
可以看到,已经把httpd及其依赖的包全部下载下来了?