3 #PATH=download/robox/build/src:$PATH
4 XDG_RUNTIME_DIR=/run/user/$(id -u)
6 #export DBUS_SESSION_BUS_ADDRESS=/run/user/$(id -u)/bus
8 SESSIONMANAGER="$ANBOX session-manager"
9 BINDMOUNTDIR=$HOME/anbox-data
10 ANBOX_LOG_LEVEL="debug"
20 echo -e "\e[01;31m${instancenum}: $* \e[0m"
24 if [[ "$QUIET" == "true" ]]; then return; fi
25 echo -e "\e[01;32m${instancenum}: $* \e[0m"
29 if [[ "$DEBUG" != "true" ]]; then return; fi
30 echo -e "\e[01;33m${instancenum}: $* \e[0m"
33 function check_and_remove_docker()
35 echo "check_and_remove_docker $instance"
36 sudo docker ps -a | grep $instance$ > /dev/null 2>&1
37 if [[ $? -eq 0 ]]; then
38 #sudo docker stop $instance
39 sudo docker rm -f $instance
41 #out "`sudo docker ps -a | grep $instance`"
44 function start_framebuffer()
46 out "${instancenum}: STARTING Frame Buffer"
47 cmd="sudo Xorg -config /etc/X11/xorg0.conf $display -sharevts"
49 # LEE: Might need a sleep here
50 ps aux | grep Xorg | grep "Xorg[[:space:]]*$display " > /dev/null
52 warning "\e[01;31m Create Xorg service\e[0m"
57 out "The Xorg service has been created \e[0m"
61 function start_session_manager()
65 warning "BINDMOUNTDIR:${BINDMOUNTDIR}, XDG_RUNTIME_DIR:${XDG_RUNTIME_DIR}"
66 if [ -d ${XDG_RUNTIME_DIR}/anbox/${instancenum} ]; then
67 sudo rm -rfv ${XDG_RUNTIME_DIR}/anbox/${instancenum}
68 sudo rm -rfv ${BINDMOUNTDIR}/${instancenum}
71 PID=$(ps aux | grep session-manager | grep "run-multiple=${instancenum}" | column -t | cut -d$' ' -f3)
72 if [[ "$PID" != "" ]]; then
73 out "exsist , STOPPING Session Manager (${PID})"
76 out "NOT stopping Session Manager, it's not running"
80 cpurange=$((4*instancenum))-$((4*instancenum+3))
81 #taskset -c $cpurange anbox session-manager --run-multiple=1 --standalone --experimental windowing="" --window-size=720,1280
82 cmd="taskset -c $cpurange $SESSIONMANAGER --run-multiple=${instancenum} --standalone --single-window --experimental $windowing --window-size=720,1280"
85 export DISPLAY=$DISPLAY
86 export EGL_PLATFORM=x11
87 export EGL_LOG_LEVEL="fatal"
88 export SDL_VIDEODRIVER=x11
93 warning "session manager failed"
96 SESSIONMANAGERPID=$(ps aux | grep session-manager | grep "run-multiple=${instancenum}" | column -t | cut -d$' ' -f3)
100 ps -h $SESSIONMANAGERPID > /dev/null
101 if [[ $? -gt 0 ]]; then
102 if [[ $TIMEOUT -gt 2 ]]; then
103 warning "FAILED to start the Session Manager"
106 TIMEOUT=$(($TIMEOUT+1))
115 function configure_networking()
117 #unique_ip=${instancenum}
118 unique_ip=$(ps -ef | grep "proxy" | grep "172.17.0" | awk '{print $16}' | awk -F "." '{print $4}' | sort -nur | sed -n '1p')
119 if [[ ! $unique_ip ]]; then
122 unique_ip=$(($unique_ip + 1))
123 final_ip=172.17.0.$unique_ip
125 out "CREATING network configuration (using $final_ip)"
127 mkdir -p ${BINDMOUNTDIR}/${instancenum}/data/misc/ethernet
128 echo "mkdir -p ${BINDMOUNTDIR}/${instancenum}/data/misc/ethernet"
130 $ANBOX generate-ip-config --ip=$final_ip --gateway=172.17.0.1
131 if [[ $? -ne 0 ]]; then
132 warning "FAILED to configure Networking"
136 cp ipconfig.txt ${BINDMOUNTDIR}/${instancenum}/data/misc/ethernet
141 ps aux | grep -v grep | grep "$instance \|$instance$" > /dev/null
142 if [[ $? -eq 0 ]]; then
143 OUT=$(ps aux | grep -v grep | grep "$instance \|$instance$")
145 warning "$instance is already running -- please stop it before continuing"
149 sudo docker network inspect bridge | grep \"$instance\" > /dev/null
150 if [[ $? -eq 0 ]]; then
151 sudo docker network disconnect -f bridge $instance
154 # Export current log level values
155 export ANBOX_LOG_LEVEL=$ANBOX_LOG_LEVEL
156 export EGL_LOG_LEVEL=$EGL_LOG_LEVEL
158 # Raise system resource limits - required for many containers
159 sudo sysctl -w fs.inotify.max_user_instances=8192 > /dev/null
160 sudo sysctl -w fs.file-max=1000000 > /dev/null
161 sudo sysctl -w kernel.shmmni=24576 > /dev/null
162 sudo sysctl -w kernel.pid_max=200000 > /dev/null
168 start_session_manager
170 debug "Ensuring all sockets are useable"
177 ps aux | grep -v grep | grep "run-multiple=${instancenum}" > /dev/null
178 if [[ $? -ne 0 ]]; then
180 # Remove possible remnent files anyway, just in case
181 sudo rm -rf ${XDG_RUNTIME_DIR}/anbox/${instancenum}
182 sudo rm -rf ${BINDMOUNTDIR}/${instancenum}
186 sudo docker ps -a | grep $instance$ > /dev/null
187 if [[ $? -eq 0 ]]; then
188 out "REMOVING Docker"
189 sudo docker rm -f $instance
190 if [[ $? -ne 0 ]]; then
191 warning "FAILED to remove Docker container"
194 out "NOT stopping Docker, it's not running"
197 # Stop Session Manager
198 PID=$(ps aux | grep -v "grep" | grep "session-manager" | grep "run-multiple=${instancenum}" | column -t | cut -d$' ' -f3)
199 if [[ "$PID" != "" ]]; then
200 out "STOPPING Session Manager (${PID})"
201 if [[ "$PERF" == "true" ]]; then
207 out "NOT stopping Session Manager, it's not running"
210 out sudo rm -rf ${XDG_RUNTIME_DIR}/anbox/${instancenum}
211 out sudo rm -rf ${BINDMOUNTDIR}/${instancenum}
214 sudo rm -f /tmp/.X${instancenum}-lock
216 # Remove unattached shared memory (VNC does not free it properly)
217 IDS=$(ipcs -m | grep '^0x' | grep "$USER" | awk '{print $2, $6}' | grep ' 0$' | awk '{print $1}')
219 ipcrm shm "${id}" &> /dev/null
225 mkdir -p "${XDG_RUNTIME_DIR}"
226 #mkdir -p $DBUS_SESSION_BUS_ADDRESS
228 instance=instance${instancenum}
229 if [[ "$1" == "start" ]]; then
230 out "Attempting to start instance $instance\n"
232 elif [[ "$1" == "kill" ]]; then
234 elif [[ "$1" == "stop" ]]; then
235 out "Attempting to stop instance $instance\n"