Linux、UNIX 和类似操作系统的一个主要优势是一切皆文件,并且您的大部分配置都是通过文本文件完成的,这使您可以使用您选择的任何工具轻松读取和写入它们。为了监控您的配置,您可以使用许多工具来自动化配置,从而为您提供对系统配置方式的详细控制。您可以轻松比较不同版本的配置文件以查看任何更改。随着时间的推移跟踪特定配置和更改使您能够
- 当收到唤醒页面时,查看最近发生了哪些更改
- 当软件包管理覆盖您精心制作的配置时,恢复更改
- 当意外的 rm 命令击中生产环境而不是您认为的测试服务器时,恢复文件
- 查看当多个人(和工具)在系统上工作时发生了哪些更改
- 调查脚本小子入侵后的更改
几十年来,我们一直使用版本控制系统 (VCS) 跟踪文本文件中的更改。我们拥有这些工具,并且一直在使用它们。源代码的版本控制为您提供诸如跟踪文件历史记录、比较版本、恢复到旧版本和分支等功能。
您的 /etc/ 目录是大多数 Linux 发行版存储系统配置文件的位置,并且跟踪 /etc/ 除了版本控制系统跟踪的内容之外,还有一些额外的挑战。Etckeeper 帮助我们应对这些额外的要求。Etckeeper 偏好使用 git,但也适用于其他几个版本控制系统:mercurial、bazaar 或 darcs。
诸如配置管理和发行版的软件包管理之类的其他工具也控制配置,但它们不会在版本控制中跟踪所有文件。
配置管理系统 (CMS),例如 Puppet、Chef 和 Ansible,不会跟踪 /etc/ 中的每个文件。对于许多文件,它们只验证某些内容是否到位,而忽略文件的其余部分。例如,Puppet 将验证用户是否存在于 /etc/passwd 中,但会忽略对其未管理的帐户的更改。
软件包文件具有基本配置文件,也可能包含用于自动配置的脚本,但它们不跟踪修改。实际上,它们可能会在软件包升级期间覆盖本地配置。它们不应该这样做,但有时它们确实会这样做。
Etckeeper 将跟踪除 repo 目录(例如,/etc/.git)之外的所有内容,如果它未配置为忽略某些文件。默认配置会忽略一些不需要跟踪的文件,例如临时文件(如 /etc/mtab)和缓存文件(如 /etc/ld.so.cache)。Etckeeper 使用版本控制系统的本机忽略文件,并且该文件在版本控制 repo 中被跟踪。例如,/etc/.gitignore 预先填充了 etckeeper 将忽略的文件,但 /etc/.gitignore 由 git 跟踪。
某些服务对配置文件所有权和权限甚至空目录有点挑剔,所有这些传统上版本控制系统都无法很好地跟踪。Etckeeper 通过在 /etc/.etckeeper 中跟踪此重要元数据来增强底层版本控制系统。再次强调,此文件在版本控制系统中被跟踪。
Etckeeper 还具有与软件包管理系统配合使用的钩子,并在软件包安装和升级后签入更改。
Etckeeper 入门
安装后,使用 init 初始化 repo,然后签入当前状态。
$ sudo etckeeper init
$ sudo etckeeper commit -m "Initial checkin"
初始化后,/etc/ 是版本控制系统中的一个 repo。可以使用本机版本控制工具来管理文件。
$ sudo touch /etc/testfile
$ sudo git -C /etc add testfile
$ sudo git -C /etc commit -m "A test file"
$ echo "10.10.10.1111 nextcloud" | sudo tee -a /etc/hosts >> /dev/null
$ sudo git -C /etc/ diff -U0 hosts
$ diff --git a/hosts b/hosts
index 97f1792..ecc187a 100644
--- a/hosts
+++ b/hosts
@@ -9,0 +10 @@ ff02::2 ip6-allrouters
+10.10.10.1111 nextcloud
$ sudo git -C /etc/ commit hosts -m "Added nextcloud box"
$ sudo git -C /etc/ revert HEAD -m "oops, wrong IP"
$ echo "10.10.10.111 nextcloud" | sudo tee -a /etc/hosts >> /dev/null
$ sudo git -C /etc/ commit hosts -m "Correctly added nextcloud box"
Etckeeper 还提供了一个版本控制系统包装器。使用包装器的一个优点是 sudo etckeeper commit 将记录使用 sudo 的帐户而不是 root。
$ sudo etckeeper commit
$ sudo etckeeper vcs status
$ sudo etckeeper vcs -C apache2 status
想查看升级做了哪些配置更改?查看您的版本控制系统日志。
commit 327f09703be712aab263b9565fede5c21f378732
Author: der.hans <etckeeper@example.com>
Date: Wed Feb 15 07:24:24 2017 -0700
committing changes in /etc after apt run
Package changes:
+vim-addon-manager 0.5.3
+software-properties-kde 0.92.25debian1
+vim-fugitive 2.1-2
Etckeeper 是一个用于捕获系统配置随时间变化的强大工具。它通过包装器来跟踪重要的元数据(例如权限和所有权)并与软件包管理系统协同工作,从而补充了本机版本控制系统的功能。请参阅 etckeeper 文档,了解更多使用示例,例如如何将 /etc/ repo 从一个系统克隆到另一个系统。
7 条评论