[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: Back Again



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.

Attachment: pgpWnDp0xaPQu.pgp
Description: PGP signature


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]