适用于Linux的可复制定制分发构build系统

问题

我有一个由几种运行Linux的服务器组成的大型基础架构。 例如,数据库服务器,负载平衡器,特定于应用程序的服务器。 每种服务器都有很多实例,都需要重现。

每一种服务器基本上是一个自定义分配。 定制包括对上游软件包(其他上游版本,构build选项,补丁等)的更改以及可能的一些额外的自定义软件包。

例如,我需要一台运行最新版本的OpenLDAP slapd的服务器,这个版本包含特定的选项和一些补丁。 这是事情变得复杂的地方。

更新到最新的slapd还需要更新它所依赖的库,这意味着重build所有依赖这些库的包。 那就是我基本上需要重build分配的重要部分。 我正在寻找一个解决scheme,帮助自动化这个过程。

解决scheme要求

有点模糊。 我想准备一切必要的东西来构build我的自定义发行版,给它一个名称(例如ldap-server),并将该名称给自动化构build系统,只要我需要重现构build。

我认为这是Gengoo或LFS社区应该拥有的。 我也看过像ALT Linux Hasher ,Fedora Mock,Debian pbuilder / sbuild这样的项目,但从来没有使用过其中的任何一个。

有任何想法吗?

提前致谢!

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

  1. 为了使你的发行版本自动化,我使用了构建顺序和依赖关系的XML定义以及脚本化的GNU Make来构建并行的独立分支并构建二进制包。 python + Make / Autotools的XML + shell脚本+位的结果输出是一组特殊的“核心”工具的完整构建,然后是额外的。

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

  3. 在此之后,我有一个生成清单(XML),并为每个包一个XML文件与安装包的详细信息。 然后,我制作了一个工具,将XML和原生二进制文件转换为各种格式(RPM等)

  4. 现在(使用你的想象力)我有一个安装脚本来自动化构建,大量的构建包和它们的依赖关系的元数据,以及将元数据转换为可部署的包

  5. 接下来,我做了各种服务器的构建脚本,从glib 🙂 :)并运行这些构建。 系统知道哪些包/./configuration是共同的,并共享这些包。 这留下了我
    o一个叫做/ common的回购
    o每个构建类型和体系结构的回购

  6. 几个脚本/ rsync-over-ssh和补丁管理脚本,你就不在了。

显然这是对我为共同环境建立多个发行版的方法的一个非常粗略的概述。 有些软件包是影响源代码树的元软件包(但是在构建时被当作普通软件包处理,一个例子是首先运行并将修补程序应用到内核的元软件包)。

那么还有工具链自动化的问题。

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

底线是,这是非常有趣的,但我只是放弃了所有的BSD和Fedora的。

诸如Suse Build Service之类的东西可能会引起人们的兴趣。 将stable-source-combination-finding和编译工作变得简单! 你甚至不需要与Suse建立任何关系。

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

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

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

Nix不仅可以跟踪程序包依赖性及其修改,还可以跟踪您的主机配置 – 允许回滚到以前的状态。 (这是NixOS ,一个基于Nix的Linux发行版背后的想法。)

还有:

  • Disnix是一个基于Nix的分布式服务部署系统。

ALTLinux girar-builder是系统(内部使用hasher )来重建软件包并维护一个一致的软件包存储库。 哈斯是一个隔离构建过程的工具,所有的需求都可以被精确地“跟踪”,这样就可以保证构建过程的可重复性。

除此之外,girar-builder在向存储库添加(更新,删除)新构建的包的时候会进行依赖性检查 ,以便新包打破其他包的依赖关系时不会被接受,除非其他依赖包是也添加到相同的生成任务(=回购更改交易),并在新的包后重建。 在ALTLinux开发者邮件列表 ( 这是列表的英文对应 列表 )中讨论的情况经常被观察到( 在共享库中的一个符号消失 ,一个包删除的例子 ) ):“检测到新的未满足的依赖关系”。 为了继续,依赖包应该由维护者添加到该任务。

girar-builder也为新软件包做了一个安装测试,只是命名git.alt(girar-bulder)完成的另一个检查。

为了确保软件包的构建可以在软件包库的当前状态下进行复制,不时地(经常地)检查软件库中的每个软件包(称为Sisyphus )在当前时刻可以重建- 重建测试状态报告 ,每个包最后一次重建测试的日志 。

为了以防万一,类似问题的又一个答案已经成为可用,因为原来的问题:基于ALT Linux发行版相关工具链的mkimage-profiles ,但扩展它与图像配置管理工具 ,试图使发生叉简约而简洁 。 现在大部分都是用俄文正式记录的(这是我的决定,有几个原因),但是这个代码本身在英文里有很好的评论。

要了解这种方法,请参阅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:你可以在Live + builder.iso系统上用live + builder.iso试试这个东西,这个系统有4个以上的内存和支持DHCP的Internet路由以太网连接,只需登录altlinuxcd / usr / share / mkimage-profilesmake server-mini.iso

我不太了解,但我认为Suse Studio值得一看。