Set BITBAKE_UI variable to 'toastergui' for command line builds to use toasterui as a default ui module for bitbake. (Bitbake rev: 9ad6393d30cb6196cf7c9a5adcf33febd724d294) Signed-off-by: Ed Bartosh <ed.bartosh@linux.intel.com> Signed-off-by: Michael Wood <michael.g.wood@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
8.1 KiB
Executable File
#!/bin/echo ERROR: This script needs to be sourced. Please run as .
toaster - shell script to start Toaster
Copyright (C) 2013-2015 Intel Corp.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see http://www.gnu.org/licenses/.
Usage: source toaster [start|stop]
[webport=] [noui] [noweb]
Helper function to kill a background toaster development server
webserverKillAll()
{
local pidfile
for pidfile in ${BUILDDIR}/.toastermain.pid ${BUILDDIR}/.runbuilds.pid; do
if [ -f ${pidfile} ]; then
pid=cat ${pidfile}
while kill -0 $pid 2>/dev/null; do
kill -SIGTERM -$pid 2>/dev/null
sleep 1
# Kill processes if they are still running - may happen
# in interactive shells
ps fux | grep "python.*manage.py runserver" | awk '{print $2}' | xargs kill
done
rm ${pidfile}
fi
done
}
webserverStartAll() { # do not start if toastermain points to a valid process if ! cat "${BUILDDIR}/.toastermain.pid" 2>/dev/null | xargs -I{} kill -0 {} ; then retval=1 rm "${BUILDDIR}/.toastermain.pid" fi
retval=0
# you can always add a superuser later via
# ../bitbake/lib/toaster/manage.py createsuperuser --username=<ME>
$MANAGE migrate --noinput || retval=1
if [ $retval -eq 1 ]; then
echo "Failed migrations, aborting system start" 1>&2
return $retval
fi
$MANAGE checksettings --traceback || retval=1
if [ $retval -eq 1 ]; then
printf "\nError while checking settings; aborting\n"
return $retval
fi
echo "Starting webserver..."
$MANAGE runserver "0.0.0.0:$WEB_PORT" \
</dev/null >>${BUILDDIR}/toaster_web.log 2>&1 \
& echo $! >${BUILDDIR}/.toastermain.pid
sleep 1
if ! cat "${BUILDDIR}/.toastermain.pid" | xargs -I{} kill -0 {} ; then
retval=1
rm "${BUILDDIR}/.toastermain.pid"
else
echo "Webserver address: http://0.0.0.0:$WEB_PORT/"
fi
return $retval
}
INSTOPSYSTEM=0
define the stop command
stop_system()
{
# prevent reentry
if [ $INSTOPSYSTEM -eq 1 ]; then return; fi
INSTOPSYSTEM=1
if [ -f ${BUILDDIR}/.toasterui.pid ]; then
kill cat ${BUILDDIR}/.toasterui.pid 2>/dev/null
rm ${BUILDDIR}/.toasterui.pid
fi
webserverKillAll
# unset exported variables
unset DATABASE_URL
unset TOASTER_CONF
unset TOASTER_DIR
unset BITBAKE_UI
trap - SIGHUP
#trap - SIGCHLD
INSTOPSYSTEM=0
}
verify_prereq() {
# Verify Django version
reqfile=$(python -c "import os; print os.path.realpath('$BBBASEDIR/toaster-requirements.txt')")
exp='s/Django([><=]+)([^,]+),([><=]+)(.+)/'
exp=$exp'import sys,django;version=django.get_version().split(".");'
exp=$exp'sys.exit(not (version \1 "\2".split(".") and version \3 "\4".split(".")))/p'
if ! sed -n "$exp" $reqfile | python - ; then
req=grep ^Django $reqfile
echo "This program needs $req"
echo "Please install with pip install -r $reqfile"
return 2
fi
return 0
}
read command line parameters
if [ -n "$BASH_SOURCE" ] ; then TOASTER=${BASH_SOURCE} elif [ -n "$ZSH_NAME" ] ; then TOASTER=${(%):-%x} else TOASTER=$0 fi
BBBASEDIR=dirname $TOASTER/..
MANAGE=$BBBASEDIR/lib/toaster/manage.py
OEROOT=dirname $TOASTER/../..
this is the configuraton file we are using for toaster
we are using the same logic that oe-setup-builddir uses
(based on TEMPLATECONF and .templateconf) to determine
which toasterconf.json to use.
note: There are a number of relative path assumptions
in the local layers that currently make using an arbitrary
toasterconf.json difficult.
. $OEROOT/.templateconf if [ -n "$TEMPLATECONF" ]; then if [ ! -d "$TEMPLATECONF" ]; then # Allow TEMPLATECONF=meta-xyz/conf as a shortcut if [ -d "$OEROOT/$TEMPLATECONF" ]; then TEMPLATECONF="$OEROOT/$TEMPLATECONF" fi if [ ! -d "$TEMPLATECONF" ]; then echo >&2 "Error: '$TEMPLATECONF' must be a directory containing toasterconf.json" return 1 fi fi fi
if [ "$TOASTER_CONF" = "" ]; then TOASTER_CONF="$TEMPLATECONF/toasterconf.json" export TOASTER_CONF=$(python -c "import os; print os.path.realpath('$TOASTER_CONF')") fi
if [ ! -f $TOASTER_CONF ]; then echo "$TOASTER_CONF configuration file not found. Set TOASTER_CONF to specify file or fix .templateconf" return 1 fi
this defines the dir toaster will use for
1) clones of layers (in _toaster_clones )
2) the build dir (in build)
3) the sqlite db if that is being used.
4) pid's we need to clean up on exit/shutdown
note: for future. in order to make this an arbitrary directory, we need to
make sure that the toaster.sqlite file doesn't default to pwd like it currently does.
export TOASTER_DIR=pwd
WEBSERVER=1 WEB_PORT="8000" unset CMD for param in $; do case $param in noweb ) WEBSERVER=0 ;; start ) CMD=$param ;; stop ) CMD=$param ;; webport=) WEB_PORT="${param#*=}" esac done
if [ basename \"$0\" = basename \"${TOASTER}\" ]; then
echo "Error: This script needs to be sourced. Please run as . $TOASTER"
return 1
fi
verify_prereq || return 1
We make sure we're running in the current shell and in a good environment
if [ -z "$BUILDDIR" ] || ! which bitbake >/dev/null 2>&1 ; then echo "Error: Build environment is not setup or bitbake is not in path." 1>&2 return 2 fi
this defines the dir toaster will use for
1) clones of layers (in _toaster_clones )
2) the build dir (in build)
3) the sqlite db if that is being used.
4) pid's we need to clean up on exit/shutdown
note: for future. in order to make this an arbitrary directory, we need to
make sure that the toaster.sqlite file doesn't default to pwd
like it currently does.
export TOASTER_DIR=dirname $BUILDDIR
Determine the action. If specified by arguments, fine, if not, toggle it
if [ "$CMD" = "start" ] ; then if [ -n "$BBSERVER" ]; then echo " Toaster is already running. Exiting..." return 1 fi elif [ "$CMD" = "" ]; then if [ -z "$BBSERVER" ]; then CMD="start" else CMD="stop" fi fi
echo "The system will $CMD."
Execute the commands
case $CMD in start ) # check if addr:port is not in use if [ "$CMD" == 'start' ]; then $MANAGE checksocket "0.0.0.0:$WEB_PORT" || return 1 fi
# kill Toaster web server if it's alive
if [ -e $BUILDDIR/.toastermain.pid ] && kill -0 `cat $BUILDDIR/.toastermain.pid`; then
echo "Warning: bitbake appears to be dead, but the Toaster web server is running." 1>&2
echo " Something fishy is going on." 1>&2
echo "Cleaning up the web server to start from a clean slate."
webserverKillAll
fi
# Create configuration file
conf=${BUILDDIR}/conf/toaster.conf
echo "# Created by toaster start script" > $conf
echo "INHERIT+=\"toaster buildhistory\"" >> $conf
if [ $WEBSERVER -gt 0 ] && ! webserverStartAll; then
echo "Failed ${CMD}."
return 4
fi
export BITBAKE_UI='toasterui'
export DATABASE_URL=`$MANAGE get-dburl`
$MANAGE runbuilds & echo $! >${BUILDDIR}/.runbuilds.pid
# set fail safe stop system on terminal exit
trap stop_system SIGHUP
echo "Successful ${CMD}."
return 0
;;
stop )
stop_system
echo "Successful ${CMD}."
;;
esac