segue...codice:Ora ci occorre uno script che dato come argomento un nome di pacchetto ci restituisca le dipendenze dagli altri... Lo script prendera' uno ad uno i pacchetti li scomprimera' cerchera' all'interno la presenza di binari compilati linkati siano essi eseguibili o librerie a loro volta e li testera' con il comando ldd, cerchera' poi nei vari pacchetti scorrendo i file MANIFEST e MANIFESTLINK chi fornisce quelle librerie e creera' una lista ordinata... Lo script che useremo si chiamera' "pkgdep.sh" ed e' questo: #!/bin/bash #copyleft 2004 Pierluigi Previtali bashing for fun #pkgdep.sh PACK=$(echo "$(basename $1)" | sed 's/.tgz//g') W_DIR="./" CHECK_PATH="./$PACK" LOG_FILE="/tmp/$PACK" TMP_CHECK="/tmp/TmP_ChEcK" MANIFEST_FILE="/tmp/MANIFEST" MANIFEST_LINK="/tmp/MANIFESTLINK" mkdir "$CHECK_PATH" tar xvzf $1 -C $CHECK_PATH &> /dev/null RESULTS="$(find ${CHECK_PATH}/* -type f -perm +111 -xdev -print| \ xargs file |grep ELF|awk '{print $1 }'|sed 's/://g')" for i in $RESULTS; do output="`ldd \"$i\" 2> /dev/null | \ cut -d' ' -f1 | sed -e 's/^[[:space:]*]//'`" NOT_FOUND_LIST="" for k in $output ; do k="$(basename $k)" cat $MANIFEST_FILE | 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 "${k}" | cut -d' ' -f1 | grep -v "${PACK}" | tee -a $LOG_FILE > $TMP_CHECK TEST_FILE=$(cat $TMP_CHECK) if [ -z "$TEST_FILE" ]; then #inner loop cat $MANIFEST_LINK | 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 "${k}"| cut -d' ' -f1 |sort |uniq |\ sed 's/\/mnt\/cdrom\/slackware/./g' \ | grep -v "${PACK}" | tee -a $LOG_FILE > $TMP_CHECK TEST_FILE=$(cat $TMP_CHECK) if [ -z "$TEST_FILE" ]; then NOT_FOUND_LIST="$NOT_FOUND_LIST $k" fi #inner loop fi done done REALLY_NOT=$(echo "$NOT_FOUND_LIST"| grep -v linux-gate) RESULT=$(cat $LOG_FILE | sort | uniq) echo -e "\n\ ++========================================\n\ ||\n\ || Package: $(basename $1)\n\ ||\n\ ++========================================" if [ -z "$RESULT" ]; then echo "No libs deps" else for i in $RESULT ;do echo $i done fi if [ ! -z $REALLY_NOT ]; then echo "Not found in any packages: $REALLY_NOT" fi echo " " rm -fr $CHECK_PATH $LOG_FILE $TMP_CHECK &> /dev/null