如何记录和自动化系统配置?

Dio*_*lis 4 unix documentation

用当前状态表示系统的配置是有风险的、低效的和不透明的。在某些时候,您可能会遇到不受支持的系统并且没有升级路径。然后配置与旧系统兼容的新系统是一个过程或反复试验。此外,如果系统在某个时候损坏,唯一的选择是返回到最近的完整备份,并尝试记住从那时起发生的更改。此外,创建与原始系统兼容的唯一方法是通过完整的转储/恢复。最后,在这样的设置中,无法知道您是如何解决特定问题的。你唯一能做的就是查看相应的配置文件,并尝试猜测你更改了什么才能达到预期的效果。

目前,对于我维护的每个系统,我都会保留一个日志文件,在其中记录所有系统管理活动,从安装开始:安装选项、添加的包、配置文件的更改、更新、问题修复等。理论上这允许我(手动) 重播所有更改以达到当前状态,或者通过执行反向命令来展开错误的更改。然而,这个过程也效率低下,容易出错,并且依赖于人为判断。

我尝试过的另一件事是使用 git 将 /etc 配置文件置于版本控制之下。这有助于我自动记录更改并将它们应用于干净的设置。但这并非没有问题:git 必须在 sudo 下运行,密码和私钥可能存储在存储库中,无法有意义地跟踪已安装的包,如果我尝试将这种方法扩展到所有系统的目录。

我也考虑过通过 shell 脚本或 makefile 执行所有更改,但我认为这个过程需要很多努力并且会很脆弱。

是否有一些我缺少的更好的方法或工具?

小智 5

帮自己(和您的亲人)一个忙,尽快摆脱手动系统配置!

您应该开始使用系统配置管理软件。此类软件的原始用例是管理大量主机(对于“大型”的某些定义)。然而,底层场所甚至可以管理单个主机。虽然所需的努力可能不是立即合理的,但对于任何长期计划的人来说,这实际上是有道理的。

该领域的大牌是(按时间顺序):

我提到的编程语言不仅仅是针对您需要深入研究实现代码的远程情况。虽然这不是绝对要求,但熟悉底层语言可能有助于每个工具的使用,因为它们的配置受语言影响。

我个人的选择是 CFengine,因为......年龄、语言和基础理论之美。但是这些(和其他)中的任何一个都绝对可以帮助您。

初始设置可能有点令人生畏……尤其是对于像我们这样多年来一直以手动方式进行操作的人。但最终肯定是有回报的!