mirror of
https://git.yoctoproject.org/poky
synced 2026-03-29 23:02:20 +02:00
As Toaster advances, database schema alteration
will force users to delete old versions and lose
all data collected.
In order to prevent this, and to allow database
updates to happen without having to delete old data,
we use South to handle migrations for the ORM
application which stores the Toaster data.
[YOCTO #5559]
(Bitbake rev: 6936faed8d94f3a2ab4055049cd27d02d8229003)
Signed-off-by: Alexandru DAMIAN <alexandru.damian@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
179 lines
5.2 KiB
Bash
Executable File
179 lines
5.2 KiB
Bash
Executable File
#!/bin/bash
|
|
# (c) 2013 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, write to the Free Software
|
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
|
|
|
# This script enables toaster event logging and
|
|
# starts bitbake resident server
|
|
# use as: source toaster [start|stop]
|
|
|
|
# Helper function to kill a background toaster development server
|
|
|
|
function webserverKillAll()
|
|
{
|
|
local pidfile
|
|
for pidfile in ${BUILDDIR}/.toastermain.pid; do
|
|
if [ -f ${pidfile} ]; then
|
|
while kill -0 $(< ${pidfile}) 2>/dev/null; do
|
|
kill -SIGTERM -$(< ${pidfile}) 2>/dev/null
|
|
sleep 1;
|
|
done;
|
|
rm ${pidfile}
|
|
fi
|
|
done
|
|
}
|
|
|
|
function webserverStartAll()
|
|
{
|
|
retval=0
|
|
python $BBBASEDIR/lib/toaster/manage.py syncdb || retval=1
|
|
python $BBBASEDIR/lib/toaster/manage.py migrate orm || retval=2
|
|
if [ $retval -eq 1 ]; then
|
|
echo "Failed db sync, stopping system start" 1>&2
|
|
elif [ $retval -eq 2 ]; then
|
|
echo -e "\nError on migration, trying to recover... \n"
|
|
python $BBBASEDIR/lib/toaster/manage.py migrate orm 0001_initial --fake
|
|
retval=0
|
|
python $BBBASEDIR/lib/toaster/manage.py migrate orm || retval=1
|
|
fi
|
|
if [ $retval -eq 0 ]; then
|
|
python $BBBASEDIR/lib/toaster/manage.py runserver 0.0.0.0:8000 </dev/null >${BUILDDIR}/toaster_web.log 2>&1 & echo $! >${BUILDDIR}/.toastermain.pid
|
|
fi
|
|
return $retval
|
|
}
|
|
|
|
# Helper functions to add a special configuration file
|
|
|
|
function addtoConfiguration()
|
|
{
|
|
echo "#Created by toaster start script" > ${BUILDDIR}/conf/$2
|
|
echo $1 >> ${BUILDDIR}/conf/$2
|
|
}
|
|
|
|
# define the stop command
|
|
function stop_system()
|
|
{
|
|
if [ -f ${BUILDDIR}/.toasterui.pid ]; then
|
|
kill $(< ${BUILDDIR}/.toasterui.pid )
|
|
rm ${BUILDDIR}/.toasterui.pid
|
|
fi
|
|
BBSERVER=localhost:8200 bitbake -m
|
|
unset BBSERVER
|
|
webserverKillAll
|
|
# force stop any misbehaving bitbake server
|
|
lsof bitbake.lock | awk '{print $2}' | grep "[0-9]\+" | xargs -n1 -r kill
|
|
}
|
|
|
|
# We make sure we're running in the current shell and in a good environment
|
|
|
|
if [ -z "$ZSH_NAME" ] && [ `basename \"$0\"` = `basename \"$BASH_SOURCE\"` ]; then
|
|
echo "Error: This script needs to be sourced. Please run as 'source toaster [start|stop]'" 1>&2;
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "$BUILDDIR" ] || [ -z `which bitbake` ]; then
|
|
echo "Error: Build environment is not setup or bitbake is not in path." 1>&2;
|
|
return 2
|
|
fi
|
|
|
|
BBBASEDIR=`dirname ${BASH_SOURCE}`/..
|
|
|
|
|
|
# Verify prerequisites
|
|
|
|
if ! echo "import django; print (1,5) == django.VERSION[0:2]" | python 2>/dev/null | grep True >/dev/null; then
|
|
echo -e "This program needs Django 1.5. Please install with\n\nsudo pip install django==1.5"
|
|
return 2
|
|
fi
|
|
|
|
if ! echo "import south; print [0,8,4] == map(int,south.__version__.split(\".\"))" | python 2>/dev/null | grep True >/dev/null; then
|
|
echo -e "This program needs South 0.8.4. Please install with\n\nsudo pip install south==0.8.4"
|
|
return 2
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
# Determine the action. If specified by arguments, fine, if not, toggle it
|
|
if [ "x$1" == "xstart" ] || [ "x$1" == "xstop" ]; then
|
|
CMD="$1"
|
|
else
|
|
if [ -z "$BBSERVER" ]; then
|
|
CMD="start"
|
|
else
|
|
CMD="stop"
|
|
fi;
|
|
fi
|
|
|
|
NOTOASTERUI=0
|
|
if [ "x$2" == "xnoui" ]; then
|
|
NOTOASTERUI=1
|
|
fi
|
|
|
|
echo "The system will $CMD."
|
|
|
|
# Make sure it's safe to run by checking bitbake lock
|
|
|
|
lock=1
|
|
if [ -e $BUILDDIR/bitbake.lock ]; then
|
|
(flock -n 200 ) 200<$BUILDDIR/bitbake.lock || lock=0
|
|
fi
|
|
|
|
if [ ${CMD} == "start" ] && ( [ $lock -eq 0 ] || [ -e $BUILDDIR/.toastermain.pid ] ); then
|
|
echo "Error: bitbake lock state error. System is already on." 2>&1
|
|
return 3
|
|
elif [ ${CMD} == "stop" ] && ( [ $lock -eq 1 ] || ! [ -e $BUILDDIR/.toastermain.pid ] ) ; then
|
|
echo "Error: bitbake lock state error. Trying to stop a stopped system ?
|
|
If you think the system is hanged up, you can try to manually stop system with the commands
|
|
|
|
# BBSERVER=localhost:8200 bitbake -m
|
|
|
|
and
|
|
|
|
# webserverKillAll
|
|
" 2>&1
|
|
return 3
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
# Execute the commands
|
|
|
|
case $CMD in
|
|
start )
|
|
addtoConfiguration "INHERIT+=\"toaster buildhistory\"" toaster.conf
|
|
webserverStartAll || return 4
|
|
unset BBSERVER
|
|
bitbake --postread conf/toaster.conf --server-only -t xmlrpc -B localhost:8200
|
|
export BBSERVER=localhost:8200
|
|
if [ $NOTOASTERUI == 0 ]; then # we start the TOASTERUI only if not inhibited
|
|
bitbake --observe-only -u toasterui >${BUILDDIR}/toaster_ui.log 2>&1 & echo $! >${BUILDDIR}/.toasterui.pid
|
|
fi
|
|
# stop system on terminal exit
|
|
trap stop_system SIGHUP
|
|
;;
|
|
stop )
|
|
stop_system
|
|
trap '' SIGHUP
|
|
;;
|
|
esac
|
|
|
|
echo "Successful ${CMD}."
|
|
|