yum/dnf工具

1、yum/dnf工具简介

yum工具(yellowdog update manager)基于RPM进行开发。最大的优势就是能够解决rpm包的依赖问题;yum能够自动解决软件安装时的依赖关系。有优势就有劣势;yum工具也有缺点,如果在未完成安装的情况下强行中止安装过程,下次再安装时将无法解决依赖关系;dnf工具可以解决此问题。

dnf工具是Redhat8和Centos8上用来代替yum的一个工具,其存在的意义就是处理yum的缺陷,其用法与yum是完全一样的,甚至连选项都是一样的,你可以理解为dnf就是yum,只是换了个名字而已。

2、yum/dnf的工作原理

yum工具除了能够解决软件安装时的依赖关系以外,还提供了一个仓库的功能。

yum仓库也叫yum源,类似安卓系统的软件商店;Linux系统配置了yum仓库之后就可以直接从仓库获取rpm包,就不需要去单独下载;yum的工作需要两部分来合作,一部分是yum服务器端,另一部分就是客户端的yum工具。

yum.jpg

3、yum/dnf工具包含的文件

3.1 yum/dnf元数据(服务端)

  • 存放位置(服务器端repodata目录)
  • 包含的文件及其对应的功能
    • primary.xml.gz
      • 当前仓库所有rpm包的列表;
      • 依赖关系;
      • 每个rpm包安装生成的文件列表
    • filelists.xml.gz
      • 当前仓库所有rpm包的所有文件列表
    • other.xml.gz
      • 额外信息,rpm包的修改日志
    • repomd.xml
      • 记录的是primary.xml.gz、filelists.xml.gz、other.xml.gz这三个文件的时间戳和校验和
    • comps*.xml
      • rpm包分组信息

3.2 yum/dnf的配置文件(客户端)

yum/dnf的配置文件有哪些:

  • /etc/yum.conf 或 /etc/dnf.conf 作用:为所有仓库提供公共配置
  • /etc/yum.repos.d/*.repo 作用:为仓库的指向提供配置

4、yum/dnf仓库管理

yum/dnf仓库也叫yum/dnf源,类似安卓系统的软件商店;Linux系统配置了yum/dnf仓库之后就可以直接从仓库获取rpm包,就不需要去单独下载。

4.1 yum/dnf本地仓库配置

  • 配置本地仓库首先我们要有rpm包和仓库的元数据,而Linux的ISO镜像中自带rpm包和元数据,所以我们需要先挂载ISO镜像。
#挂载光盘镜像,临时挂载
[root@hzz ~]# mkdir /mnt/cdrom
[root@hzz ~]# mount /dev/sr0 /mnt/cdrom/
mount: /dev/sr0 写保护,将以只读方式挂载

#永久挂载
[root@hzz ~]# echo "/dev/sr0 /mnt/cdrom iso9660 defaults 0 0" >> /etc/fstab
  • 配置本地仓库Redhat/Centos8.0:/etc/yum.repos.d/*.repo
[root@hzz ~]# cd /etc/yum.repos.d/
[root@hzz yum.repos.d]# ls
redhat.repo

#Redhat8.0以后需要配置两个仓库BaseOS和AppStream,7.0只需要配置一个即可。
[root@hzz yum.repos.d]# vim hzz.repo
[BaseOS]
name=BaseOS
baseurl=file:///media/cdrom/BaseOS
gpgcheck=0
enabled=1

[AppStream]
name=AppStream
baseurl=file:///media/cdrom/AppStream
gpgcheck=0
enabled=1

[root@hzz yum.repos.d]# ls
hzz.repo  redhat.repo

#/etc/yum.repos.d/*.repo配置文件内容详解
[Repo_Name]    #仓库标识
name=#仓库名称
baseurl=#仓库的具体路径,接受以下三种类型
    ftp://
    http://
    file://
gpgcheck=#可选值{1|0},1为检查软件包来源合法性,0为不检查来源
    如果gpgcheck设为1,则必须用gpgkey定义密钥文件的具体路径
gpgkey=#密钥路径,若gpgcheck=0,密钥可不写
enabled=#可选值{1|0},1为启用此仓库,0为禁用此仓库
  • 清空本地仓库缓存
[root@hzz ~]# yum clean all
已加载插件:product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
正在清理软件源: hzz
Cleaning up everything
Maybe you want: rm -rf /var/cache/yum, to also free up space taken by orphaned data from disabled or removed repos
  • 缓存元数据
[root@hzz ~]# yum makecache 
已加载插件:fastestmirror
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
base                                                               | 3.6 kB  00:00:00     
epel                                                               | 4.7 kB  00:00:00     
extras                                                             | 2.9 kB  00:00:00     
mysql-connectors-community                                         | 2.6 kB  00:00:00     
mysql-tools-community                                              | 2.6 kB  00:00:00     
mysql57-community                                                  | 2.6 kB  00:00:00     
updates                                                            | 2.9 kB
  • 列出所有可用仓库
[root@hzz ~]# yum repolist
已加载插件:product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
源标识                                           源名称                                        状态
!hzz                                             hzz                                           4,986
repolist: 4,986

4.2 网络仓库配置

网络仓库获取rpm包就直接从开源镜像站获取即可,配置方式和本地仓库基本一致。

开源镜像站地址:
http://mirrors.163.com
http://mirrors.sohu.com
https://mirrors.tuna.tsinghua.edu.cn
http://mirrors.aliyun.com

  • 配置网络yum仓库
#配置网络yum仓库:/etc/yum.repos.d/*.repo
[root@hzz yum.repos.d]# vim hzz.repo
[BaseOS]
name=BaseOS
baseurl=https://mirrors.aliyun.com/centos/8/BaseOS/x86_64/os/
gpgcheck=0
enabled=1

[AppStream]
name=AppStream
baseurl=https://mirrors.aliyun.com/centos/8/AppStream/x86_64/os/
gpgcheck=0
enabled=1
  • 部分开源镜像站提供了repo配置文件,我们可以直接下载使用
#阿里云直接提供了centos的repo配置文件,直接复制下面命令即可。
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo
  • EPEL的方式配置网络yum仓库,通过安装rpm包配置网络仓库
#这里下载的是阿里云centos8的EPEL包,安装之后8.0系统即可使用网络仓库。
[root@hzz ~]# wget https://mirrors.aliyun.com/centos/8/BaseOS/x86_64/os/Packages/centos-linux-release-8.3-1.2011.el8.noarch.rpm

[root@hzz ~]# ls
anaconda-ks.cfg  centos-linux-release-8.3-1.2011.el8.noarch.rpm

[root@hzz ~]# rpm -ivh centos-linux-release-8.3-1.2011.el8.noarch.rpm
警告:epel-release-7-11.noarch.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:epel-release-7-11                ################################# [100%]

5、yum/dnf管理软件

5.1 yum/dnf命令

语法: yum/dnf [options] [command] [package ...]

#常用的选项
-y                            #自动回答为"yes"
-q                            #静默模式,安装时不输出信息至标准输出
--nogpgcheck                  #使用当gpgcheck=1时会使用gpgkey验证包的来源合法性,此时可以使用此命令跳过检查
--disablerepo=repoidglob      #临时禁用此处指定的repo
--enablerepo=repoidglob       #临时启用此处指定的repo
--noplugins                   #禁用所有插件

#常用的command
list          		        #列出所有的包
    all        		        #默认项
    available 		        #列出仓库中有的,但尚未安装的所有可用的包
    installed  		        #列出已经安装的包
    updates    		        #可用的升级
    
clean                       #清理缓存
    all                     #清除所有缓存
    packages                #清除包缓存
    headers                 #清除头部缓存
    metadata                #清除元数据缓存
    dbcache                 #清除数据库缓存

repolist                    #显示repo列表及其简要信息
    all                     #列出所有仓库
    enabled                 #默认项,列出开启的仓库
    disabled                #列出关闭的仓库
    
install                     #安装,可以一次安装多个包
    yum install packages [...]

remove                      #卸载,可以一次卸载多个包

provides command            #查看指定命令是由哪个包安装生成的

grouplist                   #列出可用的组

groupinstall "group name"   #安装一组软件

localinstall                #安装本地rpm包,自动解决依赖关系

info                        #查看包的信息,显示rpm -qi package的结果
    yum info packages

update                      #升级
    yum update packages [...]
update_to                   #升级为指定版本

downgrade package1 package2 #将package1降级为package2

search string               #以指定的关键字搜索程序包名以及概要信息

deplist package             #显示指定包的依赖关系

history                     #查看yum的历史事务信息

5.2 yum命令使用实例

列出软件包

#列出软件仓库中可用的软件
[root@hzz ~]# yum list all

#进行模糊查找
[root@hzz ~]# yum list all | grep "ftp"

安装软件包

#安装仓库内的软件,只需要给出软件名称
[root@hzz ~]# yum install vsftpd

#安装过程中分析依赖关系后, 直接安装
[root@hzz ~]# yum -y install httpd

#安装本地的rpm包, 如果有依赖关系, 会自动从软件仓库中下载所需依赖
[root@hzz ~]# yum -y localinstall /mnt/cdrom/Packages/httpd-2.4.6-67.el7.x86_64.rpm 

#安装网络上rpm包
[root@localhost ~]# yum install https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/vsftpd-3.0.2-25.el7.x86_64.rpm

与缓存相关的命令

#缓存仓库的元数据文件
[root@hzz ~]# yum makecache

#缓存rpm包
#1.安装yum插件,实现只下载软件包不安装
[root@hzz ~]# yum -y install --downloadonly yum-plugin
#2.将软件下载至指定目录
[root@hzz ~]# yum -y install --downloadonly --downloaddir=/tmp httpd

#清除所有yum缓存
[root@hzz ~]# yum clean all

与软件包组相关的命令

#列出已经安装和所有可使用的软件包组
[root@hzz ~]# yum grouplist

#安装一整个组的软件包
[root@hzz ~]# yum -y groupinstall 'Server with GUI'

#yum删除已安装的某个组的软件
[root@localhost ~]# yum -y groupremove 'Server with GUI'

5.3 YUM签名检查机制

RPM软件包管理器的提供组织Redhat在构建rpm包时, 使用其私钥private key对rpm包进行签名。
客户端在安装rpm包时为了验证其合法性, 可以使用Redhat提供的公钥public key进行签名检查。

方式1:在仓库中指定公钥位置

[root@hzz ~]# vim /etc/yum.repos.d/CentOS-Base.repo
[base]
name=Redhat-$releasever - Base
baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY--redhat-release
enabled=1

方式2:不进行签名验证

#不检查软件包的签名
[root@localhost ~]# yum install httpd --nogpgcheck