使用 Pulp Debian 管理内容
使用pulp_deb 插件镜像、同步、上传和发布Debian 软件包。
Pulp 是一种开源存储库管理工具,可帮助您在组织内获取、镜像、上传和发布内容。它可用于管理各种类型的内容,例如软件包(从 RPM 包到 Ruby gem),以及 Ansible 集合、容器映像,甚至任意文件。
典型的工作流程首先从现有存储库(例如,http://mirror.centos.org/centos/7/os/x86_64/)获取软件包或手动添加软件包(对于组织内构建的私有软件包)。然后,Pulp 可以帮助您创建可供客户使用的任意软件包集合。有了它,您:
- 控制消费者可以使用哪些内容
- 可以使用版本控制
- 通过提供本地重复数据删除源来减少带宽和存储需求
如果您是 Pulp 的新手,请阅读 Melanie Corr 的介绍性文章,了解如何使用 Pulp 管理软件存储库。
使用 Pulp 管理 Debian 软件包
Pulp 依靠插件来充分处理不同类型的内容。例如,Pulp RPM 插件使您能够管理 .rpm 包。使用 Pulp Debian 插件,您可以在 APT 存储库中镜像、同步、上传和发布 .deb 包。如果您想为 Debian 和 Ubuntu 等 Linux 发行版管理和提供可使用的软件包,pulp_deb 插件是必不可少的,它是由 Pulp 社区提供和维护的免费开源软件。
使用 Pulp Debian 插件,您可以通过同步远程存储库、提供上传您自己的内容的界面以及将内容发布到存储库来管理 Debian 内容。
Pulp 支持多种不同的 Debian 内容类型,包括软件包、软件包索引、发布文件等。 “内容类型”是指特定的工件或元数据。例如,package
类型的内容单元指的是 .deb 包。
同步远程存储库是 Pulp Debian 插件的主要功能之一,也是获取内容的方式之一。同步过程使用包含 URL、分布、组件和体系结构的远程定义:
- URL 是远程 APT 存储库的路径。
- distribution 是 APT 存储库的
dists/
目录和相关Release
文件之间的路径。这通常(但并非总是)基于 Debian 的 Linux 发行版的代号或套件(Debian 10 为buster
,Debian 9 为stretch
,focal
代码 > Ubuntu 20.04 等)。在任何 Debian 或 Ubuntu 主机上运行 lsb_release -cs 会显示发行版的代号。 - 组件描述存储库的任意子集(Debian的
main
、contrib
或non-free
,或Ubuntu 的 main
、restricted
、universe
和multiverse
)。您可以使用它来过滤和分类 APT 存储库中的包。 - 架构是指软件包可以运行的处理器架构,最常见的是
i386
、amd64
或arm64
。如果软件包不依赖于特定的处理器架构,则该架构可以设置为all
。
指定发行版是强制性的,而定义组件和架构是可选的。如果未定义,Pulp 会自动同步所有包,而不过滤组件或架构。如果将相应的 GPG 公钥分配给远程设备,Pulp 会自动验证 Release
文件的 GNU Privacy Guard 签名。
工作流程示例
使用 Pulp 的 REST API 可以轻松地从远程存储库转到逐字发布。以下 API 调用假设您使用的是 HTTPie。
假设您想要向组织内的主机提供 .deb 软件包。以下基本工作流程指导您使用 Pulp 和 Pulp Debian 插件的第一步。
马克西米利安·科尔布摄
1.创建本地仓库
首先使用单个 API 调用在 Pulp 中创建本地存储库。您可以使用 HTTPie 或curl 命令来执行此操作:
http post http://<hostname>:24817/pulp/api/v3/repositories/deb/apt/ name=<name_of_your_repository>
2. 创建远程
接下来,创建一个远程。此 API 调用需要 URL 和任意 name
值。定义发行版和架构是可选的:
http post http://<hostname>:24817/pulp/api/v3/remotes/deb/apt/ name="nginx.org" url="http://nginx.org/packages/debian" distributions="buster"
无论您只定义一个还是多个发行版,Pulp 稍后都会同步所有架构的包,因为它们对于该远程版本是未定义的。
3. 同步
将远程内容获取到 Pulp 的第三步也是最后一步是将远程内容同步到本地存储库。您可以通过调用存储库的同步 API 端点来执行此操作:
http post http://<hostname>:24817/pulp/api/v3/repositories/deb/apt/<uuid_repository>/sync/ remote=http://<hostname>:24817/pulp/api/v3/remotes/deb/apt/<uuid_remote>/
在此示例命令中,每个 UUID 均引用 Pulp 的内部引用,由 API 显示为 pulp_href
。此步骤可能需要一些时间,具体取决于您的环境、存储库的大小和可用带宽。
让您的 Pulp 内容变得可消费
通过同步获取 Pulp 内容后,客户端即可使用该内容。
1. 创建出版物
出版物始终基于 Pulp 存储库。它们包含有关如何发布内容的额外设置。您可以在包含 .deb 包的 APT 类型的任何存储库上使用 APT
发布者。
以下 API 调用以逐字模式创建发布。也就是说,它提供了与远程存储库完全相同的结构和内容:
http post http://<hostname>:24817/pulp/api/v3/publications/deb/verbatim/ repository=/pulp/api/v3/repositories/deb/apt/<uuid_repository>/
将 UUID 替换为您要发布的存储库。此步骤可能需要一些时间,具体取决于存储库的大小。
2. 创建发行版
发行版获取已完成的出版物并通过 Pulp 内容应用程序提供服务,这使其可供用户使用(或“可消费”)。在 Debian 系统的上下文中,这意味着可以将存储库添加到 /etc/apt/sources.list
并用作安装软件的方式。
以下 API 调用需要在第一步中创建的发布的 UUID:
http post http://<hostname>:24817/pulp/api/v3/distributions/deb/apt/ name="name_of_the_distribution" base_path="base_path_of_the_distribution" publication=http://<hostname>:24817/pulp/api/v3/publications/deb/verbatim/<uuid_publication>/
base_path
值是客户端在引用 APT 存储库时使用的 URL 的一部分,并且名称可以是任意的。在特定已发布的发行版上调用发行版的 API 端点会返回 Pulp 存储库的 URL:
http get http://<hostname>:24817/pulp/api/v3/distributions/deb/apt/<uuid_distribution>/
该 URL 可由 APT 客户端直接使用。现在可以将其作为有效存储库添加到 /etc/apt/sources.list
中。
纸浆原料药
使用这些 API 调用,您可以将 APT 存储库同步到您自己的 Pulp 实例并逐字重新发布,而无需触及包、任何元数据或签名。有关更多信息和其他发布方式,请参阅 API 文档和功能概述。
开源灵活性
Pulp 及其插件结构的一个重要方面是它非常灵活,这在很大程度上归功于其开源特性。您可以将 Pulp 作为独立服务运行,但并非必须如此。它可以集成到更大的东西中。
我在 ATIX 工作,我们开始在一个名为 orcharhino 的项目中使用 Pulp 和 Pulp Debian 插件。它基于 Foreman,并包含用于附加内容管理功能的强大 Katello 插件,该插件本身依赖于 Pulp 进行存储库管理。这样,我们就能够通过自动化系统部署、配置管理和补丁管理来管理我们的数据中心。
换句话说,ATIX 开发 Pulp Debian 插件主要考虑到了 Katello 用例。无论您需要 Katello 还是 Pulp 还是只是一个特定的 Pulp 插件,您都可以放心,这种模块化是设计使然的。
使用 Pulp,您可以镜像远程软件存储库、托管私有软件包以及在一个平台上管理不同类型的内容。
立即尝试 Pulp 和 Pulp Debian 插件,不要害怕加入社区并向社区寻求帮助。我们欢迎任何和所有反馈。