我希望将默认包配置文件(/etc/)和我编辑的配置文件分开,例如在/Data/etc/(通常应该是/usr/local/etc/,但假设/Data/etc/)。
这使我能够轻松查看我所做的修改,轻松备份等等。
因此,我想知道是否可以将 /etc/ 安装为:
- RO中的上层FS:/Data/etc/
- RW 中的下层 FS :本身(/etc/)。
包管理器会像平常一样在 /etc/ 中进行更改。但是,当我在 /Data/etc/ 中添加一个文件(例如 /Data/etc/foo)时,我希望在 RO 中拥有一个 /etc/foo 文件,该文件将隐藏任何现有的 /etc/foo。
笔记:
- 物理链接是不可能的,因为 /Data 和 /etc 将位于不同的 FS 中。
- 符号链接会很麻烦:例如,如果在更新包时删除符号链接,则需要自动为 /Data/etc/ 中的每个文件创建符号链接等。
- 由于同样的原因, mount --bind 也会很麻烦。
- 有些软件包确实会在 /usr/local/etc/ 中查找额外的配置文件,但不幸的是,并非全部。
但是,我不知道如何使用 UnionFS/AuFS/OverlayFS/etc 来做到这一点。我也对替代解决方案/想法持开放态度。
着眼于跟踪配置更改(并将其来源识别为其中的子集)这一更广泛的问题,也许您可以使用诸如etckeeper之类的工具。这在大多数发行版中都可用,并将与包管理器集成以记录对
/etc
单独提交所做的更改。然后,您可以将自己的更改记录为单独的提交 - 这也可以用作日志,因为您将在提交消息中有空间来记录每个更改的原因。更改一些配置设置将改善您使用 etckeeper 的体验,具体如下
etckeeper.conf
:GIT_COMMIT_OPTIONS
可用于指定 git 运行时使用的选项etckeeper
;例如,您可以使用它来将提交作者身份设置为不同的值;AVOID_DAILY_AUTOCOMMITS=1
禁用每日自动提交;这可以确保尚未提交的任何手动更改最终不会包含在自动提交中;AVOID_COMMIT_BEFORE_INSTALL=1
安装前禁用自动提交;这与之前的设置具有类似的目的,但在软件包安装之前而不是作为日常处理的一部分。通过上述内容,您所做的更改将在 git 日志和指责中显而易见,如果您忘记提交更改,包管理器操作将被中止,而不是被允许进行进一步的更改。
etckeeper 在大多数发行版中都可用,etckeeper 的发行包将其配置为与发行版的包管理器集成。