Adding Delta RPM Support for Yum
Note: The code is hosted at [1]
Motive
Updates for fedora are released nearly on daily basis. Downloading full rpms as updates usually results in lots of wasted bandwidth for the client, and the server. Using deltarpm, the required on the wire bandwidth can be shot down to around 20% or less. This has been attempted in the past, but never been finished for fedora. Users seem to want that functionality. And hey, if Windows/Mac/SuSE/FreeBSD does it, why dont we!
Base Implementation
A working implementation for up2date and satellite server, can be found at [2] The current implementation uses a server side python script to generate drpms on the fly depending on the client's version. This approach was generally not accepted as running code on the update servers/mirrors is not acceptable. YumDeltaRPM support will be based on that code base.
Current Implementation Ideas, Notes
- Have a cron job generate drpms of only the newest rpms on the updates server. No code is always running on the server, and we wont keep track of all older updates. Again what we loose here, is that if someone hasn't updated for a long time, he will be downloading full rpms.
- Mirrors are untouched. During the regular rsync, they will be receiving the drpms, together with the full rpms. Mirrors can opt not to mirror drpms
- The client side yum plugin will download required drpms when it detects an rpm is being upgraded. Any failure using drpms, yum should automatically fallback to downloading full rpms
- The drpm will be used to re-create the new update RPM (bit-for-bit identical) on the client side from on-disk data. The reconstructed drpm will be left in yums cache
- The resulting new update RPM will be checked for gpg signatures by yum, and installed
- If on-disk files have changed, using drpm will fail and yum falls back to downloading full rpms
- An algorithm should be adopted for keeping drpms on the server, only if they provide significant size improvements over the full rpms