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