是否可以将etckeeper与单个共享git存储库一起使用?


9

我注意到有人建议使用etckeeper将版本控制应用于我的/ etc目录。

在我看来,默认安装会将存储库与您要管理的/ etc放在同一台计算机上。这对于版本控制来说效果很好,但是并不能提供文件外备份的额外好处-或者不允许我将/ etc的部分从一台源计算机复制到另一台源计算机。

是否可以在中央管理机上共享单个git存储库,以便每台服务器上的etckeeper都将其数据存储在同一位置?

(我现在正在使用svn和一些自定义脚本来提交和还原文件,但与此类似,但是我必须记住在进行更改时要提交它们。)

Answers:


8

首先,使用在/etc/etckeeper/etckeeper.conf中为git配置的install etckeeper。按照您发行版或源代码中etckeeper的安装方法进行操作。

很快,您将拥有一个/etc/.git

现在,在您的服务器上,确保有一个(安全)存储库可以推送到...

 # ssh faruser@farhost     
 # mkdir somedir cd somedir && git init && chmod 700 .git    
 # exit

现在在初始主机上,通过ssh将本地存储库推送到服务器:

# cd /etc && git push faruser@farhost:somedir

在这种情况下,somedir当然可以是相对的(遵循ssh约定)

只要您进行会影响/ etc的更改(并被etckeeper隔离到/etc/.git中),就可以执行此操作,并且您将拥有计算机的本地和非本地存储库。

或设置无密码的ssh并在/etc/etckeeper/commit.d/中建立一个钩子,以便在机器始终处于连接状态时自动发生。


2
这看起来很棒。有没有一种方法可以将本地存储库存储在远程存储库的子目录中?我想做一个类似的事情,使用一个远程存储库来存储多台服务器的(单独的)配置。
安德鲁·费里尔

可以git push用于创建的git repo吗?可能您需要在somedir中创建裸仓库,这是commit.d下的钩子,这真的是个好主意,我喜欢
larrycai 2012年

3

可以添加远程分支配置,以将etckeeper存储库的主分支从每个服务器映射到远程存储库上的分支。为此,您可以在每台服务器上运行以下命令:

cd /etc
git branch -m master $HOSTNAME
git remote add origin git@git.example.com:path/to/single/repo.git
git push -u origin master:$HOSTNAME

完成此设置后,后续操作git push会将更改从每个服务器主分支发送到中央存储库上的专用服务器分支。

尽管分支没有共同的起点,但这可以通过运行以下命令轻松地比较代表两个不同服务器的两个不同分支中的同一文件:

git diff origin/server1 origin/server2 -- file

这可以与jojoo建议的自动设置结合使用。


git push -u origin master:$ HOSTNAME在这里不起作用。远程仓库是一个空的裸仓库。错误:src refspec master不匹配。
贝尔特(Bertl)

1

如何自动执行,全文:

在客户端上创建文件/etc/etckeeper/commit.d/60-push(不要忘记chmod + x)。

#!/bin/sh
git push central_server:/var/git/client_name.git master

central_server在ssh配置中定义,请参见下文。/var/git/client_name.git是中央服务器上的目录,包含git repo。

来自root(!)的〜/ .ssh / config应该包含以下内容:

host central_server
Hostname 192.168.0.1
User etckeeper #a user on the central server 
IdentityFile ~/.ssh/custom_key # key is in authorized_keys in
             #etcpeeper@central_server:~/.ssh/authorized_keys

然后,您需要在central_server上初始化git repo

mkdir /var/git/client_name.git
su etckeeper
cd /var/git/client_name.git
git --bare init

在/ etc中进行较小的编辑来对其进行测试,然后etckeeper提交“ test push'ing”。


1

那不是重点。如果要广泛分发配置,则除了每台计算机的本地存储库之外,还要设置另一个存储库,并根据需要从中挑选每台计算机。这样做是允许每台机器偏离(分支,实际上)并保留修订控制。


不确定如何执行此操作(第二个存储库)。你能详细说明吗?
布伦特

您可能需要将其中一个存储库克隆到“中央存储库”中;您只需要一个。从那里可以进行更改,然后每个服务器都可以挑选存储在修订版中的补丁。最初的设置方式在DSCM之间有所不同。有关git的信息,请参见kernel.org/pub/software/scm/git-core/docs/gittutorial.html
jldugger,2009年

-2

您真的不想让etckeeper成为您的备份策略。虽然拥有配置文件的副本会很不错,但这还不足以成为灾难恢复计划。

专注于拥有系统的真实备份。这位简易师可能是一个把压缩包送进录音带的骗子……哦,对。没有人使用磁带了。好吧,一个cronjob到rsync的 所有文件到一个专用的NAS。有关更强大的备份解决方案,请查看AmandaBacula

对于学者来说,我能够像其他git repo一样我的etckeeper存储库github


没有人在谈论将其作为备份策略。但是以我的经验,将所有内容放在一台更安全的服务器上很方便。
布伦特

1
然后我误会了。如果您真正要寻找的是一种集中存储和分发系统配置的方法,那么Puppet(reductionlabs.com/products/puppet)可能会对您有所帮助。
沙堡2009年

例如:我们将所有配置推送到一个主机上。在那里运行了一个trac,用于可视化配置更改(当然,写票,如果某些事情不起作用,...)imo超级方便,例如,我可以将我们所有主机的crontab与点击几下。
jojoo
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.