像清酒一样自由:Koji 的故事

还没有读者喜欢这个。
open source button on keyboard

Opensource.com

Koji 是一个开源构建系统。虽然许多人因为 Fedora 项目使用 Koji 而熟悉它,但 Koji 是一个通用的系统,被世界各地的不同团体使用。

什么是 Koji?

由于术语“构建系统”对不同的人意味着不同的事物,让我解释一下 Koji 的作用。从开发人员的角度来看,Koji 是一项服务,它接受构建请求并将它们分发到不同的机器进行构建。Koji 在其数据库中跟踪生成的软件包,并支持强大的标签系统来组织它们。Koji 具有 Web 界面、命令行界面和丰富的 XML-RPC 接口。最初,Koji 仅限于构建 RPM 包,但现在它也支持通过 Maven 构建 Java 包。它还具有从系统中的其他内容构建 livecd 和 appliance 镜像的功能。

当 Koji 构建 RPM 包时,它首先创建一个纯净的 chroot 环境,即构建根环境,在其中执行构建。此构建根环境的内容来自 Koji 数据库的其他软件包,从一个通用的基础集合开始,并包括其他软件包以满足构建依赖项。为此,Koji 使用另一个名为 Mock 的开源工具。使用 Mock 为我们提供了 一致的、可重现的构建环境。这也意味着用户可以在他们自己的系统上复制这些环境,这对于调试构建问题很有帮助。

对于 Java 包,过程类似。我们从 Mock 生成的构建根环境开始,但由于 Mock 不理解 Java 包,我们使用名为 Maven 的工具来解析这些依赖项并在构建根环境中执行构建。与 RPM 包一样,这些依赖项也从 Koji 的数据库中提取。

构建完成后,将被导入到 Koji 的数据库并进行标记。Koji 的标签系统非常灵活,可以在同一实例中支持许多不同项目的构建配置。例如,Fedora 项目使用他们的 Koji 实例为所有当前支持的 Fedora 版本以及 rawhide 和 EPEL 进行构建。

早期

Koji 最初是红帽公司的一个内部项目。我们现有的构建系统已经过时,需要更灵活和可扩展的东西。我们之前两个系统的经验(和挫败感)塑造了我们的目标和设计。

当时,Fedora 仍然分为两个部分。Fedora Core 是发行版的主要部分,由红帽工程师在红帽公司内部创建。Fedora Extras 是 Core 中找不到的软件包的集合,由红帽公司以外的红帽工程师和社区志愿者混合开发。有不同的工具、不同的流程和一个有些分裂的社区。

当我们在开发 Koji 时,Fedora 社区也在为 Fedora Extras 开发一个构建系统(最终将被命名为 Plague)。Koji 和 Plague 有不同的需求,但在构建根环境中构建 RPM 包的核心要求是相同的。Mock 满足了这一共同需求。

即使在早期,我们也有通过 Mock 和其他相关工具(如 createrepo)的社区参与。代码在两个方向上共享。没有太多发布 Koji 的呼声;它是一个与其他内部系统绑定的内部系统。Fedora Extras 有 Plague,而 Fedora Core 仍然在红帽公司内部构建。事实上,Fedora Core 6 是使用早期内部版本的 Koji 构建的。

Koji 的开源化

然后一切都改变了。

在 FC6 发布后的 Fedora 峰会上,制定了一个合并 Core 和 Extras 的计划。这个想法酝酿已久,但 现在它正式了——下一个版本将只是 Fedora 7。整个发行版将在“社区中使用开源工具”创建。

当然,这个新统一的 Fedora 将需要一个构建系统,并且很快就显而易见 Koji 是这项工作的正确工具。虽然 Fedora Extras 已经在使用 Plague,但它不满足构建整个发行版的要求。因此,经过多次讨论,红帽公司以开源许可证发布了 Koji。 Koji 成为 Fedora 新的端到端、自由和开放基础设施的关键组成部分

随着时间的推移,其他人也发现了 Koji。最初,我们邮件列表上的讨论是以 Fedora 为中心的,但很快我们就收到了其他人请求帮助设置他们自己的实例。我们已经看到来自企业、大学、研究机构和社区项目的此类问题。如果您正在运行一个 Fedora 衍生项目,或者只是为 Fedora 或类似 Fedora 的发行版执行大量构建,那么 Koji 是一个自然的选择。

开源生活

Koji 的开源化对 Fedora、Koji 和红帽公司都有好处。Fedora 获得了强大而灵活的构建系统,Koji 获得了更大的用户和贡献者社区,而红帽公司则从这种成功中受益。

在 Core-Extras 合并期间,能够使用 Koji 对 Fedora 来说是一个巨大的帮助。虽然需要进行一些集成工作,但所有其他选择都需要付出更多的努力。红帽公司已经在使用早期版本的 Koji 构建合并前的 Core 版本,因此过渡相对不那么剧烈。此外,Koji 强大的 XML-RPC 接口允许 Fedora 基础设施的其他部分相对容易地与之集成。在过去的四年中,Koji 已经展示了其灵活性,因为 Fedora 的需求发生了变化。

与此同时,Koji 从开源和 Fedora 对它的使用中都受益匪浅。所有标准的好处都适用:更多的代码审查、补丁提交、额外的测试、更广泛的反馈、文档方面的帮助、暴露于更广泛的运行时条件。Fedora 提高了 Koji 的知名度,让更多人有理由关注或使用它。

所有这一切都使 Koji 变得 /更好/。Fedora 和社区中其他用户的需求帮助推动了系统创新。许多功能可能永远不会发生,或者至少需要更长的时间:ssl 证书身份验证、外部 yum 仓库、插件和主题框架、SCM 框架以及大量的 createrepo 优化。

Koji 帮助 Fedora,Fedora 帮助红帽公司,但好处不仅仅是传递性的。红帽公司是 Koji 用户,因此每个上游改进都使我们的实例更好。虽然像红帽公司和 Fedora 这样的大型 Koji 系统不可避免地会开发出许多自定义项(集成工具、插件、策略和配置),但底层仍然是 Koji,这种相似性很有帮助。它减少了在我们从事 Fedora 和内部项目的开发人员的换挡量,并帮助我们调整 Fedora 内容以适应我们的内部开发。

值得注意的安装包括在亚马逊、TomTom 和加州理工学院的多大学、基于 CERN 的项目中。 查看还有谁在使用 Koji。

延伸阅读

Avatar
Mike McLean 是 Koji 的首席开发者。

5 条评论

很抱歉,我不想吹毛求疵,但看看照片,我认为术语是“kouji”(参见 http://jisho.org/words?jap=kouji&eng=&dict=edict)而不是“koji”(参见 http://jisho.org/words?jap=koji&eng=&dict=edict)。

是的,也许在决定 Fedora 的构建系统名称应该等同于“孤儿”(或该页面上列出的任何其他意外翻译)之前,应该咨询一些懂日语(语言)的人。

我想知道 Fedora 的任何著名的社区软件包仓库(rpmfusion 等)是否使用 Koji...

很棒的标题。

对不起各位,但 Koji 远不如 Open Build Service。很遗憾,RH 在替换 plague 时没有切换到它。

Creative Commons License本作品根据知识共享署名-相同方式共享 3.0 未移植许可协议获得许可。
© . All rights reserved.