diff -r 000000000000 -r 8e044e762a6c self-extract.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/self-extract.sh Tue Jun 23 09:18:34 2009 -0400 @@ -0,0 +1,137 @@ +#!/bin/bash + +if test -z "$BASH"; then + cmd="$0" + if test "`basename $0`" = "$0"; then + cmd="./$0" + fi + echo "This script is designed to be run using GNU bash." + echo "Try: chmod +x $0 && $cmd" + exit 1 +fi + +my_which_real() +{ + test -n "$1" || return 1 + local i + local part + for (( i=1; ; i++ )); do + part=`echo "$PATH" | cut -d ':' -f $i` + test -n "$part" || return 1 + if test -x "$part/$1"; then echo "$part/$1"; return 0; fi + done +} + +my_which() +{ + local out + local r + out=`my_which_real "$1"` + r=$? + if test -z "$out" -o $r = 1 ; then echo "ERROR: $1 command not found on system" 1>&2;exit 1;fi + echo $out + return $r +} + +progressbit() +{ + local i + local pbar + local line + i=0 + pbar="-\\|/" + while read line; do + ((i++)) + j=$(($i % ${#pbar})) + echo -ne "\r${pbar:$j:1} Extracting..." + done +} + +mktempdir() +{ + local tempdir + tempdir=/tmp/ext`$dd if=/dev/urandom bs=128 count=1 2>/dev/null | $md5sum - | cut -c 1-6` + echo $tempdir + return 0 +} + +getdata() +{ + offset=`$cat $0 | $grep -an '^##DATA' | cut -d ':' -f 1 || exit 1` + offset=$((offset + 1)) + $cat $0 | $tail -n+$offset +} + +for cmd in bzip2 tar grep tail cat wc dd md5sum; do + my_which $cmd>/dev/null || exit 1 + eval $cmd=`my_which $cmd` + if test x$? = x1; then + exit 1 + fi +done + +tempdir="" +extractonly=0 +while test -n "$1"; do + case "$1" in + -x) + extractonly=1 + if test -n "$2"; then + tempdir=$2 + else + tempdir=`echo $0 | sed -re 's/\.[a-z0-9_-]{1,5}$//'` + fi + ;; + esac + shift +done + +test -n "$tempdir" || tempdir=`mktempdir` + +if test -d "$tempdir"; then +if test $extractonly = 1; then + i=0 + basetemp="$tempdir" + while test -d "$tempdir"; do + tempdir="${basetemp}${i}" + ((i++)) + done +else + while test -d "$tempdir"; do + tempdir=`mktempdir` + done +fi +fi + +mkdir "$tempdir" || exit 1 +echo -ne "\e[?25l- Extracting..." +getdata | $bzip2 -dc | $tar xvCf $tempdir - | progressbit \ + || ( + rm -rf $tempdir + echo -ne "\e[?25h" + exit 1 + ) + +echo -ne "\r\e[?25h" + +# trap exits so we can clean up if the script is interrupted +handle_interrupt() +{ + rm -rf $tempdir +} +trap handle_interrupt 0 + +if test -x $tempdir/autorun.sh && test $extractonly != 1; then + $tempdir/autorun.sh + ret=$? + rm -rf $tempdir + exit $ret +else + echo "Contents extracted to $tempdir." +fi + +trap "exit 0;" 0 + +exit 0 + +##DATA