搭建 YUM 仓库
本教程从零创建一个 Managed RPM 仓库。先安装 SOW、Python 3,并准备适合目标客户端的 RPM 文件。使用当前用户可创建、可写入的空目录 /srv/sow,或换成其他可写路径。
创建工作区
el9 是这个 RPM 包集合的名称,可以按需要更改。它不改变软件包的操作系统兼容性。
配置成员策略
编辑生成的 sow.yml。下面的配置按包名与架构各保留一个版本,并排除调试包与 LLVM JIT 包:
检查配置:
策略先执行 exclude,再执行 limit。SOW 把 noarch 包加入每个启用的架构视图。architectures 中只填写 CPU 架构名。
添加 RPM
把输入路径换成实际 RPM 目录。add 将接受的软件包存入包池,更新成员并构建索引。检查逐包输出:被排除的文件会单独报告,不会使整条命令失败。
公共树如下:
/srv/sow/pigsty/
- pool/
dists/el9/
- x86_64/repodata/
- aarch64/repodata/
RPM 索引通过相对路径指向 pool/。服务或复制完整的 pigsty/ 目录树,客户端才能下载软件包。
HTTP 预览
在另一个终端执行以下命令,并保持运行:
预览只提供仓库根目录中的文件,并且只能从本机访问。长期运行或供其他主机访问时,按对外服务配置。
配置 dnf
在运行预览的 Linux 主机上,把以下内容保存为 /etc/yum.repos.d/pigsty.repo。远程客户端需先发布仓库,再换成其公共地址:
刷新并查询仓库:
本例使用未签名软件包与元数据。按仓库签名启用验签。预览完成后,删除此源配置文件并停止 Python 服务器。
发布或导出
使用 sow publish 发布到 filesystem 或 R2 目标。它按客户端所需的顺序上传软件包与元数据。隔离主机的手工交付步骤也见该教程。
默认 dnf reposync 等工具会拒绝指向根包池的父级相对路径。需要供这些工具使用时,导出一份
独立 RPM 仓库:
RPM Dist 必须属于当前构建快照。混合仓库先检查导出前提。
目标目录必须不存在或为空。导出默认复制软件包。--hardlink 只用于同一文件系统;导出文件与源包池共享存储,应保持只读。
更新仓库
add 会自动构建更新。配置 limit: 1 后,同包名、同架构的最新版本会替换此前成员。修改配置后执行 sow build -r pigsty。
撤下软件包时,先用 sow rm PACKAGE_NAME -r pigsty -d el9 --check 预览选择结果,再去掉 --check 执行。包名会选中其全部版本与架构;只删除一个包对象时,使用 SHA-256 引用。
已测试客户端见平台与集成。