A while ago, somebody called John asked me to explain the process I follow when I update the GNOME packages in pkgsrc. As I'll be doing this again in a few days (to bring 2.12.2 into the tree), this seems a good moment for the essay. Here I go:
The first thing I do is to fetch the whole distribution from the FTP site; i.e., the platform and desktop directories located under the latest stable version. I have a little script that does this for me, avoiding to fetch the distfiles that haven't changed since the previous version.
Once this is done I generate a list of all the downloaded distfiles and adjust the package dependencies in meta-pkgs/gnome-devel/Makefile, meta-pkgs/gnome-base/Makefile and meta-pkgs/gnome/Makefile to require the new versions; this includes adding any possible new stuff. I do this manually, which is a quite boring task; however, writing a script could take much more time.
Afterward, I use cvs diff -u meta-pkgs/gnome* | grep '^+' over the modified files to get a list of the packages that need to be updated. As the list of dependencies in the meta-packages is sorted in reverse order — i.e., a package in the n-th position uses packages in the 1..n-1 positions but not any in the n+1..N ones — this command creates a useful "step by step" guide of what needs to be done.
Then, it is a matter of updating all the packages that need it, which is, by far, the longest part of the process. I go one by one, bumping their version, building them, installing the results, ensuring the PLIST is correct, and generating a log file in the same directory that will serve me during the commit part. I also have a little script that automates most of this stuff for a given package — and, thanks to verifypc, this is relatively quick :-)
In the last part described, there are some packages that always scare me due to the portability problems that plague them over and over again. These include the ones that try to access the hardware to get information, to control multimedia peripherals, to manage network stuff, etc. I don't know why some packages break in similar places in newer versions even if the mainstream developers have been sent some patches to fix the stuff in previous versions. </rant>
Once I've got the updated gnome-base package installed, I zap all my GNOME configuration — ~/.gconf*, ~/.nautilus*, ~/.metacity*, ~/.gnome* and a lot more garbage — and try to start it. At this point, it is mostly useless, but I can see if there are serious problems in any of the most basic libraries. If so, this is the time to go for some bug hunting!
When the gnome-base package works, I continue to update all the other missing packages and try to package the new ones, if any. Adding new stuff is not easy in general (portability bugs again) and this is why some of the dependencies are still commented out in the meta-packages. Anyway, with this done, I finally start the complete desktop and check if there are any major problems with the most "important" applications. Again, if there are any, it is a good time to solve them.
So all the updates are done, but nobody guarantees that they work, specially because I do all the work under NetBSD-current. So I generally (but not always... shame on me!) use pkg_comp to check that they work, at the very least, under the latest stable release (3.0 at this point).
The last part is to commit all the stuff in a short time window to minimize pain to end users. Even though I have left log files all around and prepared the correct entries for the CHANGES file, this often takes more than an hour.
Unfortunately, end users always suffer, either because the packages break on their platform, because our packaging updating tools suck or simply because I made some mistake (e.g., forgot to commit something). But this is what pkgsrc-current is for, isn't it? ;-)
And, of course, another thing to do is to review all the newly added local patches, clean them up, adapt them to the development versions of their corresponding packages and submit them to GNOME's bugzilla. This is gratifying, but also a big, big pain.
Well, well... this has been quite long, but I think I haven't left anything out.
Want more posts like this one? Take a moment to subscribe!
Enjoyed this article? Spread the word or join the ongoing discussion!