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。
延伸阅读
5 条评论