[Beaker-devel] Test framework for lshw

Amit Saha asaha at redhat.com
Tue Aug 6 01:46:05 UTC 2013



----- Original Message -----
> From: "Nick Coghlan" <ncoghlan at redhat.com>
> To: beaker-devel at lists.fedorahosted.org
> Sent: Thursday, August 1, 2013 1:24:36 PM
> Subject: Re: [Beaker-devel] Test framework for lshw
> 
> On 08/01/2013 12:18 PM, Amit Saha wrote:
> > That said, I resorted to static because of lack of being able to find a
> > simple
> > way to find the shared libraries that lshw would be using along with their
> > paths.
> > 
> > ldd gives this:
> > 
> > $ ldd /usr/sbin/lshw
> >         linux-vdso.so.1 =>  (0x00007fff8bdaf000)
> >         libresolv.so.2 => /lib64/libresolv.so.2 (0x000000360e400000)
> >         libsqlite3.so.0 => /lib64/libsqlite3.so.0 (0x0000003631600000)
> >         libstdc++.so.6 => /lib64/libstdc++.so.6 (0x000000360ec00000)
> >         libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x000000360d800000)
> >         libc.so.6 => /lib64/libc.so.6 (0x000000360c000000)
> >         libpthread.so.0 => /lib64/libpthread.so.0 (0x000000360cc00000)
> >         libdl.so.2 => /lib64/libdl.so.2 (0x000000360c800000)
> >         libm.so.6 => /lib64/libm.so.6 (0x000000360c400000)
> >         /lib64/ld-linux-x86-64.so.2 (0x000000360bc00000)
> > 
> > awk won't work here, since the lines vary in their fields.
> > ldd has a verbose flag  (-v) which does spit out complete paths of the
> > shared
> > libraries, but it is not very friendly for machine reading.
> > 
> > So, if there is a simple and sure shot way to find the shared libraries
> > along with their paths, setting them up in chroot is not a problem.
> 
> Try this:
> 
> $ ldd -v /sbin/lshw | grep '=>[^(]*$' | cut '-d ' -f4 | sort -u
> /lib64/ld-linux-x86-64.so.2
> /lib64/libc.so.6
> /lib64/libdl.so.2
> /lib64/libgcc_s.so.1
> /lib64/libm.so.6
> /lib64/libpthread.so.0
> /lib64/libresolv.so.2
> /lib64/libstdc++.so.6

Found another way of doing this. After compiling 'lshw' if I run it as follows:

# LD_DEBUG_OUTPUT=/tmp/lshw_libs LD_DEBUG=libs lshw

The libraries being loaded and other information are stored in the file 
/tmp/lshw_libs.<pid> (https://gist.github.com/amitsaha/6161298)

The first column is the process ID, and if I look for all the lines having
'calling init', I do get all the shared library paths using something like this:

$ cat lshw_libs.32296  | grep 'calling init' | awk '{print $4}'

/lib64/ld-linux-x86-64.so.2
/lib64/libc.so.6
/lib64/libm.so.6
/lib64/libgcc_s.so.1
/lib64/libstdc++.so.6
/lib64/libresolv.so.2

Best,
Amit.
-- 
Amit Saha <http://echorand.me>
Infrastructure Engineering and Development
Red Hat, Inc.


More information about the Beaker-devel mailing list