rpm的弊端


前面我们讲了下rpm,那么rpm有什么弊端呢?其弊端是显而易见的,当用rpm安装软件时,若遇到有依赖关系的软件,必须先安装依赖的软件才能继续安装我们要安装的软件,当依赖关系很复杂的情况下,这种安装方式就很让人头疼,所以我们需要另一种安装方式来解决这个问题,今天我们要来学习的就是这样一个工具—yum

yum的优劣势


yum有什么优势呢?
yum最大的优势就是能够解决rpm的依赖问题,yum能够自动解决软件安装时的依赖关系。
当然了,有优势就有劣势,人无完人嘛,软件也是一样的,
yum的缺陷
就是如果在未完成安装的情况下强行中止安装过程,下次再安装时将无法解决依赖关系,Fedora22+、redhat7和centos7等可以通过手动安装dnf工具来解决此问题。
dnf是redhat7上用来代替yum的一个工具
其存在的意义就是处理yum的缺陷,但其用法与yum是完全一样的,甚至连选项都是一样的,你可以理解为dnf就是yum,只是换了个名字而已。
所以说只要学会了yum就自然会dnf,大家不用担心学了yum又要去学dnf之类的问题

什么是yum及其作用


那么什么是yum呢?(黄狗更新管理器)
yum是yellowdog update manager的简称,它能够实现rpm管理的所有操作,并能够自动解决各rpm包之间的依赖关系。yum是rpm的前端工具,是基于rpm来实现软件的管理的一个工具。
你不能用yum去管理windows的exe程序包,也不能用yum去管理ubuntu的deb程序包,只能用yum来管理redhat系列的rpm包

挂载光盘


  • 插入光盘
  • 执行以下命令
    1. [root@Gin-Kin ~]# mount /dev/cdrom /mnt
    2. mount: /dev/sr0 is write-protected, mounting read-only
    3. [root@Gin-Kin ~]# ls /mnt/
    4. addons EULA GPL isolinux media.repo repodata RPM-GPG-KEY-redhat-release
    5. EFI extra_files.json images LiveOS Packages RPM-GPG-KEY-redhat-beta TRANS.TBL
    6. [root@Gin-Kin ~]#

    yum的原理


image.png
yum的工作需要两部分来合作,一部分是yum服务器,另一部分就是client的yum工具。下面分别介绍两部分工作原理。
yum服务器端工作原理
所有要发行的rpm包都放在yum服务器上以提供别人来下载,rpm包根据kernel的版本号,cpu的版本号分别编译发布。
yum服务器只要提供简单的下载就可以了,ftp或者http的形式都可以。
yum服务器有一个最重要的环节就是整理出每个rpm包的基本信息,包括rpm包对应的版本号、conf文件、binary信息,以及很关键的依赖信息。
在yum服务器上提供了createrepo工具,用于把rpm包的基本概要信息做成一张“清单”,这张“清单”就是描述每个rpm包的spec文件中信息。
client端工作原理
client每次调用yum install或者search的时候,都会去解析/etc/yum.repos.d下面所有以.repo结尾的配置文件,这些配置文件指定了yum服务器的地址。
yum会定期去更新yum服务器上的rpm包清单,然后把清单下载保存到yum客户端自己的cache里面,根据/etc/yum.conf里配置(默认是/var/cache/dnf下面),每次调用yum装包的时候都会去这个cache目录下去找清单,根据清单里的rpm包描述从而来确定安装包的名字、版本号、所需要的依赖包等,然后再去yum服务器下载rpm安装。(前提是不存在rpm包的cache)

yum的配置文件


  • 配置文件有哪些:
    • /etc/yum.conf 作用:为所有仓库提供公共配置
    • /etc/yum.repos.d/*.repo 作用:为仓库的指向提供配置
  • yum的repo配置文件中可用的变量:
    • $releaseversion:当前OS的发行版的主版本号
    • $arch:平台类型
    • $basearch:基础平台

为yum定义repo文件:

  1. [Repo_Name]:仓库名称
  2. name:描述信息
  3. baseurl:仓库的具体路径,接受以下三种类型
  4. ftp://
  5. http://
  6. file:///
  7. enabled:可选值{10},1为启用此仓库,0为禁用此仓库
  8. gpgcheck:可选值{10},1为检查软件包来源合法性,0为不检查来源
  9. 如果gpgcheck设为1,则必须用gpgkey定义密钥文件的具体路径
  10. gpgkey=/PATH/TO/KEY
  1. //最好不要做更改
  2. vim /etc/yum.conf
  3. cachedir=/var/cache/yum/$basearch/$releasever //缓存目录
  4. keepcache=0 //缓存软件包, 1启动 0 关闭
  5. debuglevel=2 //调试级别
  6. logfile=/var/log/yum.log //日志记录位置
  7. exactarch=1 //检查平台是否兼容
  8. obsoletes=1 //检查包是否废弃
  9. gpgcheck=1 //检查来源是否合法,需要有制作者的公钥信息
  10. plugins=1 //是否启用插件
  11. tolerant={1|0} //容错功能,1为开启,0为关闭,当设为0时,如果用yum安装多个软件包且其中某个软件包已经安装过就会报错;当设为1时,当要安装的软件已经安装时自动忽略
  12. installonly_limit=5
  13. bugtracker_url
  14. # metadata_expire=90m //每小时手动检查元数据
  15. # in /etc/yum.repos.d //包含repos.d目录

yum仓库管理


yum本地仓库

  • 挂载光盘参照本章第4部分内容
  • 复制光盘内容到yum服务器

    1. [root@localhost ~]# mkdir /opt/myrepo
    2. [root@localhost ~]# cp -r /mnt/* /opt/myrepo/
    3. [root@localhost ~]# ls /opt/myrepo/
    4. addons EULA GPL isolinux media.repo repodata RPM-GPG-KEY-redhat-release
    5. EFI extra_files.json images LiveOS Packages RPM-GPG-KEY-redhat-beta TRANS.TBL
  • 配置repo文件

    1. [root@localhost ~]# ls /etc/yum.repos.d/
    2. redhat.repo
    3. [root@localhost ~]# vim /etc/yum.repos.d/myrepo.repo
    4. [root@localhost ~]# cat /etc/yum.repos.d/myrepo.repo
    5. [myrepo]
    6. name=myrepo
    7. baseurl=file:///opt/myrepo
    8. gpgcheck=0
    9. enabled=1
    10. [root@localhost ~]#
  • 清空yum本地缓存

    1. [root@localhost ~]# yum clean all
    2. Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
    3. This system is not registered with an entitlement server. You can use subscription-manager to register.
    4. Cleaning repos: myrepo
    5. Cleaning up everything
    6. Maybe you want: rm -rf /var/cache/yum, to also free up space taken by orphaned data from disabled or removed repos
  • 检验yum本地仓库

    1. [root@localhost ~]# yum list all
    2. ......
    3. plymouth-core-libs.i686 0.8.9-0.28.20140113.el7 myrepo
    4. plymouth-graphics-libs.i686 0.8.9-0.28.20140113.el7 myrepo
    5. policycoreutils-devel.i686 2.5-17.1.el7 myrepo
    6. policycoreutils-devel.x86_64 2.5-17.1.el7 myrepo
    7. policycoreutils-gui.x86_64 2.5-17.1.el7 myrepo
    8. policycoreutils-newrole.x86_64 2.5-17.1.el7 myrepo
    9. policycoreutils-sandbox.x86_64 2.5-17.1.el7 myrepo
    10. polkit.i686 0.112-12.el7_3 myrepo
    11. polkit-devel.i686 0.112-12.el7_3 myrepo
    12. polkit-devel.x86_64 0.112-12.el7_3 myrepo
    13. polkit-docs.noarch 0.112-12.el7_3 myrepo
    14. polkit-kde.x86_64 0.99.1-4.20130311git.el7 myrepo
    15. polkit-qt.i686 0.103.0-10.el7_0 myrepo
    16. polkit-qt.x86_64 0.103.0-10.el7_0 myrepo
    17. poppler.i686 0.26.5-16.el7 myrepo
    18. poppler-glib.i686 0.26.5-16.el7 myrepo
    19. poppler-qt.i686 0.26.5-16.el7 myrepo
    20. poppler-qt.x86_64 0.26.5-16.el7 myrepo
    21. popt.i686 1.13-16.el7 myrepo
    22. popt-devel.i686 1.13-16.el7 myrepo
    23. ......

    yum网络仓库


  • 官方网络yum仓库(国外)
  • 阿里云yum仓库
  • 163yum仓库
  • xx大学yum仓库
  • epel源 ```python // Base/Extras/Updates: 默认国外官方源 [root@localhost ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo \ http://mirrors.aliyun.com/repo/Centos-7.repo

//国外epel源 [root@localhost ~]# yum -y install epel-release

//阿里云epel源 [root@localhost ~]# curl -o /etc/yum.repos.d/epel.repo \ http://mirrors.aliyun.com/repo/epel-7.repo

  1. <a name="ZdCis"></a>
  2. ### 软件官方仓库
  3. ```python
  4. // 源查找方式基本一致,zabbix,mysql,saltstack,openstack等等,上官网找
  5. [root@localhost ~]# vim /etc/yum.repos.d/nginx.repo
  6. [nginx]
  7. name=nginx repo
  8. baseurl=http://nginx.org/packages/centos/7/$basearch/
  9. gpgcheck=0
  10. enabled=1

redhat7使用centos7的yum源

  1. //下载baseepel仓库
  2. [root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  3. [root@localhost ~]# sed -i 's#\$releasever#7#g' /etc/yum.repos.d/CentOS-Base.repo
  4. [root@localhost ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo