如何实现Linux的“ Git”式更新管理?


14

我想通过能够在“修订”之内来回移动,以与Git相似的方式管理Linux系统的更新。我该怎么办?


作为一名Linux / Unix系统管理员,他处理Linux / Unix系统如何工作的更深层次的内容,我无法想象需要对系统进行什么样的更改才能要求类似Git的修订系统。在这些系统上获得更改的主要是软件安装和配置文件。配置文件易于手动备份和跟踪。它落入了“设定并忘记它”的心态。
JakeGould 2015年

Answers:


12

您可能应该看看使用Nix软件包管理器的NixOS

NixOS是GNU / Linux发行版,旨在提高系统配置管理的最新水平。在现有发行版中,升级之类的操作很危险:升级软件包可能会导致其他软件包损坏,升级整个系统的可靠性要比从头开始重新安装低得多,您无法安全地测试配置更改的结果,您不能轻易撤消对系统的更改,依此类推。


12

您可能正在寻找的被称为配置管理工具。有多种选择,但是在任何情况下最好的选择都是主观的。

我个人发现Puppet入门非常容易,但是其他受欢迎的选择是SaltAnsible


我已经在无业游民中使用了木偶,但我不记得曾经能够撤消我在操作系统中所做的一些混乱的事情……
Patrick Villela 2015年

4
配置管理工具通常不提供“回滚”功能。“回滚”正在摧毁系统,并使用配置管理工具重新配置系统。例如,您可能使用像Razor这样的裸机置备工具来格式化并重新安装操作系统。然后,它将交给Chef之类的工具来应用配置。
ctc

2
女巫是故意的吗?:)
Ruslan

cfengine死了吗?我记得当我是sysadmin时,曾尝试将自己喜欢的东西用于我的小型群集。但是我从未最终部署它。
彼得·科德斯

使用这些工具中的任何一个,您都可以通过将主配置文件保存在git中来进行版本控制。从他们那里得到的是将整个系统的配置集中和减少到几个文本文件之一。
彼得·科德斯

10

对于您的问题,这可能是过高的,但是能够还原系统级/大量更改的最简单方法是快照:

https://zh.wikipedia.org/wiki/Snapshot_%28computer_storage%29

您没有提到钻机的细节,但是由于您熟悉git,因此可以想象您可能对使用更复杂的文件系统很感兴趣。如果您要使用下一代文件系统(忽略click-bait-y名称),则只需在终端上插入一条命令即可完全“倒带”整个系统。所做的任何和所有更改都将在极少的延迟/努力下被还原。ZFS是您最好的选择,您可以参考这篇Ars文章,以了解它是否值得您一试(还有很多其他许多很棒的功能):

http://arstechnica.com/information-technology/2014/02/ars-walkthrough-using-the-zfs-next-gen-filesystem-on-linux/


2
另一个选择是btrfs,BTW拥有来自Ubuntu,SUSE> = 11,Oracle的官方企业支持。尽管它仍在开发中,但它对于日常桌面使用可靠的,并且性能很好。
ignis 2015年

1
@ignis:尽管下面有RAID 5,但我最近遇到了一个不一致且不可恢复的Btrf,并且听说还有两个实例在工作。因此,我不会轻易忽略那些有关尚未准备好用于生产的警告。在遇到它之前,我不想自己相信它。可能是由于RAM不良所致,这也许是ZFS人员强烈 建议使用ECC内存的原因之一。我想这可能适用于Btrfs。
MvG

6

根据“更新”的含义,您可能对诸如etckeeper之类的配置管理工具感兴趣,该工具可让您自动记录对系统配置的更改,并恢复为较早的配置。

如果Git是熟悉的工具,并且通过“更新”表示“系统配置更新”,而不是“系统软件包更新”或“服务器上存储的所有文件更新”,那么这可能就是您想要的对于。

值得考虑的是,无论您使用的是Puppet,Ansible,Etckeeper等工具,还是不总是能够干净地“回滚”而不丢失数据,除非您全力以赴(例如,快照,如另一个答案所述)。正确的方法取决于您的情况(例如,快照不适用于在回滚时可能丢失客户订单的生产系统)。



1

如果您真的想像git这样管理整个系统(包括内核版本),那么您正在寻找NixOS

对于较少参与的版本,您几乎可以从任何Unix使用NixOS的软件包管理器nix。Nix可以以简单用户的身份安装,尽管以root身份安装更容易。一旦安装了nix,您就可以以非特权用户的身份使用它来安装软件包,并且它可以与现有的软件包管理器一起正常运行,而不会发生冲突。从系统中完全删除nix也是非常容易的,因此,没有任何借口可以尝试一下。;-)

为了直接解决您的问题,Nix将您完整的已安装系统定义为一个环境,就像git commit一样,它是指向所有已安装软件包的非常特定版本的一组指针的指针。

Nix升级软件包时,会创建一个新环境,该环境指向一组指向软件包的新指针(对于尚未更新的软件包,大多数指向现有的指针;再次,这与新的git commit非常相似,这主要是指向以前的未更改文件和一些新版本的已修改文件)。

当然,切换到该环境的先前版本并不容易,我相信这很容易(即,基于比过去更旧的环境创建一个新环境)。可以为特定的Shell加载环境(实际上,这是外壳可用的一组环境变量,因此是名称),因此您也可以很容易地在同一台机器上为不同项目使用不同的环境。不再有依赖性问题,因为不相关的项目需要另一个版本的库!

NixOS将其提升到一个新的水平,并以类似的方式管理您的整个计算机(包括内核),从而可以对整个计算机进行非常低风险的升级。

我还没有读完所有这些书,但我建议使用致命性的Nix药丸作为Nix的简介。


0

如果您是实验性类型,则可以尝试将整个文件系统检入本地git存储库。我想这会很有趣。

  1. git init 在根目录中 /
  2. 为根构造一个.gitignore,以忽略其内容经常更改或不应检入的目录:
    • / dev
    • /跑
    • / tmp
    • / proc
    • / lost + found
    • ...
  3. 将.gitignore添加到您可能希望排除的特定文件类型:
    • * .tmp
    • * .log
    • ...
  4. 添加您的初始内容 git add -A .
  5. 提交快照 git commit -m "Initial Snapshot"
  6. 使用电脑
  7. 定期添加快照git commit -Am "Snapshot X"或类似内容

一些好处是:

  • 熟悉修订历史记录的工具,例如gitkgit diff
  • 任何带有git的livecd或其他操作系统都可以还原您的备份
  • 您可以将整个系统推送到github上,然后将其还原到其他计算机上,或者与他人共享...?
  • 分支将快速而直观
  • 根目录中的/,git目录将激发您滥用系统的信心,并且更具冒险精神,类似于源代码
  • 与其他一些备份解决方案相比,每个后续快照都相对较小
  • 对于审查和跟踪/ etc中的配置更改会很棒
  • 您可以率先将其命名为linit-git中的linux。
  • 骂名

一些奇怪的地方可能包括:

  • 您不太可能恢复/检出具有重大更改的分支或修订版,或者对运行系统时正在使用的文件进行更改-为此,可能需要一个带有git的最小引导USB
  • 较大的初始提交
  • 在随后的.git目录中签入-吗?
  • git当您位于嵌套在根git容器中的源代码目录中时,有望按预期工作。
  • / etc / passwd和/ etc / shadow需要包含在存储库中,以维护和跟踪用户并将其还原到其他计算机,但是现在任何具有查看权限的人(也许在github上)都可以看到敏感信息,例如内容,权限,和用户的密码哈希。

3
这种方法很可能会失败,因为git无法正确处理权限。假设您以root身份执行所有操作,则实际上是将整个文件系统都锁定为root,这反过来会破坏写入操作。例如,您拍摄快照,将其还原,apache日志目录所有者成为根用户(而不是http),apache无法写入目录,无法启动。我知道,因为我尝试过类似的事情,但是规模较小,甚至在那方面也存在问题。
TuncayGöncüoğlu2015年

看看Nix,这是另一个答案的建议;)
Michael Pankov

很高兴知道!我认为它确实处理了权限,至少是八位字节,因为我的脚本在克隆上保留了x标志,但我没有考虑文件和组的所有权
Ehryk 2015年

确实,有其他工具可以保留完整的权限和所有权(如果您确实需要这样做)。一个这样的工具是git-cache-meta这是列表
Ehryk
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.