Answers:
我已经在家里(〜3台主机)测试了一段时间,尝试使用不同的scms(RCS,Subversion,git)。现在最适合我的设置是带有setgitperms
钩子的git 。
您需要考虑的事情:
文件权限和所有权的处理
svn
来完成此操作setgitperms
钩子透明地处理此问题(不过需要支持post-checkout
钩子的最新版本的git )另外,如果您不想全部/etc
受版本控制,而只想要实际修改的文件(例如我),则需要一个支持这种使用的scm。
*
”放入顶级.gitignore
文件,然后仅添加要使用的文件git add --force
最后,还有在一些有问题的目录,/etc
而软件包可以丢弃的配置片段,然后由某些程序或进程(读/etc/cron.d
,
/etc/modprobe.d
等等)。这些程序中的某些程序足够聪明,可以忽略RCS文件(例如cron),而有些则不能(例如modprobe)。与.svn
目录相同。还是git的一大优点(仅创建一个顶级.git
目录)。
我已经用git非正式地完成了,但是还有etckeeper项目,它是一个更加完善和详细的实现。
我正在整个基础架构中实施Puppet,这非常有助于将其数据保留在版本控制中。
我更喜欢Mercurial,因为它只是文件的集合,一些元数据存储在隐藏目录中(易于管理,易于理解,易于使用)。
我的Puppet文件位于/ usr / local / etc / puppet /(FreeBSD 7.1)。添加Mercurial所需的全部时间:
> cd /usr/local/etc/puppet
> hg init
所有更改都通过简单的“ hg commit”提交。如果有变更,我可以使用单个命令将每个服务器回滚到文件的给定版本(例如sudoers)。
这是一个现实生活中的用例:用Subversion管理4台不同服务器上的配置文件。我建议对配置文件使用版本控制,原因与您将它们与代码一起使用的原因相同-它是一个备份和一个撤消按钮,它们合而为一。如果我要管理大量的服务器,而它们在配置方面更接近,那么我将使用berberich的答案中详细介绍的Puppet之类的东西。
这个想法是,您可以有一个存储库,可以检出服务器上的特定文件夹(例如/ var / named /),因此我既有历史记录又有配置文件的备份(如果您输入错误,则备份是一个奖励)使用GUI配置应用程序擦除用户手动编辑的咳嗽的步骤(Mac OS X Server 咳嗽中的 Server Admin )。然后,可以轻松地在测试服务器上对其进行测试,然后使用无需手动复制文件即可运行的文件来更新生产服务器。
几年前,我创建了一个项目来完全做到这一点:Savon
它使用Subversion来存储文件,并具有一些其他功能,例如跟踪所有权,权限和SELinux上下文。它还允许您在逻辑上将文件系统更改分为几层,因此,例如,您可以跟踪应分别发送到所有Web服务器的更改。