为 Azure Linux 生成 RPM 包

本文介绍如何为 Azure Linux 生成 RPM 包,并选择性地将其添加到自定义映像。 通过构建自定义 RPM,可以打包专有软件、将修补程序应用到现有包,或捆绑内部工具,以便在 Azure Linux 环境中进行一致的部署。

Azure Linux 支持两种方法。 选择最适合工作流的选项:

  • mock + 映像定制器:使用 mock 在独立 chroot 环境中生成 RPM,然后使用映像定制器自定义 Azure Linux 基础映像。 最适合已建立 RPM 构建工作流程、并需要将 Azure Linux 虚拟机(VM)映像的自定义作为单独步骤进行的开发人员。
  • azldev:单个 CLI 工具,用于处理 RPM 生成和映像自定义,作为统一的端到端工作流的一部分。 最适合在 Azure Linux 中工作的开发人员,他们希望从单个工具获得简化的体验。

Note

Azure Linux 4.0 现在位于 preview 中,严格限制为评估和测试目的。 它不适合生产用途。

先决条件

  • Azure Linux 系统(VM 或容器)或基于 Fedora/RHEL 的主机。
  • sudo 安装软件包的访问权限。
  • 您要构建的软件包的源 RPM(.src.rpm),或该软件包的 spec 文件和源代码 tarball。

使用模拟生成 RPM

mock 创建隔离的 chroot 环境以生成 RPM 包,而不会污染主机系统。 Azure Linux 在 mock 上发布了一个 RPM,其中包含 Azure Linux 构建配置,因此你可以立即开始构建。

Note

目前,建议的方法是使用 Azure Linux 4.0 随附的模拟包,其中包括适用于 Azure Linux 的预配置生成配置文件。 上游模拟配置尚不可用。

Azure Linux VM 的默认操作系统磁盘大小可能不足以使用 mock 构建软件包。 如果遇到“No space left on device”(设备上没有剩余空间)错误,则需要扩容操作系统磁盘。 有关详细信息,请参阅 扩展 Linux VM 上的虚拟硬盘。

安装模拟

使用以下命令从 PMC 安装 mock

sudo dnf install -y mock

验证 Azure Linux 模拟配置

PMC 中的 mock 包包括适用于 Azure Linux 的配置文件。 使用以下命令列出可用配置:

ls /etc/mock/azure-linux-4-*.cfg

应会看到 Azure Linux 的配置文件(例如,azure-linux-4-x86_64.cfg)。

从源 RPM 生成 RPM

使用以下命令从现有源 RPM 生成 RPM:

mock /path/to/your-package.src.rpm

mock从 Azure Linux 存储库下载所需的生成依赖项,在干净 chroot 中生成包,并将输出 RPM 置于 /var/lib/mock/azure-linux-4-x86_64/result/中。

从规范文件生成 RPM

如果您有 spec 文件和源代码压缩包,而不是源代码 RPM(SRPM),请先创建 SRPM,然后重新构建它:

  1. 使用以下命令创建 SRPM:

    mock --buildsrpm --spec /path/to/your-package.spec --sources /path/to/sources/
    

    mock 将 spec 文件和源代码 tar 包打包成 SRPM,并将其放置在 /var/lib/mock/azure-linux-4-x86_64/result/ 中。

  2. 使用以下命令从 SRPM 生成 RPM:

    mock /var/lib/mock/azure-linux-4-x86_64/result/your-package-*.src.rpm
    
  3. 构建成功后,可在结果目录中找到 RPM 软件包:

    ls /var/lib/mock/azure-linux-4-x86_64/result/*.rpm
    

使用 azldev 生成 RPM

对于更集成的开发工作流,可以使用 azldevAzure Linux Dev Tools 项目中的 CLI 工具。 azldev简化了常见的 Azure linux 开发任务,包括生成、测试和迭代包。

使用映像定制器将 RPM 添加到 Azure Linux 映像

构建 RPM 后,使用 Image Customizer 创建包含你的软件包的自定义 Azure Linux 映像。

若要详细了解 Azure Linux,请参阅以下资源: