注意

本文档适用于 Ceph 开发版本。

基础知识( tl;dr )

本章介绍了每位 Ceph 开发者都需要了解的基本信息。

领导团队

Ceph 项目由 Sage Weil 创建,并由 Ceph 领导团队(CLT)领导。Ceph 项目的每个主要组件都有自己的领导者。Ceph 社区网站上的团队列表显示了所有领导者和他们在 Ceph 特定缩写中的昵称团队列表在领导者的表格中,Ceph 特定的缩写在表格中解释GitHub:

16d2b3: 历史背景架构.

历史背景

请参阅维基百科文章的历史章节.

许可证

Ceph 是自由软件。

除非另有说明,Ceph 源代码根据 LGPL2.1 或 LGPL3.0 的条款进行分发。有关详细信息,请参阅源代码树顶层目录中的文件COPYING83f41f: 源代码仓库

源代码仓库

Ceph 的源代码存储在GitHub在 Ceph “组织”下的一组仓库中Ceph “组织”.

要对项目做出有意义的贡献,作为开发者,必须具备git的基本知识。

虽然该Ceph “组织”包括几个软件仓库,本文件仅涵盖一个:https://github.com/ceph/ceph.

Redmine 问题跟踪器

Although GitHub用于代码,Ceph 相关的问题(错误、功能、回滚、文档等)在http://tracker.ceph.com,由Redmine.

驱动,跟踪器有一个 Ceph 项目,其中包含与各种架构组件松散对应的一组子项目(见架构).

Mere注册在跟踪器中自动授予权限

要报告错误或提出新功能,跳转到 Ceph 项目新问题.

Slack

邮件列表上。

Ceph 开发者和用户在Ceph 相关的邮件列表上讨论项目.

Ceph 开发邮件列表

The dev@ceph.io列表用于讨论 Ceph 的发展,其与其他技术的互操作性以及项目的运营。

Ceph 开发的电子邮件讨论列表向所有人开放。通过完成 dev.ceph.io 上的注册表单进行订阅。.

Ceph 客户端补丁审查邮件列表

The ceph-devel@vger.kernel.org列表用于讨论和 Linux 内核 Ceph 客户端组件的补丁审查。请注意,该列表曾经是所有开发者的通用列表。在搜索存档时,请记住该列表在 2018 年年中之前包含通用 devel-ceph 存档。

通过使用 vger.kernel.org 中 ceph-devel 的子链接订阅涵盖 Linux 内核 Ceph 客户端组件的列表sub link for ceph-devel in vger.kernel.org.

IRC

除了邮件列表之外,Ceph 社区还使用互联网中继聊天.

进行实时交流。Ceph 社区聚集在 Open and Free Technology Community (OFTC) IRC 网络的 #ceph 频道。

创建于 1988 年,互联网中继聊天(IRC)是一种基于中继的实时聊天协议。它主要设计用于在称为频道的讨论论坛中进行组(多对多)通信,但也允许通过私人消息进行一对一通信。在 IRC 上,您可以使用 Ceph 与许多其他成员交谈,话题范围从闲聊到支持问题。尽管一个频道在任何时候可能有许多人在其中,但他们可能并不总是在键盘前;所以如果没有人回应,只需等待,希望不久就会有人回答。

注册

如果您打算持续使用 IRC 服务,建议您注册一个账户。注册将为您提供唯一的 IRC 身份,并允许您访问由于技术原因而阻止未注册用户进入的频道。

请参阅the official OFTC (Open and Free Technology Community) documentation's registration instructions <https://www.oftc.net/Services/#register-your-account>要了解如何

通道

要连接到 OFTC IRC 网络,请下载一个 IRC 客户端并将其配置为连接到irc.oftc.net。然后加入一个或多个频道。#ceph 内部的讨论会被记录下来,并且在线存档可用。

以下是 Ceph 社区的实时讨论频道:

  • #ceph

  • #ceph-devel

  • #cephfs

  • #ceph-dashboard

  • #ceph-orchestrators

  • #sepia

提交补丁

提交补丁的规范说明包含在源代码树顶层目录中的文件CONTRIBUTING.rst中。本指南与该文件可能存在一些重叠。

鼓励所有新来者仔细阅读该文件。

从源代码构建

请参阅构建Ceph.

使用 ccache 加速本地构建

ccache可以使重新构建 ceph 源代码树的过程更快。

在您使用ccache来加速 ceph 源代码树的重新构建之前,请确保您的源代码树是干净的,并且不会产生构建错误。当您有一个干净的源代码树时,您可以自信地使用ccache,并确信您没有使用一个脏的树。

旧的构建产物可能导致构建失败。当您从一个分支切换到另一个分支时,您可能会无意中引入这些产物。如果您在尝试本地构建时看到构建错误,请按照以下步骤清理您的源代码树。

清理源代码树

ninja clean

Note

以下命令将删除源代码树中所有未被 git 跟踪的内容。在运行这些命令之前,请确保备份您的日志文件和配置选项。

git clean -fdx; git submodule foreach git clean -fdx

使用 ccache 构建 Ceph

ccache在大多数发行版中都可以作为软件包获取。要使用 ccache 构建 ceph,请运行以下命令。

cmake -DWITH_CCACHE=ON ..

使用 ccache 加速构建时间

ccache可以用于加速系统的所有构建。有关详细信息,请参阅 ccache 手册的运行模式部分。默认设置ccache可以使用ccache -s command.

Note

显示。我们建议覆盖max_size。默认值是 10G。配置部分。

为了进一步提高缓存命中率并减少开发环境中的编译时间,将版本信息和构建时间戳设置为固定值。这样就不必重新构建包含此信息的二进制文件。

这可以通过向ccache配置文件添加以下设置来实现ccache.conf:

sloppiness = time_macros
run_second_cpp = true

现在,将环境变量SOURCE_DATE_EPOCH设置为固定值(一个ENABLE_GIT_VERSIONtoOFF。使用这些构建选项生成的二进制文件不适用于生产或调试目的,因为它们不包含正确的构建时间和 git 版本信息。cmake:

export SOURCE_DATE_EPOCH=946684800
cmake -DWITH_CCACHE=ON -DENABLE_GIT_VERSION=OFF ..

Note

时设置

开发模式集群

请参阅开发者指南(快速).

Kubernetes/Rook 开发集群

请参阅Hacking on Ceph in Kubernetes with Rook

Backporting

所有错误修复都应该在回滚之前合并到main分支。要标记用于回滚的错误修复,请确保它有一个跟踪问题与之相关,并将Backport字段设置为要回滚的先前版本的逗号分隔列表(例如“hammer,jewel”)。您负责您提出的拉取请求的回滚。

Dependabot

Dependabot 是一个 GitHub 机器人,它扫描存储库中的依赖项以查找安全漏洞(CVE)。如果发现 CVE 有修复程序,Dependabot 将创建一个拉取请求来更新依赖项。

Dependabot 还指示升级的兼容性分数。此分数基于在其他 GitHub 存储库中应用修复程序时发生的 CI 失败数量。

通过一些配置,Dependabot 可以执行非安全更新(例如,它可以升级到最新的次要版本或补丁版本)。

Dependabot 支持多种语言和包管理器。截至 2022 年 7 月,Ceph 项目仅从 pip(基于requirements.txt文件)和 npm (package*.json) 接收警报。可以将这些警报扩展到 git 子模块、Golang 和 Java。截至 2022 年 7 月,不支持 vcpkg、conan、C++20 模块等 C++ 包管理器。

Dependabot 发现的许多依赖项最好在 Ceph Github 存储库以外的其他地方进行更新(例如,分发软件包将是一个更好的更新某些依赖项的地方)。尽管如此,Dependabot 生成的新的和现有的漏洞列表将很有用。

以下是一个 Dependabot 拉取请求的示例。

使用集群日志的指导

如果您的补丁向 Ceph 集群日志发出消息,请参阅此:使用集群日志.

由 Ceph 基金会带给您

Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.