Soyuz: distro package management in Launchpad

Tuesday, November 1st, 2005

The last few evenings have been devoted to the part of Launchpad called Soyuz, which tracks all the distributions and packages that are registered in Launchpad. It’s the heart of the “distro management” capability of Launchpad, that allows customers to manage their own Ubuntu derivative through the web. And of course we will be dogfooding it constantly, but managing Ubuntu itself in it.

Wednesday, all going well, we will open up the Dapper archive based on Launchpad, which will be the first time that we will have this stuff in production. Expect delays for the first few days as we iron out the kinks.

My own work has been the first cut of the pages that display which package is published where in the archive at any given time. That sounds very straightforward, until you realise how fiendishly complicated a distro package archive can be. They are very much structures that have evolved, and so a lot of the complexity comes from having to deal with the badness of reality.

For example, there is no guarantee that a newly upload package will build on all the supported architectures. So say I upload Apache 2.1.3-1 source to Ubuntu, and it builds on all architectures. You would expect to have those binaries published on all architectures in short order. Now, we upload 2.1.3-2, which builds on all architectures except for PPC. This is where the fun starts. The “current” version of Apache is now different, depending on which architecture you are looking at.

One resolution might be to say “build everywhere and reject if it fails anywhere”. But we are constantly adding new architectures, and as those become more esoteric the chances of a build failure rises dramatically. We can’t hold back the distro when a package fails to build on ARM. So the system has to be able to handle this divergence between architectures.

But it gets even more interesting. There is no rule, for example, that a package called foo on i386 should have the same description, or dependencies, as a package with the same name (and even the same version) on amd64. They are just entirely different beasts. So to do this justice, someone has to drill all the way down to the lowest level before they see stuff that’s human readable. Even though 99.9% of the time, pacakges with the same name and version on different architectures WILL have the same details.

So I’ve put quite a lot of work into trying to balance ease of user interface and technical correctness. At the lowest level, you should see exactly what’s published, which versions, when they were built (and more detail on those than you could have imagined you really, really wanted). At a higher level, however, you should be able to search and find the “obvious answers”.

I’m sure there are bugs, and improvements to come, but it’s nice finally to see this code going into production. Try following the link above to the Ubuntu pages in Launchpad, then searching for packages, and send me your suggestions on how we can improve things.

Comments are closed.