yum基于缓存机制,创建自定义仓库源

为了在离线环境顺畅安装rpm包,须做内网仓库源。

env

  • centos7
  • offline

1.开启yum缓存包

YUM 本身支持启用本地缓存机制,把下载过的 RPM 包保存在本地以供重复使用,即便是离线环境也能复用。

1.1.开启 YUM 离线缓存包的方式

  1. 编辑配置文件

    1
    vim /etc/yum.conf

    增加或修改以下参数:

    1
    2
    3
    [main]
    keepcache=1
    cachedir=/var/cache/yum/$basearch/$releasever
    • keepcache=1 表示安装完成后不删除缓存的 rpm 包。
    • cachedir 是缓存包保存目录,默认 /var/cache/yum/
  2. 清理并重新生成缓存

    1
    2
    yum clean all
    yum makecache
  3. 使用时效果

    • 当执行 yum install xxx 时,rpm 包会保存在 cachedir
    • 即使机器断网,只要缓存中已有对应 rpm,就能直接安装。

4.安装示例

1
2
3
4
5
# 安装时保留缓存
yum install -y vim

# 缓存路径下会留下 rpm 包
ls /var/cache/yum/x86_64/9/baseos/packages/

5.注意事项

  • 如果要把缓存拿到另一台服务器用,可以直接拷贝 rpm 包,然后用 yum localinstall *.rpm 或搭建本地 repo。
  • 在 RHEL/CentOS 8+/RockyLinux 等新版本里,yumdnf 的兼容前端,同样支持 keepcache=1

Recommendation: 在 /etc/yum.conf 中开启 keepcache=1 并定期清理。
Next step: 执行一次 yum install 并检查 /var/cache/yum/ 下是否保留了 rpm 包。

1.2.基于插件downloadonly缓存包

yum install --downloadonlyyum install --downloadonly --downloaddir=... 的行为与 yum.conf 里的 keepcache 设置有区别:

  1. 普通安装 (yum install)

    • 默认 keepcache=0,安装完后会删除缓存包。
    • 只有 keepcache=1 才会在 /var/cache/yum/ 下保留 RPM。
  2. 使用 --downloadonly 插件

    • --downloadonly 不会安装,只会下载。
    • 默认下载位置仍是 /var/cache/yum/.../packages/
    • 此时即使 keepcache=0,因为没有执行安装动作,YUM 不会触发清理,RPM 包会保留下来。
  3. 指定下载目录

    • 建议加上 --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.步骤

  1. 准备目录存放 RPM 包

    1
    2
    mkdir -p /opt/myrepo
    cp /path/to/*.rpm /opt/myrepo/
  2. 安装 createrepo 工具

    1
    yum install -y createrepo
  3. 初始化仓库元数据

    1
    createrepo /opt/myrepo

    执行后会生成 repodata/ 目录,包含 repomd.xml 等索引文件。

  4. 创建 YUM 仓库配置文件
    新建文件 /etc/yum.repos.d/myrepo.repo

    1
    2
    3
    4
    5
    [myrepo]
    name=My Local Repo
    baseurl=file:///opt/myrepo
    enabled=1
    gpgcheck=0
    • file:/// 适合单机使用;

    • 若要提供给其他服务器,可以把 /opt/myrepo 挂到 Nginx/Apache 的 web 目录:

      1
      baseurl=http://yourserver/myrepo
  5. 刷新缓存并验证

    1
    2
    3
    yum clean all
    yum makecache
    yum repolist
  6. 测试安装

    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.开启签名检查的步骤

  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-centosofficial
    • gpgcheck=1 启用签名检查
    • gpgkey= 指定公钥路径或 URL
  2. 导入公钥
    大多数发行版提供了 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
  3. 验证配置是否生效
    清理缓存并更新:

    1
    2
    yum clean all
    yum makecache

    之后安装包时,若签名缺失或不匹配会报错:

    Public key for xxx.rpm is not installed
    
  4. 全局开启(可选)
    /etc/yum.conf 中也可设置全局策略:

    1
    2
    [main]
    gpgcheck=1

    所有仓库默认都进行签名验证,除非在对应 .repo 文件里单独关闭。

注意事项

  • 自建仓库时需对 RPM 包签名,并在 .repo 文件中提供对应的 gpgkey
  • 如果未签名的 RPM 存在,开启后会导致安装失败。

Recommendation: 在 .repo 文件中启用 gpgcheck=1 并导入正确的官方 GPG 公钥。
Next step: 执行一次 yum install 测试,看是否触发公钥校验提示。