介绍
在Linux生态系统中,定期安装、维护和升级软件是必不可少的,但是,跟踪对本地配置文件所做的更改仍然是必不可少的,与在进行更改之前制作配置文件副本的旧待机方式不同, etckeeper 允许您跟踪使用 Git、Mercurial、Bazaar 或 Darcs 存储库的更改,就像您在软件开发项目中一样。
此外, etckeeper 与 yum 无缝集成,在升级包时自动对 `/etc 目录的内容进行更改,这将允许您返回配置文件的以前版本,如果您想要 - 或需要 - 这样做。
前提条件
要遵循本教程,您将需要:
- One CentOS 7 Droplet 具有 sudo 非 root 用户,您可以通过遵循 本教程中的步骤 1 到 4 来设置。
etckeeper 仅跟踪文件权限、元数据和更改,它不提供外包工具来执行文件恢复,因此需要了解修订控制系统的基本知识。
在本文中,我们将使用Git,这是VCS的默认使用 etckeeper. 如果你想刷新你的Git和版本控制的记忆,你可以检查 这个教程系列.虽然你不会直接在这个指南中使用Git,你可以通过 etckeeper运行Git特定命令。
步骤1:安装 etckeeper
在此步骤中,我们将安装 etckeeper。
首先,您需要在您的 CentOS 7 服务器上启用 EPEL (Extra Packages for Enterprise Linux),因为它是包含 etckeeper 的存储库。
1sudo yum update && sudo yum install epel-release
然后安装 etckeeper。
1sudo yum update && sudo yum install etckeeper
默认情况下,Git 附带 CentOS 7,所以我们不需要安装它。
步骤 2 — 定制 etckeeper 的配置
安装 etckeeper 后,下一步是更新 `/etc/etckeeper/etckeeper.conf’ 配置文件。
首先,使用 Nano 或您最喜欢的文本编辑器打开配置文件。
1sudo nano /etc/etckeeper/etckeeper.conf
以下是您需要配置的基本变量,以便 etckeeper 正常工作. 请放心留下其他设置评论。
首先,在评论#使用VCS
下,请确保VCS="git"
没有评论(即行开始时没有#
)。
如果您想防止 etckeeper 每天自动进行一次更改,请确保AVOID_DAILY_AUTOCOMMITS=1
没有评论. 为了决定是否要设置此设置,您应该考虑您的系统配置文件是否经常发生更改(例如测试环境每天频繁变化)。
如果你想让 yum install 停止在 /etc 中有未承诺的更改时,请确保不要评论
AVOID_COMMIT_BEFORE_INSTALL=1`. 这将需要在使用 yum 来安装包之前使用手动委托。否则,请留下评论,并且 yum 会自动委托在运行安装之前更新的文件。 这个选择完全取决于你;它很大程度上取决于你的环境和变化数量。 这与上一个例子非常相似,但这一次它将取决于你安装包的频率。
当您完成更新选项时,保存并关闭文件。
步骤 3 – 初始化 Git 存储库
在此步骤中,我们将 Git 存储库初始化为 `/etc。
首先,切换到/etc
目录。
1cd /etc
接下来,通过运行以下命令启动存储库。
1sudo etckeeper init
你应该收到以下信息:
1Initialized empty Git repository in /etc/.git/
您现在应该看到 .git
目录和 .gitignore
文件在 /etc
中,例如,如果您运行以下命令:
1ls -la /etc | grep git
您应该看到这些线包含在输出中:
1drwx------. 7 root root 4096 Apr 2 21:42 .git
2-rw-r--r--. 1 root root 874 Apr 2 21:42 .gitignore
注:.git 必须在本地系统中受到保护(因此仅限于超级用户的阅读、写入和执行权限);因为版本控制系统不会自行跟踪文件权限,因此 etckeeper 提供此功能。
.git 目录包含多个配置和描述文件以及用于 Git 本身的其他子目录..gitignore 文件,该文件明确指定了 git 应该忽略的未跟踪文件,旨在由 etckeeper 完全管理。
如果您不希望使用版本控制来跟踪某些文件,您可以手动将其添加到.gitignore 文件中。
1sudo nano .gitignore
文件的最后一行会读到# end section managed by etckeeper
添加你想要忽略的文件的名称,每行一个,上面这个。
1file_to_ignore
2another_file_to_ignore
3# end section managed by etckeeper
然后保存并关闭文件。
您还需要从当前由 git 管理的缓存中删除这些文件,因为您早些时候启动了本地存储库。
1etckeeper vcs rm --cached file_to_ignore
重复上面的命令,以尽早添加到 `.gitignore 的许多文件。
步骤 4 – 向 Git 存储库承诺 /etc
在此步骤中,我们将承诺我们的初始 /etc
。
添加你的第一个委托很容易;只需输入以下命令. 虽然不是绝对必要的,你应该为每个委托添加一个描述,以便稍后能够轻松识别它们。
1sudo etckeeper commit "First commit of my /etc directory"
然后,您应该看到将文件交付到您的存储库的输出列表,如下文(缩略):
1create mode 100644 selinux/targeted/modules/active/modules/dnsmasq.pp
2create mode 100644 selinux/targeted/modules/active/modules/dnssec.pp
3create mode 100644 selinux/targeted/modules/active/modules/docker.pp
4create mode 100644 selinux/targeted/modules/active/modules/dovecot.pp
步骤五:做出改变
在此步骤中,我们将对 /etc
中的某个文件进行一些更改,并将其执行,在下一步,我们将重置这些更改。
例如,您可以将一个新的主机添加到您的本地名称分辨率中,通过在/etc/hosts
的末尾添加一个由IP地址及其相关主机名组成的行。
首先,打开文件。
1sudo nano /etc/hosts
然后,将下列行添加到文件的末尾。
1192.168.0.2 node01
保存并关闭文件. 现在,让我们做出这个更改。
1sudo etckeeper commit "Added a line to the hosts file"
最后,更改文件的权限。
1sudo chmod 640 /etc/hosts
并修改其所有权(确保用自己的用户名更换 sammy)。
1sudo chown sammy:sammy /etc/hosts
您可以检查当前的权限和/etc/hosts
的所有权。
1ls -l /etc/hosts
输出应该是这样的:
1-rw-r----- 1 sammy sammy 675 Apr 17 15:01 /etc/hosts
步骤6:不改变
现在让我们测试 etckeeper 的恢复功能 - 不仅是文件及其内容,还包括其权限和所有权。
首先,列出你迄今为止所做的承诺。
1sudo git log --pretty=oneline
输出的第一个列是一个 SHA-1 哈希,它独特地识别了委托;第二个列是您提交更改时使用的描述。
您的输出应该看起来类似,具有不同的哈希。
1d0958fbe4d947a6a3ad98141f9fe89d1fd1a95c4 Added a line to the hosts file
276c193da740a3e137fa000773a79de8bb5c898b7 First commit of my /etc directory
记住每个委托的哈希,你会用它们滚回原来的状态。
让我们将/etc/hosts
回归到我们开始本教程之前的样子。 用与您的第一个 commit 相符的 SHA-1 哈希来代替红色的字符。
1sudo etckeeper vcs checkout 76c19 /etc/hosts
现在我们可以检查/etc/hosts
的内容、权限和所有权,看看它们是否已被更改。
看看文件的最后几行。
1tail /etc/hosts
应该给你这样的输出,我们所添加的192.168.0.2 node01
行如预期所缺少。
1...
2
3# The following lines are desirable for IPv6 capable hosts
4::1 test-etckeeper test-etckeeper
5::1 localhost.localdomain localhost
6::1 localhost6.localdomain6 localhost6
再次检查当前的/etc/hosts
的权限和所有权。
1ls -l /etc/hosts
你会看到一个看起来像这样的输出。
1-rw-r--r-- 1 root root 704 Apr 17 15:01 /etc/hosts
文件的内容被正确地恢复,以及权限和所有权。
结论
在本教程中,我们解释了如何使用 etckeeper,这是一个伟大的工具来存储您的/etc
目录在Git存储库中,您也可以使用Bazaar,Mercurial或Darcs存储库。
无论您选择的 VCS, etckeeper 都会帮助您保持配置文件的顶部,并确保如果需要取消更改或修改功能,您可以始终返回以前的状态。