Etcher: Implement auto-update functionality

Created on 18 Apr 2016  路  17Comments  路  Source: balena-io/etcher

gui all feature

Most helpful comment

Any new progress here? It's very annoying to check every time the changelog and then download the latest version.
Maybe it would be also a pleasure if the version information would also show if the installed version is outdated.

All 17 comments

Check AppImageUpdate - it can do binary delta updates which means that only the changed parts of the binary need to be downloaded during an update.

Hi @probonopd ,

Thanks a lot for the suggestion.

We are using the ISO 9660 Volume Descriptor #1 field "Application Used" to store this information.

Do you have more documentation, or maybe an example, on how to add the update information this way?


What's the recommended way to ask end users to perform the upgrade? I wouldn't want to ask them to download an application AppImageUpdate.AppImage to perform this task. Maybe I can embed distribute this command line tool along with the AppImage, but renamed to something like EtcherUpdate?

Do you have more documentation, or maybe an example, on how to add the update information this way?

Yes, here.

Maybe I can embed distribute this command line tool along with the AppImage, but renamed to something like EtcherUpdate?

Absolutely, consider the appimageupdate script and the AppImageUpdate.AppImage GUI around it a sample implementation. You could instead have your app perform the same kind of thing natively. You could do a GUI inside your app similar to https://sparkle-project.org/.

Is this the last issue before 1.0 is released? I was looking around the site and the issues and didn't see any indicators about release date or progress toward 1.0. Thanks!

Hi @jsejcksn ,

The only things delaying us for v1.0 are currently:

  • Auto updating functionality in all operating systems.
  • Only elevating the process that performs the flashing, which I'm working on at the moment.

@jviotti Thanks for the quick reply. Is there a page other than milestones where you post info about release progress? A twitter or blog, perhaps?

Hi @jsejcksn ,

Not sadly, I'm afraid, but its definitely something we should be dealing with better. As far as I've seen, most OSS projects make use of Milestones for that, so probably cleaning it up a bit should work.

Do you have another examples/suggestions?

@jviotti No, I think Milestones is the simplest solution since you're already using GitHub. Maybe just check to see that all the blocking issues are actually listed in the relevant milestone.

And if want to increase awareness at any level, you could add a link to the Milestones sorted by closest due date (in case you begin to use that feature) in the readme and on Etcher.io.

Sounds good, thank you very much for the suggestions. I'm making a note to cleanup the milestones and link appropriately in the README and in the website.

@jviotti Also, a quick topic detour: you might consider enabling https on Etcher.io (you can get a cert for free from Let's Encrypt, but I'm sure Resin already has one and the Etcher.io domain could be added to it for re-use).

@jviotti

Do you have more documentation, or maybe an example, on how to add the update information this way?

First, you would have to inject the update information into the AppImage, second you would have to upload the AppImage and the AppImage.zsync to an URL that matches the URL specified in the update information.

Step 1: Inject the update information into the AppImage

Assuming you have a file Etcher-linux-x64.AppImage in your current working directory, then the following command would tell the updater to look for Etcher-linux-x64.AppImage.zsync at the URL https://resin-production-downloads.s3.amazonaws.com/etcher/latest/Etcher-linux-x64.AppImage.zsync:

echo "zsync|https://resin-production-downloads.s3.amazonaws.com/etcher/latest/Etcher-linux-x64.AppImage.zsync" | dd of="Etcher-linux-x64.AppImage" bs=1 seek=33651 count=512 conv=notrunc 2>/dev/null

Step 2: Upload the AppImage and the AppImage.zsync to an URL that matches the URL specified in the update information

You would have to copy both Etcher-linux-x64.AppImage.zsync and Etcher-linux-x64.AppImage.zsync to https://resin-production-downloads.s3.amazonaws.com/etcher/latest/ for this to work.

When you have a new version, simply put the updated Etcher-linux-x64.AppImage.zsync and Etcher-linux-x64.AppImage.zsync at the _same_ location.

At this point, AppImageUpdate should work. AppImageUpdate is really just an example GUI around the (work-in-progress but useable) appimageupdate bash script. You could put appimageupdate (and its dependency zsync_curl) inside usr/bin of the AppImage, and call appimageupdate from within your app and even have a little GUI around it; or reimplement it in the language of your app.

Hi @jsejcksn ,

Yeah, we should definitely do that. I wonder if GitHub pages allows us to configure an SSL certificate. /cc @craig-mulligan.

Hi @probonopd ,

Thank you for the extensive explanation on this. I'll get on it shortly!

@jviotti I just came across this project management tool that integrates with GitHub Issues: Waffle.io. You might be interested to see if it can fit with your development progress in regard to what we discussed earlier.

In regard to SSL: It seems that you need to be using CloudFlare if you want to host on GitHub pages with a custom domain using https.

Hi @jsejcksn ,

Funnily enough, we're already using Waffle.io for Etcher (https://waffle.io/resin-io/etcher), but at a very basic level. Could be a good way forward, I'll definitely keep it in mind!

Any new progress here? It's very annoying to check every time the changelog and then download the latest version.
Maybe it would be also a pleasure if the version information would also show if the installed version is outdated.

4 years to update ...

Was this page helpful?
0 / 5 - 0 ratings

Related issues

AreDubya picture AreDubya  路  3Comments

TheEpicNoobZilla picture TheEpicNoobZilla  路  4Comments

mwiegant picture mwiegant  路  5Comments

markcorbinuk picture markcorbinuk  路  5Comments

davidrnewman picture davidrnewman  路  4Comments