5

问题

我有一个庞大的基础设施,由多种运行 Linux 的服务器组成。例如,数据库服务器、负载平衡器、特定于应用程序的服务器。每种服务器都有许多实例,并且所有实例都需要可重现。

每种服务器基本上都是自定义发行版。定制包括对上游包(其他上游版本、构建选项、补丁等)的更改,可能还有一些额外的定制包。

例如,我需要一台运行最新 OpenLDAP slapd 的服务器,该服务器使用特定选项和一些补丁编译。这就是事情变得复杂的地方。

更新到最新的 slapd 还需要更新它所依赖的库,这意味着也要重建所有依赖于这些库的包。那就是我基本上需要重建发行版的重要部分。我正在寻找一种有助于自动化此过程的解决方案。

解决方案要求

有点模糊。我想准备构建我的自定义发行版所需的一切,给它一个名称(例如 ldap-server),并在我需要重现构建的任何时候将该名称提供给自动构建系统。

我认为这是 Gengoo 或 LFS 社区应该具备的。我也见过像 ALT Linux Hasher、Fedora Mock、Debian pbuilder/sbuild 这样的项目,但从未使用过它们中的任何一个。

有任何想法吗?

提前致谢!

4

5 回答 5

5

你也可以使用Nix 包管理器和 Hydra 构建系统来完成你的任务。

  • Nix是一个纯粹的功能包管理器。

  • Hydra是一个基于 Nix 的持续构建系统。(AFAIU,它会在必要时重建依赖包。)

Nix不仅可以跟踪包依赖关系及其修改,还可以跟踪您的主机配置——以允许回滚到一致的先前状态。(这就是基于 Nix 的 Linux 发行版NixOS背后的理念。)

还有:

  • Disnix,一个基于 Nix 的分布式服务部署系统。
于 2011-03-21T08:55:34.527 回答
4

我不会问你为什么选择为你的生产服务器维护一个自定义发行版......但是......我有一些这种黑客马拉松的经验......以及随之而来的巨大头痛

  1. 为了自动构建发行版,我使用了构建顺序和依赖项的 XML 定义,并编写了 GNU Make 脚本来构建并行独立分支并构建二进制包。从 XML+shell-script+bit 的 python+Make/Autotools 得到的输出是一组特殊的“核心”工具的完整构建,然后是附加工具。

  2. 第二步是将这些二进制文件/原始构建目录安装到系统中。我使用 installwatch (我认为)使用 inotify 来密切关注安装到的位置。然后我输出它的 XML 以及任何二进制文件的依赖项。

  3. 在此之后,我有一个构建清单 (XML) 和每个包的一个 XML 文件,其中包含已安装包的详细信息。然后我制作了一个工具来将 XML 和就地二进制文件转换为各种格式(RPM 等)

  4. 现在(发挥你的想象力)我有一个安装脚本来自动构建,构建包及其依赖项的大量元数据,以及将元数据转换为可部署包的方法

  5. 接下来,我为各种服务器制作了构建脚本,从 glib 开始 :) ... 并运行了这些构建。系统知道哪些包/./configure 是通用的并共享这些包。这给我留下了
    o 一个名为 /common
    的 repo o 每种构建类型和架构的 repo

  6. 一些脚本/rsync-over-ssh 和补丁管理脚本,你就走了。

显然,这是对我为公共环境构建多个发行版的方法的粗略概述。一些包是影响源树的元包(但在构建时被视为普通包。一个例子是首先运行并将补丁应用到内核的元包)。

然后是工具链自动化的问题。

这一切都是从 LFS 开始的……但正如你所看到的,事情变得有点冒险了。

底线是,这很有趣,但我只是为了 BSD 和 Fedora 而放弃了这一切。

Suse Build Service之类的东西可能会引起人们的兴趣。将 stable-source-combination-finding 和编译移出将使事情变得更简单!您甚至不需要构建与 Suse 相关的任何内容。

于 2009-08-22T19:00:24.777 回答
1

ALTLinux girar-builder是系统(在内部使用哈希器)来重建包并维护包的一致存储库。Hasher 是一个隔离构建过程的工具,因此可以准确地“跟踪”所有需求,从而对构建过程的可再现性有一定的保证。

除其他外,girar-builder 在将新构建的包添加(更新、删除)到存储库时会进行依赖性检查,因此如果新包破坏了其他包的依赖关系,则不会接受新包,除非其他依赖包是还添加到相同的构建任务(= repo 更改事务)并在新包之后重建。这是在ALTLinux 开发人员邮件列表(列表的英文对应项)中经常可以观察到的一种情况(由于共享库中的符号消失而导致 dep 损坏示例,包删除的示例)。):“检测到新的未满足的依赖项”。为了继续,依赖包应由其维护者添加到该任务中。

girar-builder 还对新软件包进行了安装测试,仅举出由 git.alt (girar-bulder) 完成的另一项检查。

为了确保构建包可以在包存储库的当前状态下重现,不时(非常定期地)检查存储库中的每个包(称为Sisyphus)在当前时刻是可重建的-重建测试状态报告每个包的最后重建测试的日志

于 2011-03-21T08:38:14.463 回答
1

以防万一,自最初的问题以来,已经有了对类似问题的另一个答案:mkimage-profiles,它基于 ALT Linux 发行版相关的工具链,但使用图像配置管理工具对其进行了扩展,该工具试图使其发生叉子简约而简洁。它现在主要用俄语正式记录(这是我的决定有几个原因),但代码本身的英文注释很好。

要了解该方法,请参见例如conf.d/server.mk

distro/.server-base: distro/.installer use/syslinux/ui/menu use/memtest
    @$(call add,BASE_LISTS,server-base openssh)

distro/server-nano: distro/.server-base \
    use/cleanup/x11-alterator use/bootloader/lilo +power
    @$(call add,BASE_LISTS,$(call tags,server network))
    @$(call add,BASE_PACKAGES,dhcpcd cpio)

distro/server-mini: distro/.server-base use/server/mini use/cleanup/x11-alterator
    @$(call set,KFLAVOURS,el-smp)

OpenVZ模板缓存、VM映像、ARM/PPC拱门、git(如提交使用有意义的描述生成的配置文件的阶段)和配置树图等提供了一些支持。

PXE 引导支持应该很容易在框架内实现(并获得上游),但实际上还没有完成——我知道这些位,但必须解决它们。

初步支持大小约为 17MB 的 netinstall 映像(示例)。

我也对你认为 ALT 不切实际的特殊原因感兴趣——当然有一些已知的,但你的对我来说可能是新的 :-) PS:尤其是在或多或少准备好去 LFS 的时候。

PS2: you can try out the thing in live mode with live-builder.iso on a system with 4+ GB RAM and DHCP-enabled Internet-routed ethernet connection, just login as altlinux, cd /usr/share/mkimage-profiles and make server-mini.iso

于 2012-12-19T11:13:49.333 回答
0

我对此了解不多,但我认为Suse Studio值得一看。

于 2011-03-21T09:09:58.450 回答