linux软件包管理-yum/dnf

linux的进阶篇

一,rpm的问题与弊端

  • 上一章关于RPM的作用及其功能,并且随之带来的是显而易见的弊端,当使用RPM安装软件时,必须先完成软件依赖包的安装,并且当依赖关系十分复杂的情况下,这种安装方式就很让人头疼,所以我们需要另外一种安装方式来解决这一的问题,也就是我们常用到的yum与dnf。

二,前端工具yum/dnf的优劣

1,存在的问题

  • 如果使用yum安装软件包时,通过Ctrl+c来终止安装,那么在使用yum安装软件包时有可能解决不了依赖包的关系。

2,yum的优势是什么呢

  • 相比较rpm最大的优势就是能解决依赖包,但是弊端是强行终止后,下次安装时就无法解决依赖包的问题。所以我们通常会用到dnf工具来解决此类问题。

3,dhf工具

  • 是redhat 7上用来代替yum的一个工具,其存在的意义就是处理yum的缺陷,但其用法与yum是完全一样的,甚至连选项都是一样的,所以只要学会了yum就自然学会了dnf,所以我们学会了yum就等于会了dnf,并且在我们的redhat8上默认安装了dnf,无需再次安装。

查看的命令:which dnf


三,什么是yum及yum的作用。

1,yum是什么呢

  • **yum是(Yellowdog ypdate manager)俗称黄狗更新管理器,诸如此类的工具还有Tomcat,tom猫,和python 蟒蛇。yum能实现对rpm管理的所有操作,并且能自动解决rpm包之间的依赖关系。yum是rpm的前端工具,是基于rpm来实现软件的管理的一个工具。
    **
  • 你不能用yum去管理windows的exe程序包,也不能用yum去管理ubuntu的deb程序包,只能用yum来管理redhat系列的rpm包
    “yum是rpm的一个延伸”。

四,挂载光盘

  • 插入光盘

执行以下命令进行挂载断开。
在这里插入图片描述


五,yum的原理。

在这里插入图片描述

  • yum又被称为软件仓库,并且分为网络仓库和本地仓库。

1,yum服务器端的工作原理。(rpm软件包仓库)

  • 所有要发行的rpm包都放在yum服务器上以提供别人来下载,rpm包根据kernel的版本号,cpu的版本号分别编译发布。yum服务器只要提供简单的下载就可以了,ftp或者http的形式都可以。yum服务器有一个最重要的环节就是整理出每个rpm包的基本信息,包括rpm包对应的版本号、conf文件、binary信息,以及很关键的依赖信息。在yum服务器上提供了createrepo工具,用于把rpm包的基本概要信息做成一张“清单”,这张“清单”就是描述每个rpm包的spec文件中信息。
    • 清单:元数据。通过查看源里的元数据。源->仓库的意思

2,client端的工作原理(.repo文件产生的cache缓存)

  • client每次调用yum install或者search的时候,都会去解析/etc/yum.repos.d下面所有以.repo结尾的配置文件,这些配置文件指定了yum服务器的地址。yum会定期去更新yum服务器上的rpm包清单,然后把清单下载保存到yum客户端自己的cache里面,根据/etc/yum.conf里配置(默认是/var/cache/yum下面),每次调用yum装包的时候都会去这个cache目录下去找清单,根据清单里的rpm包描述从而来确定安装包的名字、版本号、所需要的依赖包等,然后再去yum服务器下载rpm安装。(前提是不存在rpm包的cache)

六,yum的配置文件

1,配置文件

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

2,yum的repo配置文件中可用的变量

  • $releaseversion:当前OS的发行版的主版本号

    //一定要严格锁死主版本号。

  • $arch:平台类型
  • $basearch:基础平台

3 ,为yum定义的repo文件:(后缀一定为repo,可以自行定义)

  • .repo文件

    [Repo_Name]:仓库名称
    name:描述信息
    baseurl:仓库的具体路径,接受以下三种类型
    ftp://
    http://
    file:///
    enabled:可选值{1|0},1为启用此仓库,0为禁用此仓库
    gpgcheck:可选值{1|0},1为检查软件包来源合法性,0为不检查来源
    "如果gpgcheck设为1,则必须用gpgkey定义密钥文件的具体路径
    gpgkey=/PATH/TO/KEY”

    在这里插入图片描述

4,配置文件

  • vim /etc/yum.conf

    cachedir=/var/cache/yum/ b a s e a r c h / basearch/ basearch/releasever //缓存目录
    keepcache=0 //缓存软件包, 1启动 0 关闭
    debuglevel=2 //调试级别
    logfile=/var/log/yum.log //日志记录位置
    exactarch=1 //检查平台是否兼容
    obsoletes=1 //检查包是否废弃
    gpgcheck=1 //检查来源是否合法,需要有制作者的公钥信息
    plugins=1 //是否启用插件
    tolerant={1|0} //容错功能,1为开启,0为关闭,当设为0时,如果用yum安装多个软件包且其中某个软件包已经安装过就会报错;
    当设为1时,当要安装的软件已经安装时自动忽略

    installonly_limit=5
    bugtracker_url
    # metadata_expire=90m //每小时手动检查元数据
    # in /etc/yum.repos.d //包含repos.d目录


七,yum仓库管理

1,yum本地仓库

  • a,复制光盘内容到yum服务器

    [root@localhost ~]# mkdir /opt/myrepo
    [root@localhost ~]# cp -r /mnt/
    /opt/myrepo/
    [root@localhost ~]# ls /opt/myrepo/
    addons EULA GPL isolinux media.repo repodata RPM-GPG-KEY-redhat-release
    EFI extra_files.json images LiveOS Packages RPM-GPG-KEY-redhat-beta TRANS.TBL
    *

  • b,配置repo文件(仓库核心就是配置文件)

    [root@localhost ~]# ls /etc/yum.repos.d/
    redhat.repo
    [root@localhost ~]# vim /etc/yum.repos.d/myrepo.repo
    [root@localhost ~]# cat /etc/yum.repos.d/myrepo.repo
    [myrepo] //一个源的名称
    name=myrepo
    baseurl=file:///opt/myrepo //源的url查找路径
    gpgcheck=0 开启key的校验为0不开启,为1开启,开启的校验后面需要配置校验密钥的地址。
    enabled=1 开启源仓库的标识,为0表示不启用源仓库,为1表示启用源仓库。
    [root@localhost ~]#

  • c,清空yum本地缓存

    [root@localhost ~]# yum clean all
    Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
    This system is not registered with an entitlement server. You can use subscription-manager to register.
    Cleaning repos: myrepo
    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

  • d,检验yum本地仓库

    [root@localhost ~]# yum list all

    plymouth-core-libs.i686 0.8.9-0.28.20140113.el7 myrepo
    plymouth-graphics-libs.i686 0.8.9-0.28.20140113.el7 myrepo
    policycoreutils-devel.i686 2.5-17.1.el7 myrepo
    policycoreutils-devel.x86_64 2.5-17.1.el7 myrepo
    policycoreutils-gui.x86_64 2.5-17.1.el7 myrepo
    policycoreutils-newrole.x86_64 2.5-17.1.el7 myrepo
    policycoreutils-sandbox.x86_64 2.5-17.1.el7 myrepo
    polkit.i686 0.112-12.el7_3 myrepo
    polkit-devel.i686 0.112-12.el7_3 myrepo

2,yum网络仓库(网络和仓库和本地仓库不建议同时使用)

  • 仓库的来源

    官方的网络仓库,
    阿里云的yum仓库
    163的仓库
    xx大学的yum仓库
    epel的源
    // Base/Extras/Updates: 默认国外官方源
    [root@localhost ~]# wget -o /etc/yum.repos.d/CentOS-Base.repo
    http://mirrors.aliyun.com/repo/Centos-7.repo
    //国外epel源(前提是基础源安装,才能正常使用国外的epel源)
    [root@localhost ~]# yum -y install epel-release
    /阿里云epel源(推荐阿里云的基础源(epel))
    [root@localhost ~]# curl -o /etc/yum.repos.d/epel.repo
    http://mirrors.aliyun.com/repo/epel-7.repo

  • 阿里云的源,直接复制下载地址,然后在shell中通过wget下载。
    在这里插入图片描述

3,软件官方仓库

  • // 源查找方式基本一致,zabbix,mysql,saltstack,openstack等等,上官网找

    [root@localhost ~]# vim /etc/yum.repos.d/nginx.repo
    [nginx]
    name=nginx repo
    baseurl=http://nginx.org/packages/centos/8/$basearch/
    gpgcheck=0
    enabled=1

4,Redhat7使用的yum源

  • //下载base和epel仓库

    [root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    [root@localhost ~]# sed -i ‘s#$releasever#7#g’ /etc/yum.repos.d/CentOS-Base.repo
    [root@localhost ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/re

  • 注释:通过网络仓库下在的源如果是redhat7的版本需要更改$releasever版本为7,否则不可以,在redhat8中可以保持默认。

  • 更改后可以通过dnf clean all清除缓存,

  • 然后通过dnf list all 查看仓库的源码包。

在这里插入图片描述


八,yum管理软件使用方法

1,yum命令语法:

  • yum [options] []command [package。。。](可同时安装多个包)

2,常用的options:

–nogpgcheck //如果从网上下载包有时会检查gpgkey,此时可以使用此命令跳过gpgkey的检查
-y //自动回答为"yes"
-q //静默模式,安装时不输出信息至标准输出
–disablerepo=repoidglob //临时禁用此处指定的repo
–enablerepo=repoidglob //临时启用此处指定的repo
–noplugins //禁用所有插件

3,常用的command命令:

  •   //下载软件包到指定目录,并且不进行安装软件。仅下载:dnf  install --downloadonly --downloaddir=/tmp/ httpd
      	
      	
      	[root@Eryuege ~]# dnf makecache 
      	CentOS-8 - AppStream                                                                       8.0 kB/s | 4.3 kB     00:00    
      	CentOS-8 - Base                                                                            5.7 kB/s | 3.9 kB     00:00    
      	CentOS-8 - Extras                                                                          2.5 kB/s | 1.5 kB     00:00    
      	元数据缓存已建立。
      	通过在下载软件包之前将网络源仓库的缓存列表提前下载下来,后续下载软件包可直接进行安装,
      	缓存文件存放的路径为:/var/cache/dnf/bsaeos*文件
    
  • list 的可选项 //列表显示的内容

    |all //默认项
    available //列出仓库中有的,但尚未安装的所有可用的包
    installed //列出已经安装的包
    updates //可用的升级

  • clean //清理缓存

    packages
    headers
    metadata
    dbcache
    all

  • repolist //显示repo列表及其简要信息

    all
    enabled //默认项
    disabled

  • install //安装

    yum install packages […]

  • update //升级 (升级时默认是升级所有,所以在安装升级时仅仅升级必要的软件包)

    • yum update packages […]
  • update_to //升级为指定版本

      	![在这里插入图片描述](https://img-blog.csdnimg.cn/2020102419572086.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xCSjE5MjI0,size_16,color_FFFFFF,t_70#pic_center)
    
  • downgrade package1 [package2 …] //降级cmd
    (谨慎使用,一般建议通过卸载现有版本,然后安装需要的相应版本包.)

  • remove|erase //卸载
    如:在这里插入图片描述

    • info //显示rpm -qi package的结果 查看包的结果,类似rpm-qi 包名;
      如: yum info packages
  • provides| whatprovides //查看指定的文件或特性是由哪个包安装生成的
    可以根据指定的绝对路径查找文件,也可以通过正则表达式*匹配所有的bin文件下的ls路径。

    [root@Eryuege ~]# dnf provides *bin/ls
    上次元数据过期检查:0:04:11 前,执行于 2020年10月24日 星期六 03时07分45秒。
    coreutils-8.30-6.el8_1.1.x86_64 : A set of basic GNU tools commonly used in shell scripts
    仓库 :@System
    匹配来源:
    提供 : /bin/ls

  • search string1 [string2 …] //以指定的关键字搜索程序包名及summary信息

  • deplist package [package2 …] //显示指定包的依赖关系

  • history //查看yum的历史事务信息

    在这里插入图片描述

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

    在这里插入图片描述

  • grouplist //列出可用的组

  • groupinstall “group name” //安装一组软件(包组软件,通常是一组软件包。)
    dnf -y groups mark install "development tool " 通过中间添加mark命令来标记这个包组是已经安装过的。

    在这里插入图片描述

  • createrepo命令 //创建yum仓库的元数据信息

    [root@localhost ~]# yum install createrepo -y
    [root@localhost ~]# createrepo [options] <directory>在这里插入图片描述

4 具体实例

  • 1 搜索软件包

    //列出软件仓库中可用的软件
    [root@localhost ~]# yum list all
    //进行模糊查找
    [root@localhost ~]# yum list|grep ftp
    //列出软件包详情
    [root@localhost ~]# yum info ftp

    在这里插入图片描述

  • 2 安装软件包

    //安装过程中分析依赖关系后, 直接安装, 无需交互
    [root@localhost ~]# yum -y install php
    //安装本地的rpm包, 如果有依赖关系, 会自动从软件仓库中下载所需依赖(非来自.repo定义的软件仓库)
    [root@localhost ~]# yum localinstall /mnt/Packages/bind-9.9.4-50.el7.x86_64.rpm
    //安装软件只需要给出软件名称
    [root@localhost ~]# yum install traceroute
    //安装网络上rpm包
    [root@localhost ~]# yum install http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm

  • 3 重装软件包

    //检查软件是否存在
    [root@localhost ~]# rpm -q vsftpd
    vsftpd-2.2.2-24.el6.x86_64
    //检查vsftpd软件配置文件
    [root@localhost ~]# rpm -qc vsftpd
    /etc/logrotate.d/vsftpd
    /etc/pam.d/vsftpd
    /etc/vsftpd/ftpusers
    /etc/vsftpd/user_list
    /etc/vsftpd/vsftpd.conf
    //不小心删除vsftpd配置文件
    [root@localhost ~]# rm -f /etc/vsftpd/vsftpd.conf
    //重新安装软件
    [root@localhost ~]# yum reinstall vsftpd
    /再次检查
    [root@localhost ~]# rpm -qc vsftpd
    /etc/logrotate.d/vsftpd
    /etc/pam.d/vsftpd
    /etc/vsftpd/ftpusers
    /etc/vsftpd/user_list
    /etc/vsftpd/vsftpd.conf
    在这里插入图片描述

  • 4 更新软件包

    /对比Linux已安装的软件和yum仓库中的软件, 有哪些需要升级
    [root@localhost ~]# yum check-update
    //更新软件
    [root@localhost ~]# yum update acl -y在这里插入图片描述

  • 5 删除软件包

    //先安装一个samba软件
    [root@localhost ~]# yum -y install samba
    //删除该软件包,不会删除依赖, 但是我们尽可能不要使用删除软件操作
    [root@localhost ~]# yum -y erase samba
    [root@localhost ~]# yum -y remove samba
    在这里插入图片描述

  • 6 与仓库相关的命令

    *//列出yum源可用的软件仓库
    [root@localhost ~]# yum repolist
    //列出全部yum源可用和禁用的仓库
    [root@localhost ~]# yum repolist all
    //查看这个文件或命令属于哪个包
    [root@localhost ~]# yum provides /etc/my.cnf
    [root@localhost ~]# yum provides cd
    [root@localhost ~]# yum provides bin/pstree

    -在这里插入图片描述

  • 7 与缓存相关的命令

    //缓存yum源软件仓库, xml元数据文件
    [root@localhost ~]# yum makecache
    //缓存软件包, 修改yum全局配置文件( 注意不要更改yum的配置文件,通常保持默认即可。)
    [root@localhost ~]# vim /etc/yum.conf
    [main]
    cachedir=/var/cache/yum/ b a s e a r c h / basearch/ basearch/releasever
    keepcache=1 //启动缓存
    //查看缓存的xml文件
    [root@localhost ~]# ls /var/cache/yum/x86_64/7/base/
    //查看缓存软件包路径
    [root@localhost ~]# ls /var/cache/yum/x86_64/7/
    #另一种缓存rpm包方式
    //1.安装插件支持只下载软件包不安装
    [root@localhost ~]# yum -y install yum-plugin-downloadonly
    //2.将软件下载至指定目录
    [root@localhost ~]# yum -y install --downloadonly --downloaddir=/tmp httpd
    //清除所有yum缓存
    [root@localhost ~]# yum clean all
    //只清除缓存的软件包
    [root@localhost ~]# yum clean packages

    在这里插入图片描述

  • 8 与包组相关的命令

    //列出已经安装和所有可使用的软件组
    [root@localhost ~]# yum groups list
    //安装一整个组的软件
    [root@localhost ~]# yum groups install Development tools
    Compatibility libraries
    Base Debugging Tools
    //yum删除包组
    [root@localhost ~]# yum groups remove -y Base

    在这里插入图片描述

  • 9 与历史记录相关的命令

    //查看历史执行yum命令
    [root@localhost ~]# yum history
    //查询历史执行yum命令ID详细信息
    [root@localhost ~]# yum history info N
    //撤销历史执行过的yum命令
    [root@localhost ~]# yum history undo N

    在这里插入图片描述

  • 10 YUM签名检查机制

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

    • 方式1:指定公钥位置

      [root@localhost ~]# vim /etc/yum.repos.d/CentOS-Base.repo
      [base]
      name=CentOS- r e l e a s e v e r − B a s e m i r r o r l i s t = h t t p : / / m i r r o r l i s t . c e n t o s . o r g / ? r e l e a s e = releasever - Base mirrorlist=http://mirrorlist.centos.org/?release= releaseverBasemirrorlist=http://mirrorlist.centos.org/?release=releasever&arch=KaTeX parse error: Expected 'EOF', got '&' at position 9: basearch&̲repo=os&infra=infra #baseurl=http://mirror.centos.org/centos/ r e l e a s e v e r / o s / releasever/os/ releasever/os/basearch/
      gpgcheck=1
      gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

    • 方式2:提前导入公钥

      [root@localhost ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
      [root@localhost ~]# vim /etc/yum.repos.d/CentOS-Base.repo
      [base]
      name=CentOS- r e l e a s e v e r − B a s e m i r r o r l i s t = h t t p : / / m i r r o r l i s t . c e n t o s . o r g / ? r e l e a s e = releasever - Base mirrorlist=http://mirrorlist.centos.org/?release= releaseverBasemirrorlist=http://mirrorlist.centos.org/?release=releasever&arch=KaTeX parse error: Expected 'EOF', got '&' at position 9: basearch&̲repo=os&infra=infra
      baseurl=http://mirror.centos.org/centos/ r e l e a s e v e r / o s / releasever/os/ releasever/os/basearch/
      gpgcheck=1

    • 方式3:不进行签名验证

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

  • 11,yum常用的命令:
    Install
    Remove
    List all |grep wget
    Provides *bin/xx

5,操作小结

  • 如何配置本地光盘yum仓库以及网络yum仓库

    • 本地光盘仓库:在这里插入图片描述

    网络仓库:
    第一步:wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo//获取阿里云的yum仓库
    第二步:sed -i -e ‘/mirrors.cloud.aliyuncs.com/d’ -e ‘/mirrors.aliyuncs.com/d’ /etc/yum.repos.d/CentOS-Base.repo//取消获取关于云服务器的yum仓库资源清单
    第三步:yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm//使用一个国外的epel源。

  • 如何使用yum安装 httpd php nginx

    通过命令yum -y install httpd/php/nginx

  • 如何配置yum缓存rpm包(至少阐述两种方式)
    第一种在这里插入图片描述

    第二种:在vim /etc/yum.repos.d/CentOS-Base.repo文件中添加一行,如下图
    在这里插入图片描述

  • 如何使用yum安装本地缓存好的rpm包

    通过命令:dnf -y localinstall vsftpd 本地的软件包文件。在这里插入图片描述

  • 如何使用yum删除httpd软件包

    yum -y remove httpd

  • 如何构建企业内部yum仓库服务(请写出详细步骤,至少准备两台虚拟机,使用http方式)

猜你喜欢

转载自blog.csdn.net/LBJ19224/article/details/109264127