yum基于缓存机制,创建自定义仓库源
为了在离线环境顺畅安装rpm包,须做内网仓库源。
env
- centos7
- offline
1.开启yum缓存包
YUM 本身支持启用本地缓存机制,把下载过的 RPM 包保存在本地以供重复使用,即便是离线环境也能复用。
1.1.开启 YUM 离线缓存包的方式
编辑配置文件
1
vim /etc/yum.conf
增加或修改以下参数:
1
2
3[main]
keepcache=1
cachedir=/var/cache/yum/$basearch/$releaseverkeepcache=1表示安装完成后不删除缓存的 rpm 包。cachedir是缓存包保存目录,默认/var/cache/yum/。
清理并重新生成缓存
1
2yum clean all
yum makecache使用时效果
- 当执行
yum install xxx时,rpm 包会保存在cachedir。 - 即使机器断网,只要缓存中已有对应 rpm,就能直接安装。
- 当执行
4.安装示例
1 | # 安装时保留缓存 |
5.注意事项
- 如果要把缓存拿到另一台服务器用,可以直接拷贝 rpm 包,然后用
yum localinstall *.rpm或搭建本地 repo。 - 在 RHEL/CentOS 8+/RockyLinux 等新版本里,
yum是dnf的兼容前端,同样支持keepcache=1。
Recommendation: 在 /etc/yum.conf 中开启 keepcache=1 并定期清理。
Next step: 执行一次 yum install 并检查 /var/cache/yum/ 下是否保留了 rpm 包。
1.2.基于插件downloadonly缓存包
yum install --downloadonly 和 yum install --downloadonly --downloaddir=... 的行为与 yum.conf 里的 keepcache 设置有区别:
普通安装 (
yum install)- 默认
keepcache=0,安装完后会删除缓存包。 - 只有
keepcache=1才会在/var/cache/yum/下保留 RPM。
- 默认
使用
--downloadonly插件--downloadonly不会安装,只会下载。- 默认下载位置仍是
/var/cache/yum/.../packages/。 - 此时即使
keepcache=0,因为没有执行安装动作,YUM 不会触发清理,RPM 包会保留下来。
指定下载目录
- 建议加上
--downloaddir=/path/to/dir,这样 RPM 包会集中保存,避免和 yum 的缓存目录混在一起。
- 建议加上
4.示例
1 | yum install -y zabbix --downloadonly --downloaddir=/opt/rpms |
下载完成后,RPM 包会直接保存在 /opt/rpms。
5.结论
--downloadonly模式下,即使yum.conf没开启缓存 (keepcache=0),RPM 仍会保留在缓存目录。- 但若执行的是正常安装(非 downloadonly),那就需要
keepcache=1才能留存。
Recommendation: 使用 --downloaddir 明确指定保存路径,避免依赖 yum 的缓存目录策略。
Next step: 执行一次 yum install --downloadonly --downloaddir=/tmp/test zabbix 验证下载结果。
2.创建自定义仓库
基于已有的 RPM 包文件,可以用 createrepo 创建一个自定义 YUM 仓库源,然后通过本地路径或 HTTP/FTP 服务提供给客户端。
2.1.步骤
准备目录存放 RPM 包
1
2mkdir -p /opt/myrepo
cp /path/to/*.rpm /opt/myrepo/安装
createrepo工具1
yum install -y createrepo
初始化仓库元数据
1
createrepo /opt/myrepo
执行后会生成
repodata/目录,包含repomd.xml等索引文件。创建 YUM 仓库配置文件
新建文件/etc/yum.repos.d/myrepo.repo:1
2
3
4
5[myrepo]
name=My Local Repo
baseurl=file:///opt/myrepo
enabled=1
gpgcheck=0file:///适合单机使用;若要提供给其他服务器,可以把
/opt/myrepo挂到 Nginx/Apache 的 web 目录:1
baseurl=http://yourserver/myrepo
刷新缓存并验证
1
2
3yum clean all
yum makecache
yum repolist测试安装
1
yum install -y <package-name>
2.2.进阶
若要持续更新仓库,可以在新增 RPM 后执行:
1
createrepo --update /opt/myrepo
可以签名 RPM 并在 repo 中启用
gpgcheck=1来提高安全性。
Recommendation: 把需要的 RPM 包集中存放在一个目录并运行 createrepo。
Next step: 在 /etc/yum.repos.d/ 下配置一个 .repo 文件并执行 yum makecache 验证仓库是否生效。
3.开启yum签名检查
YUM 的签名检查依赖 RPM 包的 GPG 签名 和仓库元数据中的公钥配置。默认部分发行版会关闭签名检查,可以手动开启。
3.1.开启签名检查的步骤
编辑仓库配置文件
打开/etc/yum.repos.d/*.repo,为目标仓库启用 GPG 校验:1
2
3
4
5
6[baseos]
name=BaseOS
baseurl=http://mirror.centos.org/centos/9/BaseOS/x86_64/os/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficialgpgcheck=1启用签名检查gpgkey=指定公钥路径或 URL
导入公钥
大多数发行版提供了 GPG 公钥文件,可以手动导入:1
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
或从上游仓库获取:
1
rpm --import http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-Official
验证配置是否生效
清理缓存并更新:1
2yum clean all
yum makecache之后安装包时,若签名缺失或不匹配会报错:
Public key for xxx.rpm is not installed全局开启(可选)
在/etc/yum.conf中也可设置全局策略:1
2[main]
gpgcheck=1所有仓库默认都进行签名验证,除非在对应
.repo文件里单独关闭。
注意事项
- 自建仓库时需对 RPM 包签名,并在
.repo文件中提供对应的gpgkey。 - 如果未签名的 RPM 存在,开启后会导致安装失败。
Recommendation: 在 .repo 文件中启用 gpgcheck=1 并导入正确的官方 GPG 公钥。
Next step: 执行一次 yum install 测试,看是否触发公钥校验提示。