在具有多个系统管理员的环境中,我看到了将服务器配置文件添加到版本控制系统中的一些优点。最值得注意的是能够跟踪更改的源头,并且能够回滚到已知的有效配置。

我主要对Unix / Linux解决方案感兴趣,但对Windows实现也是如此。

评论

似乎重复或与此问题非常相关serverfault.com/questions/3852/…

#1 楼

我已经在家里(〜3台主机)测试了一段时间,尝试使用不同的
scms(RCS,Subversion,git)。目前最适合我的设置是带有
setgitperms钩子的git。

您需要考虑的事情:

文件权限和所有权的处理


RCS:本机执行此操作
Subversion:最后我尝试过,您需要在svn周围使用包装器来执行此操作
git:setgitperms钩透明地处理了此操作(需要
git的最新版本,但支持post-checkout钩子)

此外,如果您不希望所有/etc都受版本控制,则仅
您实际上进行过修改(像我一样),您将需要一个支持这种使用的scm。


RCS:仍然只适用于单个文件。
颠覆:我发现这很棘手。
最后,在*下有一些有问题的目录,程序包可能会掉落
confi g片段,然后由某些程序或守护程序读取(例如.gitignore
git add --force等)。其中一些程序足够聪明,可以忽略
RCS文件(例如cron),而有些则不能(例如modprobe)。与/etc
目录相同。再次为git带来了一大好处(仅创建一个顶级/etc/cron.d
目录)。

评论


Subversion需要asvn svn.collab.net/repos/svn/trunk/contrib/client-side/asvn。存档SVN(asvn)将允许记录svn通常不处理的文件类型。当前,这包括设备,符号链接和文件所有权/权限。

–克里斯蒂安·丘皮图
09年6月19日在19:40

您是否在任何地方都写了文字,说明如何设置您使用过的挂钩等?

– grufftech
09年7月9日在23:18

这里是一个简短的文章:jottit.com/jg8h7

– 8jean
09年7月20日在15:46

这是一篇有关在Arch Linux ARM中设置类似内容的文章,在这里同样适用。 zduck.com/2012/storing-your-raspberry-pi-config-in-git

–沉默__思想
2012年6月9日12:20



#2 楼

我已经用git非正式地完成了它,但是还有etckeeper项目,它是一个更加完善和详细的实现。

评论


etckeeper确实很棒-它可以处理恢复权限(git,hg等不支持)并支持您选择的后端(包括git,hg,bazaar等)。它还集成到APT中,因此每次执行apt-get操作时,都会提交/ etc存储库,并进行隔夜的提交。我已经使用了一段时间,总的来说,如果仅用于权限功能,它比使用香草VCS更好。

– RichVel
2012年4月13日在9:19

#3 楼

另一种选择是使用自动化的服务器配置工具(例如Puppet或Cfengine)以声明性语言编写服务器配置脚本。

这是前端的额外工作,但是使用Puppet这样的实用程序,您可以在很少的人工干预下自动重建和配置服务器。

评论


是的,但是您还应该对Puppet / CFengine配置进行版本控制。我还是修订控制输出的爱好者,因此您可以回答“日期x上的配置是什么?”的问题。以及“根据伪造的配置应该是什么?”,并将输入与输出相关联以对配置管理系统进行故障排除。

–Rob Chanter
09年5月7日,0:34

#4 楼

我一直在尝试使用etckeeper,看来效果很好。我不需要集中式服务器,这在某些情况下可能很重要。您可以使用几个不同的DVCS后端,因此可以选择最熟悉的一个。它对我来说似乎很好用,但是我还没有尝试让其他技术人员开始使用它。

#5 楼

我最近一直在找厨师。它不仅在版本控制中保留模板(.erb)配置,还允许您执行操作(例如,将配置上传到节点后重新启动服务)。 Chef帮助进行软件包管理,因此您可以验证与之交互的任何节点的依赖关系(即必须安装sudo软件包)。 Chef似乎很容易在Ruby中扩展,因此,如果您有任何自定义进程,则可以在提供的框架中编写脚本。

但是还没有尝试过,您必须在客户端和服务器具有适当的宝石(这并不难)。总体看来,一次管理多个服务器非常容易。

评论


我们非常成功地使用了Chef(超过60台服务器)。所有配方和配置文件都已签入Subversion。

–organicveggie
2011年5月31日在20:21

#6 楼

我正在整个基础架构中实施Puppet,这非常有助于将其数据保留在版本控制中。

我更喜欢Mercurial,因为它只是文件的集合,一些元数据存储在隐藏目录中(易于管理,易于理解,易于使用)。

我的Puppet文件位于/ usr / local / etc / puppet /(FreeBSD 7.1)。将Mercurial添加到其中所需要的全部:

> cd /usr/local/etc/puppet
> hg init


所有更改都通过简单的“ hg commit”提交。如果发生变化,我可以使用单个命令将每个服务器回滚到文件的给定版本(例如sudoers)。

#7 楼

我一直在管理的服务器上使用Subversion。工作良好。我还设置了一个
Trac实例,因此我们具有时间轴视图,票务系统,浏览等。

使用符号链接,cron和subversion,我还基于子版本库,每个Linux服务器在其中使用带有脚本(例如防火墙脚本)的svn update更新库。

#8 楼

这是一个现实生活中的用例:
使用Subversion管理4台不同服务器上的配置文件。我建议对配置文件使用版本控制,原因与您将它们与代码一起使用的原因相同-它是一个备份和一个撤消按钮,它们合而为一。如果我要管理大量服务器,而它们在配置上更接近,那么我将使用berberich的答案中详细介绍的Puppet之类的东西。您可以检出服务器上的特定文件夹(例如/ var / named /),这样我既有历史记录,又有配置文件的备份(如果您误用了擦除您的GUI配置应用程序,则备份是一个奖励手动编辑的附加内容咳嗽(Mac OS X中的Server Admin服务器咳嗽)。然后,可以轻松地在测试服务器上对其进行测试,然后使用无需手动复制文件即可运行的文件来更新生产服务器。

#9 楼

几年前,我已经创建了一个项目来完全做到这一点:Savon

它使用子版本来存储文件,并具有一些其他功能,例如跟踪所有权,权限和SELinux上下文。它还允许您在逻辑上将文件系统更改分成多个层,因此,例如,您可以跟踪应分别发送到所有Web服务器的更改。

#10 楼

Subversion非常易于设置和使用,并且有很多资源:

基本操作方法

SVN手册

文档管理概述

评论


我同意,如果您使用的是Windows checkout tortise svn,则使用起来非常简单。

–元素
09年5月6日在18:09

#11 楼

我们的大多数更改都是通过Help Desk系统管理的,即使是日常维护类型的东西也是如此。我们一直在缓慢地将文档移至Wiki供自己使用,以及将其发布给最终用户。发布配置更改及其背后的讨论很高兴在我们的Intranet上打开。

#12 楼

多年以来,我一直使用rcs来开始修改文件,但是几年前,我开始将整个/ etc置于git控制之下。检入大量文件需要一些工作(有时我诉诸巨大的“各种更新”检入),并且我编写了一些脚本来帮助解决此问题,但是提到的etckeeper似乎很有趣,我将立即尝试。