第36章 etckeeper
Linux/Unix的用户对/etc目录是再熟悉不过了,这个最重要的目录中保存了大部分软件的配置信息,借以实现对软件的配置乃至对整个系统的启动过程进行控制。对于Windows用户来说,可以把/etc目录视为Windows中的注册表,只不过是文件化了,易管理了。
这么重要的/etc目录,如果其中的文件被错误编辑或删除,将会损失惨重。有一个名为etckeeper[5]的项目借用分布式版本控制工具(如:Git、Mercurial、Bazaar、Darcs),可以帮助实现/etc目录的持续备份。
那么etckeeper是如何实现的呢?下面就以Git作为etckeeper的后端为例进行说明,其他的分布式版本控制系统大同小异。
将/etc目录Git化。于目录/etc/.git中创建Git库,将/etc目录作为工作区。与系统的包管理器(如Debian/Ubuntu的apt、Redhat上的yum等)整合。一旦有软件包安装或删除,就对/etc目录下的改动执行提交操作。
除了能够记录/etc目录中的文件内容外,还可以记录文件属性等元信息。因为/etc目录下的文件的权限设置往往是非常重要和致命的。
因为/etc目录已经成了一个Git版本库,可以用Git命令对/etc下的文件进行操作:查看历史,回退到历史版本,等等。
也可以将/etc克隆到另外的主机中,实现双机备份。
36.1 安装etckeeper
安装etckeeper非常简单,因为etckeeper在主流的Linux发行版中都有对应的安装包。使用相应Linux平台的包管理器(apt、yum)即可安装。
在Debian/Ubuntu上安装etckeeper,如下:
$sudo aptitude install etckeeper
安装etckeeper软件包,还会自动安装一个分布式版本控制系统工具,除非已经安装过了。这是因为etckeeper需要使用一个分布式版本控制系统作为存储管理后端。在Debian/Ubuntu上会依据下面的优先级进行安装:Git>Mercurial>Bazaar>Darcs。
在Debian/Ubuntu上,使用dpkg-s命令查看etckeeper的软件包依赖,就会看到这个优先级。
$dpkg-s etckeeper|grep "^Depends"
Depends:git-core(>=1:1.5.4)|git(>=1:1.7)|mercurial|bzr(>=1.4~)|
darcs,debconf(>=0.5)|debconf-2.0
[1]http://kerneltrap.org/node/4982
[2]http://www.mzlinux.org/node/116
[3]https://github.com/alex-morega/SpaghettiFS