在企业中,除过DMZ堡垒机之外,大部分服务器都是无法访问外网的,这就出现一个问题,如果我们要对服务器中某软件进行升级怎么办?拿到我们要把软件下载下来放进U盘,在跑到机房去,一个个升级?这显然是不科学。第一,不具有时效性,第二,浪费了时间成本,当然还有其他原因,这里就不一一列举。
       因此,为了避免上述问题的存在,我们一般都会在局域网中配置自己的 yum 仓库。下面我们就来介绍下 yum 仓库的配置方法。

一、YUM 源是什么?

       所谓 YUM 源,其实它就是一个目录项,它是为了解决 Linux 中的依赖关系而存在的。当我们使用 yum 来安装安装软件的时候,如果该软件又需要的依赖软件,则 yum 机制会根据在 YUM 源中定义好的路径查找依赖软件,并自动将依赖软件安装。

二、YUM 的工作原理

       服务器端:我们在服务器端存放了大量的 RPM 软件包,然后以相关的功能去分析每个 RPM 包的依赖关系,并将这些数据记录成文件存放在服务器的某个特定的目录中。

       客户端:如果我们需要安装某个软件时,会先下载服务器上面记录的依赖性关系文件,通过 对服务器端下载的记录数据进行分析,然后取得所有相关软件,一次性全部下载下来进行安装。

三、YUM 源配置文件解析

       1、XXX.repo文件

       [Centos]                      #yum 仓库名称,独一无二的
       name=CentOS-$releasever - Media                       #yum 仓库的描述,支持$releaseve    $basearch这样的变量,如 name= Centos Core $releasever - $basearch - Released Updates
       baseurl=ftp://media/CentOS/                                #baseurl 是 yum 源中最重要部分,它支持三个协议的格式,分别为:http://、ftp://、file:///,后面可以跟多个url,但是只能有一个 baseurl
                     http://media/cdrom/
                     file:///media/cdrecorder/
       mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch         #指定一个镜像服务器的地址列表,通常是开启的,我们可以将$releasever、$basearch替换成自己对应的版本和架构
       gpgcheck=1                                   #是否开启校验,默认为1,设置为 0 是,表示不开启校验

       enabled=1                                      #是否启用此 yum 源,1:启用   0:禁用

       failovermethod=priority     #failoveermethod 有两个选项,分别为 roundrobin(当有多个 url 可供选择时,yum随机选择)和priority(当有多个 url 可供选择时,yum依次选择), 如果不止明,默认是roundrobin      

       priority=1         #yum 源的优先级,数值越低,表示优先级越高。

       gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7       #如果开启yum源包校验,则需要导入RPM公钥,此处只是在系统没有导入rpm公钥时候进行安装

       2、yum.conf

       [main]
       cachedir=/var/cache/yum/$basearch/$releasever                  #yum 下载后的缓存目录
       keepcache=0                                             #是否缓存,0:不缓存     1:缓存
       debuglevel=2                                            #debuglevel:除错级别,0──10,   默认是:2   表示只记录安装和删除记录
       logfile=/var/log/yum.log                          #yum 安装日志
       pkgpolicy=newest                                    #pkgpolicy: 包的策略。一共有两个选项,newest和last,这个作用是如果你设置了多个repository,而同一软件在不同的repository中同时存在,yum应该安装哪一个,如果newest,则yum会安装最新的那个版本。如果是last,则yum会将服务器id以字母表排序,并选择最后的那个服务器上的软件安装。一般都是选newest。
       distroverpkg=centos-release                   #指定一个软件包,yum会根据这个包判断你的发行版本,默认是redhat-release,也可以是安装的任何针对自己发行版的rpm包。
       tolerant=1                                                #tolerent,也有1和0两个选项,表示yum是否容忍命令行发生与软件包有关的错误,比如你要安装1,2,3三个包,而其中3此前已经安装了,如果你设为1,则yum不会出现错误信息。默认是0。
       exactarch=1                                             #exactarch,有两个选项1和0,代表是否只升级和你安装软件包cpu体系一致的包,如果设为1,则如你安装了一个i386的rpm,则yum不会用1686的包来升级。   
       retries=20                                                #retries,网络连接发生错误后的重试次数,如果设为0,则会无限重试。                                        
       obsoletes=1                                            #此选项仅对更新有影响,它启用yum的过时处理逻辑。 参阅 update
       gpgcheck=1                                            #是否进行 gpg 校验,1:校验     0:不校验
       plugins=1                                                      
       installonly_limit=5
       bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
       distroverpkg=centos-release

四、yum源配置

       1、安装 apache 服务,做为 yum 源服务器的服务系统

       [root@package ~]# yum -y install httpd

       将 /Package 目录设置为 apache 的站点目录,具体设置方式,这里就不再赘述了,请参阅小弟的博文  http://blog.51cto.com/4746316/2326614

       2、启动 anache 服务

       [root@package ~]# systemctl start httpd
       [root@package ~]# systemctl enable httpd

       3、创建 yum 仓库

       [root@package ~]# createrepo -pdo /Package/ /Package/

       执行该命令后,会在 /Package/ 目录下生成一个 repodata 目录,进入该目录

       [root@package ~]# cd /Package/repodata
       [root@package ~]# ll

       如图,为目录中的文件

       图片.png

       4、配置 repo 文件

       进入 /etc/yum.repos.d 目录

[root@package repodata]# cd /etc/yum.repos.d/

       删除或者移动或者重命名其他的 yum 源配置文件,编辑我们自己的 yum 源配置文件

[root@package yum.repos.d]# mv * /opt
[root@package yum.repos.d]# vim Localhost.repo

       复制粘贴一下内容到该文件中

       #阿里云
       [aliyun-base]
       name=CentOS-$releasever - Base - mirrors.aliyun.com
       failovermethod=priority
       baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
                     http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/
                     http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
       gpgcheck=1
       gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
       #released updates 
       [aliyun-updates]
       name=CentOS-$releasever - Updates - mirrors.aliyun.com
       failovermethod=priority
       baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
                     http://mirrors.aliyuncs.com/centos/$releasever/updates/$basearch/
                     http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/
       gpgcheck=1
       gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
       #additional packages that may be useful
       [aliyun-extras]
       name=CentOS-$releasever - Extras - mirrors.aliyun.com
       failovermethod=priority
       baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
                     http://mirrors.aliyuncs.com/centos/$releasever/extras/$basearch/
                     http://mirrors.cloud.aliyuncs.com/centos/$releasever/extras/$basearch/
       gpgcheck=1
       gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
       #additional packages that extend functionality of existing packages
       [aliyun-centosplus]
       name=CentOS-$releasever - Plus - mirrors.aliyun.com
       failovermethod=priority
       baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/
                     http://mirrors.aliyuncs.com/centos/$releasever/centosplus/$basearch/
                     http://mirrors.cloud.aliyuncs.com/centos/$releasever/centosplus/$basearch/
       gpgcheck=1
       enabled=0
       gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
       #contrib - packages by Centos Users
       [aliyun-contrib]
       name=CentOS-$releasever - Contrib - mirrors.aliyun.com
       failovermethod=priority
       baseurl=http://mirrors.aliyun.com/centos/$releasever/contrib/$basearch/
                     http://mirrors.aliyuncs.com/centos/$releasever/contrib/$basearch/
                     http://mirrors.cloud.aliyuncs.com/centos/$releasever/contrib/$basearch/
       gpgcheck=1
       enabled=0
       gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
   
       #163.com
       [163-base]
       name=CentOS-$releasever - Base - 163.com
       #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
       baseurl=http://mirrors.163.com/centos/$releasever/os/$basearch/
       gpgcheck=1
       gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7   
       #released updates
       [163-updates]
       name=CentOS-$releasever - Updates - 163.com
       #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
       baseurl=http://mirrors.163.com/centos/$releasever/updates/$basearch/
       gpgcheck=1
       gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7      
       #additional packages that may be useful
       [163-extras]
       name=CentOS-$releasever - Extras - 163.com
       #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
       baseurl=http://mirrors.163.com/centos/$releasever/extras/$basearch/
       gpgcheck=1
       gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7
       #additional packages that extend functionality of existing packages
       [163-centosplus]
       name=CentOS-$releasever - Plus - 163.com
       baseurl=http://mirrors.163.com/centos/$releasever/centosplus/$basearch/
       gpgcheck=1
       enabled=0
       gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7
     
       #Ceph
       [ceph-noarch]
       name=Ceph noarch packages
       baseurl=http://download.ceph.com/rpm-mimic/el7/noarch
       enabled=1
       gpgcheck=1
       type=rpm-md
       gpgkey=https://download.ceph.com/keys/release.asc
     
       [ceph-x86_64]
       name=Ceph noarch packages
       baseurl=http://download.ceph.com/rpm-mimic/el7/$basearch/
       enabled=1
       gpgcheck=1
       type=rpm-md
       gpgkey=https://download.ceph.com/keys/release.asc
      
       #清华大学
       [tsinghua]
       name=tsinghua
       baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/$releasever/$basearch/
       enabled=1
       gpgcheck=0
       
       #zabbix
       [zabbix]
       name=zabbix
       baseurl=http://repo.zabbix.com/zabbix/4.1/rhel/$releasever/$basearch/
       enable=1
       gpgcheck=0
      
       #上海交大
       [centos-sh]
       name=centos-sh
       baseurl=http://ftp.sjtu.edu.cn/centos/$releasever/os/$basearch/
       enable=1
       gpgcheck=1
       gpgkey=http://ftp.sjtu.edu.cn/centos/RPM-GPG-KEY-CentOS-7
       
       #中国科技大学
       #[centos-zk]
       #name=centos-zk
       #baseurl=http://centos.ustc.edu.cn/centos/$releasever/os/$basearch/
       #enable=1
       #gpgcheck=1
       #gpgkey=http://centos.ustc.edu.cn/centos/RPM-GPG-KEY-CentOS-7
       #[ceph-zk]
       #name=ceph-zk
       #baseurl=http://centos.ustc.edu.cn/ceph/rpm-mimic/$releasever/$basearch/
       #enable=1
       #gpgcheck=1
       #gpgkey=http://centos.ustc.edu.cn/ceph/keys/release.asc
       #[epel-zk]
       #name=epel-zk
       #baseurl=http://centos.ustc.edu.cn/epel/$releasever/$basearch/
       #enable=1
       #gpgcheck=1
       #gpgkey=http://centos.ustc.edu.cn/epel/RPM-GPG-KEY-EPEL-7
       
       #搜狐开源镜像
       [souhu]
       name=souhu
       baseurl=http://mirrors.sohu.com/centos/$releasever/os/$basearch/
       enable=1
       gpgcheck=1
       http://mirrors.sohu.com/centos/RPM-GPG-KEY-CentOS-7

       说明:这里整理了国内比较常用的 yum 源

       保存并退出,重建 yum 元数据缓存。

       [root@package repodata]# yum clean all
       [root@package repodata]# yum makecache

       如果没有报错,说明正常,如果有报错,请仔细检查配置是否正确,由于地域原因,中国科技大学的 yum 经常会超时,所以在此,我进行注销。

       查看我们自己配置的 yum 源是否存在

     [root@ceph-a yum.repos.d]# yum repolist

       如图:

       图片.png

      如果,得到的结果跟上图差不多,说明 yum 源配置正确。

      5、同步公网 yum 源到本地

      使用命令:reposync -p /Package/

      [root@package ~]# reposync -p /Package/

      此命令可自动将公网 yum 源同步到本地,虽然较慢,但可同步所有源,具体的其他使用参数,请参考帮助。同步完之后,我们的 yum 仓库就算创建完成。

      6、同步公网 yum 到本地是也可使用命令 wget 和 rsync,使用 rsync 时,需要公网的 yum 源支持才行。


      说明:以上配置时通过 http 协议来完成 yum 仓库的搭建,同时我们也可以使用 ftp 协议、https协议以及 file 来搭建。ftp 和 https 协议搭建 yum 仓库和 http 协议方法基本一样,这里就不介绍了,而 file ,则需要将 rpm 包上传到指定目录,或者挂载安装光盘来完成,其他步骤基本和 http 协议一样,这里也不赘述,各位大佬可以举一反三。

五、客户端验证

      在客户端配置我们刚才搭建的 yum 仓库

      [root@package ~]# cd /etc/yum.repos.d/
      [root@package yum.repos.d]# vim Package.repo
      [system]
      name=system      
      baseurl=http://192.168.20.138      
      enable=1      
      gpgcheck=0

      保存退出,重建 yum 元数据缓存。

      [root@package repodata]# yum clean all
      [root@package repodata]# yum makecache

      然后,我们使用 yum 随便安装一个 yum 仓库中存在的软件,看是否能安装成功,如果成功,说明我们配置没问题,如果失败,则需要我自回头检查一下配置。