前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在CentOS 7上使用Etckeeper进行版本控制管理/ etc

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

原创
作者头像
独木桥先生
修改2018-10-15 17:24:16
1.9K0
修改2018-10-15 17:24:16
举报

介绍

在Linux生态系统中,必须定期安装,维护和升级软件。但是,仍然需要跟踪对本地配置文件所做的更改。与在进行更改之前制作配置文件副本的旧备用数据库相反,etckeeper允许您使用Git,Mercurial,Bazaar或Darcs存储库跟踪修改,就像您对软件开发项目所做的那样。

此外,etckeeper与yum无缝集成,以便在升级包时自动提交对目录/etc的内容所做的更改。这将允许您在需要或需要时恢复到以前版本的配置文件。

准备

要学习本教程,您需要:

etckeeper仅跟踪文件权限,元数据和更改。它不提供开箱即用的工具来执行文件的恢复,因此需要了解修订控制系统的基础知识。

在本文中,我们将使用Git,它是etckeeper使用的默认VCS。虽然您不会直接在本教程中使用Git,但您可以通过etckeeper运行特定于Git的命令。

第一步 - 安装etckeeper

在这一步中,我们将安装etckeeper。

首先,您需要在CentOS 7服务器上启用EPEL(Enterprise Linux的额外软件包),因为这是包含etckeeper的存储库。

代码语言:javascript
复制
sudo yum update && sudo yum install epel-release

然后安装etckeeper。

代码语言:javascript
复制
sudo yum update && sudo yum install etckeeper

Git默认配备CentOS 7,因此我们不需要安装它。

第二步 - 自定义etckeeper的配置

安装etckeeper后,下一步是更新/etc/etckeeper/etckeeper.conf配置文件。

首先,使用Nano或您喜欢的文本编辑器打开配置文件。

代码语言:javascript
复制
sudo nano /etc/etckeeper/etckeeper.conf

以下是您需要配置以使etckeeper正常工作的基本变量。其他设置可注释掉。

首先,在comment下的# The VCS to use.,确保VCS="git"取消注释(即在行的开头没有#)。默认情况下,此选项已取消注释,因为git是CentOS 7上的etckeeper安装使用的默认VCS。

如果您想阻止etckeeper每天自动提交一次更改,请确保AVOID_DAILY_AUTOCOMMITS=1取消注释。为了确定是否要设置它,您应该考虑您的系统配置文件是否经常更改(例如,测试环境通常每天都会更改)。如果是这样,你应该注释掉那行; 否则,你可以留下comment。

如果您希望yum install在未提交更改时中止/etc,请确保取消注释AVOID_COMMIT_BEFORE_INSTALL=1。在使用yum安装软件包之前,这需要手动提交。否则,将其注释掉,yum将在运行安装之前自动提交更新的文件。这个选择完全取决于你; 这在很大程度上取决于您的环境和变化的数量。这与前面的示例非常相似,不同之处在于它将取决于您安装软件包的频率。

完成更新选项后,保存并关闭文件。

第三步 - 初始化Git存储库

在这一步中,我们将初始化/etc中的Git存储库。

首先,切换到/etc目录。

代码语言:javascript
复制
cd /etc

接下来,通过运行以下命令初始化存储库。

代码语言:javascript
复制
sudo etckeeper init

您应该收到以下消息:

代码语言:javascript
复制
Initialized empty Git repository in /etc/.git/

您现在应该看到里面的.git目录和/etc下的.gitignore文件。例如,如果运行以下命令:

代码语言:javascript
复制
ls -la /etc | grep git

您应该看到输出中包含这些行:

代码语言:javascript
复制
drwx------.  7 root     root       4096 Apr  2 21:42 .git
-rw-r--r--.  1 root     root        874 Apr  2 21:42 .gitignore

注意.git必须在本地系统中受到保护(因此仅限超级用户的读,写和执行权限); 因为版本控制系统不会自己跟踪文件权限,所以etckeeper会提供此功能。

.git目录包含几个配置和描述文件以及其他用于Git本身的子目录。该.gitignore文件指定git应忽略的明确未跟踪文件,旨在由etckeeper完整管理。不建议手动编辑,但有一个例外。

如果某些文件您不想使用版本控制进行跟踪,则可以手动将它们添加到.gitignore文件中。要停止跟踪文件,请先打开.gitignore进行编辑。

代码语言:javascript
复制
sudo nano .gitignore

该文件的最后一行# end section managed by etckeeper将被读取。添加要忽略的文件的文件名,在此行之上每行添加一个。

代码语言:javascript
复制
file_to_ignore
another_file_to_ignore
# end section managed by etckeeper

然后保存并关闭该文件。

此外,您需要从git当前正在管理的缓存中删除这些文件,因为您之前已初始化本地存储库。

代码语言:javascript
复制
etckeeper vcs rm --cached file_to_ignore

对您之前添加的文件.gitignore重复上述命令。

第四步 - 提交/etcGit存储库

在这一步中,我们将提交我们的初始/etc

添加第一次提交很简单; 只需输入以下命令即可。虽然不是绝对必要,但您应该为每个提交添加一个描述,以便以后能够轻松识别它们。

代码语言:javascript
复制
sudo etckeeper commit "First commit of my /etc directory"

然后,您应该看到提交到存储库的输出文件列表,如下所示(截取):

代码语言:javascript
复制
create mode 100644 selinux/targeted/modules/active/modules/dnsmasq.pp
create mode 100644 selinux/targeted/modules/active/modules/dnssec.pp
create mode 100644 selinux/targeted/modules/active/modules/docker.pp
create mode 100644 selinux/targeted/modules/active/modules/dovecot.pp

第五步 - 进行更改

在此步骤中,我们将对/etc的文件进行一些更改并提交它们。在下一步中,我们将还原这些更改。

首先,更改您选择的文件的内容。例如,您可以通过在/etc/hosts末尾添加由IP地址及其关联主机名组成的行,将新主机添加到本地名称解析中。

首先,打开文件。

代码语言:javascript
复制
sudo nano /etc/hosts

然后,将以下行添加到文件的末尾。

代码语言:javascript
复制
192.168.0.2    node01

保存并关闭文件。现在,让我们提交这个更改。

代码语言:javascript
复制
sudo etckeeper commit "Added a line to the hosts file"

最后,修改文件的权限。

代码语言:javascript
复制
sudo chmod 640 /etc/hosts

并修改其所有权(确保将sammy替换称您自己的用户名)。

代码语言:javascript
复制
sudo chown sammy:sammy /etc/hosts

您可以检查当前/etc/hosts的权限和所有权。

代码语言:javascript
复制
ls -l /etc/hosts

输出应如下所示:

代码语言:javascript
复制
-rw-r----- 1 sammy sammy 675 Apr 17 15:01 /etc/hosts

第六步 - 撤消更改

现在让我们测试etckeeper的恢复功能 - 不仅仅是文件及其内容,还包括它的权限和所有权。

首先,列出您目前所做的提交。

代码语言:javascript
复制
sudo git log --pretty=oneline

输出的第一列是唯一标识提交的SHA-1哈希; 第二个是您在提交更改时使用的说明。

您的输出应该与此类似,具有不同的哈希值。

代码语言:javascript
复制
d0958fbe4d947a6a3ad98141f9fe89d1fd1a95c4 Added a line to the hosts file
76c193da740a3e137fa000773a79de8bb5c898b7 First commit of my /etc directory

记下每个提交的哈希值。您将使用它们回滚到之前的状态。

在开始本教程之前,让我们回顾一下/etc/hosts。将“76c19”替换为与第一次提交对应的SHA-1哈希。请注意,您不需要指定整个SHA-1哈希字符串; 一些唯一标识它的字符就可以了。

代码语言:javascript
复制
sudo etckeeper vcs checkout 76c19 /etc/hosts

现在,我们可以检查/etc/hosts的内容,权限和所有权,以查看它们是否已被更改回来。

查看文件的最后几行。

代码语言:javascript
复制
tail /etc/hosts

应该给你一个像这样的输出,正如我们预期的那样缺少我们添加的192.168.0.2 node01行。

代码语言:javascript
复制
...
​
# The following lines are desirable for IPv6 capable hosts
::1 test-etckeeper test-etckeeper
::1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6

再次检查当前/etc/hosts的权限和所有权。

代码语言:javascript
复制
ls -l /etc/hosts

你会看到一个看起来像这样的输出。

代码语言:javascript
复制
-rw-r--r-- 1 root root 704 Apr 17 15:01 /etc/hosts

正确还原了文件的内容,以及权限和所有权。

结论

在本教程中,我们已经解释了如何使用etckeeper,这是一个很好的工具,可以将您的/etc目录存储在Git存储库中。您还可以使用Bazaar,Mercurial或Darcs存储库。

无论您选择哪种VCS,etckeeper都会帮助您掌握配置文件,并确保在需要撤消更改或修改功能时始终可以回滚到先前的状态。

想要了解更多关于CentOS的开源信息教程,请前往腾讯云+社区学习更多知识。

参考文献:《How To Manage /etc with Version Control Using Etckeeper on CentOS 7》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 准备
  • 第一步 - 安装etckeeper
  • 第二步 - 自定义etckeeper的配置
  • 第三步 - 初始化Git存储库
  • 第四步 - 提交/etcGit存储库
  • 第五步 - 进行更改
  • 第六步 - 撤消更改
    • 结论
    相关产品与服务
    云开发 CloudBase
    云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档