The Case of the Unexpected Pax
It was late afternoon of a chill November in Paris. I was walking along the quai, lost in a brown study. Looking up, I saw my friend C. Auguste Dupin approaching me.
"Ah, bon soir, mon ami," said Dupin, "and what brings you beside the Seine on this crisp evening?"
"Something has been puzzling me," I replied, "and I thought the walk would give my thoughts an opportunity to put themselves in order."
"It is a day of puzzlements, no? Will you not share your puzzlement with me?"
"Well," I demurred, "it is a small thing -- probably something I did to myself. But I do not wish to intrude on your time."
"Ah, but it is no intrusion for a friend."
"Well," I said as we turned across the Pont Neuf, "as you know I dabble in Perl, and I like to keep a variety of systems available for testing purposes. I upgraded one of these and was re-installing Perl, when one single module failed to install -- indeed, failed to unpack."
"Perhaps the author had the misfortune to make a bad package."
"No, I don't think so. The same package unpacked and installed correctly on other systems. I suspected something OS-specific, but Perl Testers reports no such problems with the package. Then I suspected my
cpan client, but I deleted everything from the
.cpan directory but the configuration, to no avail."
"Most unusual. You say this distribution failed to unpack. Can you be specific?"
"Yes," I replied as we turned onto the Quai de Conti, "it was odd. When I used the cpan
look command, I found myself in a directory named after the author of the package. That directory contained the actual package in a subdirectory, along with some other stuff."
"In a subdirectory you say? Was it a good copy?"
"Yes. I was able to install from it by hand, the only problem being that there was a dependency to take care of."
"And this so-called 'other stuff'," Dupin pursued, "of what did it consist?"
"It was a directory --
PaxHeaders.11295 or some such. I did not look into it."
"Ah, that is very interesting. Tell me also under what operating system did you experience this problem?"
"OpenBSD. I had no problems under FreeBSD or Linux."
"Yes, that follows. But to complete the picture we need one final piece. Tell me, mon ami, how have you set up
cpan to unpack your distributions?"
"I don't know. The default I suppose, whatever that is. Does it make a difference?"
"It does indeed, mon ami," Dupin replied. The
cpan client uses setting
prefer_external_tar to determine whether it uses an external executable or Perl modules to unpack the distribution. Unless you explicitly set this, it tends to be
1, which uses an external
undef, which leaves it to discretion of the
"I still don't see the point," I exclaimed, "
tar, is it not?"
"By no means!" Dupin asserted. "This pax that gives you no peace was an archiver introduced to try to unify
cpio. It never really caught on, but the format was enshrined in a POSIX standard, and some
tar programs add
pax metadata in response to
--format=posix. Linux uses Gnu
tar, which understands this sort of thing. FreeBSD use
bsdtar, which can also cope with the
pax metadata. OpenBSD, however, does not."
"So I have to replace the system
tar with Gnu
"Indeed, that is what
CPAN::Tarzip suggests. But on a new installation such as yours, or any installation with a modern
Archive::Tar, it suffices to set
"Just that? I am tempted to misquote the Bard of Avon: 'The fault, dear Brutus, is not in our selves but in our
With apologies to Shakespeare as well as Poe.
This was a problem I ran into recently. With no Dupin to guide me I went to even greater lengths than Dupin's anonymous friend to try to sort the problem out. Eventually I convinced myself that the system
tar itself gave rise to the extra file, which confused
CPAN::Tarzip mightily. Yes, I could have painstakingly characterized the various
tar programs involved, but it was much easier to turn off
prefer_external_tar and see if that fixed the problem. It did, and the rest was, well, not so much history as a blog entry inflicted on long-suffering readers.
The couple of sentences on the origins of
pax are derived (perhaps faultily) from the relevant Wikipedia article.