summaryrefslogtreecommitdiffstats
path: root/bitbake/bin/toaster
diff options
context:
space:
mode:
authorAlexandru DAMIAN <alexandru.damian@intel.com>2014-11-03 13:47:16 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2014-11-12 17:04:48 +0000
commit0ca70ce37aa8cec6a74ec874a7b11597b608c403 (patch)
tree65e74aa95de35de101286746cd5b9f6acca80468 /bitbake/bin/toaster
parentbaa1082c64beb0385aca2807ae6da26bee5dbcbf (diff)
downloadpoky-0ca70ce37aa8cec6a74ec874a7b11597b608c403.tar.gz
bitbake: toaster script: webport option and other improvements
We add the "webport=" command line option as to allow starting the web server on a custom port. The bitbake server port is now auto-allocated. This is needed to be able to run multiple toaster environments on a single machine. We tackle bug 6023 (toaster refusing to start when lock file is present) by using more specific checks, and automatically recover from bitbake server down / webserver up error mode. Command line parameters are now read on both interactive and managed modes. The localhost and ssh controllers are updated to work with the modified toaster launcher script. [YOCTO #6023] (Bitbake rev: cd3eb5b051743463cfe51dba97cae4da75420048) Signed-off-by: Alexandru DAMIAN <alexandru.damian@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/bin/toaster')
-rwxr-xr-xbitbake/bin/toaster96
1 files changed, 53 insertions, 43 deletions
diff --git a/bitbake/bin/toaster b/bitbake/bin/toaster
index 34f65e4721..4c6ac5ac40 100755
--- a/bitbake/bin/toaster
+++ b/bitbake/bin/toaster
@@ -37,7 +37,7 @@ function webserverKillAll()
37 kill -SIGTERM -$(< ${pidfile}) 2>/dev/null 37 kill -SIGTERM -$(< ${pidfile}) 2>/dev/null
38 sleep 1; 38 sleep 1;
39 # Kill processes if they are still running - may happen in interactive shells 39 # Kill processes if they are still running - may happen in interactive shells
40 ps fux | grep "python.*manage.py" | awk '{print $2}' | xargs kill 40 ps fux | grep "python.*manage.py runserver" | awk '{print $2}' | xargs kill
41 done; 41 done;
42 rm ${pidfile} 42 rm ${pidfile}
43 fi 43 fi
@@ -69,13 +69,13 @@ function webserverStartAll()
69 fi 69 fi
70 if [ $retval -eq 0 ]; then 70 if [ $retval -eq 0 ]; then
71 echo "Starting webserver" 71 echo "Starting webserver"
72 python $BBBASEDIR/lib/toaster/manage.py runserver 0.0.0.0:8000 </dev/null >${BUILDDIR}/toaster_web.log 2>&1 & echo $! >${BUILDDIR}/.toastermain.pid 72 python $BBBASEDIR/lib/toaster/manage.py runserver "0.0.0.0:$WEB_PORT" </dev/null >${BUILDDIR}/toaster_web.log 2>&1 & echo $! >${BUILDDIR}/.toastermain.pid
73 sleep 1 73 sleep 1
74 if ! cat "${BUILDDIR}/.toastermain.pid" | xargs -I{} kill -0 {} ; then 74 if ! cat "${BUILDDIR}/.toastermain.pid" | xargs -I{} kill -0 {} ; then
75 retval=1 75 retval=1
76 rm "${BUILDDIR}/.toastermain.pid" 76 rm "${BUILDDIR}/.toastermain.pid"
77 else 77 else
78 echo "Webserver address: 0.0.0.0:8000" 78 echo "Webserver address: http://0.0.0.0:$WEB_PORT/"
79 fi 79 fi
80 fi 80 fi
81 return $retval 81 return $retval
@@ -103,7 +103,7 @@ function stop_system()
103 kill $(< ${BUILDDIR}/.toasterui.pid ) 2>/dev/null 103 kill $(< ${BUILDDIR}/.toasterui.pid ) 2>/dev/null
104 rm ${BUILDDIR}/.toasterui.pid 104 rm ${BUILDDIR}/.toasterui.pid
105 fi 105 fi
106 BBSERVER=0.0.0.0:8200 bitbake -m 106 BBSERVER=0.0.0.0:-1 bitbake -m
107 unset BBSERVER 107 unset BBSERVER
108 webserverKillAll 108 webserverKillAll
109 # force stop any misbehaving bitbake server 109 # force stop any misbehaving bitbake server
@@ -126,9 +126,46 @@ function notify_chldexit() {
126} 126}
127 127
128 128
129
130# Verify prerequisites
131
132if ! echo "import django; print (1,) == django.VERSION[0:1] and django.VERSION[1:2][0] in (5,6)" | python 2>/dev/null | grep True >/dev/null; then
133 echo -e "This program needs Django 1.5 or 1.6. Please install with\n\npip install django==1.6"
134 return 2
135fi
136
137if ! echo "import south; print [0,8,4] == map(int,south.__version__.split(\".\"))" | python 2>/dev/null | grep True >/dev/null; then
138 echo -e "This program needs South 0.8.4. Please install with\n\npip install south==0.8.4"
139 return 2
140fi
141
142# read command line parameters
143
129BBBASEDIR=`dirname ${BASH_SOURCE}`/.. 144BBBASEDIR=`dirname ${BASH_SOURCE}`/..
130RUNNING=0 145RUNNING=0
131 146
147NOTOASTERUI=0
148WEBSERVER=1
149TOASTER_BRBE=""
150WEB_PORT="8000"
151
152for param in $*; do
153 case $param in
154 noui )
155 NOTOASTERUI=1
156 ;;
157 noweb )
158 WEBSERVER=0
159 ;;
160 brbe=* )
161 TOASTER_BRBE=$'\n'"TOASTER_BRBE=\""${param#*=}"\""
162 ;;
163 webport=*)
164 WEB_PORT="${param#*=}"
165 esac
166done
167
168
132if [ -z "$ZSH_NAME" ] && [ `basename \"$0\"` = `basename \"$BASH_SOURCE\"` ]; then 169if [ -z "$ZSH_NAME" ] && [ `basename \"$0\"` = `basename \"$BASH_SOURCE\"` ]; then
133 # We are called as standalone. We refuse to run in a build environment - we need the interactive mode for that. 170 # We are called as standalone. We refuse to run in a build environment - we need the interactive mode for that.
134 # Start just the web server, point the web browser to the interface, and start any Django services. 171 # Start just the web server, point the web browser to the interface, and start any Django services.
@@ -152,7 +189,7 @@ if [ -z "$ZSH_NAME" ] && [ `basename \"$0\"` = `basename \"$BASH_SOURCE\"` ]; th
152 echo "Failed to start the web server, stopping" 1>&2; 189 echo "Failed to start the web server, stopping" 1>&2;
153 exit 1; 190 exit 1;
154 fi 191 fi
155 xdg-open http://0.0.0.0:8000/ >/dev/null 2>&1 & 192 xdg-open http://0.0.0.0:$WEB_PORT/ >/dev/null 2>&1 &
156 trap trap_ctrlc SIGINT 193 trap trap_ctrlc SIGINT
157 echo "Running. Stop with Ctrl-C" 194 echo "Running. Stop with Ctrl-C"
158 while [ $RUNNING -gt 0 ]; do 195 while [ $RUNNING -gt 0 ]; do
@@ -170,23 +207,6 @@ if [ -z "$BUILDDIR" ] || [ -z `which bitbake` ]; then
170fi 207fi
171 208
172 209
173
174# Verify prerequisites
175
176if ! echo "import django; print (1,) == django.VERSION[0:1] and django.VERSION[1:2][0] in (5,6)" | python 2>/dev/null | grep True >/dev/null; then
177 echo -e "This program needs Django 1.5 or 1.6. Please install with\n\npip install django==1.6"
178 return 2
179fi
180
181if ! echo "import south; print [0,8,4] == map(int,south.__version__.split(\".\"))" | python 2>/dev/null | grep True >/dev/null; then
182 echo -e "This program needs South 0.8.4. Please install with\n\npip install south==0.8.4"
183 return 2
184fi
185
186
187
188
189
190# Determine the action. If specified by arguments, fine, if not, toggle it 210# Determine the action. If specified by arguments, fine, if not, toggle it
191if [ "x$1" == "xstart" ] || [ "x$1" == "xstop" ]; then 211if [ "x$1" == "xstart" ] || [ "x$1" == "xstop" ]; then
192 CMD="$1" 212 CMD="$1"
@@ -198,22 +218,6 @@ else
198 fi; 218 fi;
199fi 219fi
200 220
201NOTOASTERUI=0
202WEBSERVER=1
203TOASTER_BRBE=""
204for param in $*; do
205 case $param in
206 noui )
207 NOTOASTERUI=1
208 ;;
209 noweb )
210 WEBSERVER=0
211 ;;
212 brbe=* )
213 TOASTER_BRBE=$'\n'"TOASTER_BRBE=\""${param#*=}"\""
214 esac
215done
216
217echo "The system will $CMD." 221echo "The system will $CMD."
218 222
219# Make sure it's safe to run by checking bitbake lock 223# Make sure it's safe to run by checking bitbake lock
@@ -223,12 +227,18 @@ if [ -e $BUILDDIR/bitbake.lock ]; then
223 (flock -n 200 ) 200<$BUILDDIR/bitbake.lock || lock=0 227 (flock -n 200 ) 200<$BUILDDIR/bitbake.lock || lock=0
224fi 228fi
225 229
226if [ ${CMD} == "start" ] && ( [ $lock -eq 0 ] || [ -e $BUILDDIR/.toastermain.pid ] ); then 230if [ ${CMD} == "start" ] && [ $lock -eq 0 ]; then
227 echo "Error: bitbake lock state error. File locks show that the system is on." 2>&1 231 echo "Error: bitbake lock state error. File locks show that the system is on." 1>&2
228 echo "If you see problems, stop and then start the system again." 2>&1 232 echo "Please wait for the current build to finish, stop and then start the system again." 1>&2
229 return 3 233 return 3
230fi 234fi
231 235
236if [ ${CMD} == "start" ] && [ -e $BUILDDIR/.toastermain.pid ] && kill -0 `cat $BUILDDIR/.toastermain.pid`; then
237 echo "Error: bitbake appears to be dead, but the webserver is alive. Something fishy is going on." 1>&2
238 echo "Cleaning up the web server at to start a clean slate."
239 webserverKillAll
240fi
241
232 242
233# Execute the commands 243# Execute the commands
234 244
@@ -241,12 +251,12 @@ case $CMD in
241 return 4 251 return 4
242 fi 252 fi
243 unset BBSERVER 253 unset BBSERVER
244 bitbake --postread conf/toaster.conf --server-only -t xmlrpc -B 0.0.0.0:8200 254 bitbake --postread conf/toaster.conf --server-only -t xmlrpc -B 0.0.0.0:0
245 if [ $? -ne 0 ]; then 255 if [ $? -ne 0 ]; then
246 start_success=0 256 start_success=0
247 echo "Bitbake server start failed" 257 echo "Bitbake server start failed"
248 else 258 else
249 export BBSERVER=0.0.0.0:8200 259 export BBSERVER=0.0.0.0:-1
250 if [ $NOTOASTERUI == 0 ]; then # we start the TOASTERUI only if not inhibited 260 if [ $NOTOASTERUI == 0 ]; then # we start the TOASTERUI only if not inhibited
251 bitbake --observe-only -u toasterui >${BUILDDIR}/toaster_ui.log 2>&1 & echo $! >${BUILDDIR}/.toasterui.pid 261 bitbake --observe-only -u toasterui >${BUILDDIR}/toaster_ui.log 2>&1 & echo $! >${BUILDDIR}/.toasterui.pid
252 fi 262 fi