#cleanup
#Rewrite! - this sucks
-showHelp() {
- cat <<endHELP
-Usage: pnd_run.sh -p your.pnd -e executeable [-a "(arguments)"] [ -s "cd to folder inside pnd"] [-b UID (name of mountpoint/pandora/appdata)] [-x close x before launching(script needs to be started with nohup for this to work]
-Usage for mounting/umounting pnd_run.sh -p your.pnd -b uid -m or -u
-endHELP
-}
-
list_using_fs() {
for p in $(fuser -m $1 2>/dev/null);do ps hf $p;done
}
export XDG_DATA_DIRS="/mnt/utmp/$PND_NAME/share:$XDG_DATA_DIRS:/usr/share"
fi
export XDG_CONFIG_HOME="/mnt/utmp/$PND_NAME"
- "./$EXENAME" $ARGUMENTS
+ "./$EXENAME" $ARGUMENTS
# execute app with ld_lib_path set to the union mount, a bit evil but i think its a good solution
#the app could have exited now, OR it went into bg, we still need to wait in that case till it really quits!
#delete folders created by aufs if empty
rmdir -rf "${APPDATADIR}/.wh..wh.plnk" 2>/dev/null
rmdir -rf "${APPDATADIR}/.wh..wh..tmp" 2>/dev/null
+ rmdir "${APPDATADIR}/.wh..wh.orph" 2>/dev/null
+ rm "${APPDATADIR}/.aufs.xino" 2>/dev/null
#delete appdata folder and ancestors if _empty_
rmdir -p "${APPDATADIR}" 2>/dev/null
fi
}
-######################################################################################
-#### Parse arguments
-##
-
-PNDARGS="$@"
+showHelp() {
+ cat <<endHELP
+Usage: pnd_run.sh -p your.pnd -e executeable [-a "(arguments)"] [ -s "cd to folder inside pnd"] [-b UID (name of mountpoint/pandora/appdata)] [-x close x before launching(script needs to be started with nohup for this to work]
+Usage for mounting/umounting pnd_run.sh -p your.pnd -b uid -m or -u
+endHELP
+}
-TEMP=`getopt -o d:p:e:a:b:s:m::u::n::x::j:c: -- $PNDARGS`
-if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi
-eval set -- "$TEMP" # Note the quotes around `$TEMP': they are essential!
-
+function parseArgs() {
ACTION=run
+TEMP=`getopt -o d:p:e:a:b:s:m::u::n::x::j:c: -- "$@"`
+if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi
+# Note the quotes around `$TEMP': they are essential!
+eval set -- "$TEMP"
while true ; do
- case "$1" in
- -p) PND=$2;shift 2;;
- -e) EXENAME=$2;shift 2 ;;
- -b) PND_NAME=$2;shift 2;;
- -s) STARTDIR=$2;shift 2;;
- -m) ACTION=mount;shift 2;;
- -u) ACTION=umount;shift 2;;
- -x) nox=1;shift 2;;
- -j) append=$2;shift 2;;
- -c) cpuspeed=$2;shift 2;;
- -d) APPDATASET=1;APPDATADIR=$2;shift 2;;
- -a)
- case "$2" in
- "") echo "no arguments"; shift 2 ;;
- *) echo "args set to \`$2'" ;ARGUMENTS=$2;shift 2 ;;
- esac ;;
- --) shift ; break ;;
- *) echo "Error while parsing arguments!" ; exit 1 ;;
- esac
+ case "$1" in
+ -p) PND="$2";shift 2;;
+ -e) EXENAME="$2";shift 2 ;;
+ -b) PND_NAME="$2";shift 2;;
+ -s) STARTDIR="$2";shift 2;;
+ -m) ACTION=mount;shift 2;;
+ -u) ACTION=umount;shift 2;;
+ -x) nox=1;shift 2;;
+ -j) append="$2";shift 2;;
+ -c) cpuspeed="$2";shift 2;;
+ -d) APPDATASET=1;APPDATADIR="$2";shift 2;;
+ -a)
+ case "$2" in
+ "") echo "no arguments"; shift 2 ;;
+ *) ARGUMENTS="$2";shift 2 ;;
+ esac ;;
+ --) shift ; break ;;
+ *) echo "Error while parsing arguments!"; showHelp; exit 1 ;;
+ esac
done
+}
+######################################################################################
+#### Main :
+##
+PNDARGS="$@"
+parseArgs "$@"
+
+#PND_NAME really should be something sensible and somewhat unique
+#if -b is set use that as pnd_name, else generate it from PND
+#get basename (strip extension if file) for union mountpoints etc, maybe this should be changed to something specified inside the xml
+#this should probably be changed to .... something more sensible
+#currently only everything up to the first '.' inside the filenames is used.
+PND_NAME=${PND_NAME:-"$(basename $PND | cut -d'.' -f1)"}
if [ ! -e "$PND" ]; then #check if theres a pnd suplied, need to clean that up a bit more
echo "ERROR: selected PND($PND) file does not exist!"
PND_FSTYPE=$(file -b "$PND" | awk '{ print $1 }') # is -p a zip/iso or folder?
MOUNTPOINT=$(df "$PND" | tail -1|awk '{print $6}') # find out on which mountpoint the pnd is
-if [ ! -d "$MOUNTPOINT" ] || [ $MOUNTPOINT = "/" ]; then
+if [ $(df "$PND"|wc -l) -eq 1 ];then # this is actually a bug in busybox
+ MOUNTPOINT="/";
+elif [ ! -d "$MOUNTPOINT" ]; then
MOUNTPOINT="";
fi
LOGFILE="/tmp/pndrun_${PND_NAME}.out"
-#PND_NAME really should be something sensible and somewhat unique
-#if -b is set use that as pnd_name, else generate it from PND
-#get basename (strip extension if file) for union mountpoints etc, maybe this should be changed to something specified inside the xml
-#this should probably be changed to .... something more sensible
-#currently only everything up to the first '.' inside the filenames is used.
-PND_NAME=${PND_NAME:-"$(basename $PND | cut -d'.' -f1)"}
-
if [[ $ACTION != "run" ]];then #not logging mount and umount as these are from command-line
main
elif [ $nox ]; then