使用 Pulp Debian 管理内容

使用 pulp_deb 插件镜像、同步、上传和发布 Debian 软件包。
56 位读者喜欢这篇文章。
Gift box opens with colors coming out

Opensource.com

Pulp 是一款开源的仓库管理工具,可以帮助您在组织内部获取、镜像、上传和发布内容。它可以用于管理各种类型的内容,例如软件包(从 RPM 包到 Ruby gems)、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 软件包。如果您想管理和提供可供 Linux 发行版(如 Debian 和 Ubuntu)使用的软件包,pulp_deb 插件是必不可少的,它是 Pulp 社区提供和维护的免费开源软件。

借助 Pulp Debian 插件,您可以通过同步远程仓库、提供上传您自己内容的接口以及将内容发布到仓库来管理 Debian 内容。

Pulp 支持几种不同的 Debian 内容类型,包括软件包、软件包索引、Release 文件等等。“内容类型”指的是特定的工件或元数据。例如,类型为 package 的内容单元指的是 .deb 软件包。

同步远程仓库是 Pulp Debian 插件的主要功能之一,也是获取内容的方式之一。同步过程使用远程定义,其中包含 URL、发行版、组件和架构

  • URL 是远程 APT 仓库的路径。
  • 发行版是 APT 仓库的 dists/ 目录和相关的 Release 文件之间的路径。这通常(但不总是)是基于 Debian 的 Linux 发行版的代码名称或套件(Debian 10 的 buster,Debian 9 的 stretch,Ubuntu 20.04 的 focal 等)。在任何 Debian 或 Ubuntu 主机上运行 lsb_release -cs 都会显示发行版的代码名称。
  • 组件描述仓库的任意子集(Debian 的 maincontribnon-free,或者 Ubuntu 的 mainrestricteduniversemultiverse)。您可以使用它来过滤和分类 APT 仓库中的软件包。
  • 架构指的是软件包可以运行的处理器架构,最常见的是 i386amd64arm64。如果软件包不依赖于特定的处理器架构,则可以将架构设置为 all

指定发行版是强制性的,而定义组件和架构是可选的。如果未定义,Pulp 会自动同步所有软件包,而不会按组件或架构进行过滤。如果相应的 GPG 公钥已分配给远程仓库,Pulp 会自动验证 Release 文件的 GNU Privacy Guard 签名。

示例工作流程

使用 Pulp 的 REST API,可以轻松地从远程仓库转到逐字发布。以下 API 调用假设您正在使用 HTTPie

假设您想向组织内的主机提供 .deb 软件包。以下基本工作流程指导您使用 Pulp 和 Pulp Debian 插件的初步步骤。

Pulp Debian workflow

图片来源:Maximilian Kolb

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="https://nginx.ac.cn/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 中作为有效的仓库。

Pulp API

使用这些 API 调用,您可以将 APT 仓库同步到您自己的 Pulp 实例并逐字重新发布它,而无需触及软件包、任何元数据或签名。有关更多信息和其他发布模式,请参阅 API 文档功能概述

开源的灵活性

Pulp 及其插件结构的一个重要方面是它非常灵活,这在很大程度上归功于其开源性质。您可以将 Pulp 作为独立服务运行,但这不是必须的。它可以集成到更大的系统中。

我在 ATIX 工作,在那里我们已经开始在一个名为 orcharhino 的项目中使用 Pulp 和 Pulp Debian 插件。它基于 Foreman,并包括功能强大的 Katello 插件,用于额外的内容管理功能,Katello 插件本身依赖于 Pulp 进行仓库管理。有了这个,我们已经能够通过自动化系统部署、配置管理和补丁管理来管理我们的数据中心。

换句话说,ATIX 开发 Pulp Debian 插件主要是考虑到 Katello 用例。无论您需要 Katello 还是 Pulp,或者只是特定的 Pulp 插件,您都可以放心,这种模块化是经过设计的。

使用 Pulp,您可以镜像远程软件仓库、托管私有软件包,并在一个平台上管理不同类型的内容。

立即试用 PulpPulp Debian 插件,不要害怕加入并向社区寻求帮助。我们欢迎任何和所有反馈。

接下来阅读
标签
User profile image.
白天是技术内容创作者 | 晚上是黑客 | 选择极简主义

评论已关闭。

Creative Commons 许可协议本作品采用 Creative Commons 署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.