注意

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

要点 (tl;dr)

本章介绍每个 Ceph 开发人员都需要了解的基本信息。

负责人

Ceph 项目由 Sage Weil 创建,并由 Ceph 领导团队 (Ceph Leadership Team, CLT) 领导。Ceph 项目的每个主要组件都有自己的负责人。Ceph 社区网站上的团队列表显示了所有负责人及其在 GitHub 上的昵称。

负责人表中的 Ceph 特有缩写在架构中进行了解释。

历史

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

许可

Ceph 是自由软件。

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

源代码仓库

Ceph 的源代码位于 GitHub 上的 Ceph “组织” 下的多个仓库中。

了解 git 对于作为开发人员对项目做出有意义的贡献至关重要。

尽管 Ceph “组织” 包含多个软件仓库,但本文档仅涵盖其中一个:https://github.com/ceph/ceph

Redmine 问题跟踪器

尽管 GitHub 用于代码,但 Ceph 相关问题(错误、功能、回溯、文档等)在 http://tracker.ceph.com 上进行跟踪,该跟踪器由 Redmine 提供支持。

该跟踪器有一个 Ceph 项目,其中包含一些松散对应于各种架构组件的子项目(参见架构)。

只需在跟踪器中注册即可自动授予打开新问题和评论现有问题的权限。

要报告错误或提出新功能,请跳转到 Ceph 项目并点击新建问题

Slack

邮件列表

Ceph 开发人员和用户在与 Ceph 相关的邮件列表上讨论该项目。

Ceph 开发邮件列表

dev@ceph.io 列表用于讨论 Ceph 的开发、其与其他技术的互操作性以及项目本身的运作。

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

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

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

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

IRC

除了邮件列表,Ceph 社区还使用 Internet Relay Chat 进行实时交流。

Ceph 社区聚集在 Open and Free Technology Community (OFTC) IRC 网络上的 #ceph 频道。

Internet Relay Chat (IRC) 创建于 1988 年,是一种基于中继的实时聊天协议。它主要设计用于在称为频道的讨论论坛中进行群组(多对多)通信,但也允许通过私聊进行一对一通信。在 IRC 上,您可以与许多其他使用 Ceph 的成员交谈,话题范围从闲聊到支持问题。尽管一个频道中可能随时有许多人,但他们可能并不总是在键盘前;因此,如果没有人回应,请耐心等待,希望很快会有人回答。

注册

如果您打算持续使用 IRC 服务,建议您注册一个帐户。注册会为您提供一个独特的 IRC 身份,并允许您访问那些出于技术原因将未注册用户锁定的频道。

请参阅 官方 OFTC (Open and Free Technology Community) 文档的注册说明 <https://www.oftc.net/Services/#register-your-account> 了解如何注册您的 IRC 帐户。

频道

要连接到 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

注意

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

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

使用 ccache 构建 Ceph

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

cmake -DWITH_CCACHE=ON ..

使用 ccache 加速构建时间

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

注意

我们建议覆盖 max_size。默认值为 10G。使用更大的值,例如 25G。有关更多信息,请参阅 ccache 手册的配置部分。

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

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

sloppiness = time_macros
run_second_cpp = true

现在,在运行 cmake 时,将环境变量 SOURCE_DATE_EPOCH 设置为固定值(UNIX 时间戳),并将 ENABLE_GIT_VERSION 设置为 OFF

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

注意

使用这些构建选项生成的二进制文件不适合生产或调试目的,因为它们不包含正确的构建时间和 git 版本信息。

开发模式集群

请参阅开发人员指南(快速)

Kubernetes/Rook 开发集群

请参阅使用 Rook 在 Kubernetes 中开发 Ceph

回溯

所有错误修复都应在回溯之前合并到 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 月,尚不支持 C++ 包管理器,例如 vcpkg、conan、C++20 modules。

Dependabot 发现的许多依赖项最好在 Ceph Github 仓库之外更新(例如,分发包将是更新某些依赖项的更好地方)。尽管如此,Dependabot 生成的新旧漏洞列表仍将很有用。

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

集群日志使用指南

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

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入