版本控制在多大程度上有助于系统管理?

时间:2009-01-17 13:16:43

标签: linux version-control unix sysadmin openbsd

我目前正在修改OpenBSD系统,以便建立自己的防火墙以及其他一些东西。

由于这是相当实验性的(我是一个OpenBSD n00b,我已经把我的系统破坏了3到4次),我想知道其他人制作部分或全部文件系统的经验(我在想什么)特别是/ etc)一些VCS或其他的工作副本。

  • 这是个好主意吗?

  • 我特别感兴趣的是VCS用户为此做了什么。我正在考虑颠覆,集市和git;这不是一个共享的存储库,所以我对基本的vcs功能比对distributed-or-not参数更感兴趣。

  • 我也想知道人们发现的想象或实际陷阱。我可以想象保存文件所有权和权限需要仔细考虑!

  • 当然,任何不涉及VCS的替代方法

7 个答案:

答案 0 :(得分:8)

Here你有一个关于使用git将/ etc /置于版本控制下的详细修订。

Another一步一步的方法。

答案 1 :(得分:4)

对于你正在做的事情我建议而不是从OpenBSD开始,你从一个已完成大部分工作的发行版开始,如pfsense

对于VCS本身,您可能需要考虑mercurial

成功使用的these projects

答案 2 :(得分:4)

我认为还没有人提到etckeeper

它将/ etc存储在repos(git(默认),mercurial或bzr)中。它解决了保存文件所有权,权限和空目录的问题。它可以与软件包managemnet(至少与apt)集成,以自动提交在安装新软件包期间发生的对/ etc的更改。非常好,如果安装borks你自己的更改,只需回滚。

我已经在Ubuntu中成功使用了一段时间。

答案 3 :(得分:2)

我在“Gnu / Linux Magazine France”上读到了一些内容。 该人使用rsync从/ etc到root /然后通过subversion存储它,而不创建工作副本。

我要引用一下这本杂志。

好的,在这个例子中,服务器运行freeBSD并且是“sparky”,而要保存的机器是debian并且是“replica”。 创建用户“副本”。

在/ usr / local / etc / ssh / sshd_config中添加:

Match User replica
X11Forwarding no
AllowTcpForwarding no
ForceCommand /usr/local/bin/svnserv -t -r /home/replica/svnrepo -tunnel-user=replica

创建存储库

sparky #svnadmin create / home / replica / svnrepo

修正权利:

sparky # chown -R replica:nogroup /home/replica
sparky # chown -R o-rwx /home/replica
sparky # chown -R g-rwx /home/replica

客户方:

安装subversion

replica # mkdir -p /root/scripts/svnrepo
replica # rsync -av /etc /root/scripts/svnrepo

export SVN_SSH ="ssh -i /root/.ssh/id_rsa"
svn import -m "replica config files" /root/scripts/svnrepos svn+ssh://replica@sparky/home/replica/svnrepo

现在,我们的文件夹还不是一个工作副本,所以我们必须制作它。你能创建一个.svn文件吗?他不能:))

cd /root/scripts
mv svnrepo svnrepo.old
svn checkout svn+ssh://replica@sparky/home/replica/svnrepo

现在尝试修改etc中的文件,例如主机。

rsync了。您应该只获取已修改的文件,即/ etc / hosts被复制。

现在你可以提交:

svn commit -m "backup 1" /root/scripts/svnrepo

最后一件事。如果您希望subversion采用文件,则必须添加该文件。因此,例如,如果您在/ etc中创建一个新文件,默认情况下不会保存它。

要做什么?

svn status /root/scripts/svnrepo | grep -e '^!' | awk '{ print $2 }' | xargs -r svn delete 
svn status /root/scripts/svnrepo | grep -e '^?' | awk '{ print $2 }' | xargs -r svn add

然后,你必须制作自己的剧本。

希望这有帮助。

(gtg,我稍后会编辑设置标题,如果没有人则会编辑)

答案 4 :(得分:2)

我不仅仅在修订控制系统中安装配置文件,我建议使用配置管理系统(如ChefPuppet)来管理配置文件的内容,权限和其他详细信息,例如在配置文件更改时重新启动应用程序,并在git / subversion / yourfavoriteVCS中管理这些文件。

答案 5 :(得分:1)

我管理的每台服务器上的/ etc中的所有内容(300 +并且正在计数)都在Mercurial之下。为什么呢?

  • 对于曾经使用过SVN或CVS的人来说,它很容易使用(如果你没有,你在我的生产机器上没有做生意的业务)
  • 可以轻松地将更改从一个服务器的配置提取到许多其他配置
  • 当其他管理员有一个大脑放屁时,我可以快速回滚
在这种情况下,Git对于太少的问题来说太强大了。由于HG是DVCS,因此提交和回滚非常简单。我也使用HG来manage most of my web sites

它不仅仅是源代码:)另一个更基本的选择是使用某种版本控制文件系统来拍摄快照(CoW),DVCS更容易。

答案 6 :(得分:0)

反馈:我最终做了什么

(@ Aif,感谢温柔的提醒,我的礼貌有点缺失)

我和/ etc一起作为git存储库使用了,但是我对这个(我,而不是git)仍感到有点不安,我正在手动做gitwork。

作为一个副作用,我开始自己开展一个小项目,并排评估颠覆,git,bazaar,mercurial,monotone,darcs和fossil,尽管在更通用的版本管理环境中(合并和这样)。


我对你的答案的反应

谢谢大家的帮助。我在选择接受哪个答案时遇到了一些困难,所以如果不是你的答案,请相信我,我也赞赏你。

@ Luis Melgratti

路易斯,感谢几位出色的参考资料。我已经接受了你最有用的答案。


@的康拉德

康拉德,我很欣赏你的建议。

我当然会调查 pfsense ,虽然我的目标之一是弄脏我的手,以及建立防火墙,所以“制造而不是获取”非常重要。

至于Mercurial,我没有将它包含在我的列表中,因为我已经尝试过(之前),我觉得我更喜欢“集市”,而git似乎乍一看有很大的力量(诚然,我可能不需要)。我目前的“主要”VCS是Subversion,虽然我不确定这是一个很好的答案。因此列出了三个。

(我现在看了一下pfsense并在我的网络上解决了它。非常好,但我不确定我的手会不会弄脏......)


@的 AIF

谢谢,Aif。我肯定会尝试一下,虽然我怀疑我最终会得到git。


@的 tinkertim

感谢您对Mercurial的看法,我现在打算再次访问,但我对Bazaar很满意。


@ 每个Wiklander

感谢您提出一个非常有趣的建议!当我能从当前的工作堆中退出时,我肯定会去看看etckeeper。