仓库管理:repo

如何使用 pig repo 子命令管理 APT/YUM 软件仓库?

pig repo 命令是一个全面的软件包仓库管理工具。 它提供了管理、添加、删除、创建和操作操作系统软件仓库的功能。 它同时支持基于 RPM(EL)和基于 Debian 的系统。


概述

pig repo - 管理 Linux APT/YUM 仓库

  pig repo list                    # 显示可用仓库列表             (info)
  pig repo info   [repo|module...] # 显示仓库详细信息             (info)
  pig repo status                  # 显示当前仓库状态             (info)
  pig repo add    [repo|module...] # 添加仓库和模块               (root)
  pig repo rm     [repo|module...] # 删除仓库和模块               (root)
  pig repo update                  # 更新仓库包缓存               (root)
  pig repo create                  # 在当前系统创建仓库           (root)
  pig repo boot                    # 从离线包启动仓库             (root)
  pig repo cache                   # 将仓库缓存为离线包           (root)

用法:
  pig repo [command]

别名:
  repo, r

示例:

  入门指南:https://pigsty.io/ext/pig/
  pig repo add -ru                 # 添加所有仓库并更新缓存(简单粗暴但有效)
  pig repo add pigsty -u           # 温和版本,仅添加 pigsty 仓库并更新缓存
  pig repo add node pgdg pigsty    # 安装 postgres 包所需的基本仓库
  pig repo add all                 # all = node + pgdg + pigsty
  pig repo add all extra           # extra 模块包含非免费和一些第三方扩展仓库
  pig repo update                  # 更新仓库缓存
  pig repo create                  # 更新本地仓库 /www/pigsty 元数据
  pig repo boot                    # 将 /tmp/pkg.tgz 解压到 /www/pigsty
  pig repo cache                   # 将 /www/pigsty 缓存到 /tmp/pkg.tgz


可用命令:
  add         添加新仓库
  boot        从离线包引导仓库
  cache       从本地仓库创建离线包
  create      创建本地 YUM/APT 仓库
  info        获取仓库详细信息
  list        打印可用仓库列表
  rm          移除仓库
  set         清除并覆盖仓库
  status      显示当前仓库状态
  update      更新仓库缓存

标志:
  -h, --help   显示帮助信息

全局标志:
      --debug              启用调试模式
  -i, --inventory string   配置清单路径
      --log-level string   日志级别:debug, info, warn, error, fatal, panic(默认 "info"      --log-path string    日志文件路径,默认输出到终端

示例

列出可用仓库并添加 PGDG 和 Pigsty 仓库,然后更新本地仓库缓存。

# 列出可用模块
pig repo list

# 添加 PGDG 和 Pigsty 仓库
pig repo add pgdg pigsty

# yum makecache 或 apt update
pig repo update

添加新仓库后,你需要更新仓库元数据缓存,你可以使用专门的 pig repo update 命令,或在 pig repo add 命令中使用 -u|--update 标志。

pig repo add pigsty -u    # 添加 pigsty 仓库并更新仓库缓存

如果你想在添加新仓库前清除所有现有仓库,你可以使用额外的 -r|--remove 标志,或使用专门的 pig repo set 子命令替代 pig repo add

pig repo add all --remove # 删除所有现有仓库并添加 node、pgdg、pigsty 仓库并更新仓库缓存
pig repo add -r           # 同上,如果缺少仓库/模块将使用默认的 `all` 别名来添加 node、pgdg、pigsty 仓库
pig repo set              # 同上,set 是 `add --remove` 的快捷方式,被删除的仓库文件会备份到 `/etc/yum.repos.d/backup` 或 `/etc/apt/sources.list.d/backup`

设置 PostgreSQL 安装所需仓库最简单粗暴但可靠的方式是清除所有现有仓库并添加所有必需的仓库:

pig repo set -u           # 清除所有现有仓库并添加所有必需的仓库并更新仓库缓存

模块

在 pigsty 中,所有仓库都被组织成模块,一个模块是仓库的集合。

模块名称可能在不同的操作系统发行版、主要版本、架构和地理区域中映射到不同的实际仓库。

Pigsty 会处理所有细节,你可以使用 pig repo list 列出所有仓库和模块。

repo_modules:   # 可用模块:19
  - all       : pigsty-infra, pigsty-pgsql, pgdg, baseos, appstream, extras, powertools, crb, epel, base, updates, security, backports
  - pigsty    : pigsty-infra, pigsty-pgsql
  - pgdg      : pgdg
  - node      : baseos, appstream, extras, powertools, crb, epel, base, updates, security, backports
  - infra     : pigsty-infra, nginx
  - pgsql     : pigsty-pgsql, pgdg-common, pgdg-el8fix, pgdg-el9fix, pgdg13, pgdg14, pgdg15, pgdg16, pgdg17, pgdg
  - extra     : pgdg-extras, pgdg13-nonfree, pgdg14-nonfree, pgdg15-nonfree, pgdg16-nonfree, pgdg17-nonfree, timescaledb, citus
  - mssql     : wiltondb
  - mysql     : mysql
  - docker    : docker-ce
  - kube      : kubernetes
  - grafana   : grafana
  - pgml      : pgml
  - groonga   : groonga
  - haproxy   : haproxyd, haproxyu
  - ivory     : ivorysql
  - local     : pigsty-local
  - mongo     : mongo
  - redis     : redis

通常安装 PostgreSQL 和所有扩展需要以下 3 个模块:

  • pgdg:官方 PostgreSQL 仓库,包含 PG 内核包、工具和 100+ 扩展。
  • pigsty:Pigsty 扩展仓库,包含 200+ 额外扩展和工具。
  • node:操作系统默认仓库,提供 PostgreSQL 所需的所有库和依赖。

有一个方便的伪模块别名 all,包含了上述 3 个基本模块。 你可以使用 pig repo add all 添加所有这些模块,或使用更简单的缩写:pig repo add


repo list

列出当前系统可用的仓库模块和仓库。

print available repo list

Usage:
  pig repo list [flags]

Aliases:
  list, l, ls

Examples:

  pig repo list                # 列出当前系统可用的仓库
  pig repo list all            # 列出所有未过滤的仓库原始数据


Flags:
  -h, --help   help for list

可用仓库定义在 cli/repo/assets/repo.yml 中, 如果你想修改仓库列表,可以通过在 ~/.pig/repo.yml 添加自己的 repo.yml 文件来实现。


repo add

向系统添加仓库配置文件。

添加新仓库

用法:
  pig repo add [flags]

别名:
  add, a, append

示例:

  pig repo add                      # = pig repo add all
  pig repo add all                  # 添加 node,pgsql,infra 仓库(推荐)
  pig repo add all -u               # 添加上述仓库并更新仓库缓存(或:--update)
  pig repo add all -r               # 添加所有仓库,删除旧仓库(或:--remove)
  pig repo add pigsty --update      # 添加 pigsty 扩展仓库并更新仓库缓存
  pig repo add pgdg --update        # 添加 pgdg 官方仓库并更新仓库缓存
  pig repo add pgsql node --remove  # 添加操作系统 + postgres 仓库,删除旧仓库
  pig repo add infra                # 添加可观测性、grafana & prometheus 堆栈、pg 二进制工具

  (注意系统仓库管理需要 sudo / root 权限)

  可用仓库模块:
  - all      :  pgsql + node + infra(推荐)
    - pigsty :  PostgreSQL 扩展仓库(默认)
    - pgdg   :  PGDG 官方 PostgreSQL 仓库(官方)
    - node   :  操作系统官方仓库(el/debian/ubuntu)
  - pgsql    :  pigsty + pgdg(所有可用的 pg 扩展)
  # 使用 pig repo list 查看可用仓库和模块

标志:
  -h, --help            显示帮助信息
      --region string   区域代码(default|china)
  -r, --remove          添加新仓库前删除现有仓库
  -u, --update          运行 apt update 或 dnf makecache

此命令:

  1. 根据以下条件验证指定模块是否存在并转换为实际仓库
  • 区域、发行版、操作系统主版本、架构
  1. 如果提供了 -r|--remove 标志,它会将现有仓库移动到备份文件夹:
  • EL 系统:/etc/yum.repos.d/backup
  • Debian 系统:/etc/apt/sources.list.d/backup
  1. 在系统的仓库目录中创建仓库文件
  • EL 系统:/etc/yum.repos.d/<module>.repo
  • Debian 系统:/etc/apt/sources.list.d/<module>.list
  1. 如果提供了 -u|--update 标志,它会运行 apt updatednf makecache 来更新仓库缓存。

如果不是以 root 身份运行,需要 sudo 权限。


repo set

repo add <...> --remove 相同,在添加新仓库前删除现有仓库。

清除并覆盖仓库

用法:
  pig repo set [flags]

别名:
  set, overwrite

示例:

  pig repo set all                  # 将仓库设置为 node,pgsql,infra(推荐)
  pig repo set all -u               # 将仓库设置为上述仓库并更新仓库缓存(或 --update)
  pig repo set pigsty --update      # 将仓库设置为 pigsty 扩展仓库并更新仓库缓存
  pig repo set pgdg   --update      # 将仓库设置为 pgdg 官方仓库并更新仓库缓存
  pig repo set infra                # 将仓库设置为可观测性、grafana & prometheus 堆栈、pg 二进制工具

  (注意系统仓库管理需要 sudo/root 权限)


标志:
  -h, --help            显示帮助信息
      --region string   区域代码
  -u, --update          运行 apt update 或 dnf makecache

如果不是以 root 身份运行,需要 sudo 权限。


repo update

更新仓库缓存,相当于 apt updateyum makecache

更新仓库缓存

用法:
  pig repo update [flags]

别名:
  update, u

示例:

  pig repo update                  # yum makecache 或 apt update


标志:
  -h, --help   显示帮助信息

如果不是以 root 身份运行,需要 sudo 权限。


repo rm

从系统中删除仓库文件。

删除仓库

用法:
  pig repo rm [flags]

别名:
  rm, remove

示例:

  pig repo rm                      # 删除(备份)所有现有仓库到备份目录
  pig repo rm all --update         # 删除模块 'all' 并更新仓库缓存
  pig repo rm node pigsty -u       # 删除模块 'node' 和 'pigsty' 并更新仓库缓存


标志:
  -h, --help     显示帮助信息
  -u, --update   运行 apt update 或 dnf makecache

它会从系统中删除仓库文件,如果提供了 -u|--update 标志,它会在删除仓库文件后运行 apt updatednf makecache 来更新仓库缓存。

在删除文件之前,该命令会创建现有仓库配置的备份。

如果不是以 root 身份运行,通常需要 sudo 权限。


repo status

打印系统仓库目录并列出系统包管理器可用的仓库。

显示当前仓库状态

用法:
  pig repo status [flags]

别名:
  status, s, st

标志:
  -h, --help   显示帮助信息

repo info

提供特定仓库或模块的详细信息。

获取仓库详细信息

用法:
  pig repo info [flags]

别名:
  info, i

标志:
  -h, --help   显示帮助信息

示例:

#-------------------------------------------------
名称       : pgdg
摘要       : PGDG
可用性     : 是(debian d12 amd64)
模块       : pgsql
系统架构   : [x86_64, aarch64]
系统发行版 : deb [11,12,20,22,24]
元数据     : trusted=yes
基础 URL   : http://apt.postgresql.org/pub/repos/apt/ ${distro_codename}-pgdg main
     china : https://mirrors.tuna.tsinghua.edu.cn/postgresql/repos/apt/ ${distro_codename}-pgdg main

# 默认仓库内容
# pgdg PGDG
deb [trusted=yes] http://apt.postgresql.org/pub/repos/apt/ bookworm-pgdg main

# 中国镜像仓库内容
# pgdg PGDG
deb [trusted=yes] https://mirrors.tuna.tsinghua.edu.cn/postgresql/repos/apt/ bookworm-pgdg main

它会打印给定仓库名称或模块名称的仓库信息。并且支持区域性镜像。


repo create

在指定目录创建本地 YUM/APT 仓库

创建本地 YUM/APT 仓库

用法:
  pig repo create [path...]

别名:
  create, cr

示例:

  pig repo create                    # 默认在 /www/pigsty 创建仓库
  pig repo create /www/mssql /www/b  # 在多个位置创建仓库

  (注意系统仓库管理需要 sudo/root 权限)

默认目录: /www/pigsty

此命令:

  1. 如果目录不存在则创建目录结构
  2. 使用仓库工具创建本地仓库(确保系统已安装这些工具)
  • EL 系统:createrepo_c
  • Debian 系统:dpkg-dev

如果不是以 root 身份运行,需要该目录的读/写权限。


repo cache

为离线使用创建仓库内容的压缩 tarball。

pig repo cache [directory_path] [package_path] [repo1,repo2,...]

参数:

  • directory_path:包含仓库的源目录(默认:/www
  • package_path:输出 tarball 路径(默认:当前目录下的 pigsty-pkg-<os>-<arch>.tgz
  • repos:要包含的仓库子目录的逗号分隔列表(默认:全部)

示例:

pig repo cache /www /tmp/pkg.tgz pigsty
pig repo cache /www /tmp/pkg.tgz pigsty mssql ivory

你可以在已创建的本地仓库上创建 tarball,并使用它从离线包引导新系统。


repo cache

从本地仓库创建离线包

从本地仓库创建离线包

用法:
  pig repo cache [flags]

别名:
  cache, c

示例:

  pig repo cache                    # 从 /www/pigsty 创建 /tmp/pkg.tgz 离线包
  pig repo cache -f                 # 强制覆盖现有包
  pig repo cache -d /srv            # 将默认内容目录 /www 覆盖为 /srv
  pig repo cache pigsty mssql       # 使用 pigsty 和 mssql 仓库创建 tarball
  pig repo c -f                     # 制作离线包的最简用法

  (注意系统仓库管理需要 sudo/root 权限)


标志:
  -d, --dir string    源仓库路径(默认 "/www/"  -h, --help          显示帮助信息
  -p, --path string   离线包路径(默认 "/tmp/pkg.tgz"

repo boot

从离线包引导本地仓库。

从离线包引导仓库

用法:
  pig repo boot [flags]

别名:
  boot, b, bt

示例:

  pig repo boot                    # 从 /tmp/pkg.tgz 引导仓库到 /www
  pig repo boot -p /tmp/pkg.tgz    # 从给定的包路径引导仓库
  pig repo boot -d /srv            # 引导仓库到另一个目录 /srv


标志:
  -d, --dir string    目标仓库路径(默认 "/www/"  -h, --help          显示帮助信息
  -p, --path string   离线包路径(默认 "/tmp/pkg.tgz"

参数:

  • offline_package:由 pig repo cache 创建的 tarball 路径
  • target_directory:解压仓库的目标目录(默认:/www

示例:

pig repo boot /tmp/pkg.tgz /www

此命令:

  1. 将 tarball 解压到目标目录
  2. 设置本地仓库配置
  3. 更新仓库元数据




最后修改 2025-03-22: update pig docs (3a10e19)