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包分组信息

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 网络仓库配置

开源镜像站地址:

  1. 官方网络yum仓库(国外)
  2. 搜狐yum仓库——http://mirrors.sohu.com
  3. 阿里云yum仓库——http://mirrors.aliyun.com
  4. 163yum仓库——http://mirrors.163.com
  5. xx大学yum仓库——https://mirrors.tuna.tsinghua.edu.cn
  6. 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
posted @ 2024-01-02 15:53  赵九思  阅读(64)  评论(0编辑  收藏  举报