在企业中,除过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、安装工具
[root@package ~]# yum -y install yum-utils createrepo yum-plugin-priorities
1、安装 apache 服务,做为 yum 源服务器的服务系统
[root@package ~]# yum -y install httpd
将 /Package 目录设置为 apache 的站点目录,具体设置方式,这里就不再赘述了,请参阅小弟的博文 https://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
如图,为目录中的文件
说明:如果需要同步外网 yum 源,这一步必须在同步完外网 yum 源之后操作,不然从外网同步下来的 rpm 包将没有索引,没有元数据库,就不能通过 yum 工具进行安装。如果是本地上传的 rpm 包,则必须等 rpm 包上传后在进行这一步操作。
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=1 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=1 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 priority=1 [ceph-source] name=Ceph source packages baseurl=http://download.ceph.com/rpm-mimic/el7/SRPMS/ enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://download.ceph.com/keys/release.asc priority=1 [ceph-x86_64] name=Ceph x86_64 packages baseurl=http://download.ceph.com/rpm-mimic/el7/x86_64/ enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://download.ceph.com/keys/release.asc priority=1 #清华大学 [tsinghua] name=tsinghua baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/$releasever/$basearch/ https://mirrors4.tuna.tsinghua.edu.cn/epel/$releasever/$basearch/ https://mirrors6.tuna.tsinghua.edu.cn/epel/$releasever/$basearch/ enabled=1 gpgcheck=1 gpgkey=https://mirrors.tuna.tsinghua.edu.cn/epel/RPM-GPG-KEY-EPEL-7 #zabbix [zabbix] name=zabbix baseurl=http://repo.zabbix.com/zabbix/4.1/rhel/$releasever/$basearch/ enable=1 gpgcheck=1 gpgkey=http://repo.zabbix.com/RPM-GPG-KEY-ZABBIX #上海交大 [shjd-centos] name=shjd-centos 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 #中国科技大学 #[zkd-centos] #name=zkd-centos #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 # #[zkd-ceph] #name=zkd-ceph #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 # #[zkd-epel] #name=zkd-epel #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-centos] name=souhu-centos baseurl=http://mirrors.sohu.com/centos/$releasever/os/$basearch/ enable=1 gpgcheck=1 gpgkey=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
如图:
如果,得到的结果跟上图差不多,说明 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 仓库中存在的软件,看是否能安装成功,如果成功,说明我们配置没问题,如果失败,则需要我自回头检查一下配置。