Differences between version 4 and previous revision of KnowledgeBase/Scripts/chroot_bin.sh.
Other diffs: Previous Major Revision, Previous Author
Newer page: | version 4 | Last edited on Monday, 15 March 2010 13:39:52 | by CyberLeo | Revert |
Older page: | version 3 | Last edited on Monday, 15 March 2010 8:03:31 | by CyberLeo | Revert |
@@ -29,9 +29,9 @@
bin="$(which "${1}")"; shift
[ -d "${tgt}" -a -x "${bin}" ] || return 1
tmp="$(populate_chroot "${tgt}" "${bin}")"
exe="$(basename "${bin}")"
- ( sleep 1
; rm -Rf "${tgt}/${tmp}" ) &
+ ( sleep 0
; rm -Rf "${tgt}/${tmp}" ) &
LD_LIBRARY_PATH="/${tmp}/" /usr/bin/chroot "${tgt}" "/${tmp}/ld-linux.so.2" "/${tmp}/${exe}" "${@}"
}
;;
FreeBSD)
@@ -67,10 +67,10 @@
[ -d "${tgt}" -a -x "${bin}" ] || return 1
tmp="$(populate_chroot "${tgt}" "${bin}")"
exe="$(basename "${bin}")"
mount -t unionfs "${tmp}" "${tgt}"
- ( sleep 1
; umount -f "${tgt}"; rm -Rf "${tmp}" ) &
+ ( sleep 0
; umount -f "${tgt}"; rm -Rf "${tmp}" ) &
LD_LIBRARY_PATH="/.run" /usr/sbin/chroot "${tgt}" "/.run/${exe}" "${@}"
}
;;
esac
</code>
version 4
case "$(uname -s)" in Linux) libscan() { [ "${1}" ] || return 1 ( echo /lib/ld-linux.so.2 while [ "${1}" ] do if [ -x "${1}" ] then ldd "${1}" | sed -e '/ => /!d; s/^.* => //; s/ (0x[0-9a-f]*)$//; /^[ ]*$/d' fi shift done ) | sort | uniq } populate_chroot() { dest="${1}"; shift bins="${@}" libs="$(libscan "${@}")" temp="$(mktemp -d "${dest}/.chroot.XXXXXXXX")" [ -d "${temp}" ] || return 1 cp -p ${bins} ${libs} ${temp}/ echo "$(basename "${temp}")" } chroot_bin() { tgt="${1}"; shift bin="$(which "${1}")"; shift [ -d "${tgt}" -a -x "${bin}" ] || return 1 tmp="$(populate_chroot "${tgt}" "${bin}")" exe="$(basename "${bin}")" ( sleep 0; rm -Rf "${tgt}/${tmp}" ) & LD_LIBRARY_PATH="/${tmp}/" /usr/bin/chroot "${tgt}" "/${tmp}/ld-linux.so.2" "/${tmp}/${exe}" "${@}" } ;; FreeBSD) libscan() { [ "${1}" ] || return 1 ( echo "/libexec/ld-elf.so.1" while [ "${1}" ] do if [ -x "${1}" ] then ldd "${1}" | sed -e '/ => /!d; s/^.* => //; s/ (0x[0-9a-f]*)$//; /^[ ]*$/d' fi shift done ) | sort | uniq } populate_chroot() { dest="${1}"; shift bins="${@}" libs="$(libscan "${@}")" temp="$(mktemp -d "/tmp/.chroot.XXXXXXXX")" [ -d "${temp}" ] || return 1 mkdir -p "${temp}/.run" cp -p ${bins} ${libs} "${temp}/.run/" mkdir -p "${temp}/libexec" ln -f "${temp}/.run/ld-elf.so.1" "${temp}/libexec/" echo "${temp}" } chroot_bin() { tgt="${1}"; shift bin="$(which "${1}")"; shift [ -d "${tgt}" -a -x "${bin}" ] || return 1 tmp="$(populate_chroot "${tgt}" "${bin}")" exe="$(basename "${bin}")" mount -t unionfs "${tmp}" "${tgt}" ( sleep 0; umount -f "${tgt}"; rm -Rf "${tmp}" ) & LD_LIBRARY_PATH="/.run" /usr/sbin/chroot "${tgt}" "/.run/${exe}" "${@}" } ;; esac