Assume it’s multiprocessor-safe

As Matthew Dillon notes in a recent post, procedures are now assumed to be MPSAFE (i.e. without the Giant Lock) by default.  Any new work should follow this idea, and it doesn’t have to be documented specially.  The inverse used to be true, where the code that happened to work without the Lock was rare, and therefore needed to be pointed out.   Now, the good result is the norm.

Lazy Reading

I’m going to just title these “Lazy Reading” – I end up with too much diverse information/links to fit within the title.

Binary pkgsrc updates: an experiment

So, I felt lucky recently.  I updated from DragonFly 2.6 to DragonFly 2.8, and wanted to upgrade my pkgsrc packages from pkgsrc-2010Q3 to pkgsrc-2010Q4.

You can do this with pkg_rolling-replace, or various other tools, but I wanted to see if I could do it completely with binary packages.  I used pkg_radd -uv <pkgname> for each of the major packages I had installed.

Surprisingly, it worked, for every package.  I had to force-install some Perl modules because I was moving from 5.10 to 5.12, but I think I may have been able to use an additional -u switch to get by that problem.  I did use pkg_leaves to identify packages I didn’t need, and removed them to reduce the number of items to upload.

It was exactly what I wanted.  Previous pkgsrc upgrades had taken most of a day, as I had to build from source and figure out what went where.  We’ve had a better success rate in bulk builds recently, and this paid off in an upgrade process that only took perhaps an hour.

bin-install does it all

If you’ve ever installed pkgsrc packages from source, you probably typed ‘bmake install’.  There’s a ‘bin-install’ target that will use binary packages if they are available, but you have to set the appropriate environment variables to do so.

It’s now much easier, on DragonFly.  If you have pkgsrc-current as of yesterday or later, or pkgsrc-2011Q1 when it arrives, you can type ‘bmake bin-install’ for a pkgsrc application and it will download the binary package automatically, if it’s available, and build from source if it’s not.

This is a setup I’ve wanted for a while – the speed of a binary install, plus a fallback if the binary isn’t available.