如何在 CentOS 7 上使用 Etckeeper 通过版本控制管理 /etc

介绍

在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 都会帮助您保持配置文件的顶部,并确保如果需要取消更改或修改功能,您可以始终返回以前的状态。

Published At
Categories with 技术
comments powered by Disqus