Red Hat Bugzilla – Bug 17372
RPM brc-compress breaks things
Last modified: 2008-05-01 11:37:58 EDT
I downloaded the latest RPM-3.0.5-9.6x, and this package breaks several
things. This version of RPM calls "brc-compress" as part of the process
of building a build-rooted binary RPM. The brc-compress script converts
any man pages or info files in the package into compressed versions.
This sounds like a good idea, but it breaks some things:
* A package like ssh-1.2.30, which explicitly lists its manual pages in
the spec file %files list, can't be built anymore. This is because
the file list no longer matches what the build produces. In other
words, the file list says there is a /usr/man/man1/ssh.1, but what's
really there is /usr/man/man1/ssh.1.gz. RPM refuses to build the
binary RPM because of this. I suppose you could ultimately fix this
by making RPM know about brp-compress and account for it when looking
at file lists, but that seems a little ugly.
* Manual pages may sometimes explicitly load another manual page. For
example, latin1.7 loads iso-8859-1.7, by including the text
".so iso-8859-1.7" in the latin1.7 man page. This stops working when
iso-8859-1.7 is replaced by iso-8859-1.7.gz. You can't fix this
one easily - unless you want to redefine how the long-established
nroff/troff/groff macros work.
In the end, I think you have to turn off brp-compress.
rpm is shipped with the same default configuration that is used to build Red Hat
You can either
0) Use rpm-3.0.4 or earlier to build.
1) Add a * at the end of each man page listed in the ssh %files
2) Change your build configuration. For example,
mkdir -p /etc/rpm
echo "%__spec_install_post /bin/true" >> /etc/rpm/macros
will turn off all Red Hat build policies.
FWIW, man already handles .so diversions correctly for compressed files.
I have to disagree with several of your points:
1. Rpm is NOT shipped with the same default configuration that was used to build
RedHat. The latest update to RPM changes the default configuration from what
it was on Red Hat 6.2. Previously, it did not do brc-compress, now it does.
2. You suggest going back to rpm 3.0.4 to work around the problem, but I was
required to update to 3.0.5 in order to install the Red Hat 6.2 updates,
which are necessary to keep my system secure.
3. As you suggest, I can add a "*" to each man page listed in the files section
of the ssh spec file. But this is a spec file that has always worked in the
past. How many other people will have to make the same modification to a
known-good spec file, to make it work again? How many other packages will
be affected similarly? This change to RPM is not documented in any way that
I can find, so each person will end up wasting time tracking this down like
4. As you suggest, I can change the build configuration by modifying
__spec_install_post. Of course, that loses the other, benign, things that
the default __spec_install_post does. And again, this is not documented
anywhere, so for all I know it will break again on rpm 3.0.6.
5. I can only conclude that you didn't actually try typing "man latin1". Yes,
the man program itself knows to gunzip a compressed man page before handing
it to nroff. But a man page that contains a .so diversion is being
interpreted by nroff directly. Nroff doesn't handle gzipped files, so a .so
diversion fails if the file it points to is gzipped. I'll admit that man
pages that make use of this are relatively rare, and probably should be
migrated to just use symbolic links where possible. Nevertheless, this
*is* something that brc-compress breaks.
*** Bug 17773 has been marked as a duplicate of this bug. ***