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

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

我有一个一般性的问题,我希望这是提出问题的正确地方。

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

长话短说,我正在寻找有关解决此问题的最佳方法的提示和建议。您认为处理共享驱动器并在出现问题时进行故障排除是最佳方法吗?或者是否存在我不知道的改进方法(软件/理论)。最终,我觉得尝试独立维护每台机器一定是最痛苦的方法。

答案1

我不认为这是“最好的方法”,但一个经常被吹捧的解决方案是使用木偶或类似软件(Chef,CFEngine)。

根据我的经验,设置起来需要做很多工作,但在拥有许多类似系统的环境中很有用。话虽如此,我发现这个解决方案很麻烦,而且工作量很大。

也许这是一个“更好”的方法 - 我为我工作的组织使用混合解决方案 - 除了使用 Puppet 来“最低限度管理”系统的关键部分之外,我还推出了一个 PXE 启动系统,这意味着重新映像系统非常容易,因此它们都具有相同的“基本配置”而无需任何手动劳动。

我的另一个技巧是拥有一台“主机”,它可以通过 SSH 连接到所有其他机器,并使用单个命令在所有机器上执行相同的作业。(我们有一个脚本,它将我们要执行的整个命令作为参数,并通过 SSH 在所有机器上执行它)。

答案2

除了@davidgo 的建议之外:

我曾经使用过集群 ssh(響鳴) 来同时处理多台机器的 ssh 连接。它会弹出多个 xterm 窗口,并将您的命令混合到不同的会话中,您可以选择单个窗口来分别处理不同的机器。这种方法有效,但有点麻烦。

从那时起我开始使用apt-dater。这将运行子进程,通过 ssh 连接到目标机器并运行适当的更新命令(支持 apt、rug 和 yum)。它还允许您选择要安装的新软件包。尽管名为 apt-dater,但它支持 yum,因此应该适用于 CentOS/RHEL 系统。

答案3

为了确保必要的库存在,请使用构建系统打包软件(例如 rpm)。然后,软件包应包含有关要求(包括版本)的信息,并且可以通过简单命令(在本例中为 yum)进行安装,也可以通过并行 shell 或 Puppet 或 CFengine 等工具进行安装。对于开源软件,您可以使用 Open Build Service (https://build.opensuse.org/;尽管有 URL,但它也适用于 RH 和 Debian。OBS 本身是开源的,因此您甚至可以在您的站点上运行它(但设置可能很复杂——我从未尝试过)。

基本原则是编写一个 RPM spec 文件,其中包含构建软件的一般方法。如果软件带有一个不错的构建系统(例如 autotools),spec 文件主要包含所需库的列表(通常没有版本号,或者只有最低要求)以及对软件构建系统的调用。对于 autotools,这将是 configure(带有启用所需功能的选项)/make/make install。还需要一个文件列表,但通常可以使用 shell globs 将其缩短。

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

编写一个无需修改即可在一个发行版(或密切相关的发行版,如 RH 和 Fedora)的各个版本之间构建的 spec 文件通常只需要很少的额外工作。只需多做一点工作,甚至可以完成跨发行版的 spec(例如 Opensuse/Fedora)。

相关内容