为什么选择 GitHub 作为 YUM 仓库?
- 免费托管:GitHub 提供免费的文件存储和 HTTP 服务。
- CDN:结合 jsDelivr 等 CDN 服务,可以加速用户的访问速度。
- 无成本:无需自己搭建服务器,降低维护成本。
- 使用便利:可以一条命令完成安装,无需再上传安装包了,也可以用来制作下线版本的 yum 仓库。
基本思路
YUM 仓库的核心是文件索引(repodata)和 HTTP 服务。GitHub 提供静态文件托管和 HTTP 访问支持,可以作为 YUM 仓库的存储平台。此外,可以通过 CDN 服务(如 jsDelivr)加速访问(可选)。
- 存储:将 RPM 包和仓库索引文件存储在 GitHub 仓库中。
- 访问:通过 GitHub 的 raw 文件访问路径或 jsDelivr 提供 HTTP 服务。
- 生成索引:使用 createrepo 工具生成 YUM 仓库的元数据(repodata)。
步骤 1:生成 repodata
安装 createrepo 工具
确保已安装 createrepo 工具,用于生成 YUM 仓库的元数据。
|
|
创建目录结构
为不同发行版(这里为 CentOS 7 和 Rocky 9)创建对应的目录结构:
|
|
执行以下命令创建目录:
|
|
准备 RPM 包
将需要托管的 RPM 包放入对应的 rpm 目录。例如,将 pfcli-1.0-1.el9.noarch.rpm 放入 repo/9/rpm/。
生成 repodata
使用 createrepo 命令生成 YUM 仓库索引。以下是命令语法:
|
|
示例命令(以 Rocky 9 为例):
|
|
- –baseurl 指定 RPM 包的下载路径,必须与 GitHub 仓库的实际路径一致。
- 如果 –baseurl 配置错误,可能导致 YUM 客户端下载失败
|
|
这里的是在生产索引时候指定,如果你执行的目录不对的话,例如在 repo/7 目录下执行 createrepo
|
|
这个命令将出现上面的错误,地址缺失 rpm
上传到 GitHub
最后将整个 repo 目录上传到 GitHub 仓库。上传后,GitHub 会为每个文件生成可通过 HTTP 访问的 URL。
步骤 2:使用 jsDelivr 加速(可选)
jsDelivr 是一个免费的 CDN 服务,可以加速 GitHub 仓库的访问速度,尤其适合全球用户。
配置 jsDelivr
将 GitHub 的 URL 替换为 jsDelivr 的格式:
- GitHub URL: “https://github.com/{username}/{repo}/raw/main/{path}”
- jsDelivr URL: “https://cdn.jsdelivr.net/gh/{username}/{repo}@{branch}/{path}”
例如,Rocky 9 的 RPM 路径为:
|
|
在 YUM 客户端配置中使用此 URL,可显著提升下载速度。
- 全球 CDN 节点(中国大陆不可用)。
- 更高的带宽和可靠性,适合生产环境。
步骤 3:配置 YUM 客户端
在客户端配置 YUM 仓库,指向 GitHub 或 jsDelivr 的 URL。
创建 .repo 文件
在客户端的 /etc/yum.repos.d/ 目录下创建配置文件。例如,创建 ops-extra-repo.repo
|
|
如果使用 jsDelivr:
|
|
为支持多版本系统,可以使用 YUM/DNF 的 $releasever 变量动态选择仓库路径:
|
|
$releasever
会根据系统版本自动替换为 7 或 9,与官方镜像(如 阿里云镜像的http://mirrors.aliyun.com/centos/$releasever/extras/x86_64/
)的行为一致。
安装尝试
|
|
步骤 4:进一步优化 - 打包仓库配置为 RPM
为了简化客户端配置,可以将 .repo 文件打包为 RPM 包,类似 EPEL 仓库的安装方式。
创建 RPM 构建目录
|
|
创建 .repo 文件
将仓库配置文件放入 SOURCES 目录:
|
|
使用 jsDelivr 加速(可选)
为提高访问速度,可以使用 jsDelivr 作为 CDN。jsDelivr 提供对 GitHub 仓库文件的加速访问。
将 baseurl 修改为 jsDelivr 的路径
|
|
编写 .spec 文件
创建 rpmbuild/SPECS/ops-tools-repo.spec 文件,定义 RPM 包的元数据:
|
|
构建 RPM 包
安装必要的 RPM 构建工具:
|
|
生成的文件位于 rpmbuild/RPMS/noarch/ 目录,例如 ops-tools-repo-1.0-1.el9.noarch.rpm。
放置到 github 仓库中后,可以直接使用 yum install 进行安装
|
|
总结
通过以上步骤,你可以使用 GitHub 快速搭建一个 YUM 仓库,支持 CentOS 7, Rocky 9 等系统。进一步优化可以通过打包 .repo 文件为 RPM 包,或使用 jsDelivr 加速访问。这种方法很适合个人项目并易于维护。