在多台Linux服务器上安装和维护软件

我有一个普遍的问题,我希望这是正确的问题。

我们目前有11台(9台Red Hat / 2 Centos)服务器,这些服务器在过去的5年中已经在不同的时间购买,尽pipe它们都有Linux操作系统,但是它们之间存在硬件差异,仅仅是因为它们是在不同的时间购买的。 但是,我们需要在所有机器上安装一套核心生物信息软件,以便用户拥有相同的环境。 过去我们使用共享的装载驱动器,但是当软件在给定的机器上不工作时,我们遇到了问题,因为没有安装所有必要的库等等。

长话短说,我正在寻找提示和build议,以解决这个问题的最佳途径。 您认为在共享驱动器和故障排除问题上工作是最好的途径,还是有一个改进的方法,我不知道(软件/理论)。 最终,我觉得试图独立维护每台机器必须是最痛苦的方法。

我不认为他们是“一个最好的方法”,但一个经常被吹捧的解决scheme是使用Puppet或类似的软件(厨师,CFEngine)。

根据我的经验,我设置了相当多的工作,但是在有很多类似系统的环境中很有用。 这就是说,我发现解决scheme繁琐而且工作量很大。

也许“更好”的方法 – 我使用混合解决scheme为我工作的组织 – 除了使用Puppet“最低限度pipe理”系统的关键部分之外,我还推出了PXE引导系统,这意味着它很容易重映像系统,所以他们都有相同的“基本configuration”,没有任何手动劳动。

在我的军火库中的另一个技术是拥有一个“主机”,它可以通过一个命令与所有其他人通信。 (我们有一个脚本,它把我们想要执行的整个命令作为一个参数,并通过SSH在所有机器上执行)。

除了@ davidgo的build议:

我曾经使用群集ssh( cssh )一次处理多个机器的sshing。 它popup多个xterm窗口,并将您的命令复用到不同的会话,并且您可以select单独的窗口来单独处理不同的机器。 这种方法奏效,但有点痛苦。

从那以后,我开始使用apt-dater 。 这将运行ssh到目标机器的subprocess并运行适当的更新命令(支持apt,rug和yum)。 它也可以让你select新的软件包进行安装。 尽pipe被称为apt-dater,但它支持yum,所以应该与CentOS / RHEL系统一起工作。

为了确保存在必要的库,使用构build系统来打包软件(例如rpm)。 然后,软件包应该包含需求信息(包括版本),并且可以通过一个简单的命令(在这里是yum)安装,可能通过一个并行shell或像Puppet或CFengine这样的工具来安装。 对于开放源代码软件,您可以使用开放式构build服务( https://build.opensuse.org/ ;尽pipeurl为RH和Debian)。 OBS本身是开源的,所以你甚至可以在你的网站上运行它(但是安装过程可能很复杂 – 我从来没有尝试过)。

基本原则是编写一个RPM规范文件,其中包含一个构build软件的通用配方。 如果软件带有体面的构build系统(例如autotools),那么spec文件主要包括一个所需库(通常没有版本号,或者只有最低要求)的列表,以及对软件构build系统的调用。 在自动工具的情况下,这将是configuration(具有启用所需function的选项)/ make / make install。 文件列表也是必需的,但通常使用shell命令可以保持较短的文件。

然后,构build系统将安装所需的软件包(比如libfoo-devel)及其所有依赖项,运行配方,并从文件列表中创build一个rpm包。 包软件链接到的共享库将被自动检测到,并将相应的要求插入到rpm中。 安装时,yum将在安装软件时使用这些要求来添加库。 一个合适的编译系统也可以对构build的包进行大量的检查,例如查看严重的编译器警告,违反文件层次结构,可疑的文件许可等。

编写一个不需要修改即可在一个发行版的各个版本(或者与RH和Fedora紧密相关的发行版)上构build的spec文件通常是非常less的额外工作。 多一点工作,甚至可以完成跨发行版规范(例如Opensuse / Fedora)。