Russ Allbery: release 1.45 and multiple PGP signatures
release is the tool that I use to manage software releases. This version
adds support for signing a tarball with multiple PGP keys at once. For
WebAuth, we have an official signing key, but I also wanted to add my
personal signature. The minimum supported version of Python was also
bumped to 2.5 (see below for why).
You can get the latest version from my scripts page.
Normally, I wouldn't announce this to everyone, since it's a fairly minor
change, except I had a question and a quick Python note.
The question: how does one get GnuPG to verify multiple signatures? When
I run GnuPG on the resulting detached
*.asc file created by this
new code, I get the following:
gpg: WARNING: multiple signatures detected. Only the first will be checked. gpg: Signature made Thu 10 Jan 2013 03:58:43 PM PST using RSA key ID 5736DE75 gpg: Good signature from "Russ Allbery <rra@stanford.edu>" gpg: aka "Russ Allbery <rra@debian.org>" gpg: aka "Russ Allbery <eagle@windlord.stanford.edu>" gpg: aka "Russ Allbery <eagle@eyrie.org>"That's nice, I suppose, but it's not as helpful as it could be. Why not verify both signatures and report all of the results? I searched both the gpg man page and the Internet for some option I'm missing, without any luck. (Searching Google for that exact message amusingly turns up lots of verbatim output from Debian repository verification and almost nothing else.) If anyone knows, send me email (rra@stanford.edu or any other convenient address), and I'll update this post with the answer. UPDATE: gpg can currently only verify multiple signatures if the signatures are from keys with the same class and digest. I was attempting this with a 2048-bit RSA key and a 1024-bit DSA key, which gpg does not support. (Yet another reason to replace the WebAuth signing key with a newly-generated key.) Thanks to Philip Martin and Bernhard R. Link for the information! The note is that, way back when I was first learning Python, one of the things that bothered me the most was the lack of safe program execution. The best available was
os.spawnv(), which left something to be
desired. If you too were bothered by this but don't program in Python
enough to keep track of the current state of the art, there's now a
subprocess module that has much saner interfaces that work
properly, do reasonable things, and avoid the shell. It was added in
Python 2.4, with some nicer interfaces added in Python 2.5, so it's fairly
safe to use at this point.
When writing system integration tests it often happens that I want to mount some tmpfses over directories like /etc/postgresql/ or /home, and run the whole script with an unshared mount namespace so that (1) it does not interfere with the real system, and (2) is guaranteed to clean up after itself (unmounting etc.) after it ends in any possible way (including SIGKILL, which breaks usual cleanup methods like trap , finally , def tearDown() , atexit() and so on).
In
A few days ago, I pushed out version 2.11.14 of the Geode X.org driver. This is the driver used by the OLPC XO-1 and by a plethora of low-power desktops, micro notebooks and thin clients.
Dear lazyweb, we need a new printer-scanner combination for our
new office, ideally a laser printer and a high-resolution scanner
(1200dpi). It must integrate nicely with CUPS and SANE,
without requiring any proprietary, closed-licence drivers
or plugins. It also has to come with an automatic document feeder
in addition to the plain flatbed scanner.
Additional, would-be-nice features in decreasing order of
preference are

I've just made release 1.2 of
Thoughts about DRI.Next
On the way to the X Developer s Conference in Nuremberg, Eric and I
chatted about how the DRI2 extension wasn t really doing what we
wanted. We came up with some fairly rough ideas and even held an