I don't know what happened to my other scripts to check on libraries,
but I thought I'd write a single report generating script to do
something similar.

This script generates a report that details:

* List of all libraries used in the system
* Missing Libraries
* Which binary programs are missing libraries (and which ones they're
missing)
* A list of binaries that use each library
* A list of binaries and the libraries they use
* A list of all statically linked binaries

I dare you to read the sed scripts :)  Some are probably inefficient and
should be changed - suggestions are welcome...

Attached is an example report (from an older version) and the current
script...

With this report then, I can check my predefined configurations (loading
packages, etc) to make sure that all dependent packages are loaded.

Could even do a search system-wide for missing libraries and load
missing libraries automatically.....?  Of course, you need ldd for
this....
#!/bin/sh

exec 2> /dev/null

WORK=/tmp/lib.$$
mkdir $WORK && trap 'rm -rf $WORK' 0 2 5 15
TMP1=$WORK/lib1
TMP2=$WORK/lib2

if [ $# -ne 0 ] ; then
        echo "****************************************"
        echo "$@"
        echo "****************************************"
fi

ldd $(IFS=: ; find $PATH -type f) | tee $TMP2 | sed -n '/:$/{
N
/statically/d
s/://
} ; p' > $TMP1

echo
echo "Libraries Used:"
echo

sed -n '/^      /s/^    \(.*\) =>.*/\1/p' $TMP1 | sort | uniq -c

echo
echo "Missing Libraries:"
echo

sed -n '/not found/s/^  \(.*\) =>.*/\1/p' $TMP1 | sort | uniq -c

echo
echo "Binaries Missing Libraries:"

( cat $TMP1 ; echo "xx" ) | sed -n '/^  /!{
x
/not found/ {
i\

s/ => not found//g
p
b
}
}
/not found/H
' | sed 's/^/   /'

echo
echo "Libraries Used By:"

for i in $(sed -n '/^   /s/ =>.*//p' $TMP1 | sort | uniq) ; do
        LIB=${i##*/}
        echo
        echo "  $LIB:"
        echo

        sed -n '/^      /!h ; /'$LIB'/{
x
s/^/            /p
}' $TMP1
done

echo
echo "Binaries and Required Libraries"
echo

sed '/^ /!i\

s/ => not found/(missing!)/
s/ =>.*//' $TMP1

echo
echo "Statically Linked Binaries"
echo

sed -n '/:$/{
N
/statically/s/^\([^:]*\):.*\((.*)\)/    \1 \2/p
}' $TMP2

echo

****************************************
Develop Configuration
****************************************

Libraries Used:

     69 /lib/ld-linux.so.2
     68 /lib/libNoVersion.so.1
      2 libbfd-2.9.1.0.19.so.0
      1 libbz2.so.0
     69 libc.so.6
     11 libcrypt.so.1
      2 libdl.so.2
      1 libm.so.6
      8 libncurses.so.4
      2 libnsl.so.1
      2 libreadline.so.2
      2 libresolv.so.2

Missing Libraries:

      1 libm.so.6
      2 libnsl.so.1
      2 libreadline.so.2

Binaries Missing Libraries:
        
        /usr/sbin/tcpd
                libnsl.so.1
        
        /bin/gdb
                libreadline.so.2
                libm.so.6
        
        /usr/bin/dc
                libreadline.so.2
        
        /usr/bin/strace
                libnsl.so.1

Libraries Used By:

        ld-linux.so.2:

                /sbin/sysctl
                /sbin/halt
                /sbin/dhcpcd
                /sbin/hwclock
                /sbin/init
                /sbin/killall5
                /sbin/runlevel
                /sbin/shutdown
                /sbin/start-stop-daemon
                /sbin/syslogd
                /sbin/klogd
                /sbin/dosfsck
                /sbin/mkdosfs
                /sbin/file
                /sbin/lilo
                /sbin/getty
                /sbin/sulogin
                /usr/sbin/cron
                /usr/sbin/inetd
                /usr/sbin/ipmasqadm
                /usr/sbin/tcpd
                /usr/sbin/watchdog
                /usr/sbin/rtacct
                /usr/sbin/rtmon
                /usr/sbin/portsentry
                /usr/sbin/fdisk
                /usr/sbin/cfdisk
                /usr/sbin/sfdisk
                /usr/sbin/in.tftpd
                /bin/run-parts
                /bin/cpio
                /bin/beep
                /bin/ctar
                /bin/ps
                /bin/sed
                /bin/setserial
                /bin/tinylogin
                /bin/nano
                /bin/zile
                /bin/gdb
                /bin/syslinux
                /bin/addgroup
                /bin/adduser
                /bin/delgroup
                /bin/deluser
                /bin/login
                /bin/su
                /usr/bin/tftp
                /usr/bin/histring
                /usr/bin/ipmask
                /usr/bin/elvis-tiny
                /usr/bin/the
                /usr/bin/cdctl
                /usr/bin/ascii
                /usr/bin/bzip2
                /usr/bin/cmatrix
                /usr/bin/setfont
                /usr/bin/dc
                /usr/bin/ftp
                /usr/bin/ltrace
                /usr/bin/mpack
                /usr/bin/nm
                /usr/bin/strace
                /usr/bin/strings
                /usr/bin/strip
                /usr/bin/zip
                /usr/bin/unzip
                /usr/bin/passwd
                /usr/bin/vlock

        libNoVersion.so.1:

                /sbin/sysctl
                /sbin/halt
                /sbin/dhcpcd
                /sbin/hwclock
                /sbin/init
                /sbin/killall5
                /sbin/runlevel
                /sbin/shutdown
                /sbin/start-stop-daemon
                /sbin/syslogd
                /sbin/klogd
                /sbin/dosfsck
                /sbin/mkdosfs
                /sbin/file
                /sbin/lilo
                /sbin/getty
                /sbin/sulogin
                /usr/sbin/cron
                /usr/sbin/inetd
                /usr/sbin/ipmasqadm
                /usr/sbin/tcpd
                /usr/sbin/watchdog
                /usr/sbin/rtacct
                /usr/sbin/rtmon
                /usr/sbin/portsentry
                /usr/sbin/fdisk
                /usr/sbin/cfdisk
                /usr/sbin/sfdisk
                /usr/sbin/in.tftpd
                /bin/run-parts
                /bin/cpio
                /bin/beep
                /bin/ctar
                /bin/ps
                /bin/sed
                /bin/setserial
                /bin/tinylogin
                /bin/nano
                /bin/zile
                /bin/gdb
                /bin/syslinux
                /bin/addgroup
                /bin/adduser
                /bin/delgroup
                /bin/deluser
                /bin/login
                /bin/su
                /usr/bin/tftp
                /usr/bin/histring
                /usr/bin/ipmask
                /usr/bin/elvis-tiny
                /usr/bin/the
                /usr/bin/cdctl
                /usr/bin/ascii
                /usr/bin/cmatrix
                /usr/bin/setfont
                /usr/bin/dc
                /usr/bin/ftp
                /usr/bin/ltrace
                /usr/bin/mpack
                /usr/bin/nm
                /usr/bin/strace
                /usr/bin/strings
                /usr/bin/strip
                /usr/bin/zip
                /usr/bin/unzip
                /usr/bin/passwd
                /usr/bin/vlock

        libbfd-2.9.1.0.19.so.0:

                /usr/bin/nm
                /usr/bin/strip

        libbz2.so.0:

                /usr/bin/bzip2

        libc.so.6:

                /sbin/sysctl
                /sbin/halt
                /sbin/dhcpcd
                /sbin/hwclock
                /sbin/init
                /sbin/killall5
                /sbin/runlevel
                /sbin/shutdown
                /sbin/start-stop-daemon
                /sbin/syslogd
                /sbin/klogd
                /sbin/dosfsck
                /sbin/mkdosfs
                /sbin/file
                /sbin/lilo
                /sbin/getty
                /sbin/sulogin
                /usr/sbin/cron
                /usr/sbin/inetd
                /usr/sbin/ipmasqadm
                /usr/sbin/tcpd
                /usr/sbin/watchdog
                /usr/sbin/rtacct
                /usr/sbin/rtmon
                /usr/sbin/portsentry
                /usr/sbin/fdisk
                /usr/sbin/cfdisk
                /usr/sbin/sfdisk
                /usr/sbin/in.tftpd
                /bin/run-parts
                /bin/cpio
                /bin/beep
                /bin/ctar
                /bin/ps
                /bin/sed
                /bin/setserial
                /bin/tinylogin
                /bin/nano
                /bin/zile
                /bin/gdb
                /bin/syslinux
                /bin/addgroup
                /bin/adduser
                /bin/delgroup
                /bin/deluser
                /bin/login
                /bin/su
                /usr/bin/tftp
                /usr/bin/histring
                /usr/bin/ipmask
                /usr/bin/elvis-tiny
                /usr/bin/the
                /usr/bin/cdctl
                /usr/bin/ascii
                /usr/bin/bzip2
                /usr/bin/cmatrix
                /usr/bin/setfont
                /usr/bin/dc
                /usr/bin/ftp
                /usr/bin/ltrace
                /usr/bin/mpack
                /usr/bin/nm
                /usr/bin/strace
                /usr/bin/strings
                /usr/bin/strip
                /usr/bin/zip
                /usr/bin/unzip
                /usr/bin/passwd
                /usr/bin/vlock

        libcrypt.so.1:

                /sbin/getty
                /sbin/sulogin
                /bin/tinylogin
                /bin/addgroup
                /bin/adduser
                /bin/delgroup
                /bin/deluser
                /bin/login
                /bin/su
                /usr/bin/passwd
                /usr/bin/vlock

        libdl.so.2:

                /usr/sbin/ipmasqadm
                /usr/bin/the

        libm.so.6:

                /bin/gdb

        libncurses.so.4:

                /usr/sbin/cfdisk
                /bin/nano
                /bin/zile
                /bin/gdb
                /usr/bin/elvis-tiny
                /usr/bin/the
                /usr/bin/cmatrix
                /usr/bin/dc

        libnsl.so.1:

                /usr/sbin/tcpd
                /usr/bin/strace

        libreadline.so.2:

                /bin/gdb
                /usr/bin/dc

        libresolv.so.2:

                /usr/sbin/rtacct
                /usr/sbin/rtmon

Reply via email to