Linux 发行版将一些重要的脚本和配置文件放在 Skeleton 中,然后从那里将它们复制到每个新用户的主目录中。理想情况下,应该使用系统范围的文件,而不是自动复制到主目录中的任何文件,但这并不总是可行或实用的。特别是,shell 启动脚本几乎总是放在 skel 中。
当软件包升级并且对这些脚本需要做的任何更改都安装在 /etc/skel/ 中但所有现有用户仍在他们的家中保留旧版本时,这会带来问题,并且旧版本通常会导致更改的系统软件出现严重问题。
这些更改需要以自动方式同步给所有现有用户。我们不想覆盖用户自己的更改,因此简单的 cp 或 rsync 是不够的,理想情况下,我们会在可能的情况下进行自动合并。
我的问题是,是否存在任何巧妙的解决方案来解决此类同步问题?我可以编写自己的 Python 脚本,但如果其他人已经解决了可能出现的问题,那就太好了。
关于特定设置有一个相关问题,没有针对通用同步的解决方案: 创建用户后添加/更新骨架文件
答案1
我知道这可能听起来像是一个没有答案的问题,但我的答案是尽可能避免这样做。
skel 下的东西实际上应该只是每个用户的东西,并且在部署后不需要进行管理。
/etc/profile
如果您有弹壳碎片和配置,请将它们放入,中/etc/profile.d
。
删除 下的所有系统范围的脚本/usr/local/bin
。
系统范围配置应放在 中的相应文件下/etc
。或者,如果应用程序不支持系统范围配置,则可能在 下添加配置文件并通过 skel/etc
将符号链接部署到配置文件。/etc
答案2
您应该使用像 ansible 这样的集中管理系统(或您喜欢的任何其他系统)来分发脚本,而不是依赖像 /etc/skel 这样的独立方法。这只是我的看法。