Google'Omaha'(他们的Chrome自动更新引擎)的体验是什么?

Mar*_*ark 60 google-chrome auto-update

Google已将谷歌Chrome中使用的自动更新机制开源为奥马哈.

对于任何不是谷歌的人来说,配置似乎相当复杂和困难.在项目中使用奥马哈的经验是什么?可以推荐吗?

Bev*_*ins 30

我们使用奥马哈作为我们的产品.最初,改变硬编码的URL和字符串有相当多的工作.此外,服务器不是开源的,但协议已有详细记录,因此使用Google App Engine创建兼容服务器并不困难.

放弃我们的旧客户端更新解决方案并与奥马哈合作并不后悔.

  • 现在一年后,你有额外的经验可以分享吗? (4认同)
  • 并不是的.更新系统仍然运行良好,过去一年没有必要的维护.服务器在高峰时间几乎得到一个请求......奥马哈每5小时检查一次更新.如果客户端具有的版本与发布的版本不匹配,则会发送更新程序的URL(由Rackspace托管).奥马哈下载,验证并运行更新程序. (2认同)
  • @Bevan:嗨,你介意与我们分享奥马哈的定制是如何完成的吗?我试图用它作为我们的更新程序.但是,http://code.google.com/p/omaha/wiki/CustomizingOmaha上的文档不是很有帮助... (2认同)
  • @funseiki我只是通过定制过程中去,并写了一[教程](https://fman.io/blog/google-omaha-tutorial/)这件事.另见下面的答案. (2认同)

Moh*_*our 16

也许,您可以利用courgette算法,这是Google Chrome中使用的更新机制.它非常易于使用并适用于您的基础架构.目前,它只适用于Windows操作系统.Chrome的Windows用户会以小块的形式接收更新,这与仍然收到总大小的块的Mac和Linux用户不同.

你可以找到源代码这里 SVN仓库.这是一种压缩算法,可将小型更新应用于Google Chrome,而不是始终发送整个发行版.您可以只推送更改的差异,而不是将整个10 MB推送给用户.

有关Courgette如何运作的更多信息可以在这里找到,官方博客文章可以在这里找到.

它的工作原理如下:

server:
    hint = make_hint(original, update)
    guess = make_guess(original, hint)
    diff = bsdiff(concat(original, guess), update)
    transmit hint, diff

client
    receive hint, diff
    guess = make_guess(original, hint)
    update = bspatch(concat(original, guess), diff)
Run Code Online (Sandbox Code Playgroud)

检查源代码时,可以将其编译为可执行文件(在Visual Studio中右键单击编译),然后可以使用该表单中的应用程序进行测试:

用法:

  courgette -dis <executable_file> <binary_assembly_file>
  courgette -asm <binary_assembly_file> <executable_file>
  courgette -disadj <executable_file> <reference> <binary_assembly_file>
  courgette -gen <v1> <v2> <patch>
  courgette -apply <v1> <patch> <v2>
Run Code Online (Sandbox Code Playgroud)

或者,您可以在应用程序中包含该内容并从那里进行更新.您可以通过创建自己定期检查和运行Courgette的服务来模仿奥马哈自动更新环境.

  • 与问题无关. (6认同)
  • 嗨穆罕默德 - 谢谢 - 这听起来像是减少更新大小的好方法.然而,似乎Courgette仍然需要一个'更新框架'(无论是Omama还是DIY框架). (4认同)

Mic*_*ann 9

自 2016 年以来,我一直在各种项目中使用 Omaha。这些项目有少数到数百万个更新客户端。目标操作系统主要是 Windows,但也有一些 Linux 设备和(通过 Sparkle)macOS。

Omaha 很难设置,因为它需要您编辑Google 的 C++ 实现。您还需要一个相应的服务器。标准实现是omaha-server,并非来自 Google。但是,作为回报,它还支持 Sparkle 在 Mac 上进行自动更新(因此我在上面提到了 Sparkle)。

虽然设置上述组件很困难,但一旦配置它们,它们就可以很好地工作。鉴于 Google 使用 Omaha 更新数百万(数十亿?)台设备,这可能并不奇怪。

为了帮助其他人开始使用 Omaha,我编写了一个教程,快速概述了它的工作原理。


dya*_*sta 1

自动更新机制是我亲自编写的,并且过去一直都有。除非您有一个多千兆字节的应用程序并且只想上传零碎的内容,否则只需依靠您自己的代码/安装程序即可。也就是说,我根本没有看过谷歌的开源库......甚至不知道它的存在。我无法想象它提供的东西比您自己编写的代码更好,并且使用您自己的代码,您将不受任何许可限制的约束。

  • 就我个人而言,我发现第三方自动更新框架是一个很大的优势。至少在 Mac 开发世界中,[Sparkle](http://sparkle.andymatuschak.org/) 是一个经常使用的选项;显然,很多开发人员都选择预制件。 (11认同)
  • 如果我错了,请纠正我,但自从我安装了 Chrome 以来,我从来不需要“更新”,它在后台都是透明的,不需要我做任何事情。IIRC 当这个第一次出现时,他们谈到能够通过一些类似于二进制差异等的过程来更新实际的二进制发行版,这使得这非常酷,并且与您自己编写的代码有很大不同,您只需提示用户下载并重新编写安装新版本 (3认同)