跳转到主要内容

pig repo

使用 pig repo 子命令管理软件仓库

pig repo 命令是一个综合性的软件包仓库管理工具。它提供了添加、移除、创建和管理软件仓库的功能,支持 RPM 系统(RHEL/CentOS/Rocky/Alma)和 Debian 系统(Debian/Ubuntu)。

pig repo - Manage Linux APT/YUM Repo

  pig repo list                    # available repo list             (info)
  pig repo info   [repo|module...] # show repo info                  (info)
  pig repo status                  # show current repo status        (info)
  pig repo add    [repo|module...] # add repo and modules            (root)
  pig repo rm     [repo|module...] # remove repo & modules           (root)
  pig repo update                  # update repo pkg cache           (root)
  pig repo create                  # create repo on current system   (root)
  pig repo boot                    # boot repo from offline package  (root)
  pig repo cache                   # cache repo as offline package   (root)

Examples:
  pig repo add -ru                 # add all repo and update cache (brute but effective)
  pig repo add pigsty -u           # gentle version, only add pigsty repo and update cache
  pig repo add node pgdg pigsty    # essential repo to install postgres packages
  pig repo add all                 # all = node + pgdg + pigsty
  pig repo add all extra           # extra module has non-free and some 3rd repo for certain extensions
  pig repo add all -m              # 优先使用内置的中国区域镜像
  pig repo update                  # update repo cache
  pig repo create                  # update local repo /www/pigsty meta
  pig repo boot                    # extract /tmp/pkg.tgz to /www/pigsty
  pig repo cache                   # cache /www/pigsty into /tmp/pkg.tgz
命令 描述 备注
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 刷新仓库目录

快速入门

# 方法 1:替换模式——仅当 PIG 应接管主机仓库定义时使用
pig repo add all --remove --update    # 移除旧仓库,添加所有必要仓库,更新缓存

# 方法 1 变体:一步到位
pig repo set                          # = pig repo add all --remove --update

# 方法 2:温和方式 - 仅添加所需仓库,保留你目前的仓库配置
pig repo add pgsql                    # 添加 PGDG 和 Pigsty PGSQL 仓库
pig repo add pigsty --region=china    # 添加 Pigsty 仓库,指定使用中国区域
pig repo add pgdg   --region=europe   # 添加 PGDG 仓库,指定使用欧洲区域
pig repo add infra  --region=default  # 添加 INFRA 仓库 ,指定使用默认区域
pig repo add all -m                   # 明确选择内置的中国区域镜像

# 如果上面没有-u|--update 选项一步到位,请额外执行此命令
pig repo update                       # 更新系统包缓存

模块

在 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 模块,一次性添加所有需要的仓库到系统中,对绝大多数用户来说,这是合适的起点。

pig repo add all      # 添加 node,pgsql,infra 三个仓库到系统中
pig repo add          # 不添加任何参数时,默认使用 all 模块
pig repo set          # 使用 set 替代 add 时,将清理备份现有仓库定义并覆盖式更新

仓库定义

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 将列出当前系统可用的所有仓库模块。

pig repo list                # 列出当前系统可用仓库
pig repo list all            # 列出所有仓库(不过滤)

repo info

显示特定仓库或模块的详细信息,包括 URL、元数据和区域镜像,以及 .repo / .list 仓库文件内容。

pig repo info pgdg               # 显示 pgdg 模块的信息
pig repo info pigsty pgdg        # 显示多个模块的信息
pig repo info all                # 显示所有模块的信息

repo status

显示系统上的当前仓库配置。

pig repo status

repo add

添加仓库配置文件到系统。需要 root/sudo 权限。

pig repo add pgdg                # 添加 PGDG 仓库
pig repo add pgdg pigsty         # 添加多个仓库
pig repo add all                 # 添加所有必要仓库 (pgdg + pigsty + node)
pig repo add pigsty -u           # 添加并更新缓存
pig repo add all -r              # 添加前移除现有仓库
pig repo add all -ru             # 移除、添加并更新(完全重置)
pig repo add pgdg --region=china # 使用中国镜像
pig repo add pgsql -m            # 明确选择中国区域镜像

选项:

  • -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 repo set                     # 替换为默认仓库
pig repo set pgdg pigsty         # 替换为特定仓库并更新
pig repo set all --region=china  # 使用中国镜像
pig repo set -m                  # 明确选择中国区域镜像

repo set 支持与 repo add 相同的 --region-m|--mirror 区域选择;它始终是覆盖式语义,相当于 repo add all --remove --update

repo rm

移除仓库配置文件并备份它们。

pig repo rm                      # 移除所有仓库
pig repo rm pgdg                 # 移除特定仓库
pig repo rm pgdg pigsty -u       # 移除并更新缓存
平台 备份位置
EL /etc/yum.repos.d/backup/
Debian /etc/apt/sources.list.d/backup/

repo update

更新包管理器缓存以反映仓库更改。

pig repo update                  # 更新包缓存
平台 等效命令
EL dnf makecache
Debian apt update

repo create

为离线安装创建本地包仓库。

pig repo create                  # Linux:/www/pigsty;macOS:当前目录
pig repo create /srv/repo        # 在自定义位置创建

当前实现会优先使用 PATH 中的 sow。在 Linux 上选择 SOW 后,会对每个目标目录以 sudo 执行等价命令:

sow create --pigsty --timeout 10m -- /absolute/repository/path

在 macOS 上必须安装 SOW,执行时不使用 sudo,默认目标为当前目录。Linux 上如果没有安装 sow,EL 会回退到 createrepo_c,Debian/Ubuntu 会回退到 dpkg-dev 提供的 dpkg-scanpackages;首选后端与平台回退均不可用时,pig repo create 才会失败。SOW 一旦被选中,其执行错误会直接返回,不会再用旧后端重试。10m 只限制等待 SOW 目录锁的时间,并不限制仓库索引本身的执行时间。

SOW 的 --pigsty 事务会:

  1. 只扫描顶层普通 .rpm.deb 文件,不递归,也不跟随符号链接。
  2. 按解析后的软件包事实,删除 32 位 x86 包(RPM 的 i386/i486/i586/i686、DEB 的 i386),以及二进制包名恰为 patroni、上游版本恰为 3.0.4 的包。
  3. 以原子方式生成对应的 RPM/DEB 元数据,最后写入 repo_complete;marker 按 basename 排序,记录剩余顶层软件包的 SHA-256。

非软件包文件与目录不会被改动;候选软件包无法解析或逻辑坐标冲突时,SOW 事务会失败关闭。旧版回退脚本的清理与元数据语义不同,并在 repo_complete 中写入软件包的 MD5 列表。任一后端退出后,PIG 都会要求 repo_complete 存在且为普通文件,但不会校验 marker 内容或其中哈希。若交付流程把 marker 当作放行条件,调用方应自行完成这些验证。

repo cache

创建仓库内容的压缩 tarball 用于离线分发。

pig repo cache                   # 默认:/www 到 /tmp/pkg.tgz
pig repo cache -d /srv           # 自定义源目录
pig repo cache pigsty docker     # 包含多个顶层仓库

选项:

  • -d, --dir:源目录(默认:/www/
  • -p, --path:输出路径(默认:/tmp/pkg.tgz

离线包必须包含 pigsty,且 pigsty/repo_complete 必须是普通文件。请求中不存在的仓库会被 跳过,并与实际打包的仓库分别报告。原生 boot 解包器只接受目录和普通文件,因此 cache 拒绝符号链接。cache 失败时不会覆盖已有的输出包。

repo boot

从离线包解压并设置本地仓库。

pig repo boot                    # 默认:/tmp/pkg.tgz 到 /www
pig repo boot -p /mnt/pkg.tgz   # 自定义包路径
pig repo boot -d /srv           # 自定义目标目录

选项:

  • -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 reload                  # 刷新仓库目录

更新后的文件会放置于 ~/.pig/repo.yml 中。