09:31 am, 1 May 09
deb/rpm diffing tools
Dear Linux hackers,
Chrome tends to push minor updates (often security) pretty frequently. We'd like to operate as a good member of the Linux ecosystem and just offer an apt/yum/etc. archive, but it seems unlikely to me that people will accept pulling a new 20mb binary package every few days.
One idea I've idly had is that we could provide deltas, ideally ones that would reconstruct the normal packages you'd get if you went through the slow path. For example, it could look at which package version you currently have installed, then combine the diff with the files you currently have installed to regenerate the files that would be in the newer package, and then construct the package from there and hand that off to dpkg/rpm. I've heard about such tools existing but my Googling is failing me. Do you have any links? Do you have any friends I could ask?
(For comparison, Firefox uses its own autoupdate system on Linux if you haven't installed it via a distributor, which is actually pretty reasonable when you consider the above. But this also requires that the running binary have write access over its own files, which more or less means it needs to be installed in your home directory. This is one of the reasons (aside from the fact Microsoft also recommends it) that Chrome on Windows installs into the Windows equivalent of your home directory.)
Chrome tends to push minor updates (often security) pretty frequently. We'd like to operate as a good member of the Linux ecosystem and just offer an apt/yum/etc. archive, but it seems unlikely to me that people will accept pulling a new 20mb binary package every few days.
One idea I've idly had is that we could provide deltas, ideally ones that would reconstruct the normal packages you'd get if you went through the slow path. For example, it could look at which package version you currently have installed, then combine the diff with the files you currently have installed to regenerate the files that would be in the newer package, and then construct the package from there and hand that off to dpkg/rpm. I've heard about such tools existing but my Googling is failing me. Do you have any links? Do you have any friends I could ask?
(For comparison, Firefox uses its own autoupdate system on Linux if you haven't installed it via a distributor, which is actually pretty reasonable when you consider the above. But this also requires that the running binary have write access over its own files, which more or less means it needs to be installed in your home directory. This is one of the reasons (aside from the fact Microsoft also recommends it) that Chrome on Windows installs into the Windows equivalent of your home directory.)
maybe hook into apt on with a metapackage? so I could apt-get chromium-deltas and that would install only what's needed?
of course, decomposing chrome into subpackages and then using apt repositories directly would help, but that might be very complicated.
Regarding decomposing: It's basically just a huge binary, so there aren't many subpackages to split. I guess making the ICU data external could shrink it by 8mb.
This meant you could rsync a new package over an old one and only transfer differences. Well, a bit more than a pure diff, but better than re-downloading and it wouldn't require much new infrastructure anywhere.
Personally, I'm alright with downloading new packages ever few weeks or if there are serious security holes whenever.
[*] QuickTime updates seem to come as often but on an entirely different schedule.
PS: my favorite update is the RAW file format support updates that require a reboot...
So I don't think asking people to use or install a special delta-downloader is viable, unless it's somehow built into Chrome itself. But even then you'd have to patch up the local package database so the delta was recorded.
If the question is how often one wants to update, couldn't you just have packages that represent chrome-bleedingedge, and chrome-recommended?
don't know of a .deb equivalent offhand.
debdelta
The LWN article about Presto has comments suggesting debdelta for deb packages. But I'm not sure how much it gets used.20MB isn't that big a deal these days for people tracking some daily update stream. Although smaller downloads would probably encourage more people to try.
Ewen
One could imagine using a rsync-friendly-gzip and providing binary inter-.deb-diffs, so that the client's apt could reconstruct the update from the previous .deb plus the downloaded delta, but AFAIK that's not been done.
Are you saying that the executable binary is 12MB? I would expect that to be partitioned into libraries. The "firefox" binary is 27k, with a bunch of supporting libraries -- is that not possible with chrome?