Makefile linux免费安全分布式make系统

Makefile linux免费安全分布式make系统,makefile,distributed,data-processing,Makefile,Distributed,Data Processing,有没有好的语言无关的分布式linux make系统是安全和免费的 背景信息: 我进行的科学实验(计算机科学实验)有时会有很大的依赖树,偶尔会有数千或数万个树节点。此依赖关系树覆盖数据文件、数据处理可执行文件和结果文件 多年来,我尝试了各种技术,包括: 使用数据库滚动我自己的依赖项跟踪器,并在每台工作机器上运行脚本。这可能会有点麻烦,尤其是在尝试使用非脚本语言时 将所有处理命令放在一个makefile中,使用可以在不同的工作机器上手动“构建”的伪目标。这不需要特殊工具,但手动将工作分解为大小均匀的

有没有好的语言无关的分布式linux make系统是安全和免费的

背景信息:

我进行的科学实验(计算机科学实验)有时会有很大的依赖树,偶尔会有数千或数万个树节点。此依赖关系树覆盖数据文件、数据处理可执行文件和结果文件

多年来,我尝试了各种技术,包括:

  • 使用数据库滚动我自己的依赖项跟踪器,并在每台工作机器上运行脚本。这可能会有点麻烦,尤其是在尝试使用非脚本语言时
  • 将所有处理命令放在一个makefile中,使用可以在不同的工作机器上手动“构建”的伪目标。这不需要特殊工具,但手动将工作分解为大小均匀的伪目标块,并在每个工作框上正确调用“make”,可能会很麻烦
  • :从单个makefile自动分发命令的执行
  • 我基本上是在寻找类似distmake的东西,但更安全。据我所知,distmake本质上为每个工作节点留下了一个敞开的后门

    如果替代品比distmake更坚固,那也不错。如果您中断了主distmake调用,它可以关闭后门服务器,但不会正确地终止工作节点上正在执行的进程


    澄清:

    我使用makefile处理数据,而不是使用gcc编译和链接。从我在文档中读到的内容来看,distcc是分发gcc的专用工具。我将在托管在共享文件系统上的非常大的数据文件上运行自己的可执行文件,而不是在源文件上运行gcc,因此distcc没有帮助

    工人节点是外部可见的机器,因此我希望任何工人守护进程至少与ssh一样安全。在不阅读源代码的情况下,我能告诉您的是,distmake worker守护进程打开一个端口,并接受任何连接到它的人的命令。它们将以启动守护进程的用户身份执行命令

    还有一些,它们声称能够通过SSH进行操作(尽管除非distmake非常奇怪,否则您应该能够限制对本地主机的访问并构建SSH隧道来运行构建),以及


    更新:因为目标不是一个分布式编译,而是一个恰好使用
    make
    作为引导的分布式计算,所以使用一个为分布式计算设计的工具更有意义,比如。下面的注释指明了所选的平台。

    如果您对依赖关系很在行(即,make-jxx在本地运行良好),distcc可能就是您想要的。它非常容易使用,并与几种流行的CC缓存一起工作。同样,正确的依赖关系是关键,尤其是在使用缓存帮助加快重建过程时


    如果您使用GCC生成的依赖项超出了makefile本身的模块依赖项范围,那么您可能会喜欢distcc。我一直在一个小型农场使用它,并取得了巨大成功。。但是我的设置/树远没有您描述的那么复杂。

    您可以结合
    coshell
    程序来实现这一点。我不知道如何评估安全性,但Glenn Fowler的团队中充满了伟大的工程师,他们做了很多非常好的事情。我会用我的源代码信任他们:-)他们最著名的工具可能是。

    依赖关系很难管理,我不知道有哪一个完美的系统可以在不做大量工作的情况下实现您想要的功能

    我使用过的最接近的设置是以下设置: -用于管理群集中计算机的Condor队列 -Condor DAGMAN元调度器用于提交相互依赖的作业。DAGMAN是有向无环图管理器的首字母缩写,其中有向无环图用于表示作业之间的依赖关系


    在我们的实验室中,我们已经成功地为迭代科学协议完成了这项工作,而且效果非常好,尽管对于一个非常有才华的博士后来说,让最初的实现运行起来是一次学习经历。它确实需要您设置并运行一个Condor集群,这是非常重要的,但是我假设您有Condor或类似的东西来管理您的所有机器。可能是SunGridEngine有类似的东西,我不知道

    尽管与“make”透明集成可能会很复杂,但GNU parallel似乎提供了一个方便的选项,可以跨服务器分发命令。

    Makeflow似乎也是一个很好的解决方案:

    我将研究ssh隧道。看起来distcc和icecream仅用于编译和链接。icecream的主页警告说,它不应该在不安全的环境中使用。那么,你为什么不编写一个BOINC引擎呢?啊,网格计算……为什么我没有想到呢。我想秃鹰可以做我想做的事。为了将来的读者,您是否介意在响应中添加网格计算解决方案(或创建一个新的响应)?我正在处理数据文件,而不是源文件,因此我认为distcc没有帮助。不过我确实有适当的依赖关系(make-jxx在本地对我来说确实很好)。谢谢你的想法。coshell“和rsh一样安全”,这意味着像distmake一样,它可能很容易被欺骗。否则它看起来比distmake更好。
    coshell
    声称能够使用
    ssh
    以及
    rsh
    。我认为<代码> RSH 非常不安全。我不知道你怎么看待<代码> SSH 。我确实认为SSH是安全的,但是…coshell似乎只使用ssh来生成coshell守护进程。守护进程似乎打开了自己的端口并通过该端口进行通信,而不是通过ssh。因此它是安全的