Split disco_t -> path_to_object into object_path and object_filename so it is more...
[pandora-libraries.git] / testdata / scripts / pnd_run.sh
1 #!/bin/bash
2  
3 #input pnd_run.sh -p "/path/to/foobar.pnd" -e "exe" --a "arguments for exe"
4 # -u to skip union mount
5 # -s startdir
6 # arguments can be inside -e, -a is optional
7  
8  
9 # parse arguments
10 TEMP=`getopt -o p:e:a:b:s:u:: --long p-long,e-long:,a-long: -- "$@"`
11  
12 if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi
13  
14 # Note the quotes around `$TEMP': they are essential!
15 eval set -- "$TEMP"
16  
17 while true ; do
18         case "$1" in
19                 -p|--p-long) echo "pnd set to \`$2'" ;PND=$2;shift 2;;
20                 -e|--e-long) echo "exec set to \`$2'" ;EXENAME=$2;shift 2 ;;
21                 -u) echo "u set, no union pls!";UNION=1;shift 2 ;;
22                 -b) echo "BASENAME set to $2";BASENAME=$2;shift 2;;
23                 -s) echo "startdir set to $2";STARTDIR=$2;shift 2;;
24                 -a|--a-long) 
25                         case "$2" in
26                                 "") echo "no arguments"; shift 2 ;;
27                                 *)  echo "args set to \`$2'" ;ARGUMENTS=$2;shift 2 ;;
28                         esac ;;
29                 --) shift ; break ;;
30                 *) echo "Error while parsing arguments!" ; exit 1 ;;
31         esac
32 done
33  
34 # add sanity check
35  
36 #vars
37 DFS=$(file -b $PND | awk '{ print $1 }') # is -p a zip iso or folder?
38 MOUNTPOINT=$(df $PND | grep -vE '^Filesystem' | awk '{ print $6  }') #find out which mountpoint the pnd/folder is on
39  
40 #if -b is set use that as basename, else generate it from PND
41 #get basename (strip extension if file) for union mountpoints etc, maybe  this should be changed to something specified inside the xml
42 if [ ! $BASENAME ]; then BASENAME=$(basename "$PND" | cut -d'.' -f1) ; fi
43  
44 oCWD=$(pwd)
45 # add sanity check
46  
47 #detect fs
48 if [ $DFS = ISO ]; then
49         mntline="sudo mount -o loop,mode=777 $PND /mnt/pnd/$BASENAME"
50         echo "Filetype is $DFS"
51 elif [ $DFS = Zip ]; then
52         mntline="fuse-zip $PND /mnt/pnd/$BASENAME -o ro,fmask=000"
53         echo "Filetype is $DFS"
54 elif [ $DFS = directory ]; then
55         mntline="sudo mount --bind -o ro $PND /mnt/pnd/$BASENAME"
56 #we bind the folder, now it can be treated in a unified way ATENTION: -o ro doesnt work for --bind at least on 25, on 26 its possible using remount, may have changed on 27
57         echo "Filetype is $DFS"
58 else
59         echo "error"
60         exit 1;
61 fi
62  
63 #create mountpoints
64  
65 if [ ! -d /mnt/pnd/$BASENAME ]; then sudo mkdir -p /mnt/pnd/$BASENAME ; fi
66 if [ ! -d $MOUNTPOINT/appdata/$BASENAME ]; then sudo mkdir -p $MOUNTPOINT/appdata/$BASENAME; fi
67 if [ ! -d /mnt/utmp/$BASENAME ]; then sudo mkdir -p /mnt/utmp/$BASENAME; fi 
68  
69 #mount
70 if [ ! $UNION ] ; then
71         #is the union already mounted? if not mount evrything, else launch the stuff
72         mount | grep "on /mnt/utmp/$BASENAME type" # > /dev/null
73         if [ ! $? -eq 0 ]; then 
74                 echo "mounting union!"
75                 $mntline #mount the pnd/folder
76  
77                 sudo mount -t aufs -o exec,dirs\=$MOUNTPOINT/appdata/$BASENAME=rw:/mnt/pnd/$BASENAME=ro none /mnt/utmp/$BASENAME # put union on top
78  
79         else
80                 echo "Union already mounted"
81         fi
82  
83  
84         #start app
85         cd /mnt/utmp/$BASENAME
86         if [ $STARTDIR ]; then cd $STARTDIR; fi
87         ./$EXENAME $ARGUMENTS 
88         #app exited
89         cd $oCWD
90  
91 else
92  
93         $mntline
94         cd /mnt/pnd/$BASENAME
95         if [ $STARTDIR ]; then cd $STARTDIR; fi
96         echo $(pwd)
97         ./$EXENAME $ARGUMENTS 
98         cd $oCWD
99 fi
100  
101 #clean up
102 if [ ! $UNION ] ; then sudo umount /mnt/utmp/$BASENAME; fi
103 if [ $UNION ] ; then sudo umount /mnt/pnd/$BASENAME; fi
104 if [ $? -eq 0 ]; then 
105         sudo umount /mnt/pnd/$BASENAME
106         sudo rmdir /mnt/pnd/$BASENAME
107         if [ ! $UNION ] ; then  sudo rmdir /mnt/utmp/$BASENAME; fi
108 fi