RHCE9学习指南 第23章 用yum/dnf管理软件包

使用rpm安装包时经常会遇到一个问题就是包依赖,如下所示。

[root@server ~]# rpm -ivh /mnt/AppStream/Packages/httpd-2.4<tab>.x86_64.rpm 
错误:依赖检测失败:
    httpd-filesystem 被 httpd-2.4.51-7.el9_0.x86_64 需要
    ...输出...
    libaprutil-1.so.0()(64bit) 被 httpd-2.4.51-7.el9_0.x86_64 需要
    system-logos-httpd 被 httpd-2.4.51-7.el9_0.x86_64 需要
[root@server ~]#

上面意思是按【Tab】键。
所谓包依赖,就是在装A时必须要先把B和C安装上去。如果用rpm一个个安装是非常困难的,这里可以使用dnf或yum来解决。yum命令其实是软连接到dnf命令上的,所以输入yum或dnf都可以,后文都使用yum命令介绍。

23.1 yum架构介绍

为了便于理解,先看如图23-1所示的例子。
file
图23-1 用360软件管家安装软件的情况
可能我们经常会使用360软件管家管理软件包,在360服务器上有各种软件,在PC上的360软件管家中搜索想要安装的软件,然后点击安装,这样就可以把软件自动的安装到本地了,很方便。
同理,yum的架构也是类似,如图23-2所示。
file
图23-2 yum的架构

在服务器上存在某个目录里面存储了大量的软件包,然后通过ftp或http把此目录共享出去,使得客户端可以通过ftp或http能访问到此目录。
在服务器端所存储的这些软件包中,服务器是知道哪些包之间是有依赖关系的,例如,A、B、C三者之间存在依赖关系,所以当客户端发布一个请求说我要安装A,如图23-3所示。
file
图23-3 yum安装软件包的过程
此时发现A和B、C有依赖关系,所以客户端会把A、B、C三者都从服务器下载到本机的缓存,然后再把这三个包一起给安装上去。
如果假设A和B、C、X有依赖关系,但是X这个包并没有出现在现在的这个源中,那么当客户端要安装A时,因为缺少了X,所以安装仍然是失败的。此时我们就需要在客户端上指定多个源,保证所有的这些源中包含了所有需要的包,如图23-4所示。
file
图23-4 yum安装软件包的过程
因为客户端指定了两个源,所以当客户端发一个请求说要安装A,此时从第一个源中检测到需要的依赖包B、C,然后从第二个源中找到了X,然后客户端会把这4个包一起下载到本地缓存中,然后进行安装。

23.2 用光盘搭建yum源

本节实验环境如图23-5所示。
file
图23-5 本章实验拓扑图
因为光盘中包括了最常用的软件包,现在就把光盘的内容作为源,用vsftpd将光盘的内容共享出去。在rpm章节已经将vsftpd安装上去了,如果没安装请按前面章节讲过的内容自行安装好。
注意:下面的操作都是在server上做的。
修改/etc/vsftpd/vsftpd.conf中anonymous_enable 选项如下。

由anonymous_enable=NO
改为
anonymous_enable=YES

并添加如下所示命令。

pasv_min_port=10010
pasv_max_port=10020

保存退出之后,启动vsftpd,命令如下。

[root@server ~]# systemctl enable vsftpd --now
Created symlink /etc/systemd/system/multi-user.target.wants/vsftpd.service → /usr/lib/systemd/system/vsftpd.service.
[root@server ~]#

如果已经启动过了,则通过systemctl restart vsftpd重启一下使得刚做的配置生效。
修改防火墙,命令如下。

[root@server ~]# firewall-cmd --add-port=20-21/tcp --permanent 
success
[root@server ~]# firewall-cmd --add-port=10010-10020/tcp --permanent 
success
[root@server ~]# firewall-cmd --reload 
success
[root@server ~]#

设置selinux相关的布尔值,命令如下。
[root@server ~]# setsebool -P ftpd_full_access 1
[root@server ~]#
记住,这个布尔值一定要设置,否则客户端会出现如图23-6所示的错误。
file
图23-6 客户端的报错信息
创建目录/var/ftp/dvd,然后把光盘挂载到此目录,命令如下。

[root@server ~]# mkdir /var/ftp/dvd
[root@server ~]# mount /dev/cdrom /var/ftp/dvd
mount: /var/ftp/dvd: WARNING: device write-protected, mounted read-only.
[root@server ~]#

这样其他机器通过ftp访问/var/ftp/dvd时,访问的就是光盘中的内容了。设置开机自动挂载,修改/etc/fstab,内容如下。

[root@server ~]# grep ftp /etc/fstab
/dev/cdrom  /var/ftp/dvd    defaults    iso9660     0 0
[root@server ~]# 

至此服务器上配置yum源就已经配置好了,/var/ftp/dvd中的内容如图23-7所示。
file
图23-7 光盘中的内容
此时客户端不能直接把此目录作为源来使用,服务器是知道每个包和其他包之间的依赖关系的,因为系统会把某个目录(包括子目录)中的rpm包的元数据信息放在repodata目录中。
但是在/var/ftp/dvd中并没有repodata目录(不能单纯地用命令mkdir把此目录创建出来,创建出来里面没有元数据是没用的),所以/var/ftp/dvd并不能直接作为源来使用。先来看AppStream和BaseOS两个目录的内容,命令如下。

[root@server ~]# ls /var/ftp/dvd/AppStream/
Packages  repodata
[root@server ~]#

这里repodata是AppStream下的目录,记录了AppStream目录下所有的rpm的信息,此处所有rpm都存储在Packages目录下了。repodata下的内容大概是这样的,如下所示。

[root@server ~]# ls /var/ftp/dvd/AppStream/repodata/
76c4ecf98e5cc5.....8a00f44ec899-primary.xml.gz
951a2367c42d5c3.....68d8d2c6569003-productid.gz
    ...输出...
productid
repomd.xml
TRANS.TBL
[root@server ~]#

[root@server ~]# ls /var/ftp/dvd/BaseOS/
Packages  repodata
[root@server ~]#

这里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即可。

23.3 创建私有仓库

在server上利用光盘对外提供了两个源分别是/var/ftp/dvd/AppStream和/var/ftp/dvd/BaseOS,这两个源是光盘中自带的。下面练习如何创建一个自定义的源。
先配置server使用光盘作为源,在server(192.168.26.101这台机器),把光盘挂载到/mnt上,并在/etc/fstab中设置开机自动挂载。

[root@server ~]# tail -1 /etc/fstab
/dev/cdrom  /mnt        defaults    iso9660     0 0
[root@server ~]#

这样访问/mnt时访问的就是光盘了。创建/etc/yum.repos.d/aa.repo内容如下。

[root@server ~]# 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@server ~]#

需要注意的是,这里file:后面是3个/, file://是类似于http://、ftp://这样的写法,然后第三个/表示的是绝对路径。
通过yum install 安装createrepo工具包,命令如下。

[root@server ~]# yum install createrepo -y
正在更新 Subscription Management 软件仓库。
Unable to read consumer identity
    ...输出...
已安装:
createrepo_c-0.17.7-4.el9_0.x86_64  createrepo_c-libs-0.17.7-4.el9_0.x86_64      

完毕!
[root@server ~]# 

关于yum install 命令下一节讲,然后创建一个目录/var/ftp/myrepo目录,命令如下。

[root@server ~]# mkdir /var/ftp/myrepo
[root@server ~]#

从光盘中拷贝一个测试用的安装包,这里就选择vsftpd的安装包。拷贝vsftpd到/var/ftp/myrepo中,命令如下。

[root@server ~]# cp /mnt/AppStream/Packages/vsftpd-<tab>  /var/ftp/myrepo/
[root@server ~]#

这里的意思是按键盘上的【Tab】键,让其自动补齐安装包名。
现在/var/ftp/myrepo中包含了一个vsftpd的安装包,命令如下。

[root@server ~]# ls /var/ftp/myrepo/
vsftpd-3.0.3-49.el9.x86_64.rpm
[root@server ~]#

通过createrepo工具包对/var/ftp/myrepo进行操作,命令如下。

[root@server ~]# createrepo -v /var/ftp/myrepo/
00:15:38: Version: 0.16.2 (Features: DeltaRPM LegacyWeakdeps )
00:15:38: Signal handler setup
00:15:38: Thread pool ready
Directory walk started
00:15:38: Adding pkg: /var/ftp/myrepo/vsftpd-3.0.3-49.el9.x86_64.rpm
    ...输出...
00:15:38: Memory cleanup
00:15:38: All done
[root@server ~]#

/var/ftp/myrepo目录中的内容如下所示。

[root@server ~]# ls /var/ftp/myrepo/
repodata  vsftpd-3.0.3-49.el9.x86_64.rpm
[root@server ~]#

这里生成了repodata,里面包含了/var/ftp/myrepo中所有的rpm包(这里就一个vsftpd)的信息,那么/var/ftp/myrepo也可以作为一个源来使用了。

23.4 yum客户端的配置

客户端要安装软件包必须要指定使用哪些源,在客户端上指定源的方法是在目录/etc/yum.repos.d/中创建后缀是repo的文件。文件名是什么无所谓,但后缀必须要是repo,格式如下。

[名称]    ----用于标注不同的源
name=   ----注释信息
baseurl=    ----指定源的url地址
enabled=    --用于指定是否启用这个源,值有0和1
            0---不使用这个源
            1---使用这个源
            enabled也可以写成enable
gpgcheck= --用于指定安装的软件包是否要进行数字签名的验证,值有0和1
            0--不对每个安装包进行数字签名验证
            1--对每个包做数字签名的验证
gpgkey=/path/ 如果上面gpgcheck的值设置为1,需要使用此选项指定公钥,如果上面gpgcheck的值被设置为0,这个选项可以不写。

在服务器端已经配置了两个源,下面配置客户端让其能使用这两个源,在/etc/yum.repos.d/中创建aa.repo,内容如下。

[root@server2 ~]# cat /etc/yum.repos.d/aa.repo
[aa]
name=appstream
baseurl=ftp://192.168.26.101/dvd/AppStream
enabled=1
gpgcheck=0

[bb]
name=baseos
baseurl=ftp://192.168.26.101/dvd/BaseOS
enabled=1
gpgcheck=0
[root@server2 ~]#

这里在aa.repo中配置了两个源,标记分别为aa和bb。可以把多个源写在一个repo文件中,也可以把多个源写入不同的repo文件中。
当通过ftp://192.168.26.101/来访问服务器时,访问的是服务器的/var/ftp目录,千万不要写成了ftp://192.168.26.101/var/ftp,否则这对应的服务器的/var/ftp/var/ftp目录了。
所以,ftp://192.168.26.101/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@server2 ~]# ls /etc/yum.repos.d/
aa.repo  redhat.repo
[root@server2 ~]#

上面/etc/yum.repos.d/下面的redhat.repo是系统自动生成的可以不用管,删除不删除都无所谓。
server2通过ftp访问server上的源。如果直接想使用本地光盘作为yum源,那么可以把光盘挂载到某个目录下,然后直接使用此目录作为源。

23.5 yum的基本使用

通过yum repolist查看当前正在使用的源,命令如下。

[root@server2 ~]# yum repolist
正在更新 Subscription Management 软件仓库。
    ...输出...
仓库标识                                         仓库名称
aa                                               appstream
bb                                               baseos
[root@server2 ~]#

可以看到,现在正在使用两个源aa和bb,由/etc/yum.repos.d/aa.repo文件里中括号部分定义的。
如果/etc/yum.repos.d/aa.repo的内容发生了改变,需要用yum clean all清空一下缓存,命令如下。

[root@server2 ~]# yum clean all
正在更新 Subscription Management 软件仓库。
    ...输出...
12 文件已删除
[root@server2 ~]#

重新创建缓存数据用dnf makecache,命令如下。

[root@server2 ~]# yum makecache
正在更新 Subscription Management 软件仓库。
    ...输出...
appstream                             77 MB/s | 6.8 MB     00:00    
baseos                                65 MB/s | 2.3 MB     00:00    
元数据缓存已建立。
[root@server2 ~]# 

这步不是必需的,即使不重新创建缓存数据,当我们下次使用yum时也会自动创建。

23.5.1 查询

想查询yum源中是否存在某个包,可以通过yum search或yum list进行查询。例如,要查询lrzsz这个包,命令如下。

[root@server2 ~]# yum search lrzsz
正在更新 Subscription Management 软件仓库。
    ...输出...
上次元数据过期检查:0:03:08 前,执行于 202...15分24秒。
==================== 名称 精准匹配:lrzsz ====================
lrzsz.x86_64 : The lrz and lsz modem communications programs
[root@server2 ~]# 

对于yum search来说,可以在yum源中找包名中含有lrzsz的包,如果输入的是yum search lrzs,它也是能查到的,命令如下。

[root@server2 ~]# yum search lrzs
正在更新 Subscription Management 软件仓库。.
    ...输出...
上次元数据过期检查:0:05:08 前,执行于 202...15分24秒。
==================== 名称 匹配:lrzsz ====================
lrzsz.x86_64 : The lrz and lsz modem communications programs
[root@server2 ~]# 

也就是yum seach后面跟的包名可以不是完整的包名,但是这个命令查询的结果无法判断这个包在系统上是否安装。可以使用yum list查看包是否已经安装了,命令如下。

[root@server2 ~]# yum list lrzsz
正在更新 Subscription Management 软件仓库。
    ...输出...
可安装的软件包
lrzsz.x86_64        0.12.20-55.el9                               bb
[root@server2 ~]#

这里显示“可安装的”说明在系统中并没有安装,最后的bb说明lrzsz这个是在bb这个源中的。
对于yum list来说,后面必须要跟上完整的包名,如果跟的不是完整的包名则是查询不出来的,如下所示。

[root@server2 ~]# yum list lrzs
正在更新 Subscription Management 软件仓库。
    ...输出...
错误:没有匹配的软件包可以列出
[root@server2 ~]#

所以,在使用dnf list时,可以结合通配符一起来使用,命令如下。

[root@server2 ~]# yum list lrzs\*
正在更新 Subscription Management 软件仓库。
    ...输出...
已安装的软件包
lrzsz.x86_64      0.12.20-55.el9                  bb    
[root@server2 ~]#

这句话的意思是在yum源中找以lrzs开头的包,前面加上\的目的是为了防止bash把解析了,希望到yum源中去解析而不是在bash中解析。到底使用yum seach还是yum list就要看个人习惯了。

23.5.2 安装与卸载软件包

要安装软件包用的是“yum install 包名”,例如,现在要安装lrzsz可以通过yum install lrzsz命令,命令如下。

[root@server2 ~]# yum install lrzsz 
正在更新 Subscription Management 软件仓库。
    ...输出...
=============================================================
 软件包       架构        版本              仓库      大小
=============================================================
安装:
 lrzsz        x86_64    0.12.20-55.el9           bb        86 k

事务概要
=============================================================
安装  1 软件包

总下载:84 k
安装大小:187 k
确定吗?[y/N]:此处输入y按【Enter】键
然后会问我们是否要安装,这里需要明确的输入y按【Enter】键:
下载软件包:
lrzsz-0.12.20-55.el9.x86_64.rpm         3.4 MB/s |  84 kB     00:00    
------------------------------------------------------------------------
总计                                  3.2 MB/s |  84 kB     00:00     
    ...输出...
Installed products updated.

已安装:
  lrzsz-0.12.20-55.el9.x86_64 

完毕!
[root@server2 ~]#

这样软件包就算是安装上去了,查看的命令如下。

[root@server2 ~]# yum list lrzsz
正在更新 Subscription Management 软件仓库。
    ...输出...
已安装的软件包
lrzsz.x86_64                  0.12.20-55.el9                    @bb
[root@server2 ~]#

这里已显示“已安装”。
不管是安装还是卸载,每次安装时都会询问,如果不想要被询问,则可以加上-y选项 ,-y可以加在下面1,2,3的位置都可以。
yum 1 install 2 包名 3
卸载软件包用yum remove 包名,现在把lrzsz给卸载掉,命令如下。

[root@server2 ~]# yum remove lrzsz -y
正在更新 Subscription Management 软件仓库。
    ...输出...
已移除:
  lrzsz-0.12.20-55.el9.x86_64                                                                 

完毕!
[root@server2 ~]#

这样就把lrzsz删除掉了。

[root@server2 ~]# rpm -qa | grep lrzsz
[root@server2 ~]#

如果要更新系统中某个软件包,则用yum update 包名 -y ,如果要更新系统中所有的软件包则直接使用 yum udpate -y即可。
查询包的信息可以用yum info 包名,命令如下。

[root@server2 ~]# yum info lrzsz
    ...输出...
可安装的软件包
名称         : lrzsz
版本         : 0.12.20
发布         : 55.el9
架构         : x86_64
大小         : 86 k
源           : lrzsz-0.12.20-55.el9.src.rpm
仓库         : bb
概况         : The lrz and lsz modem communications programs
    ...输出...
[root@server2 ~]# 

这里可以看到,关于lrzsz的相关信息。

23.5.3 下载

使用yum安装软件包时,先把要安装的软件包及所依赖的包都下载到本地缓存中,然后再一起安装。如果只想把这些包下载下来并不安装,可以使用--downloadonly和--downloaddir=/dir选项,其中--downloadonly只让yum把软件包下载下来并不执行安装操作,下载到哪个目录由--downloaddir来指定。
现在想把httpd及依赖的包全部下载到/xx目录,首先创建/xx目录,命令如下。

[root@server2 ~]# mkdir /xx
[root@server2 ~]#

然后开始下载指定的包,命令如下。

[root@server2 ~]# yum install httpd -y --downloadonly --downloaddir=/xx
正在更新 Subscription Management 软件仓库。
    ...输出...

(9/10): mod_lua-2.4.51-7.el9_0.x86_64.rpm    4.8 MB/s |  63 kB    00:00    
(10/10): httpd-2.4.51-7.el9_0.x86_64.rpm     35 MB/s | 1.5 MB     00:00    
-------------------------------------------------
总计                                        20 MB/s | 2.0 MB     00:00     
完毕!
下载的软件包保存在缓存中,直到下次成功执行事务。
您可以通过执行 'yum clean packages' 删除软件包缓存。
[root@server2 ~]#

查看一下/xx的内容,命令如下。

[root@server2 ~]# ls /xx
apr-1.7.0-11.el9.x86_64.rpm                 httpd-filesystem-2.4.51-7.el9_0.noarch.rpm
    ...输出...
redhat-logos-httpd-90.4-1.el9.noarch.rpm
[root@server2 ~]#

可以看到,已经把httpd和它依赖的所有包全部下载下来了。

23.5.4 查询缺失命令

有时想执行某个命令时却发现系统中并没有此命令,如下所示。

[root@server2 ~]# smbclient -L //192.168.26.1
bash: smbclient: command not found...
Install package 'samba-client' to provide command 'smbclient'? [N/y] 这里输入n并按【Enter】键
[root@server2 ~]#

这里会检测到文件smbclient是由安装包samba-client安装出来,会询问要不要安装它,如果不安装则输入n按【Enter】键,这里并没有让他自动安装。
没有这个命令肯定是因为某个包没有装的缘故,那么我怎么知道这个命令是哪个包安装出来的呢?可以用yum whatprovides /smbclient 来进行查询,意思就是往yum源中大吼一嗓子:谁能提供smbclient这个文件?
这里的
/的意思是路径的通配符,即不管smbclient在哪个目录下,命令如下。

[root@server2 ~]# yum whatprovides */smbclient
正在更新 Subscription Management 软件仓库。
    ...输出...
samba-client-4.15.5-105.el9_0.x86_64 : Samba client programs
仓库        :bb
匹配来源:
文件名    :/usr/bin/smbclient

[root@server ~]#

因为可执行命令一般放在/bin或/usr/bin下,所以可以判断出来要安装的软件包是samba-client-4.13.3-3.el8.x86_64,我们现在使用yum install samba-client -y把它安装上去之后,然后再次执行smbclient命令,命令如下。

[root@server2 ~]# smbclient -L //192.168.26.1
Enter SAMBA\root's password: 【Ctrl+C】组合键
[root@server2 ~]#

现在是已经可以执行的了,按【Ctrl+C】组合键终止此命令。

23.6 组的使用

前面安装软件包时都是一个个安装的,假设现在想在服务器上实现某个“功能”,这个“功能”需要很多个包,但是不清楚需要安装哪些包,怎么办?可以利用yum中的group的功能,可以用yum grouplist查询系统中一共有多少组,命令如下。

[root@server2 ~]# yum grouplist
    ...输出...
可用环境组:
   服务器
   最小安装*96+-+-
    ...输出...
   智能卡支持
   系统工具
[root@server2 ~]#

这里显示可用的组,是系统没有安装或组中的包没有装全,已安装组说明这个组是已经安装过的。如果要查看某个组的信息可以用yum groupinfo 组名即可,例如,现在要查看虚拟化主机这个组的信息,命令如下。

[root@server2 ~]# yum groupinfo 虚拟化主机 
    ...输出...
环境组:虚拟化主机
 描述:最小虚拟化主机。
 必选软件包组:
   Base
   Core
   Standard
   Virtualization Hypervisor
   Virtualization Tools
 可选软件包组:
   Debugging Tools
   Network File System Client
   Remote Management for Linux
   Virtualization Platform
[root@server2 ~]# 

可以用yum groupinstall 组名来安装某个组,例如,要安装虚拟化功能,就把"虚拟化主机"这个组安装上去,命令如下。

[root@server2 ~]# yum groupinstall 虚拟化主机  -y
    ...输出...
  virtio-win-1.9.25-2.el9_0.noarch                                                   
  virtiofsd-1.1.0-4.el9_0.x86_64       

完毕!
[root@server2 ~]# 

这样就把需要的组安装完成了,如果卸载用yum groupremove 组名即可。

23.7 使用第三方yum源

对于server2来说,现在通过ftp访问server上光盘中的包。但是有许多的包在光盘中并没有,例如,要安装vim-ansible,命令如下。

[root@server2 ~]# yum list vim-ansible
正在更新 Subscription Management 软件仓库。
    ...输出...
错误:没有匹配的软件包可以列出
[root@server2 ~]#

可以看到,光盘中并没有ansible这个包,所以此时要使用第三方的yum源。对于centos或rhel来说,最常用的源就是epel了,下面演示如何给server2添加epel源。
方法1:下载epel安装包
这里可以自己安装epel的包,从如下链接
https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
然后安装之后会在/etc/yum.repos.d下生成一些以epel开头的repo文件。
这些文件里所使用源的地址是mirrors.fedoraproject.org,从国内下载的速度比较慢。本练习并没有使用此方法来做。
方法2:自己定义repo文件
本节实验使用的是方法2来做的。国内一些大厂都提供了epel的中国镜像,这里以华为云的仓库地址。
在/etc/yum.repos.d/bb.repo文件,如下所示。

[root@server2 ~]# cat /etc/yum.repos.d/bb.repo
[epel]
name=epel
baseurl=https://repo.huaweicloud.com/epel/9/Everything/x86_64/
enabled=1
gpgcheck=0
[root@server2 ~]#

把这些epel开头的repo文件中的地址换成阿里云的地址,命令如下。
这样server2就可以使用epel的源了。

下面再次执行yum list ansible,命令如下。

[root@server2 ~]# yum list vim-ansible
正在更新 Subscription Management 软件仓库。
    ...输出...
可安装的软件包
vim-ansible.noarch                                    3.2-1.el9                                     epel
[root@server2 ~]#

可以看到,此时server2所使用的源中已经有了vim-ansible这个包了。

作业:

作业1:请列出server2上现在正在使用的yum源是哪些。
答案:
执行命令yum repolist可以查看到当前正在使用的yum源,结果如下。

[root@server2 ~]# yum repolist
    ...输出...
仓库标识              仓库名称
aa                    appstream
bb                    baseos
epel                  epel
[root@server2 ~]#

作业2:假设系统中没有ifconfig命令,请找出安装哪个软件包能生成ifconfig命令。
答案:
执行命令yum whatprovides */ifconfig结果如下。

[root@server2 ~]# yum whatprovides */ifconfig
    ...输出...
net-tools-2.0-0.62.20160912git.el9.x86_64 : Basic networking tools
仓库        :@System
匹配来源:
文件名    :/usr/sbin/ifconfig

net-tools-2.0-0.62.20160912git.el9.x86_64 : Basic networking tools
仓库        :bb
匹配来源:
文件名    :/usr/sbin/ifconfig

[root@server2 ~]#

由此能判断出来安装软件包net-tools可以生成命令ifconfig。

作业3:在虚拟机里安装的rhel9,虚拟机里的桌面有时不能自适应窗口,解决此问题的方式只要安装软件包xorg-x11-drv-vmware然后重启系统即可,请判断在server2上软件包xorg-x11-drv-vmware是否已经安装过了。
答案
执行yum list xorg-x11-drv-vmware,结果如果显示“可安装”说明还没有安装,如果显示“已安装”说明已经安装过了,命令如下。

[root@server2 ~]# yum list xorg-x11-drv-vmware
    ...输出...
已安装的软件包
xorg-x11-drv-vmware.x86_64       13.2.1-18.el9                   @AppStream
[root@server2 ~]# 

这里显示“已安装”说明软件包已经安装过了。如果没有安装的话,则执行命令yum install xorg-x11-drv-vmware -y安装即可。

相关新闻

发表回复

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

                                                                                                                                    RHCE9学习指南连载,点击阅读