#!/bin/bash # # Search for and install missing shared libraries # # Copyright (C) 2017-2018 Jason Graham # function process_file { if [ ! -z $(which $1 2> /dev/null) ]; then lib="$(ldd `which $1` | grep 'not found' | cut -d= -f1)" if [ ! -z "${lib}" ]; then echo "$lib" >> .libs fi fi if [ -f $1 ]; then lib="$(ldd $1 | grep 'not found' | cut -d= -f1)" if [ ! -z "$lib" ]; then echo "$lib" >> .libs fi fi } echo -n > .libs for p in $@ do if [ -d $p ]; then for f in `find $p -type f -name '*.so' -o -name '*.so.*' -o -executable` do process_file $f done else process_file $p fi done cat .libs | sort -u > .libs.new mv .libs.new .libs echo -n > .pkgs echo -n > pkg-list while read l do lib=$(echo $l | sed 's/\(.*\.so\).[0-9]*.*/\1/') pkg=$(slackpkg file-search "$lib" | grep -w "uninstalled" | head -n1) #p=${p#*uninstalled*} if [ -z "$pkg" ]; then echo "package not found for $lib" continue fi pkg=$(echo $pkg | awk '{print $3}') echo $pkg:$lib >> pkg-list echo $pkg >> .pkgs done<.libs rm -f .libs sort -u .pkgs > .pkgs.new mv .pkgs.new .pkgs sort -u pkg-list > pkg-list.new mv pkg-list.new pkg-list if [ -s .pkgs ]; then slackpkg install $(cat .pkgs) fi rm -f .pkgs