aboutsummaryrefslogtreecommitdiffstats
path: root/bitbake/bin/toaster
blob: cc631f6f569d34c4dbd2866c03c0f7ade3927691 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#!/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
        if [ $retval -eq 1 ]; then
                echo "Failed db sync, stopping system start" 1>&2
        else
            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
}

# 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,4,5) == django.VERSION[0:3]" | python 2>/dev/null | grep True >/dev/null; then
    echo -e "This program needs Django 1.4.5. Please install with\n\nsudo pip install django==1.4.5"
    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 )
        webserverStartAll || return 4
        unset BBSERVER
        bitbake --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}."