打包简介

MariaDB 旨在普遍适用于所有可能的平台,我们欢迎与此相关的贡献。MariaDB 已支持许多操作系统(Windows、Mac、Linux 等)及其变体(Fedora/Red Hat、Debian/Ubuntu、SUSE 等),并且 MariaDB 可在所有主要架构(Intel、Power 等)上运行,但仍有一些平台尚未提供 MariaDB 或 MariaDB 的用户体验尚不完善。此外,还有一些全新的打包格式(Snap、Flatpak 等)和相关系统(Docker、Rkt、Juju)尚未提供完全开发和测试过的 MariaDB 设置。

我们鼓励在特定系统方面具有专业知识的每个人联系我们并贡献力量,使 MariaDB 在他们选择的平台上完美运行。

上游 MariaDB git 仓库的打包流程

Example of downloads.mariadb.org repository
downloads.mariadb.org 仓库示例

MariaDB 服务器和连接器在 Github.com/MariaDB 公开开发。MariaDB 服务器的上游源代码仓库包含与 .deb 打包相关的文件,位于目录 debian/ 中,而与 RPM 相关的文件及其他一些文件可以在目录 support-files/ 中找到。

当发布新版本的 MariaDB 时,官方版本会以 tarball 形式发布到 downloads.mariadb.org。每个版本也会被构建成各种软件包并在此处提供下载。

实际上,主分支上的每一个提交都会由我们的持续集成系统 Buildbot 构建成软件包。这使得 MariaDB 开发者能够尽早发现任何破坏打包或导致安装/升级问题的更改。在 Buildbot 网格视图中,可以看到哪些软件包是自动构建和测试的。

鼓励所有为打包做出贡献的人直接在上游通过 Pull Request 和补丁进行,以便他们的工作能够通过 MariaDB 的官方 CI 系统进行测试,并由尽可能多的 MariaDB 开发者和用户进行评审和验证。

Buildbot grid view example
Buildbot 网格视图示例

此外,直接在上游源代码树中完成打包工作可以让开发者注意到它,从而降低未来发布的 MariaDB 版本破坏打包或使其下游变得复杂的可能性。

下游仓库的打包

在某些情况下,打包只能在下游进行。例如,官方 Debian 和 Ubuntu 仓库中的 MariaDB 不使用上游版本中 debian/ 目录下的文件,而是拥有自己的 Debian 托管的 git 仓库,官方的 Debian/Ubuntu 打包工作就在 salsa.debian.org 上进行。

这是由于通用的 Debian 质量保证工作流程所致,该流程要求快速解决在 bugs.debian.org 提交的 Debian 特定流程和 Debian 特定 Bug,方法是在 Debian 中修复问题并为同一个上游 MariaDB 版本创建新的 Debian 修订版(例如 10.3.7-1, 10.3.7-2..)。Debian 策略以其大量的严格要求(如果打印出来有 150 页长)而闻名,Debian 中的版本需要严格遵守这些要求,而上游打包可能稍微软一些,并针对略微不同的需求,因此它们有所差异是合理的。然而从长远来看,即使在下游完成的打包也应该上游化,以确保未来兼容性,并享受上游开发者关注带来的好处,正如前一章所述。

Debian 仓库包含其自己的 README.MaintainerREADME.Contributor 文件,解释了 Debian 特定的流程。

如何进行打包更改

如果在某个下游系统中进行打包更改,则应遵循该系统的指导方针。

以下是关于如何在上游 MariaDB 源代码中进行良好的打包更改的提示。

Deb 包

所有与 .deb 打包(适用于 Debian, Ubuntu, Mint 等)相关的文件都位于 debian/ 目录内。构建是通过运行 autobake-deb.sh 脚本完成的。该脚本是 MariaDB 特有的,其设计目的是为了能够为 MariaDB 目标的所有 Debian 变体和发行版构建 .deb 包。例如,debian/ 中的 rulescontrol 文件是针对最新的 Debian 和 Ubuntu 发行版制作的,因此包含最新内容。然后,autobake-deb.sh 文件会检测其运行环境,如果控制或规则文件中的某些内容在该环境中不受支持,则会动态降级。例如,如果 cracklib 版本 2.0 或更新版本不可用,与其相关的段落会在开始 .deb 构建过程之前自动从 controlrules 文件中移除,因为我们知道否则会失败。

要运行 autobake-deb.sh,您需要拥有一个基于 Debian/Ubuntu 的系统,或者使用 Docker 或类似工具来启动脚本。

Example of Launchpad PPA
Launchpad PPA 示例

在本地验证更改后,您可以使用免费的 Launchpad.net 账户轻松地在多个平台和 Ubuntu 发行版上构建,并将生成的软件包发布到个人软件包存档 (PPA) 中,以便于基于仓库的测试。详情请参阅 MariaDB 知识库文章 Uploading Package to PPA (请注意,此示例使用下游 salsa.debian.org 版本的 MariaDB 源代码,而非上游 git 仓库)。

RPM 包

上游 MariaDB 仓库已不再手动定义 .spec 文件,而是依赖于 CMake 的 CPack 功能自动生成 .rpm 文件。定义可以在 cmake/cpack_rpm.cmake 中找到。