Back Again

Sam Varshavchik mrsam at courier-mta.com
Wed Aug 1 02:03:45 UTC 2007


Todd Zullinger writes:

> Sam Varshavchik wrote:
>> Nah, it's not closer. It's just that rpm is getting crappier every
>> year, and is long overdue for replacement.
> 
> I could easily be mistaken, but AFAIK, the main difference in speed
> that end users notice between yum and apt is due to the fact that apt
> caches it's metadata.  In between runs of apt-get update, calls to
> apt-get use the data on disk without hitting the network.  With yum,
> the update and upgrade steps from apt-get are both done in the update.

I don't know if you've ever upgraded Fedora from one release to the next. 
The upgrade process is as slow as molasses, even though all the metadata is 
right there.

> The rpm included in Fedora hasn't really changed much in the past few
> years, so I'm not sure how it would be getting crappier[1].  Care to
> elaborate?

A few years ago the base distro was much smaller than it it now. The size of 
a typical Linux distro has really balooned. Some of the algorithms in rpm 
scale horribly. It wasn't such a big deal when a typical linux distro was 
only a few hundred packages, but now it's a few thousand packages, with 
dependencies that are much more complicated, and rpm is now really blowing 
apart at the seams.

rpm was fine, in simpler times, but it just does not scale to modern 
distros.

Furthermore, rpm, as is, does not implement remote repositories. The entire 
yum repository thing was something that's piggy-backed, and not very well. 
The rather inflexible rpm metadata layout is not very adaptable to living in 
a remote repository of sorts. Basically there's no way to quickly 
synchronize locally-cached repository metadata with a remote repository. You 
have to download a single, voluminous, flat XML file that provides metadata 
summary for every package in the repository, uncompress it, and reconcile it 
with the local data.

With a large repository, like Fedora, even a compressed XML file is going to 
end up being rather huge. Then, you have to uncompress it and parse it. And, 
XML parsing is also not exactly a light task.

Then, for each new package, you have to download it's full metadata, 
separately. Each new package requires a round trip back to the remote 
repository's server.

Remote package repositories could've been implemented much better. When I 
had some free time some time ago, I quickly hacked up a package manager for 
some of my internally-developed software. I found that I could do similar 
kind of package metadata synchronization much more efficiently than yum/rpm. 
Using some tricks that involve HTTP 1.1's partial chunking features, you can 
implement synchronization of local/remote package repository metadata using 
a constant number of round trips, no matter how many packages you need to 
download the metatadata for. Rather than having to download a verbose XML 
file that enumerates the packages in the repository in a rather verbose 
format, all you need to start are a flat file with their names, which is 
much smaller. Then, once you have a tiny list containing, basically, the 
package names and not much more, you can quickly identify which packages' 
metadata you do not have cached locally, and take exactly one more roundtrip 
to the server, using HTTP 1.1 partial chunking, to download the metadata for 
all of them, at once. On the server you basically keep all the metadata in 
one flat file, just as yum does now, but if you already know which packages 
you want, and you know which parts of the metadata file you want to 
download, you can use HTTP 1.1 partial chunk request feature to download 
just the bits of the metadata file that you want.

But then, after all is said and done, no amount of tweaks to rpm can 
compensate for stupid and broken packaging. Right now, due to indirect 
dependencies, grub requires *GTK* runtime libraries to be installed. On my 
headless machine, I now have to plop down a crapload of x.org and GTK RPMs, 
because grub requires them, due to its intermediate dependencies. And of 
course, you need grub to boot Fedora, so you can't do without it.

This is stupid: grub requires the fedora-logos rpm. The fedora-logos rpm 
requires the redhat-artwork rpm.  redhat-artwork requires gnome-themes. 
gnome-themes requires gtk2-engines. gtk2-engines requires gtk2, and a 
crapload of gtk and xorg rpms.

This is insane. There's a bug filed about this, but nobody seems to care.

> [1] rpm is finally getting some love and updates in rawhide.

Too late, methinks.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : http://lists.fedoraproject.org/pipermail/users/attachments/20070731/b626d864/attachment-0002.bin 


More information about the users mailing list