pig repo
pig repo 命令是一个综合性的软件包仓库管理工具。它提供了添加、移除、创建和管理软件仓库的功能,支持 RPM 系统(RHEL/CentOS/Rocky/Alma)和 Debian 系统(Debian/Ubuntu)。
| 命令 | 描述 | 备注 |
|---|---|---|
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 仓库 | 需要 sudo 或 root 权限 |
repo cache |
从本地仓库创建离线包 | 需要 sudo 或 root 权限 |
repo boot |
从离线包引导仓库 | 需要 sudo 或 root 权限 |
repo reload |
刷新仓库目录 |
快速入门
模块
在 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 官方仓库 | pgdg-common, pgdg14-18 |
node |
Linux 系统仓库 | base, updates, extras, epel, baseos, appstream… |
infra |
基础设施组件仓库 | pigsty-infra, nginx, docker-ce |
docker |
Docker 仓库 | docker-ce |
beta |
PostgreSQL 19 Beta 版本 | pgdg19-beta, pgdg-beta |
extra |
PGDG Non-Free 与三方扩展 | pgdg-extras, timescaledb, citus |
groonga |
PGroonga 仓库 | groonga |
mssql |
Wiltondb 仓库(已弃用) | babelfish |
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 还自带了一些其他数据库的 APT/DNF 仓库:redis, kubernetes, grafana, clickhouse, gitlab, haproxy, mongodb, mysql,在此不再展开。
通常来说,为了安装 PostgreSQL node (Linux 系统仓库) 和 pgsql(PGDG + Pigsty)是必选项,infra 仓库是可选项(包含了一些工具,IvorySQL Kernel 等)。
您可以使用特殊的 all 模块,一次性添加所有需要的仓库到系统中,对绝大多数用户来说,这是合适的起点。
仓库定义
Pigsty 中可用仓库的完整定义位于 cli/repo/assets/repo.yml。
您可以创建 ~/.pig/repo.yml 文件,显式修改并覆盖 pig 的仓库定义。在编辑仓库定义文件时,您可以在 baseurl 处添加额外的区域镜像,例如指定中国、欧洲地区的镜像仓库 URL。当 pig 使用 --region 参数指定特定区域时,会优先查找对应区域的仓库 URL,不存在时回退到 default。从 v1.7.0 起,-m|--mirror 会明确选择内置的 china 定义,包括 pigsty.cc 与维护中的国内镜像,不再在运行时将 PGDG URL 改写到代理端点。
信任策略与配置归属
仓库操作会改变主机的软件供应链配置。可以先用 pig repo info MODULE 查看 PIG 将要渲染的定义。未指定 --remove 时,repo add 会保留无关文件;repo set 则一定会先备份再替换现有定义,并刷新元数据,因此可能与 Ansible、镜像构建或其他配置管理方发生冲突。
为了兼容离线仓库与镜像,PIG 内置元数据在 EL 上默认使用 gpgcheck=0,在 Debian/Ubuntu 上默认使用 trusted=yes;这些设置不会强制校验软件包签名。从 v1.7.0 起,普通 EL 仓库保留 DNF 原生模块过滤;只有显式声明 module_hotfixes=1 的定义(主要是 Pigsty 与 PGDG 仓库)会覆盖模块流,渲染 EL7 YUM 配置时还会移除该键。安全敏感环境应安装可信密钥、修改生成的仓库元数据以启用签名校验、固定批准的软件源,并通过既有配置管理体系维护这些设置。
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。清空现有仓库并设置新仓库,然后更新缓存。
repo set 支持与 repo add 相同的 --region 与 -m|--mirror 区域选择;它始终是覆盖式语义,相当于 repo add all --remove --update。
repo rm
移除仓库配置文件并备份它们。
| 平台 | 备份位置 |
|---|---|
| EL | /etc/yum.repos.d/backup/ |
| Debian | /etc/apt/sources.list.d/backup/ |
repo update
更新包管理器缓存以反映仓库更改。
| 平台 | 等效命令 |
|---|---|
| EL | dnf makecache |
| Debian | apt update |
repo create
为离线安装创建本地包仓库。
当前实现会优先使用 PATH 中的 sow。在 Linux 上选择 SOW 后,会对每个目标目录以 sudo 执行等价命令:
在 macOS 上必须安装 SOW,执行时不使用 sudo,默认目标为当前目录。Linux 上如果没有安装 sow,EL 会回退到 createrepo_c,Debian/Ubuntu 会回退到 dpkg-dev 提供的 dpkg-scanpackages;首选后端与平台回退均不可用时,pig repo create 才会失败。SOW 一旦被选中,其执行错误会直接返回,不会再用旧后端重试。10m 只限制等待 SOW 目录锁的时间,并不限制仓库索引本身的执行时间。
SOW 的 --pigsty 事务会:
- 只扫描顶层普通
.rpm与.deb文件,不递归,也不跟随符号链接。 - 按解析后的软件包事实,删除 32 位 x86 包(RPM 的
i386/i486/i586/i686、DEB 的i386),以及二进制包名恰为patroni、上游版本恰为3.0.4的包。 - 以原子方式生成对应的 RPM/DEB 元数据,最后写入
repo_complete;marker 按 basename 排序,记录剩余顶层软件包的 SHA-256。
非软件包文件与目录不会被改动;候选软件包无法解析或逻辑坐标冲突时,SOW 事务会失败关闭。旧版回退脚本的清理与元数据语义不同,并在 repo_complete 中写入软件包的 MD5 列表。任一后端退出后,PIG 都会要求 repo_complete 存在且为普通文件,但不会校验 marker 内容或其中哈希。若交付流程把 marker 当作放行条件,调用方应自行完成这些验证。
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/)
Boot 先解压到 staging 目录,并在提交前拒绝所有顶层目标冲突。在同一次运行过程中,附加仓库
先移动,pigsty 最后移动,因此其他根目录完成 rename 后才会暴露 repo_complete。如果进程在
最后一次 rename 前中断,已经移动的根目录可能保留;再次执行会拒绝这些目标冲突,直到操作员将其
删除或移走。这是失败关闭的提交顺序,不是崩溃恢复事务。该 marker 只是存在性哨兵;PIG 不校验
其中内容。已有且已提交的 pigsty 仓库会被复用,不会执行增量合并或覆盖;复用路径不会检查请求的
离线包,也不会应用其中的附加根目录。结构化输出会设置 reused: true,且不会为该路径报告任何
已解压文件。
repo reload
从 GitHub 刷新仓库元数据到最新版本。
更新后的文件会放置于 ~/.pig/repo.yml 中。