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工具。
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包分组信息
- primary.xml.gz
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