LinuxQuestions.org
Latest LQ Deal: Latest LQ Deals
Go Back   LinuxQuestions.org > Blogs > gabim
User Name
Password

Notices


Rate this Entry

Discover library dependencies on Slackware

Posted 05-28-2009 at 02:34 AM by gabim
Tags slackware

I created a script to discover the library dependencies on my system:
Code:
#!/bin/bash

ECHO=/usr/bin/echo
SED=/usr/bin/sed
FILE=/usr/bin/file
CUT=/usr/bin/cut
LDD=/usr/bin/ldd
GREP=/usr/bin/grep
AWK=/usr/bin/awk

for p in `$ECHO $PATH | $SED 's/:/ /g'`
do
    for f in $p/*
    do
        if [ 'ELF' == `$FILE -b $f | $CUT -d' ' -f1` ]; then
            if $LDD $f | $GREP -q 'not found'; then
                $ECHO "$f"
                $LDD $f | $GREP 'not found' | $AWK '{print "Not found:", $1}'
            fi
        fi
    done
done
I found some missing libraries by this (and searched the missing packages from MANIFEST.gz) and maybe this script can be useful for others also.
Posted in Uncategorized
Views 4278 Comments 7
« Prev     Main     Next »
Total Comments 7

Comments

  1. Old Comment

    This was REAL helpful!!

    Thanks for writing this. I hope you don't mind. I copied this into a bash script and modified the output to a file instead. I can then check each entry of the file against the MANIFEST.gz, and grap the dependencies as required.

    Thanks,
    Shingoshi
    Posted 06-11-2009 at 04:31 PM by Shingoshi Shingoshi is offline
  2. Old Comment

    This was REAL helpful!!

    Quote:
    Originally Posted by Shingoshi View Comment
    Thanks for writing this. I hope you don't mind. I copied this into a bash script and modified the output to a file instead. I can then check each entry of the file against the MANIFEST.gz, and grap the dependencies as required.

    Thanks,
    Shingoshi
    You are welcome! I'm happy to help by this little script.
    Posted 06-11-2009 at 04:46 PM by gabim gabim is offline
  3. Old Comment

    New version

    The new version prints the missing package names instead of the missing library names, so one have to install only the given packages mentioned by this script.
    Code:
    root@slack64:~# cat /usr/local/bin/sldd                                 
    #!/bin/bash                                                             
    # file: sldd                                                            
    # description: Slackware library dependency discovery                   
    # author: http://www.linuxquestions.org/user/gabim-473488/              
    # date: 27/05/2009                                                      
    # version: 1.1                                                          
    
    # This is the concatenated MANIFEST file of slackpkg on Slackware64
    MANIFEST=/var/lib/slackpkg/slackware64-filelist.gz
    
    # Do not trust in any command in PATH, shell builtins, etc.
    ECHO=/usr/bin/echo
    PRINTF=/usr/bin/printf
    CUT=/usr/bin/cut
    SORT=/usr/bin/sort
    GREP=/usr/bin/grep
    ZGREP=/usr/bin/zgrep
    SED=/usr/bin/sed
    AWK=/usr/bin/awk
    FILE=/usr/bin/file
    LDD=/usr/bin/ldd
    NULL=/dev/null
    
    # Check all directories in PATH
    for directory in `$ECHO $PATH | $SED 's/:/ /g'`
    do
        # Check all binaries in PATH directories
        for binary in $directory/*
        do
            # If it is true ELF binary
            if [ 'ELF' == `$FILE -b $binary | $CUT -d' ' -f1` ]; then
                # Show the progress by printing of actual filename on standard error
                $PRINTF "%-70s\r" $binary >&2
                # Check the missing shared library dependencies
                $LDD $binary 2>$NULL | $GREP 'not found' | $AWK '{print $1}' | while read missing_lib
                do
                    # Print the package name of the missing library
                    $ZGREP $missing_lib $MANIFEST | $AWK '{print $1}'
                done
            fi
        done
        # Clear the progress info
        $PRINTF "%-80s\r" "" >&2
    # Ignore the duplicated package names
    done | $SORT -u
    The time of running is relatively long, it takes about 4.5 mins at me.
    Posted 06-11-2009 at 06:07 PM by gabim gabim is offline
    Updated 06-12-2009 at 02:33 AM by gabim
  4. Old Comment

    1.2

    This version scans the /etc/ld.so.conf libraries also.
    Code:
    #!/bin/bash                                                             
    # file: sldd                                                            
    # description: Slackware library dependency discovery                   
    # author: http://www.linuxquestions.org/user/gabim-473488/              
    # date: 27/05/2009                                                      
    # version: 1.2                                                          
    
    # This is the concatenated MANIFEST file of slackpkg on Slackware64
    MANIFEST=/var/lib/slackpkg/slackware64-filelist.gz
    
    # Do not trust in any command in PATH, shell builtins, etc.
    ECHO=/usr/bin/echo
    PRINTF=/usr/bin/printf
    CUT=/usr/bin/cut
    SORT=/usr/bin/sort
    GREP=/usr/bin/grep
    ZGREP=/usr/bin/zgrep
    SED=/usr/bin/sed
    AWK=/usr/bin/awk
    FILE=/usr/bin/file
    LDD=/usr/bin/ldd
    NULL=/dev/null
    
    # Check all directories in PATH and ld.so.conf
    for directory in `$ECHO $PATH | $SED 's/:/ /g'` `cat /etc/ld.so.conf`
    do
        # Check all binaries in these directories
        for binary in $directory/*
        do
            # If it is true ELF binary
            if [ 'ELF' == `$FILE -b $binary | $CUT -d' ' -f1` ]; then
                # Show the progress by printing of actual filename on standard error
                $PRINTF "%-70s\r" $binary >&2
                # Check the missing shared library dependencies
                $LDD $binary 2>$NULL | $GREP 'not found' | $AWK '{print $1}' | while read missing_lib
                do
                    # Print the package name of the missing library
                    $ZGREP $missing_lib $MANIFEST | $AWK '{print $1}'
                done
            fi
        done
        # Clear the progress info
        $PRINTF "%-80s\r" "" >&2
    # Ignore the duplicated package names
    done | $SORT -u
    Posted 06-12-2009 at 05:13 PM by gabim gabim is offline
  5. Old Comment

    version: 1.3

    Deeper directory discovery via find:

    Code:
    #!/bin/bash                                                             
    # file: sldd                                                            
    # description: Shared library dependency discovery                   
    # author: http://www.linuxquestions.org/user/gabim-473488/              
    # date: 27/05/2009                                                      
    # version: 1.3
    
    # This is the concatenated MANIFEST file of slackpkg on Slackware64
    MANIFEST=/var/lib/slackpkg/slackware64-filelist.gz
    
    # Do not trust in any command in PATH, shell builtins, etc.
    SYSPATH=$PATH
    PATH=/bin:/usr/bin:/usr/sbin
    ECHO=/usr/bin/echo
    PRINTF=/usr/bin/printf
    
    # Check all directories in PATH and ld.so.conf
    # If it is true ELF binary
    find `$ECHO $SYSPATH | sed 's/:/ /g'` \
         `sed 's/\(\/.*\/.*\)\/.*/\1/' /etc/ld.so.conf | sort -u` \
         -perm -100 -a -type f \
         -exec sh -c 'filename="{}"; /usr/bin/echo -n "." >&2; \
                      [ "ELF" = `file -b $filename | cut -d" " -f1` ] && \
                      ldd $filename 2>/dev/null | fgrep "not found" \
                          | cut -d" " -f1' \; | while read missing_lib
    do
        # Print the missing library and its package name
        $ECHO $missing_lib ": `zgrep $missing_lib $MANIFEST | cut -d" " -f1`"
    done | sort -u
    Posted 07-03-2009 at 07:24 AM by gabim gabim is offline
  6. Old Comment
    You have inspired me to do the same thing. To post small scripts that I've written in my blog also. In fact, you have yourself to blame (I think) for my becoming aware that there even was the possibility to have a blog.

    So for all the time I sit on my @$$ writing scripts, I might as well start sharing them.

    Shingoshi
    Posted 07-05-2009 at 03:12 AM by Shingoshi Shingoshi is offline
  7. Old Comment
    Quote:
    Originally Posted by Shingoshi View Comment
    You have inspired me to do the same thing. To post small scripts that I've written in my blog also. In fact, you have yourself to blame (I think) for my becoming aware that there even was the possibility to have a blog.

    So for all the time I sit on my @$$ writing scripts, I might as well start sharing them.

    Shingoshi
    Yes, we can start to share our small scripts, the Slackware will be better by this.
    I started the sharing by a next step, see on http://slackwiki.org/Dependency_Discovery . I hope it will help more people than here.
    Posted 07-08-2009 at 08:17 AM by gabim gabim is offline
 

  



All times are GMT -5. The time now is 10:39 PM.

Main Menu
Advertisement
Advertisement
My LQ
Write for LQ
LinuxQuestions.org is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
Syndicate
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
Open Source Consulting | Domain Registration