Search code examples
c#updatespatchchocolatey

Delta/differential updates using chocolatey (or another tool)


We're developing an app which should be deployed on several devices using windows in our network.
For this case we have an own chocolatey server.

The app which is currently under development has one problem:
a large content folder with many files which are regularly updated - but only a few at a time.

Using chocolatey we always have to update the whole app/content at once (thats how we usually update our apps/content).

I'm not sure using chocolatey to update the content is the right way.
If it is, could you please explain how we could use delta updates using chocolatey? If not, do you have any suggestions how we can efficently handling this problem?

Some facts:

  • the devices has only a low bandwidth connection
  • the whole content folder has a size of over 6GB
  • we don't want to create an custom update mechanism only for the content (e. g. a patcher)
  • updates include adding, changing and removing files

Ideas:

  • We have been thinking about using Git (with Git LFS) to download the latest content (discarded)
  • Creating multiple smaller content packages and using version ranges

Solution

  • I don't think Chocolatey is the right tool for deploying the files / large amount of data across your network, yet it could well be the best tool you'll find to install/setup the services etc. you need after the files are in place. Also, you could indeed use a Chocolatey Package / chocolateyinstall.ps1 to trigger the actual "engine" that transfers the files. (that's what I would do, but I'm heavily biased towards Chocolatey ;-))

    You may want to look into CDC / 'content defined junking' or 'deduplication'.

    Following tools make use of CDC and are heavily optimized in deploying artifacts with as little bandwidth usage as possible:

    • restic ("restic is a program that does backups right.")
    • borg ("Deduplicating archiver with compression and encryption")
    • rdedup ("Data deduplication engine, supporting optional compression and public key encryption.")

    hope that helps,