gpackcore tool

来源:互联网 发布:大数据应用方向 编辑:程序博客网 时间:2024/06/05 00:16
#! /bin/shif test $# -ne 1; then    echo "Usage: `basename $0 .sh` <corefile>" 2>&1    exit 1fiif [ $# -eq 1 -a  ! -f $1 ];  then    echo "Core file<$1> not found." 2>&1    exit 2fiCOREFILE=$1CURRENT_DIR=`pwd`#get EXENAMEGDB=${GDB:-/usr/bin/gdb}[ -f $COREFILE.info.out ] && mv $COREFILE.info.out $COREFILE.info.out.bak$GDB --quiet -nx core $COREFILE <<EOF >$COREFILE.info.out 2>&1quitEOFEXENAME=`cat $COREFILE.info.out | grep "Core was generated" | awk -F'\`' '{print $2;}' | awk '{print $1;}' | sed "s/'.*$//"`[ -z "$EXENAME" ] && echo $COREFILE is not a core dump && exit 3ABSEXE=$EXENAME #The ABSEXE may be not complete due to gdb line buffer len limites #for some IAP case,just get the /usr parts[ ! -f $ABSEXE ] && ABSEXE=` echo $ABSEXE |  sed -e 's/.*\(\/usr.*\)/\1/g' |awk -F'.' '{print $1;}' `ABSCORE=`echo $COREFILE | grep ^\/`[ -z "$ABSCORE" ] && ABSCORE="$CURRENT_DIR/$COREFILE" COREBASE=`basename $ABSCORE`#check available disksize,default 500Mecho "checking available disksize..."DISK_ALLOWED=500CORE_FILE_SIZE=`du -k $ABSCORE |awk '{print $1;}'`ESTIMATE_TAR_FILE_SIZE=` expr $CORE_FILE_SIZE \* 2 \/ 1000`DISK_AVAIL=`df -kP $CURRENT_DIR | awk '{print $4;}' | grep -v Available`DISK_AVAIL=` expr $DISK_AVAIL \/ 1000`echo $CURRENT_DIR available about $DISK_AVAIL M[ $DISK_AVAIL -lt $DISK_ALLOWED ] && echo Available is less than minimum $DISK_ALLOWED. can not proceed. && exit 1if [ $DISK_AVAIL -lt $ESTIMATE_TAR_FILE_SIZE ]then echo Available less than estimated $ESTIMATE_TAR_FILE_SIZE echo Force to continue<Y/N>?>\c read option [ "$option" != "Y" ] && echo Cancelled. && exit 1fiCURRENT_STATION=`hostname`CORE_STATION=`echo $ABSCORE | awk -F'/' '{print $4;}'`if [ -z "`echo $CURRENT_STATION | grep STATION_[C-L]`" -a -n "`echo $CORE_STATION | grep STATION_[C-L]`" ] ;then        ROOT_DIR=/diskless/release/hlrrt/root        ADDED_DIR=/diskless/release/$CORE_STATION/addedelse        ROOT_DIR=""        ADDED_DIR=""fiABSEXE_TMP=$ABSEXE[ ! -f $ABSEXE ] && ABSEXE=$ADDED_DIR$ABSEXE_TMP[ ! -f $ABSEXE ] && ABSEXE=$ROOT_DIR$ABSEXE_TMP[ ! -f $ABSEXE ] && echo "$ABSEXE not exist." && exit 4 EXEBASE=`basename $ABSEXE`PACKNAME=pack.$EXEBASE.$COREBASE.tgz[ -f $PACKNAME ] && echo "$PACKNAME already exist in $CURRENT_DIR, pls rm first" && exit 5echo ***Get on site information,pls wait...***FILELIST=$CURRENT_DIR/manifirst.list[ -f $FILELIST ] && echo "$FILELIST exists,pls rm it first" && exit 11#get shared so list#Run GDB, strip out unwanted noise.GDB=${GDB:-/usr/bin/gdb}$GDB --quiet $readnever -nx $ABSEXE $COREFILE <<EOF >>$COREFILE.info.out 2>&1quitEOFSO_LIST=$COREFILE.so.list#get shared lib list per .info.outrm -rf $SO_LIST $SO_LIST.added $SO_LIST.tmptouch $SO_LIST $SO_LIST.added $SO_LIST.tmpcat $COREFILE.info.out | awk '/No such/{print $1}/Loaded symbols/{print $NF;}' | awk -F: '{print $1}' >$SO_LIST.tmpcat $SO_LIST.tmp  | while read imagedoif [ -f $ADDED_DIR$image ]then  if [ -z "`grep $ADDED_DIR$image $SO_LIST`" -a -z "`grep $ADDED_DIR$image $SO_LIST.added`" ]   then    echo $ADDED_DIR$image >>$SO_LIST    [ -n "$ADDED_DIR" ] && echo $image >>$SO_LIST.added  fielif [ -f $ROOT_DIR$image ]then  [ -z "`grep $ROOT_DIR$image $SO_LIST`" ] && echo $ROOT_DIR$image >>$SO_LISTfidonecat $SO_LIST >$FILELISTecho $SO_LIST >>$FILELISTecho $SO_LIST.tmp >>$FILELISTecho $SO_LIST.added >>$FILELISTecho $ABSEXE >>$FILELISTecho $ABSCORE >>$FILELIST echo $COREFILE.info.out >>$FILELIST#generate gdb scriptsgdb_script="load_symbol"[ -f $gdb_script ] && mv $gdb_script $gdb_script.baktouch $gdb_scriptrbin=` echo $ABSEXE | cut -c 2-`rcore=` echo $ABSCORE | cut -c 2-`SO_DIR=`echo $ROOT_DIR | cut -c 2-`SO_ADDED_DIR=`echo $ADDED_DIR | cut -c 2- `cat $SO_LIST.added |while read imagedo imagedir=`dirname $image` echo "shell [ ! -d ./$SO_DIR$imagedir ] && mkdir -p ./$SO_DIR$imagedir" >>$gdb_script echo "shell [ ! -f ./$SO_DIR$image ] && cp ./$SO_ADDED_DIR$image ./$SO_DIR$image " >>$gdb_scriptdoneecho set solib-absolute-prefix ./$SO_DIR >>$gdb_scriptecho set solib-search-path ./$SO_DIR >>$gdb_scriptecho file $rbin >>$gdb_scriptecho core $rcore >>$gdb_scriptecho $gdb_script >>$FILELISTecho $FILELIST >>$FILELISTecho ***Packaging files...***#pack all files intar cvzfh $PACKNAME -T $FILELIST#remove temp filesrm -rf $FILELIST $gdb_script $SO_LIST $SO_LIST.tmp $SO_LIST.added $COREFILE.info.outecho "===DONE, $PACKNAME generated at current dir==="

原创粉丝点击