存在哪些解决方案可以对服务器配置文件使用修订控制?[关闭]


85

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

我主要对Unix / Linux解决方案感兴趣,但也会对Windows实现感到好奇。


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

Answers:


52

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

您需要考虑的事情:

文件权限和所有权的处理

  • RCS:本机执行
  • Subversion:上一次我尝试过,您需要一个包装器svn来完成此操作
  • git:setgitperms钩子透明地处理此问题(不过需要支持post-checkout钩子的最新版本的git )

另外,如果您不想全部/etc受版本控制,而只想要实际修改的文件(例如我),则需要一个支持这种使用的scm。

  • RCS:无论如何,仅适用于单个文件。
  • 颠覆:我发现这很棘手。
  • git:无探针,将“ *”放入顶级.gitignore文件,然后仅添加要使用的文件git add --force

最后,还有在一些有问题的目录,/etc而软件包可以丢弃的配置片段,然后由某些程序或进程(读/etc/cron.d/etc/modprobe.d等等)。这些程序中的某些程序足够聪明,可以忽略RCS文件(例如cron),而有些则不能(例如modprobe)。与.svn 目录相同。还是git的一大优点(仅创建一个顶级.git 目录)。


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

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

这里是简短的写作:jottit.com/jg8h7
2009年

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

28

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


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

23

另一个选择是使用自动服务器配置工具(例如PuppetCfengine)以声明性语言编写服务器配置脚本。

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


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

10

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


6

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

但是仍然没有尝试过,您必须使用适当的gem在客户端和服务器上安装Ruby(这并不难)。总体看来,一次管理多个服务器真的很容易。


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

3

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

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

我的Puppet文件位于/ usr / local / etc / puppet /(FreeBSD 7.1)。添加Mercurial所需的全部时间:

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

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

关于Mercurial的精彩介绍


3

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

使用符号链接,cron和subversion,我还基于subversion存储库设置了自动配置分发,其中每个Linux服务器都使用svn update脚本(例如防火墙脚本)来更新存储库。


2

这是一个现实生活中的用例:用Subversion管理4台不同服务器上的配置文件。我建议对配置文件使用版本控制,原因与您将它们与代码一起使用的原因相同-它是一个备份和一个撤消按钮,它们合而为一。如果我要管理大量的服务器,而它们在配置方面更接近,那么我将使用berberich的答案中详细介绍的Puppet之类的东西。

这个想法是,您可以有一个存储库,可以检出服务器上的特定文件夹(例如/ var / named /),因此我既有历史记录又有配置文件的备份(如果您输入错误,则备份是一个奖励)使用GUI配置应用程序擦除用户手动编辑的咳嗽的步骤(Mac OS X Server 咳嗽中的 Server Admin )。然后,可以轻松地在测试服务器上对其进行测试,然后使用无需手动复制文件即可运行的文件来更新生产服务器。


1

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

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



0

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


0

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

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.