可以使用etckeeper跟踪/ etc之外的配置文件吗?


11

具体来说,我想跟踪我的grub.conf/boot/grub/grub.conf)和一些oracle文件(即/db/app/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora)。

我尝试使用链接;但是etckeeper / git只跟踪链接指向的位置,而不跟踪实际内容。而且我无法创建硬链接,因为文件位于另一个卷上。

我知道我可以设置另一个GIT存储库,但我宁愿将其全部放在etckeeper中。

更新资料

根据nealmcb的回答,我想到了以下脚本:

#!/bin/sh
set -e

# Based on nealmcb's idea/script from http://serverfault.com/questions/211425/

# If you want other configuration data or files on the system also
# opportunistically tracked via etckeeper, use this script to copy them in.

# If there is a hook of some sort available related to the files
# you're mirroring, you can call etckeeper directly and track them
# proactively, rather than just opportunistically here.

MIRROR_ROOT=/etc/etckeeper.mirror.d
echo "etckeeper: mirroring outside files to $MIRROR_ROOT/:"

mirror_dir() {
   LOCAL_PATH=$1
   echo "  $LOCAL_PATH"
   mkdir -p $MIRROR_ROOT/$LOCAL_PATH
   rsync -a $LOCAL_PATH/ $MIRROR_ROOT/$LOCAL_PATH
}


mirror_dir "/boot/grub"
mirror_dir "/root"  

要添加或删除路径,您只需mirror_dir在底部添加或删除呼叫。


这不是一个真正的答案,但是由于上面(至少对我来说)不允许评论,请分享以下内容:如何重用/扩展etckeeper的元数据引擎以对非/ etc文件系统进行git控制,或者使用上述功能本地扩展git?。(请不要因为我无法发表评论而拒绝在这里发布参考,ding。)
Johnny Utahh 2011年

Answers:


6

我编辑了上面的脚本,其中还包括普通文件。

也许有人应该添加一种可能性来在脚本之外(在etckeeper配置中?)进行配置,并将其作为补丁发送给joey hess?

#!/bin/sh
set -e

# Based on nealmcb's + ErebusBat's script from http://serverfault.com/questions/211425/

# If you want other configuration data or files on the system also
# opportunistically tracked via etckeeper, use this script to copy them in.

# If there is a hook of some sort available related to the files
# you're mirroring, you can call etckeeper directly and track them
# proactively, rather than just opportunistically here.

MIRROR_ROOT=/etc/etckeeper.mirror.d
echo "etckeeper: mirroring outside files to $MIRROR_ROOT/:"

mirror_dir() {
   LOCAL_PATH=$1
   echo "  $LOCAL_PATH"
   mkdir -p $MIRROR_ROOT/$LOCAL_PATH
   rsync -a --del $LOCAL_PATH/ $MIRROR_ROOT/$LOCAL_PATH
}

mirror_file() {
   LOCAL_PATH=$1
   DIRPATH=`dirname $LOCAL_PATH | head -n 1`
   echo "  $LOCAL_PATH"
   mkdir -p $MIRROR_ROOT/$DIRPATH
   rsync -a --del $LOCAL_PATH $MIRROR_ROOT/$DIRPATH
}
mirror_file "/var/srv/foo_bar/blog/config.py"
mirror_file "/var/srv/foo_bar_another_host/trac/conf/trac.ini"
mirror_file "/tmp/wildcards/*.jpg"

3

etckeeper确实允许您将其与其他系统集成。

我还想跟踪/ boot中update-grub所做的更改,因此将代码放在 /etc/etckeeper/commit.d/20mirror-outside-files

这样,由于其他原因(当我安装软件时,有时每晚,等等),任何时候调用etckeeper时,它将在最新的grub配置中捕获并跟踪修订。

我发明了约定把这个东西在/ etc /镜像/ 路径到外的文件,如/etc/Mirror/boot/grub/grub.cfg但如果有人不为其他公约的先例,我很想听到它。

#!/bin/sh
set -e

# If you want other configuration data or files on the system also
# opportunistically tracked via etckeeper, use this script to copy them in.

# If there is a hook of some sort available related to the files
# you're mirroring, you can call etckeeper directly and track them
# proactively, rather than just opportunistically here.

echo etckeeper: mirroring outside files

mkdir -p /etc/Mirror/boot/grub
cp -p /boot/grub/grub.cfg /etc/Mirror/boot/grub

更新:

注意,由于某种原因,当执行apt-get删除或清除操作(例如删除旧内核)时,etckeeper不会运行此命令。奇怪...。但是您可以sudo etckeeper commit在这种情况下手动运行,也可以在手动运行之后运行update-grub


3

etckeeper现在有一个-d选项来指示它必须在哪个目录上运行。

尽管触发etckeeper的钩子通常将构造函数用作etckeeper pre-install,...,但您必须添加使用它的钩子etckeeper pre-install -d /boot/grub。这样可以避免文件复制。

请注意,如果您认为systemd目标,服务,...文件是配置文件(我愿意-毕竟,该文件/lib/systemd与该文件没有什么不同/etc/init.d),那么此-d选项将帮助您跟踪/lib/systemd


1

从简介: etckeeper init -d /directory

但是要当心!下次或下周运行时(如果您忘记了)-d path,它将创建一个新的独立本地存储库,其默认位置为/etc

因此,我建议在etckeeper.conf中将此重要细节提交给它的配置。快速的,grep /etc \``which etckeeper\``显示: ETCKEEPER_DIR=/etc,因此只需在etckeeper.conf中使用此变量。

sed -i '1 i\ETCKEEPER_DIR=/' /etc/etckeeper/etckeeper.conf

从渴望“保留”其他东西开始,包括文件属性 etckeeper init -d / 对我有用,但后来忘记细节却很烦人。因此最好保存此详细信息。同样,uninit不使用VCS撤消,它只是删除整个本地存储库。


0

我认为etckeeper不会这样做,但是有两种解决方案:

  1. 反向链接:在文件系统上将链接放置到/ etc /中的文件

  2. 脚本将这些文件复制到/ etc(备份),再复制到/ etc(还原)。然后定期或在适当的git hook中使用这些脚本。


2
虽然反向链接是一个好主意,但在某些情况下我会使用它,但在某些情况下它不会起作用。具体来说,请不要尝试使用反向链接,grub.conf否则您将无法启动。
Zoredache

@Zoredache-是的。但是,反向链接可能适用于我的Oracle文件。并且@pjz的copy方法可能在启动时适用于任何东西(grub + kernel conf)。下周我将尝试。
ErebusBat 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.