welcome: please sign in
location: EtcKeeper

etckeeper

概览

目前 solar, omni, major 上面都配备了 etckeeper。简单来说,etckeeper 就是把 /etc 建成了一个 git 仓库。这样做有两个好处:

原理

Git 用来管理 /etc 的不足之处在于

etckeeper 的原理是利用一个文件 /etc/.etckeeper 记录上述两类信息。etckeeper 提供了一个生成这个文件的脚本 /etc/etckeeper/pre-commit.d/30store-metadata,并且加到了 pre-commit hook 中 (/etc/.git/hooks/pre-commit)。

.etckeeper 实际上就是一个用来还原上述元信息的 shell 脚本。

此外因为在 sudo 时往往会丧失大多数环境变量,git 可能不能正确地识别出 sudo 前用户的身份,造成 git 历史中的各个 commit 作者都是 root。etckeeper 提供了一个同名的 binary etckeeper,用于识别 sudo 之前的用户身份并且传递给 git。但是 etckeeper 的一个问题在于它会无条件地执行 git add --all .,当管理员想要分多次 commit 的时候会带来不便。为了解决这一问题,我提供了一个名为 sudogit 的脚本,只做传递用户身份这一件事情。sudogit 接收的命令行参数和 git 是等同的。

Howto

对管理员的要求是,每次改完 /etc 里面的文件后都需要运行一次

sudo etckeeper commit

或者如果你想要自己手动执行 git addgit commit,可以用

sudogit add [想要 commit 的文件]
sudogit commit

Traps


CategoryManual

EtcKeeper (2012-09-12 19:46:00由xiaq编辑)