Google has open-sourced the auto update mechanism used in Google Chrome as Omaha.
It seems quite complicated and difficult to configure for anybody who isn't Google. What is the experience using Omaha in projects? Can it be recommended?
Updates automatically Chrome checks for new updates regularly, and when an update is available, Chrome applies it automatically when you close and reopen the browser.
Go to "msconfig" from Win+R. Go to Service tab. Uncheck both "Google Update Service" boxes. Click OK and Restart computer to save changes.
Google says all Chrome OS devices now receive regular upgrades for a minimum of six and a half years from when their chipset first appeared on the platform — which usually ends up meaning any given device will be updated for at least five years from its initial sale date.
We use Omaha for our products. Initially there was quite a bit of work to change hardcoded URLs and strings. We also had to implement the server ourselves, because there was not yet an open source implementation. Today, I would use omaha-server.
There are no regrets with ditching our old client update solution and going with Omaha.
Perhaps, you can leverage the courgette algorithm, which is the update mechanism that is used in Google Chrome. It is really easy to use and apply to your infrastructure. Currently, it just works for Windows operating systems. Windows users of Chrome receive updates in small chunks, unlike Mac and Linux users who still receive the chunks in total size.
You can find the source code here in the Chromium SVN repository. It is a compression algorithm to apply small updates to Google Chrome instead of sending the whole distribution all the time. Rather than push the whole 10 MB to the user, you can push just the diff of the changes.
More information on how Courgette works can be found here and the official blog post about it here.
It works like this:
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)
When you check out the source, you can compile it as an executable (right click compile in Visual Studio) and you can use the application in that form for testing:
Usage:
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>
Or, you can include that within your application and do the updates from there. You can imitate the Omaha auto update environment by creating your own service that you periodically check and run Courgette.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With