跳至内容

使用 Pulp 获取和分发 RPM 仓库

简介

使用 Rocky Linux 的开发者通常需要不同的远程 RPM 存储库来支持他们的操作。Pulp 是一个开源项目,通过促进获取和分发不同的 RPM 存储库,可以帮助开发者满足这一需求。本指南展示了一个使用 Pulp 从 Rocky Linux 存储库中获取 BaseOS 和 AppStream 的简单示例。

要求

  • 一个 Rocky Linux 系统
  • 能够运行容器

设置 - 单个容器

Pulp 有许多可能的设置,但本指南将使用单个容器部署场景以便于说明。选择一个目录用于 Pulp,并创建以下目录和文件。

mkdir -p settings/certs pulp_storage pgsql containers
echo "CONTENT_ORIGIN='http://$(hostname):8080'" >> settings/settings.py

如果启用了 SELinux,您可以运行以下命令来部署 Pulp。如果 SELinux 未启用,则可以从 `--volume` 行中删除 `:Z` 后缀。

$ podman run --detach \
             --publish 8080:80 \
             --name pulp \
             --volume "$(pwd)/settings":/etc/pulp:Z \
             --volume "$(pwd)/pulp_storage":/var/lib/pulp:Z \
             --volume "$(pwd)/pgsql":/var/lib/pgsql:Z \
             --volume "$(pwd)/containers":/var/lib/containers:Z \
             --device /dev/fuse \
             pulp/pulp

如果您浏览到 `https://:8080/pulp/content/`,现在应该会看到“Index of /pulp/content/”,目前是空的。在本指南结束时,您将用您的存储库填充这些内容。

empty_index

创建 Pulp 远程存储库

将 Pulp 远程存储库视为远程源存储库。在本例中,远程源存储库是来自 Rocky Linux 9.2 存储库的 BaseOS 和 AppStream。您将使用这些远程存储库同步到您使用 Pulp 创建的存储库。有关远程存储库策略的更多信息,请查阅 Pulp 官方文档

pulp rpm remote create --name "rocky_92_appstream_vault" --url "https://dl.rockylinux.org/vault/rocky/9.2/AppStream/x86_64/os/" --policy on_demand
pulp rpm remote create --name "rocky_92_baseos_vault" --url "https://dl.rockylinux.org/vault/rocky/9.2/BaseOS/x86_64/os/" --policy on_demand

Pulp 存储库复制

这些将是一对一的存储库复制,来自 Rocky Linux 9.2 存储库的 BaseOS 和 AppStream。如果您知道要从中同步的远程存储库,可以在创建存储库时添加这些远程存储库。否则,如果您不知道使用哪些远程存储库,或者这些远程存储库可能会更改,则可以省略远程存储库。在本指南中,远程存储库的声明发生在存储库创建时。

pulp rpm repository create --name "R92_AppStream_Vault" --remote "rocky_92_appstream_vault"
pulp rpm repository create --name "R92_BaseOS_Vault" --remote "rocky_92_baseos_vault"

Pulp 同步复制

注意

重要的是添加 `--skip-type treeinfo`。否则,您将得到一个奇怪的混合体,而不是 BaseOS 或 AppStream。这可能是由于依赖性封闭的存储库存在问题。如果之前未指定远程存储库,您可以直接添加它。如果您在创建时添加了它,则在同步中不必提及该远程存储库,这是隐含的。

pulp rpm repository sync --name "R92_AppStream_Vault" --skip-type treeinfo
pulp rpm repository sync --name "R92_BaseOS_Vault" --skip-type treeinfo

Pulp 发布 Publications

一旦您的存储库从远程存储库同步完成,您将希望从这些存储库创建 Publications,以便为 Distributions 提供服务。到目前为止,您还可以仅使用远程存储库和存储库的名称,但是,Pulp 还依赖于 `hrefs`,您可以互换使用它们。创建 Publication 后,请务必记下每个 Publication 的 `pulp_href` 值,因为它们在下一步中是必需的。

pulp rpm publication create --repository "R92_AppStream_Vault"
pulp rpm publication create --repository "R92_BaseOS_Vault"

Pulp 创建 Distributions

使用上一步 Publication 的 `pulp_href`,您现在可以将该内容提供给 Distribution。这些内容将显示在 `https://:8080/pulp/content/` 下,并且不再为空。您可以使用 `pulp rpm publication list` 命令检查 Publications 的 `pulp_href`,并查找 `pulp_href`。例如,BaseOS 的 `pulp_href` 如下所示,但您的 `pulp_href` 可能不同,因此请相应地进行替换。

pulp rpm distribution create --name "Copy of BaseOS 92 RL Vault" --base-path "R92_BaseOS_Vault" --publication "/pulp/api/v3/publications/rpm/rpm/0195fdaa-a194-7e9d-a6a9-e6fd4eaa7a20/"
pulp rpm distribution create --name "Copy of AppStream 92 RL Vault" --base-path "R92_AppStream_Vault" --publication "<pulp_href>"

如果您检查 `https://:8080/pulp/content/`,您应该会看到您的两个存储库,它们是 Rocky Linux 9.2 AppStream 和 BaseOS 存储库的副本。

content_index

结论

Pulp 可以是一个非常有用的工具,用于获取多个存储库并根据需要进行分发。虽然这是一个基本示例,但您可以在各种更复杂和高级的部署场景中使用 Pulp。有关更多信息,请查阅 官方文档

作者:David Gomez

贡献者:Steven Spencer, Ganna Zhyrnova