我希望为所有服务器的 etckeeper .git repos 建立一个中央 git 存储库。这里建议使用 /etc/etckeeper/commit.d 中的一个文件,它基本上看起来像这样,假设已经在 somehost 上的 somedir 中设置了一个 git repo:
#!/bin/sh
cd /etc
git push faruser@farhost:somedir
问题是,如果所有服务器都位于中央服务器上的同一个仓库中,那就太好了。我试过了
git push faruser@farhost:somedir/server1
但失败了。
正如您所见,我之前从未使用过 git ...如果您能提供任何关于如何实现这一点的想法,我将不胜感激:)
干杯,
安德烈亚斯
答案1
我可以理解您希望将所有配置信息集中到一个地方,但您可能希望它们仍然是自己独立的存储库,只是位于一个中心位置。为此,请查找如何在 git 中推送到远程位置(使用git push)。然后您需要设置从所有服务器对该位置的访问权限,此时您可以从所有服务器推送。此时您指出的建议应该有效。
答案2
除了 pjz 给出的好答案之外,下面是如何一步一步完成的:
在客户端上创建文件 /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”。
答案3
您必须以这样的方式设置远程主机,以便允许本地用户(我假设是 root,因为您使用 etckeeper)推送到远程存储库。如何执行此操作取决于您希望远程站点上的 git-repos 发布/可用的方式。例如,当通过 ssh 使用 git 时,您很可能会设置一个没有密码的 sshkey 对,从而允许本地 root 在没有(键盘等)交互的情况下登录远程站点。是的,当推送到远程站点时,存储库必须存在,因此至少必须有一个空的存储库。所以首先告诉我们您遇到的确切情况以及您遇到的确切错误。
答案4
至少在 debian 上,etckeeper.conf 中有一个选项。
...
# To push each commit to a remote, put the name of the remote here.
# (eg, "origin" for git).
PUSH_REMOTE="origin"
...
手动将远程添加到 git repos 后,它应该可以立即使用