PREFIX="" TMP=`mktemp` follow_link() { link_dir=$(dirname $1) file=$(readlink $1) file_dir=$(dirname $file) if [ "x${file:0:1}" = "x/" ]; then link_dir="" else link_dir="$link_dir/" fi if [ ! -d ${CHROOT}$link_dir$file_dir ]; then mkdir -p ${CHROOT}$link_dir$file_dir; fi; # cp -au $file ${CHROOT}/$file cp -au $link_dir$file ${CHROOT}$link_dir$file # (cd $link_dir && cp -au $file /tmp); # (cd ${CHROOT}$link_dir && cp -au /tmp/$(basename $file) ${CHROOT}/$file_dir); } list_libs() { if grep ${1} $TMP &>/dev/null; then return 1; fi echo "${PREFIX}${1}" >> $TMP local OLDPREFIX=${PREFIX} PREFIX="${PREFIX} " local -a libs=(`ldd $1 |sed -e '/=>/s/.*=> \(.*\)/\1/ ; s/\t*// ; s/ (.*)//'`) if [ "${libs[*]}" = "statically linked" ]; then return 2 fi local i=0 while [ \( -n "${libs[$i]}" \) ]; do list_libs ${libs[$i]} ((i++)); done PREFIX=${OLDPREFIX} } #for arg in $@; do # list_libs $arg #done #cat $TMP SO="" PKG=$1 CHROOT=$2 rpm -ql $PKG | \ while read str; do type=`file $str | cut -f2 -d:` case "$type" in *directory*) mkdir -p ${CHROOT}$str; ;; *"symbolic link"*) follow_link $str cp -au $str ${CHROOT}$str ;; *"shared object"*) list_libs $str sed 's/ *//' $TMP | while read lib; do lib_dir=$(dirname $lib) if [ ! -d ${CHROOT}$lib_dir ]; then mkdir -p ${CHROOT}$lib_dir; fi; if [ -h $lib ]; then follow_link $lib fi cp -au $lib ${CHROOT}$lib; done ;; *) if [ ! -d ${CHROOT}$(dirname $str) ]; then mkdir -p ${CHROOT}$(dirname $str); fi; cp -au $str ${CHROOT}$str ;; esac # if [ -d $str ]; then # mkdir -p ${CHROOT}$str; # else # if [ \! -d ${CHROOT}${str%/*} ]; then # mkdir -p ${CHROOT}${str%/*}; # fi; # cp -a $str ${CHROOT}$str; #n fi; done #mv /srv/www/ ${CHROOT}/srv/ rm -f $TMP