内网yum

工具教程2周前发布 hank
72 0 0

背景:客户的生产环境,绝大多数都是与互联网隔离的,也就使用不了公网yum源,那如果我需要某某软件包,但是本地没有这个包,我如何去获取,怎么解决。

解决办法1:本地挂一个基础镜像,即安装操作系统本身的那个iso镜像,这里面会存放部分package包,我们可以通过挂载本地yum源的方式来实现

解决办法2:做离线yum源,首先有个能连互联网的机器, 版本与我们的目标机器版本相同, 然后我就可以通过这个yum源下载全部的依赖包, 然后我再收罗这些rpm包到一起, 可以把它做成一个yum仓库, 再上传到目标机器, 就能安装仅限于我上传的这些包内容的一个yum仓库去使用,最后通过共享的方式,例如nfs、ftp等让客户端也能使用。

环境准备:linux系统 centos8.5
192.168.101.60 yum服务器
192.168.101.61 yum客户端
镜像文件:CentOS-8.5.2111-x86_64-dvd1.iso

  1. 本地挂载iso
  2. 离线yum源

本地挂载iso

首先需要将原iso上传至操作系统,然后将光盘挂载,我这里只是做测试,所以只是临时挂载,一般这些配置都是需要永久挂载的,即写入/etc/fstab


这里我们可以发现有BaseOS和AppStream双仓库,这是红帽8和centos8,8以后开始有的双仓库

我们去到yum配置的目录/etc/yum.repo.d/下
将已有的repo文件全部备份成repo.bak文件或者直接删除。
接着创建一个local.repo文件
文件格式按照这个来写

[BaseOS]
name=8.5-BaseOS-local
baseurl=file:///mnt/BaseOS
gpgcheck=0
enabled=1

[AppStream]
name=8.5-AppStream-local
baseurl=file:///mnt/AppStream
gpgcheck=0
enabled=1


接着就是

yum clean all
yum makecache

生成元数据缓存
这个就是基础的本地挂载iso实现的本地yum源配置。

离线yum源

我要做离线yum源,这里实验,从centos 8.5阿里云给的来
首先将本地源文件,备份 repo.bak
mv local.repo local.repo.bak
阿里云centos8.5的镜像站url:
https://developer.aliyun.com/mirror/centos?spm=a2c6h.13651102.0.0.3e221b1176Qayh
我们输入

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo

下载后得到一个CentOS-Base.repo文件,但是里面没有启用,enabled=0,需要手动修改一下,使得enabled=1

接下来需要安装yum-utils和createrepo
yum install yum-utils createrepo
这个涉及到两个命令,reposync和createrepo
reposync主要用于从远程 YUM/DNF 仓库同步(下载)RPM 包到本地
createrepo主要是用于创建一个仓库的元数据metadata,即那个repodata,仓库索引目录,没有repodata就无法查找rpm包、无法解析和安装依赖等问题,这里面生成的repomd.xml就是核心元数据文件,这是元数据的总入口。
接下来就是需要同步仓库了,前文提到了从8开始yum是双仓库,所以这里我是同步了两次
mkdir -p /data/local_yum
同步BaseOS仓库

dnf reposync --repoid=base --download-path=/data/local_yum --newest-only --download-metadata --delete


同步AppStream

dnf reposync --repoid=AppStream --download-path=/data/local_yum --newest-only --download-metadata --delete

但是这里两个不能并发一起同步,需要等待BaseOS同步进程结束

两个包同步过程会持续一段时间,具体取决于网络速度,同时请确保yum服务器有足够的磁盘空间!
同步结束后

同步完成后接下来是将本地目录变成可用的离线yum源,但是在此之前是需要元数据repodata才能被yum/dnf识别,前文在做reposync同步到本地的时候添加了–download-metadata,目录下存在repodata了,这里看需求,比如我只需要同步,不需要修改任何东西,可以不用管,但是如果有修改,后续还是推荐使用createrepo,例如 createrepo –update 这个命令会扫描当前目录下的所有 RPM 包,基于当前的实际内容来更新(或重建)repodata 目录里的元数据。

createrepo -v /data/local_yum/AppStream/
createrepo -v --update /data/local_yum/base/


元数据生成后,接下来去配置yum文件,我这里待会还要当服务器共享给其他客户端,所以命名就直接给
lan.repo

[BaseOS]
name=lan_share_BaseOS
baseurl=file:///data/local_yum/base
gpgcheck=0
enabled=1
[AppStream]
name=lan_share_AppStream
baseurl=file:///data/local/yum/AppStream
gpgcheck=0
enabled=1


服务器端yum配置完成了,接下来需要实现共享,这里我使用nfs共享目录来实现

登录客户端

客户端本地先挂载共享的目录过来
mount -t nfs 192.168.101.60:/data/local_yum /mnt

然后写配置文件
首先清空已有的yum源配置

[BaseOS]
name=client_local_yum_BaseOS
baseurl=file:///mnt/base
gpgcheck=0
enabled=1

[AppStream]
name=client_local_yum_AppStream
baseurl=file:///mnt/AppStream
gpgcheck=0
enabled=1


客户端成功使用上yum服务器的yum仓库了

附:
reposync用法:
参数	               作用
--repoid=<仓库ID>      必填,指定要同步的仓库(通过 yum repolist查看仓库 ID)
--download-path	       指定本地存储路径,reposync会在该路径下创建与仓库 ID 同名的子目录
--newest-only	       仅同步每个包的最新版本(大幅减少数据量)
--download-metadata    同步仓库元数据(如 repomd.xml,是本地仓库生效的关键)
--delete	       删除本地已不存在于远程仓库的旧包(保持仓库整洁)
© 版权声明

相关文章

暂无评论

none
暂无评论...