用当前状态来表示系统配置是有风险、低效且不透明的。有时,您可能会得到一个不受支持的系统,并且没有升级路径。然后,配置与旧系统兼容的新系统是一个反复试验的过程。此外,如果系统在某个时候损坏,唯一的选择是返回最近的完整备份,并尝试记住从那时起发生了哪些更改。此外,创建与原始系统兼容的系统的唯一方法是通过完整的转储/恢复。最后,在这样的设置中,无法知道您是如何解决特定问题的;您唯一能做的就是查看相应的配置文件,并尝试猜测您更改了什么以达到预期的效果。
目前,对于我维护的每个系统,我都会保留一个日志文件,记录所有系统管理活动,从安装开始:安装选项、添加的软件包、配置文件中的更改、更新、问题修复等。理论上,这允许我(手动)重播所有更改以达到当前状态,或者通过执行反向命令来展开错误的更改。然而,这个过程也是低效的、容易出错的,并且依赖于人的判断。
我尝试过的另一件事是使用 git 将 /etc 配置文件置于版本控制之下。这可以帮助我自动记录更改并将其应用于干净的设置。但这并非没有问题:git 必须在 sudo 下运行,密码和私钥可能存储在存储库中,无法有意义地跟踪已安装的软件包,如果我尝试将这种方法扩展到系统的所有目录,git 就会发脾气。
我也考虑过通过 shell 脚本或 makefile 来执行所有更改,但我认为这个过程需要付出很多努力并且很脆弱。
我是否遗漏了一些更好的方法或工具?
答案1
帮自己(和您所爱的人)一个忙,尽快摆脱手动系统配置!
您应该开始使用系统配置管理软件。此类软件的最初用例是管理大量主机(对于某些“大量”的定义)。然而,其基本前提是管理甚至单个主机。虽然所需的努力可能不是立即合理的,但对于任何长期计划的人来说,这实际上是有意义的。
该领域的知名人物有(按时间顺序排列):
我提到编程语言不仅仅是为了在远程情况下深入研究实现代码。虽然这不是绝对的要求,但熟悉底层语言可能有助于使用每个工具,因为它们的配置受语言影响。
我个人的选择是 CFengine,因为......年龄、语言和美感基本理论。但其中任何一个(以及其他的)肯定都能帮助你。
初始设置可能有点令人生畏……尤其是对于我们这些多年来一直使用手动方式的人来说。但最终它绝对值得!
答案2
答案3
上面提到的很棒的资源!
Netdisco - 用于基于 SNMP、CDP、LLDP 的网络管理和发现,Postgres 后端 http://www.netdisco.org/
和
Nedi,再次利用 SNMP、CDP…… http://www.nedi.ch/about/