Linux—yum/dnf工具
Linux yum/dnf工具
1、rpm的弊端
当用rpm安装软件时,若遇到有依赖关系的软件,必须先安装依赖的软件才能继续安装我们要安装的软件,当依赖关系很复杂的情况下,这种安装方式就很让人头疼,所以我们需要另一种安装方式来解决这个问题,今天我们要来学习的就是这样一个工具--yum
2、yum/dnf工具简介
yum工具(yellowdog update manager)基于RPM进行开发。最大的优势就是能够解决rpm包的依赖问题;yum能够自动解决软件安装时的依赖关系。有优势就有劣势;yum工具也有缺点,如果在未完成安装的情况下强行中止安装过程,下次再安装时将无法解决依赖关系;dnf工具可以解决此问题。
dnf工具是Redhat8和Centos8上用来代替yum的一个工具,其存在的意义就是处理yum的缺陷,其用法与yum是完全一样的,甚至连选项都是一样的,你可以理解为dnf就是yum,只是换了个名字而已。
3、yum/dnf的工作原理
yum工具除了能够解决软件安装时的依赖关系以外,还提供了一个仓库的功能。
yum仓库也叫yum源,类似安卓系统的软件商店;Linux系统配置了yum仓库之后就可以直接从仓库获取rpm包,就不需要去单独下载;yum的工作需要两部分来合作,一部分是yum服务器端,另一部分就是客户端的yum工具。
4、yum/dnf工具包含的文件
4.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
4.2 yum/dnf的配置文件(客户端)
-
yum/dnf的配置文件有哪些:
-
/etc/yum.conf 或 /etc/dnf.conf 作用:为所有仓库提供公共配置
-
/etc/yum.repos.d/*.repo 作用:为仓库的指向提供配置
-
-
yum的repo配置文件中可用的变量:
- $releaseversion:当前OS的发行版的主版本号
- $arch:平台类型
- $basearch:基础平台
5、yum/dnf仓库管理
yum/dnf仓库也叫yum/dnf源,类似安卓系统的软件商店;Linux系统配置了yum/dnf仓库之后就可以直接从仓库获取rpm包,就不需要去单独下载。
5.1 yum/dnf本地仓库配置
- 配置本地仓库首先我们要有rpm包和仓库的元数据,而Linux的ISO镜像中自带rpm包和元数据,所以我们需要先挂载ISO镜像。
#挂载光盘镜像
[root@zsl ~]# mount /dev/cdrom /mnt/
#验证挂载
[root@zsl ~]# ls /mnt/
AppStream BaseOS EFI images isolinux LICENSE media.repo TRANS.TBL
- 配置本地仓库Redhat/Centos8.0:/etc/yum.repos.d/*.repo
#把以*.repo的文件移动到yum目录下
[root@zsl yum.repos.d]# mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/yum/
#Redhat8.0以后需要配置两个仓库BaseOS和AppStream,7.0只需要配置一个即可。
[root@zsl yum.repos.d]# vim zsl.repo
[AppStream]
name=AppStream
baseurl=file:///mnt/AppStream
gpgcheck=0
enabled=1
[BaseOS]
name=BaseOS
baseurl=file:///mnt/BaseOS
gpgcheck=0
enabled=1
# /etc/yum.repos.d/*.repo配置文件内容详解
[Repo_Name]:仓库标识
name:仓库名称
baseurl:仓库的具体路径,接受以下三种类型
ftp://
http://
file://
gpgcheck:可选值{1|0},1为检查软件包来源合法性,0为不检查来源
如果gpgcheck设为1,则必须用gpgkey定义密钥文件的具体路径
gpgkey=/PATH/TO/KEY
enabled:可选值{1|0},1为启用此仓库,0为禁用此仓库
- 清空本地仓库缓存
[root@zsl yum.repos.d]# yum clean all
21 files removed
- 缓存元数据
[root@zsl yum.repos.d]# yum makecache
AppStream 77 MB/s | 6.3 MB 00:00
BaseOS 30 MB/s | 2.4 MB 00:00
Last metadata expiration check: 0:00:01 ago on Wed 13 Jul 2022 03:58:37 PM CST.
Metadata cache created.
- 列出所有可用仓库
[root@zsl yum.repos.d]# yum repolist
repo id repo name
AppStream AppStream
BaseOS BaseOS
5.2 网络仓库配置
开源镜像站地址:
- 官方网络yum仓库(国外)
- 搜狐yum仓库——http://mirrors.sohu.com
- 阿里云yum仓库——http://mirrors.aliyun.com
- 163yum仓库——http://mirrors.163.com
- xx大学yum仓库——https://mirrors.tuna.tsinghua.edu.cn
- epel源——
- 配置网络yum仓库
[root@zsl ~]# cd /etc/yum.repos.d/
[root@zsl yum.repos.d]# vim centos8.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配置文件,我们可以直接下载使用
//阿里云直接提供了centos8的repo配置文件,直接复制下面命令即可。
[root@zsl ~]#wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
[root@zsl ~]# yum clean all
[root@zsl ~]# yum makecache
[root@zsl ~]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
[root@zsl ~]# ls /etc/yum.repos.d/
CentOS-Base.repo yum zsl.repo
6、yum/dnf管理软件
6.1 yum/dnf命令
//yum命令语法
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的历史事务信息
localinstall //安装本地rpm包,自动解决依赖关系
grouplist //列出可用的组
groupinstall "group name" //安装一组软件
6.2yum/dnf命令使用实例
列出软件包
//列出软件仓库中可用的软件
[root@zsl ~]# yum/dnf list all
//进行模糊查找
[root@zsl ~]# yum/dnf list all | grep "ftp"
//列出软件包详情
[root@zsl ~]# yum/dnf info ftp
安装软件包
//安装仓库内的软件,只需要给出软件名称
[root@hzz ~]# yum install vsftpd
//安装过程中分析依赖关系后, 直接安装
[root@hzz ~]# yum -y install httpd
//安装本地的rpm包, 如果有依赖关系, 会自动从软件仓库中下载所需依赖
[root@hzz ~]# yum -y localinstall /mnt/AppStream/Packages/httpd-2.4.6-67.el7.x86_64.rpm
//安装网络上rpm包
[root@localhost ~]#yum install https://mirrors.aliyun.com/centos/8/BaseOS/x86_64/os/Packages/centos-logos-httpd-85.8-2.el8.noarch.rpm?spm=a2c6h.25603864.0.0.6d9c6f19Vu9miW
更新软件包
//对比Linux已安装的软件和yum仓库中的软件, 有哪些需要升级
[root@zsl ~]# yum check-update
//更新软件
[root@zsl ~]# yum update acl -y
删除软件包
//先安装一个samba软件
[root@zsl ~]# yum -y install samba
//删除该软件包,不会删除依赖, 但是我们尽可能不要使用删除软件操作
[root@zsl ~]# yum -y erase samba
[root@zsl ~]# yum -y remove samba
与缓存相关的命令
[root@zsl ~]# yum makecache
//缓存rpm包
//1.安装yum插件,实现只下载软件包不安装
[root@zsl ~]# yum -y install --downloadonly yum-plugin
//2.将软件下载至指定目录
[root@zsl ~]# yum -y install --downloadonly --downloaddir=/tmp httpd
//清除所有yum缓存
[root@zsl ~]# yum clean all
与软件包组相关的命令
//列出已经安装和所有可使用的软件包组
[root@zsl ~]# yum grouplist
//安装一整个组的软件包
[root@zsl ~]# yum -y groupinstall 'Server with GUI'
//yum删除已安装的某个组的软件
[root@zsl ~]# yum -y groupremove 'Server with GUI'
6.3 YUM签名检查机制
- rpm软件提供组织redhat在构建rpm包时, 使用其私钥private key对 rpm进行签名
- 客户端在使用rpm为了验证其合法性, 可以使用redhat提供的公钥public key进行签名检查
方式1:在仓库中指定公钥位置
[root@zsl ~]# 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@zsl ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
[root@zsl ~]# 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
方式3:不进行签名验证
//不检查软件包的签名
[root@zsl ~]# yum install httpd --nogpgcheck