All pastes #824046 Raw Edit

masta

public shellscript v1 · immutable
·published 2007-12-19 19:23 UTC
rendered paste body
# wants a (list of) dir(s) as the argument(s)# returns a list of libraries on stdout.# NEVER PUT ANYTHING HERE THAT ECHOS TO STDOUT OR STDERR.ldd_dir() {        local BIN_PATH I        while :; do                [ $# -eq 0 ] && break                [ ! -d ${1} ] && continue                BIN_PATH=${1} && shift                for I in ${BIN_PATH}/* ;                        do ldd -f "%p\n" ${I} 2>/dev/null || continue                done        done | sort -u}# this requires a DESTDIR (param 1)# this uses ldd_dir() to scan DESTDIR for libs to copy.# copies libs from the base system to the DESTDIR.libcopy() {        local DESTDIR BINDIRS I        [ $# -lt "2" ] && return 255        [ -d $1 ] || return 254        DESTDIR=$1 && shift        for I in $*; do                if [ -z "${BINDIRS}" ] ;                        then    BINDIRS="${DESTDIR}/${I}"                        else    BINDIRS="${BINDIRS} ${DESTDIR}/${I}"                fi        done        shift $#        for I in `ldd_dir ${BINDIRS}`; do                cp ${VERBOPTS} -Rpf ${I} ${DESTDIR}/${I}                liblink ${I}        done        return 0}# also this for pam# code to copy over the pam modules in an approptiate way.do_pam_modules() {        local _PAM _PAMLIB        for _PAM in ${BASEDIR}/usr/lib/*pam*.[0-9] ; do                cp ${VERBOPTS} -Rpf ${_PAM} ${WORKDIR}/usr/lib/                liblink ${_PAM}        done        # This removes fixes the dynamic-dynamic libs.        # it ldd's the libs, and finds all the libs (which ohter libs might link in).        info "Locating dynamic libs of other libs."        for _PAMLIB in `ls ${WORKDIR}/usr/lib/*pam*.[0-9] | xargs ldd -f "%p\n" | sort -u`; do                [ -f ${WORKDIR}/${_PAMLIB} ] || {                        cp ${VERBOPTS} -Rpf ${_PAMLIB} ${WORKDIR}/${_PAMLIB}                        liblink ${_PAMLIB}                        continue                }        done}# more pam crap# when you copy a library file, this function creates the compatibility symlink.# example libpcap.so.2 => libpcap.soliblink() {        local _LIB _BASENAME _LINKNAME        _LIB=$1        _BASENAME=`basename ${_LIB}`        _LINKNAME=`echo ${_BASENAME} | cut -d "." -f 1-2`        #echo "(cd ${WORKDIR}`dirname ${_LIB}` ; ln ${VERBOPTS} -s ${_BASENAME} ${_LINKNAME})"        (cd ${WORKDIR}`dirname ${_LIB}` ; ln ${VERBOPTS} -s ${_BASENAME} ${_LINKNAME})}# the linkcopy function to fix hardlinked binslinkcopy() {        [ $# -ne 3 ] && return 255        [ ! -f $1 ] && return 254        [ ! -d $2 ] && return 252        [ ! -d $3 ] && return 248        local FILELIST SRCPATH DESTDIR LINE BASEFILE HLINK DEREF        FILELIST=$1 && shift        SRCPATH=$1 && shift        DESTDIR=$1 && shift        # the main loop        for LINE in `grep -v "^#" ${FILELIST} | \        grep -v "^$" | \        cut -d "#" -f 1`; do                set `echo ${LINE} | tr ":" " "`                while : ; do                        BASEFILE=$1 && shift                        # We check for dir's first.                        if [ -d ${SRCPATH}/${BASEFILE} ];                                then    cp ${VERBOPTS} -Rpf ${SRCPATH}/${BASEFILE} ${DESTDIR}/${BASEFILE}                                else    # check for symbolic link, and if found, recreate that.                                                if [ -L ${SRCPATH}/${BASEFILE} ] ;                                                        then    # make a symbolic link.                                                                        DEREF=`realpath ${SRCPATH}/${BASEFILE}`                                                                        [ -f ${DESTDIR}/${DEREF} ] || cp ${VERBOPTS} -Rpf ${SRCPATH}/${DEREF} ${DESTDIR}/${DEREF}                                                                        (cd ${DESTDIR} ; ln ${VERBOPTS} -s ./${DEREF} ./${BASEFILE} )                                                        else    # it is a normal copy operation.                                                                        cp ${VERBOPTS} -Rpf ${SRCPATH}/${BASEFILE} ${DESTDIR}/${BASEFILE}                                                fi                        fi                        [ $# -eq "0" ] && break                        while : ; do                                HLINK=$1 && shift                                ln ${VERBOPTS} ${DESTDIR}/${BASEFILE} ${DESTDIR}/${HLINK} 2> /dev/null                                [ $# -eq "0" ] && break 2                        done                done        done        return 0}