跳转到主要内容

pig repo

使用 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 仓库,并更新索引:

pig repo add pgsql -u

在中国网络环境中,加上 -m 选择中国区域镜像:

pig repo add pgsql -m -u

需要由 PIG 替换整套软件源时,使用 set。该命令先备份现有定义,再添加 node、infra、pgsql 并更新索引:

pig repo set

使用 pig repo info pgsql 查看仓库定义,使用 pig repo status 查看主机当前配置。

模块

在 pig 中,APT/YUM 仓库被组织为 模块 —— 服务于特定目的的一组仓库。

模块说明仓库列表
all安装 PG 所需的全部核心模块node + infra + pgsql
pgsqlPGDG + Pigsty PG 扩展pigsty-pgsql + pgdg
pigstyPigsty Infra + PGSQL 仓库pigsty-infra, pigsty-pgsql
pgdgPGDG 官方仓库EL:pgdg-common、pgdg14-18;APT:pgdg
nodeLinux 系统仓库base, updates, extras, epel, baseos, appstream…
infra基础设施组件仓库pigsty-infra
nginxNginx 仓库nginx
dockerDocker 仓库docker-ce
betaPostgreSQL 19 Beta 版本pgdg19-beta, pgdg-beta
extraPGDG Non-Free 与三方扩展pgdg-extras, timescaledb, citus
groongaPGroonga 仓库groonga
perconaPercona PG + PG_TDEpercona
llvmLLVM 工具链仓库llvm
kubeKubernetes 仓库kubernetes
grafanaGrafana 仓库grafana
haproxyHAProxy 仓库haproxyd, haproxyu
redisRedis 仓库redis
mongoMongoDB 仓库mongo
mysqlMySQL 仓库mysql
clickClickHouse 仓库clickhouse
gitlabGitLab 仓库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 将列出当前系统可用的所有仓库模块。

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 使用 all。

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 rm

真正不带参数时,将全部软件源定义移到既有备份目录。显式模块参数只删除对应模块文件; all 只展开为 node、pgsql、infra,不代表所有文件。空字符串、纯空白、逗号空项与 不安全名称会在任何仓库或缓存操作前失败,混合列表也不例外。-u 在成功全量备份或模块删除后 更新缓存。原有备份与恢复契约保持不变。 目标模块文件已不存在时仍返回成功;摘要报告已确保不存在的模块数,不宣称每次请求都删除了 既有文件。仍支持仓库目录内的自定义模块名称。 全量备份没有找到仓库文件时,摘要明确报告没有文件需要备份。 结构化结果的 requested_modules 保留原始参数,包括 all 和逗号分隔的参数; removed_repos 列出展开后的模块及各项执行结果。

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                  # 更新包缓存
平台等效命令
ELdnf makecache(EL7:yum makecache)
Debianapt-get 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 时,PIG 在 EL 上使用 createrepo_c,在 Debian/Ubuntu 上使用 dpkg-dev 提供的 dpkg-scanpackages。 SOW 执行失败时,PIG 直接返回错误。10m 限制等待 SOW 目录锁的时间。

SOW 的 --pigsty 模式会:

  1. 只扫描顶层普通 .rpm 与 .deb 文件,不递归,也不跟随符号链接。
  2. 删除 i386 架构的 DEB 包,以及包名为 patroni、上游版本为 3.0.4 的 RPM/DEB 包。
  3. 生成 RPM/DEB 元数据,最后写入 repo_complete;标记文件按包文件名排序,记录剩余顶层软件包的 SHA-256。

annobin-docs 等文档包会保留,除非命中其他清理规则;不会仅因文件名包含 docs 而删除软件包。

SOW 保留非软件包文件和目录;软件包无法解析或同一软件包坐标冲突时停止。旧后端在 repo_complete 中记录 MD5,清理规则也与 SOW 不同。PIG 检查该文件是否存在,不校验其中的哈希;分发离线包前可用该清单检查文件完整性。

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/)

命令先解压到临时目录,检查目标路径,再移动仓库。附加仓库先移动,pigsty 最后移动。

  • 目标已有完整的 pigsty/repo_complete 时,直接复用该仓库。命令不会读取离线包,也不会导入包中的附加仓库;结构化结果显示 reused: true。
  • 目标路径冲突时停止。若上一次运行中断,先检查并移走已移动的冲突目录,再重试。
  • 离线包必须包含普通文件 pigsty/repo_complete。PIG 检查该文件是否存在,不校验其内容。

repo reload

从 Pigsty 仓库站点下载最新仓库目录。

pig repo reload                  # 刷新仓库目录

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

这个页面对您有帮助吗?