我有一个庞大的基础设施,包括几种运行Linux的服务器。例如,数据库服务器,负载平衡器,特定于应用程序的服务器。每种服务器都有很多实例,所有这些实例都需要可重现。
每种服务器基本上都是自定义分发。自定义包括对上游软件包的更改(其他上游版本,构建选项,修补程序,等等),以及可能的一些额外自定义软件包。
例如,我需要一台运行最新OpenLDAP slapd的服务器,该服务器使用特定选项和一些补丁进行编译。这就是事情变得复杂的地方。
更新到最新的slapd还需要更新它所依赖的库,这意味着重建依赖于这些库的所有包。那是我基本上需要重建分发的重要部分。我正在寻找一种有助于自动化这一过程的解决方案。
我认为这是Gengoo或LFS社区应该拥有的。我也见过ALT Linux Hasher,Fedora Mock,Debian pbuilder / sbuild等项目,但从未使用过任何项目。
有什么想法吗?
提前致谢!
答案 0 :(得分:5)
您也可以使用Nix package manager and Hydra build system来完成任务。
Nix 是一个纯粹的功能包管理器。
Hydra 是基于Nix的连续构建系统。 (AFAIU,它会在必要时重建依赖包。)
Nix 不仅可以跟踪程序包依赖关系及其修改,还可以跟踪主机配置 - 允许回滚到先前一致的状态。 (这是基于Nix的Linux发行版 NixOS 背后的想法。)
还有:
答案 1 :(得分:4)
我不会问为什么你选择为你的生产服务器维护一个自定义发行版......但是...我有一些这种黑客马拉松的经验......而且伴随着它的巨大头痛。
为了自动构建发行版,我使用了构建顺序和依赖项的XML定义,并使用脚本化GNU Make构建并行独立分支并构建二进制包。 XML + shell脚本+ python + Make / Autotools的结果输出是一组特殊的'核心'工具的完整构建,然后是附加工具。
第二步是将这些二进制文件/原始构建目录安装到系统中。我使用installwatch(我认为)使用inotify来关注事物的安装位置。然后我输出XML以及任何二进制文件的依赖项。
在此之后,我有了一个构建清单(XML),并为每个包提供了一个XML文件,其中包含已安装软件包的详细信息。然后,我创建了一个工具,将XML和就地二进制文件转换为各种格式(RPM等)
现在(用你的想象力)我有一个安装脚本来自动构建,大量的构建包及其依赖项的元数据,以及将元数据转换为可部署包的方法
< / LI>接下来,我为各种服务器制作了构建脚本,从glib up :) ...并运行这些构建。系统知道哪些软件包/./configure是常见的并共享这些软件包。这让我留下了 o一个名为/ common的回购 o每种构建类型和架构的回购
一些脚本/ rsync-over-ssh和补丁管理脚本,你就不在了。
显然这是我为公共环境构建多个发行版的方法的粗略概述。有些软件包是影响源树的元数据包(但是被视为正常的软件包作为构建时间。一个例子是首先运行的元数据包并将补丁应用到内核中。)
然后是工具链自动化问题。
这一切都始于LFS ......但正如你所看到的,事情变得有点冒险。
底线是,非常有趣,但我只是为BSD和Fedora抛弃了它。
Suse Build Service 之类的内容可能会引起人们的兴趣。完成稳定源组合查找和编译将使事情变得更简单!你甚至不需要与Suse建立任何关系。
答案 2 :(得分:1)
ALTLinux girar-builder是系统(在内部使用hasher)来重建包并维护一致的包库。 Hasher是一种隔离构建过程的工具,因此可以准确地“跟踪”所有需求,以便对构建过程的可重复性提供一些保证。
除此之外,girar-builder在向存储库添加(更新,删除)新构建的包时会dependency checks,因此如果新包破坏了其他包的依赖关系,则不会接受新包,除非其他依赖包也被添加到同一构建任务(= repo更改事务)并在新包之后重建。这种情况经常可以在an example with a dep broken due to the disappearance of a symbol in a shared library(an example of a package deletion)中讨论(ALTLinux developers mailing list,the English counterpart of the list):“检测到新的未满足的依赖关系”。为了继续,应该由维护者将依赖包添加到该任务中。
girar-builder还对新软件包进行了安装测试,只是为了命名由git.alt(girar-bulder)完成的另一项检查。
为了确保可以在包的存储库的当前状态下重现构建包,正在不时(非常有规律地)检查存储库中的每个包(称为Sisyphus )目前可以重建 - a rebuild test status report,the logs of the last rebuild test, per package。
答案 3 :(得分: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 arches,git(在提交配置文件的各个阶段时)其中包括生成有意义的描述)和配置树图表。
PXE引导支持在框架内实现(并获得上游)应该非常简单但实际上还没有完成 - 我知道这些内容但必须绕过它们。
初步支持netinstall映像,大小约为17MB(example)。
我也对你发现ALT不切实际的特殊原因感兴趣 - 当然有一些已知的但你可能对我不熟悉:-) PS:特别是当或多或少准备好了LFS。
PS2:您可以在具有4 GB RAM和启用DHCP的Internet路由以太网连接的系统上使用live-builder.iso在实时模式下试用该东西,只需以 altlinux 身份登录, cd / usr / share / mkimage-profiles 和 make server-mini.iso
答案 4 :(得分:0)
我对此并不了解,但我认为Suse Studio值得一看。