pig repo
pig repo 管理 Linux 软件仓库:添加或移除 APT/YUM/DNF 软件源,更新索引,并制作或解压离线包。repo create 还支持在 macOS 上通过 SOW 创建仓库。
| 命令 | 描述 | 备注 |
|---|---|---|
repo list |
打印可用仓库与模块列表 | |
repo info |
获取仓库详细信息 | |
repo status |
显示当前仓库状态 | |
repo add |
添加新仓库 | 需要 sudo 或 root 权限 |
repo set |
清空、覆盖并更新仓库 | 需要 sudo 或 root 权限 |
repo rm |
移除仓库 | 需要 sudo 或 root 权限 |
repo update |
更新仓库缓存 | 需要 sudo 或 root 权限 |
repo create |
创建本地 YUM/APT 仓库 | Linux:sudo/root;macOS:当前用户 |
repo cache |
从本地仓库创建离线包 | 需要 sudo 或 root 权限 |
repo boot |
从离线包引导仓库 | 需要 sudo 或 root 权限 |
repo reload |
刷新仓库目录 |
快速入门
为已配置系统软件源的主机添加 PostgreSQL 仓库,并更新索引:
在中国网络环境中,加上 -m 选择中国区域镜像:
需要由 PIG 替换整套软件源时,使用 set。该命令先备份现有定义,再添加 node、infra、pgsql 并更新索引:
使用 pig repo info pgsql 查看仓库定义,使用 pig repo status 查看主机当前配置。
模块
在 pig 中,APT/YUM 仓库被组织为 模块 —— 服务于特定目的的一组仓库。
| 模块 | 说明 | 仓库列表 |
|---|---|---|
all |
安装 PG 所需的全部核心模块 | node + infra + pgsql |
pgsql |
PGDG + Pigsty PG 扩展 | pigsty-pgsql + pgdg |
pigsty |
Pigsty Infra + PGSQL 仓库 | pigsty-infra, pigsty-pgsql |
pgdg |
PGDG 官方仓库 | EL:pgdg-common、pgdg14-18;APT:pgdg |
node |
Linux 系统仓库 | base, updates, extras, epel, baseos, appstream… |
infra |
基础设施组件仓库 | pigsty-infra |
nginx |
Nginx 仓库 | nginx |
docker |
Docker 仓库 | docker-ce |
beta |
PostgreSQL 19 Beta 版本 | pgdg19-beta, pgdg-beta |
extra |
PGDG Non-Free 与三方扩展 | pgdg-extras, timescaledb, citus |
groonga |
PGroonga 仓库 | groonga |
percona |
Percona PG + PG_TDE | percona |
llvm |
LLVM 工具链仓库 | llvm |
kube |
Kubernetes 仓库 | kubernetes |
grafana |
Grafana 仓库 | grafana |
haproxy |
HAProxy 仓库 | haproxyd, haproxyu |
redis |
Redis 仓库 | redis |
mongo |
MongoDB 仓库 | mongo |
mysql |
MySQL 仓库 | mysql |
click |
ClickHouse 仓库 | clickhouse |
gitlab |
GitLab 仓库 | gitlab-ce, gitlab-ee |
模块中的仓库会按当前操作系统与架构筛选。用 pig repo list 查看本机可用项。
已有可用的系统软件源时,添加 pgsql 即可获取 PGDG 与 Pigsty 扩展包。infra 提供基础设施工具和部分 PostgreSQL 分支内核包。all 是 node、infra、pgsql 的组合;不带参数的 repo add 和 repo set 默认选择 all。
repo add、repo set、repo info 支持逗号分隔的名称,并忽略名称两侧的空白。
空参数、纯空白或 node, 中的空项会使整次请求在操作仓库前失败;显式空参数不等于省略参数。
repo add 和 repo set 的模块名只能包含英文字母、数字、下划线与连字符。../escape 这样的
不安全名称会在安装密钥或修改仓库前使整次请求失败。名称格式正确但模块不存在时,保留原有行为:
repo add 添加有效模块,并为未知模块返回失败;repo set 和 repo add --remove 整次拒绝。
仓库定义
Pigsty 中可用仓库的完整定义位于 cli/repo/assets/repo.yml。
创建 ~/.pig/repo.yml 可覆盖内置目录。文件格式见上面的源码链接。repo reload 会更新此文件,因此应在更新前保存自己的修改。
--region 选择 baseurl 中的区域 URL;不存在对应区域时使用 default。-m 选择 china,包含 Pigsty 中国镜像及目录中配置的其他镜像。
信任策略与配置归属
repo add 写入所选模块的配置文件,并保留其他文件。repo set 或 repo add --remove 会先备份现有定义再替换。若仓库配置由 Ansible 等工具管理,请在对应配置中维护这些定义,避免下一次运行覆盖手工修改。
Pigsty 公钥
添加包含 pigsty-infra 或 pigsty-pgsql 的模块时,PIG 会复用已有公钥文件,或从程序内嵌资源安装公钥,权限为 0644:
| 平台 | 公钥路径 |
|---|---|
| EL | /etc/pki/rpm-gpg/RPM-GPG-KEY-pigsty |
| Debian / Ubuntu | /etc/apt/keyrings/pigsty.asc |
此步骤可以离线完成。只添加 pgdg、node 等其他仓库时,不会准备 Pigsty 公钥。
内置仓库默认不强制校验软件包签名:EL 使用 gpgcheck=0,Debian/Ubuntu 使用 trusted=yes。普通 repo add/set 保留定义中的校验设置;pig sty boot 在公钥准备成功时启用 Pigsty 签名校验。需要强制校验时,在仓库元数据中配置可信密钥并启用校验。
默认公钥安装失败时,命令会告警并继续。所选 Pigsty 仓库使用 trusted=yes,或 gpgcheck=0 与 repo_gpgcheck=0,并保留默认密钥引用。告警也会写入结构化结果的 data.warnings。APT 此时可能沿用旧索引,请检查缓存更新输出。
显式指定密钥时,准备失败会中止仓库配置:
- Debian/Ubuntu 的
signed-by使用已有普通密钥文件的绝对路径,多个路径用逗号分隔。 - EL 的
gpgkey使用路径或不含变量的 URL,PIG 会调用rpm --import导入。 - 显式引用默认 Pigsty 路径时,PIG 可从内嵌资源安装该文件。
默认自动安装仅准备公钥文件和仓库引用。显式 EL gpgkey 才会额外导入 RPM 数据库。实现依据见设计记录。
EL 仓库保留 DNF 的模块过滤规则。只有声明 module_hotfixes=1 的定义(如 Pigsty 与 PGDG)会绕过模块流过滤;生成 EL7 配置时会移除该键。
repo list
pig repo list 将列出当前系统可用的所有仓库模块。
repo info
显示特定仓库或模块的详细信息,包括 URL、元数据和区域镜像,以及 .repo / .list 仓库文件内容。
repo status
显示系统上的当前仓库配置。
repo add
添加仓库配置文件到系统。需要 root/sudo 权限。
选项:
-r|--remove:添加新仓库前移除现有仓库-u|--update:添加仓库后运行包缓存更新-m|--mirror:明确选择内置的china仓库定义--region <region>:使用区域镜像仓库(default/china/europe)
| 平台 | 模块位置 |
|---|---|
| EL | /etc/yum.repos.d/<module>.repo |
| Debian | /etc/apt/sources.list.d/<module>.list |
repo set
先备份并移除现有仓库定义,再写入所选模块,最后刷新软件包元数据。
这等同于 repo add --remove --update。省略模块时,PIG 使用 all。
repo set 支持与 repo add 相同的 --region 与 -m|--mirror 区域选项。
repo rm
真正不带参数时,将全部软件源定义移到既有备份目录。显式模块参数只删除对应模块文件;
all 只展开为 node、pgsql、infra,不代表所有文件。空字符串、纯空白、逗号空项与
不安全名称会在任何仓库或缓存操作前失败,混合列表也不例外。-u 在成功全量备份或模块删除后
更新缓存。原有备份与恢复契约保持不变。
目标模块文件已不存在时仍返回成功;摘要报告已确保不存在的模块数,不宣称每次请求都删除了
既有文件。仍支持仓库目录内的自定义模块名称。
全量备份没有找到仓库文件时,摘要明确报告没有文件需要备份。
结构化结果的 requested_modules 保留原始参数,包括 all 和逗号分隔的参数;
removed_repos 列出展开后的模块及各项执行结果。
| 平台 | 备份位置 |
|---|---|
| EL | /etc/yum.repos.d/backup/ |
| Debian | /etc/apt/sources.list.d/backup/ |
repo update
更新包管理器缓存以反映仓库更改。
| 平台 | 等效命令 |
|---|---|
| EL | dnf makecache(EL7:yum makecache) |
| Debian | apt-get update |
repo create
为离线安装创建本地包仓库。
当前实现会优先使用 PATH 中的 sow。在 Linux 上选择 SOW 后,会对每个目标目录以 sudo 执行等价命令:
在 macOS 上,先安装 SOW。执行时不使用 sudo,默认目标为当前目录。
在 Linux 上,未安装 SOW 时,PIG 在 EL 上使用 createrepo_c,在 Debian/Ubuntu 上使用 dpkg-dev 提供的 dpkg-scanpackages。
SOW 执行失败时,PIG 直接返回错误。10m 限制等待 SOW 目录锁的时间。
SOW 的 --pigsty 模式会:
- 只扫描顶层普通
.rpm与.deb文件,不递归,也不跟随符号链接。 - 删除
i386架构的 DEB 包,以及包名为patroni、上游版本为3.0.4的 RPM/DEB 包。 - 生成 RPM/DEB 元数据,最后写入
repo_complete;标记文件按包文件名排序,记录剩余顶层软件包的 SHA-256。
annobin-docs 等文档包会保留,除非命中其他清理规则;不会仅因文件名包含 docs 而删除软件包。
SOW 保留非软件包文件和目录;软件包无法解析或同一软件包坐标冲突时停止。旧后端在 repo_complete 中记录 MD5,清理规则也与 SOW 不同。PIG 检查该文件是否存在,不校验其中的哈希;分发离线包前可用该清单检查文件完整性。
repo cache
创建仓库内容的压缩 tarball 用于离线分发。
选项:
-d, --dir:源目录(默认:/www/)-p, --path:输出路径(默认:/tmp/pkg.tgz)
离线包必须包含 pigsty,且 pigsty/repo_complete 必须是普通文件。请求中不存在的仓库会被
跳过,并与实际打包的仓库分别报告。原生 boot 解包器只接受目录和普通文件,因此 cache
拒绝符号链接。cache 失败时不会覆盖已有的输出包。
repo boot
从离线包解压并设置本地仓库。
选项:
-p, --path:包路径(默认:/tmp/pkg.tgz)-d, --dir:目标目录(默认:/www/)
命令先解压到临时目录,检查目标路径,再移动仓库。附加仓库先移动,pigsty 最后移动。
- 目标已有完整的
pigsty/repo_complete时,直接复用该仓库。命令不会读取离线包,也不会导入包中的附加仓库;结构化结果显示reused: true。 - 目标路径冲突时停止。若上一次运行中断,先检查并移走已移动的冲突目录,再重试。
- 离线包必须包含普通文件
pigsty/repo_complete。PIG 检查该文件是否存在,不校验其内容。
repo reload
从 Pigsty 仓库站点下载最新仓库目录。
更新后的文件会放置于 ~/.pig/repo.yml 中。