Rebuilding RHEL3 libc.so from source

Jarod Wilson jarod at wilsonet.com
Wed Jul 18 17:07:46 EDT 2007


On Wednesday 18 July 2007 04:09:50 pm Michael ODonnell wrote:
> >> ...so I suspect that may have something to do with the differences
> >> that I mentioned between the libs I'm building versus what's in
> >> the RHAT-built RPM.  Can somebody tell me how to persuade rpmbuild
> >> to generate anything named *.i686.rpm from that SRPM?
> >
> > Ah, whoops, forgot about that.  A select few packages get built i686
> > as well as i386, with the i686 build being preferred on capable
> > systems -- those packages are glibc, openssl and the kernel,
> > I believe.  So just:
> >
> >$ rpmbuild -bb --target i686 glibc.spec
> >
> >(or rpmbuild --rebuild --target i686 glibc-*.src.rpm)
>
> Wow - what a difference!  Whoops, indeed...

I blame it on the fact I have pretty much nothing but x86_64 systems 
anymore. :)

> That little tweak resulted in just these 3 RPMs being generated:
>
>    RPMS/i686/glibc-2.3.2-95.50.i686.rpm
>    RPMS/i686/glibc-debuginfo-2.3.2-95.50.i686.rpm
>    RPMS/i686/nptl-devel-2.3.2-95.50.i686.rpm
>
> ...instead of the 10 that were getting built by default, and my
> glibc-2.3.2-95.50.i686.rpm now only differs in size from the RHAT-built
> one by a few bytes, which are explainable by the presence of my helloWorld
> debug stub in there.  It's impressive that (what would seem to be) such
> a relatively small change in the target CPU could lead to such wildly
> different sizes, contents and number of libraries.

The number of files spit out is solely dependent on %ifarch bits in the spec 
file. The file sizes are due to very different compiler flags, includes, 
etc., based on the differences between building i386 and i686.

> At any rate, this is *much* more like what I wanted - yay!

Glad to hear it.

> BTW, that cool dynamic-loader debugging trick I mentioned is this:
> invoke any program you like from the command line thus:
>
>    LD_DEBUG=help yourProgramHere
>
> ...and the dynamic loader (which is always secretly invoked when you
> run anything that uses DSOs - Dynamic Shared Objects) will describe all
> the options available to you and then exit without running your program.
>
> Change that "help" to one of the valid options (try "all") and stand back
> while the gory details of how the loader resolves every symbol reference
> and every library lookup flies by on the screen.  Or that output can be
> captured in the location specified by LD_DEBUG_OUTPUT.  Incredibly useful
> when your !@$#!! libraries are b0rken.       (guess how I know...)

Ooh, much fun be there...

> Thanks again to all for the help.

On behalf of all who helped, no problem, always happy to help. :)

-- 
Jarod Wilson
jarod at wilsonet.com


More information about the gnhlug-discuss mailing list