A more efficient up2date service using binary diffs

Kyrre Ness Sjobak kyrre at solution-forge.net
Mon Mar 14 15:16:04 UTC 2005


man, 14.03.2005 kl. 08.18 skrev Florian La Roche:
> On Mon, Mar 14, 2005 at 01:59:07AM +0000, Joe Desbonnet wrote:
> > I have more results from my experiments in RPM delta compression. I've posted
> > the results so far here: http://www.wombat.ie/software/rpmdc/index.shtml
> > 
> > Conclusion so far: assuming someone has the distribution RPMs
> > available then an entire
> > update repository (about 1GB) can be generated from 200MB of files. 
> > 
> > I hope to post my code once I clean it up a bit (it's implemented in
> > Java currently).
> > 
> > Must check out rdiff also...
> 
> I've done tests some time ago that showed a 4.8 factor to reduce bandwidth
> needs for RHEL update releases. Big drawback will be the need of the previous
> packages, so this might again be only something for a local server to
> download updates, but not for normal client machines.
> Still the savings look very nice, so I think we should continue looking at
> this.

What if we made some steps here:
1. place an option in anaconda to copy all rpm's to disk. Put them in
say, /var/cache/yum/whatever/is/under/here/again
2. Create the stuff as a independent program, say rpmpatch (sympnosis:
"rpmpatch oldrpm.rpm newrpm.prpm" which outputs newrpm.rpm). This way,
it can also be used manually
3. make the master repository also create prpm's - which then will be
mirrored.
4. make yum check if:
	- are there any "old" rpm's lying around localy
	- are there any new prpm's in the repository
	- if many steps - is it a smaller download to get,
		say two prpm's, and patch incrementally untill
		you get the wanted rpm?
	If yes to theese three - get the prpm, not the full rpm.
		(get headers the usual old way - byte-ranges from
		the full rpm's)
	If no to any of theese - get the full rpm's, just as we do 		today.
5. When yum has finished downloading, use rpmpatch (maybe making it
acessable as a libary, not only a cmd-line program) to generate the full
rpm. Install it through old "rpm -Uvh" (or libary equalient) as it
normally would.

This way it will add very little complexity. No change to mirrors, no
change to rpm itself. Only a little change on the "master repo". A new
program on the client, a little change to yum to make it get the prpm's
instead of the full rpms, patch to generate full rpm, and install the
usual way.

Kyrre




More information about the fedora-devel-list mailing list