Allura quello che segue e' uno script per controllare se le dipendenze in una macchina slackware sono soddisfatte...in soldoni se tutte le lib linkate dinamicamente ci sono. (errori di seg fault ecc)
funge pure su altre distro ma chiaramente non suggerisce pacchetti mancanti.
La nuova versione aggiunge:
i colori :-)
per slack la scelta della versione del cd (8.x,9.x)
la scelta del path da verificare (tutto il sistema, /usr/bin, /tua/dir, etc)
per slack le eventuali inconsistenze nel /etc/ld.so.conf, cioe' se le lib ci sono e il pacchetto e' installato ma dovete aggiungere il path affinche' il sistema lo sappia
vari fix e migliorie che non ricordo....
codice:
#!/bin/bash
#Script to check if all the dependencies are ok in the whole system or just
#a part of it.
#It is written for Slackware Linux but will work on others distro...hope so ;-)
#but not for the Slackware install cd check code part.
#Coded by Pierluigi Previtali slack@slack.z00.it .
#inspired by Cameron Kerr cameron.kerr@paradise.net.nz .
#read the report in /tmp/ldd_report .
#This script will search binary files and test with the ldd command
#if the dependencies are ok and will make a report.
#Code released under GPL2
#06/12/2002
#17/04/2003 mods for 9.x compatibility, addedd colors, path choice,already
#installed packages check, various fix....enjoy.
#declare vars
BLUE="\033[0;34m"
GREEN="\033[0;32m"
RED="\033[0;31m"
YLW="\033[1;33m"
N_C="\033[0m"
LD_CONF="/etc/ld.so.conf"
CHECK_PATH="/"
TMP_DIR="/tmp"
UNCOMPRESSED_MANIFEST="$TMP_DIR/MANIFEST"
DEF_LDD="$TMP_DIR/def_ldd_result"
TMP_LDD="$TMP_DIR/tmp_ldd_result"
DEF_RESULT="$TMP_DIR/ldd_report"
TMP_FILES="$TMP_DIR/tmp_ldd_files"
TMP_PKG="$TMP_DIR/tmp_pkg_files"
#start script
if [ "$UID" != "0" ]; then
echo -e "${RED} Sorry you are not ROOT....${N_C}"
exit
fi
#obtain various infos
#start with version
echo -e "${YLW}Please choose your version$N_C"
echo ""
OPT="8.x 9.x quit"
select opt in $OPT;do
if [ "$opt" = "8.x" ];then
SLACK_MANIFEST="/mnt/cdrom/slackware/MANIFEST.gz"
CMD="gunzip"
EXT=".gz"
break
elif [ "$opt" = "9.x" ];then
SLACK_MANIFEST="/mnt/cdrom/slackware/MANIFEST.bz2"
CMD="bunzip2"
EXT=".bz2"
break
elif [ "$opt" = "quit" ];then
echo "Quitting...."
exit
else
echo -e "${RED}Possible options are ${YLW}\n(1)\n(2)\n(3)$N_C"
fi
done
#now the path
echo " "
echo -e "${YLW}Please choose your path $N_C"
echo " "
select opt in "Check the whole fs [/]" "Check a certain path \
[/your/path/here/]" "quit";do
if [ "$opt" = "Check the whole fs [/]" ];then
break
elif [ "$opt" = "Check a certain path [/your/path/here/]" ];then
echo -n -e "${YLW}Path: ${N_C}"
read NEW_PATH
if [ -d "$NEW_PATH" ];then
CHECK_PATH=${NEW_PATH}
echo " "
echo -e "The start path is ${YLW}$CHECK_PATH"
break
else
echo " "
echo -e "${RED}The dir ${YLW}[${NEW_PATH}] ${RED}seems to be missing${N_C}"
echo -e "${RED}Assuming default ${YLW}[/]${N_C}"
sleep 2
break
fi
elif [ "$opt" = "quit" ];then
echo "Quitting...."
exit
else
echo -e "${RED}Possible options are ${YLW}\n(1)\n(2)\n(3)$N_C"
fi
done
#cleanup
if [ -f "$DEF_LDD" ]; then
rm "$DEF_LDD"
fi
if [ -f "$TMP_LDD" ]; then
rm "$TMP_LDD"
fi
if [ -f "$TMP_FILES" ]; then
rm "$TMP_FILES"
fi
if [ -f "$UNCOMPRESSED_MANIFEST" ]; then
rm "$UNCOMPRESSED_MANIFEST"
fi
if [ -f "$DEF_RESULT" ]; then
rm "$DEF_RESULT"
fi
if [ -f "$TMP_PKG" ]; then
rm "$TMP_PKG"
fi
#check for MANIFEST
if [ -f "$SLACK_MANIFEST" ]; then
echo " "
echo -e "${GREEN}The file $SLACK_MANIFEST is present...$N_C"
else
echo " "
echo -e "${RED}Can't find the file $SLACK_MANIFEST ${N_C}"
echo " "
echo "Insert the disk and mount it on /mnt/cdrom please otherwise"
echo "the script will not be able to check if the required libs are in"
echo "the standard packages. Anyway the results without the suggested"
echo "packages will be displayed in the following file:"
echo -e "${YLW}$DEF_RESULT${N_C}"
echo "You can exit now pressing Control-C"
echo "Wait for 10 second since now...."
sleep 10
fi
echo " "
echo "Your $LD_CONF have the following entries: "
echo -e -n "${YLW}"
cat $LD_CONF
echo -e "\n${N_C}Updating the lib cache.... "
ldconfig
echo "Done.... "
echo "Starting search....this may take several minutes...."
sleep 1
RESULTS="`find $CHECK_PATH -type f -perm +111 -xdev -print| \
xargs file |grep ELF|awk '{print $1 }'|sed 's/://g'`"
echo "Ok search finished...now checking libraries"
sleep 1
for i in $RESULTS
do
echo " "
echo $i
output="`ldd \"$i\" 2> /dev/null | grep ' => not found$' | \
cut -d' ' -f1 | sed -e 's/^[[:space:]*]//'`"
if [ "$output" ]; then
echo -e "${RED}Warning missing libraries ${N_C} "
echo "${output}" >> "$TMP_LDD"
echo "${i}" >> "$TMP_FILES"
make_list="1"
#sleep 1
else
echo -e "${GREEN}Dependencies checked OK ${N_C}"
fi
done
if [ "$make_list" ]; then
cat "$TMP_LDD" | sort | uniq > "$DEF_LDD"
echo "Missing libs:">>"$DEF_RESULT"
echo " ">>"$DEF_RESULT"
cat "$DEF_LDD" >> "$DEF_RESULT"
echo -e "\nGuilty files:\n">>"$DEF_RESULT"
cat "$TMP_FILES" >> "$DEF_RESULT"
clear
echo -e " Results are in ${YLW}$DEF_RESULT${N_C}\n"
echo " Searching missing libraries in Slackware Packages"
echo " this may take a while...."
echo " you can always press Control-C and simply read the file:"
echo " $DEF_RESULT ,without the section about the suggested packages"
echo " to install"
if [ -f "$SLACK_MANIFEST" ]; then
cp "$SLACK_MANIFEST" "$TMP_DIR"
${CMD} ${TMP_DIR}/MANIFEST${EXT}
echo -e "\nSuggested packages:\n">>"$DEF_RESULT"
for i in `cat $DEF_LDD`;do
echo " "
echo -e "Searching ${YLW}$i${N_C} ...."
cat "$TMP_DIR"/MANIFEST | awk '
BEGIN {
starting = 1
}
/^\|\| Package: / {
if( starting == 1 )
starting = 0
else
printf( "\n" )
printf( "%s ", $3 )
}
/^[-bcdlps][-r][-w][-xsS][-r][-w][-xsS][-r][-w][-xtT][[:space:]]/ {
printf( "%s ", $6 )
}
END {
printf( "\n" )
}
' | fgrep "${i}" | cut -d' ' -f1 >>"$TMP_PKG"
done
cat $TMP_PKG | sort | uniq >> $DEF_RESULT
echo -e "\nCheck for inconsistences in ${YLW}$LD_CONF"
for i in `cat $TMP_PKG | sort | uniq`;do
pkg_name=`basename $i |sed 's/.tgz$//g'`
pkg_found=`ls /var/log/packages/* | grep $pkg_name`
if [ "$pkg_found" ];then
echo -e "${RED}Inconsistences found ${N_C}about ${YLW}$i${N_C}"
echo -e "\nThe package $i is installed but the libs path is not properly set in $LD_CONF ? " >> $DEF_RESULT
fi
done
echo -e "\nOk....finished read the report in ${YLW}$DEF_RESULT${N_C}\n"
if [ -f "$DEF_LDD" ]; then
rm "$DEF_LDD"
fi
if [ -f "$TMP_LDD" ]; then
rm "$TMP_LDD"
fi
if [ -f "$TMP_FILES" ]; then
rm "$TMP_FILES"
fi
if [ -f "$UNCOMPRESSED_MANIFEST" ]; then
rm "$UNCOMPRESSED_MANIFEST"
fi
if [ -f "$TMP_PKG" ]; then
rm "$TMP_PKG"
fi
else
echo -e "\n${RED}Can't find the file $SLACK_MANIFEST ${N_C}...insert the 8.1"
echo "disk and mount it on /mnt/cdrom please and yes...restart the script :-)"
echo "Anyway the results are in the following file:"
echo -e "${YLW}$DEF_RESULT${N_C}"
if [ -f "$DEF_LDD" ]; then
rm "$DEF_LDD"
fi
if [ -f "$TMP_LDD" ]; then
rm "$TMP_LDD"
fi
if [ -f "$TMP_FILES" ]; then
rm "$TMP_FILES"
fi
exit
fi
else
echo -e "${GREEN}All libraries are presents ${N_C}"
fi
enjoy...pierluigi