[yocto] [Toaster] Production Instance Setup

Rudolf J Streif rudolf.streif at gmail.com
Thu Jan 14 15:03:19 PST 2016


Hi Everyone:

I am trying to set up Toaster in a production environment with Apache etc. The web server setup is ok. It is running builds where I am currently stuck.

I am using the Jethro branch from the git repo.

According to step 7 in [1] one needs to start

/var/www/toaster/poky/bitbake/lib/toaster/manage.py runbuilds

to start the runner service to dispatch builds. If there are currently no pending builds (non yet created using the web UI) then running this command immediately returns. The command gets dispatched to

poky/bitbake/lib/toaster/bldcontrol/management/commands/runbuilds.py

In its command help it states:

14: help    = "Schedules and executes build requests as possible. Does not return (interrupt with Ctrl-C)"

However, that is apparently not the case because if there is not build request pending then

35:            try:
36:                # select the build environment and the request to build
37:               br = self._selectBuildRequest()
38:            except IndexError as e:
39:                logger.debug("runbuilds: No build request")
40:                return

If you use the web UI and schedule (start) a build first and then execute runbuilds, then the command eventually fails with:

2016-01-14 21:37:54,086 DEBUG lbc_shellcmmd: () git remote -v
Traceback (most recent call last):
  File "/var/www/toaster/poky/bitbake/lib/toaster/bldcontrol/management/commands/runbuilds.py", line 59, in schedule
    bec.triggerBuild(br.brbitbake_set.all(), br.brlayer_set.all(), br.brvariable_set.all(), br.brtarget_set.all())
  File "/var/www/toaster/poky/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py", line 365, in triggerBuild
    self.setLayers(bitbake, layers, targets)
  File "/var/www/toaster/poky/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py", line 229, in setLayers
    for remotes in self._shellcmd("git remote -v", self.be.sourcedir).split("\n"):
  File "/var/www/toaster/poky/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py", line 61, in _shellcmd
    p = subprocess.Popen(command, cwd = cwd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  File "/usr/lib64/python2.7/subprocess.py", line 710, in __init__
    errread, errwrite)
  File "/usr/lib64/python2.7/subprocess.py", line 1335, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory: ''

This is because the BuildEnvironment object in the database has empty fields for Sourcedir and Builddir. One can fix that by going into the Django admin interface and enter paths into these fields of the one BuildEnvironment object that is in the database.

Once the paths are entered and the build is started again then it breaks where runbuilds apparently waits for the Bitbake server to be available:

2016-01-14 22:14:54,565 DEBUG lbc_shellcmmd: (/home/fedora/source) bash -c "source /home/fedora/source/_toaster_clones/_git___git.yoctoproject.org_poky_master/oe-init-build-env /home/fedora/build 2>&1 >toaster_server.log && bitbake --read /home/fedora/build/conf/toaster-pre.conf --postread /home/fedora/build/conf/toaster.conf --server-only -t xmlrpc -B 0.0.0.0:0 2>&1 >>toaster_server.log "
2016-01-14 22:14:55,540 DEBUG localhostbecontroller: shellcmd success
2016-01-14 22:14:55,540 DEBUG localhostbecontroller: Found bitbake server port 33438

2016-01-14 22:14:55,543 DEBUG localhostbecontroller: Waiting bitbake server to start

... repeated 50 times ...

2016-01-14 22:15:20,595 ERROR runbuilds: Error launching build localhostbecontroller: Bitbake server did not start in 25 seconds, aborting (Error: '

That is in the file /var/www/toaster/poky/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py at lines:

    146         while not started and retries < 50:
    147             started = _toaster_ui_started(toaster_ui_log_filepath, toaster_ui_log_filelength)
    148             import time
    149             logger.debug("localhostbecontroller: Waiting bitbake server to start")
    150             time.sleep(0.5)
    151             retries += 1

The function _toaster_ui_started() that checks if Bitbake is running is defined as:

    133         def _toaster_ui_started(filepath, filepos = 0):
    134             if not os.path.exists(filepath):
    135                 return False
    136             with open(filepath, "r") as f:
    137                 f.seek(filepos)
    138                 for line in f:
    139                     if line.startswith("NOTE: ToasterUI waiting for events"):
    140                         return True
    141             return False
 
Apparently, it is looking for a line to start with the string "NOTE: ToasterUI waiting for events" in the file toaster_ui.log which is located inside the build environment that is initialized with oe-init-build-env. I grepped the Poky code base for that string and could not find any code module that ever writes that string into any file. What the file does contain though is a line that starts with "Bitbake server started", which looks rather reasonable for the purpose of checking whether the Bitbake server has been started. I am not sure why one would need to read a file to look for a specific string to check if the Bitbake server has been started, if just before localhostbecontroller states

2016-01-14 22:14:55,540 DEBUG localhostbecontroller: Found bitbake server port 33438

from reading the file toaster_server.log. Why not connect to the port and see if the Bitbake server is running?

Just for test purposes, I changed line 139 above to:

    139                     if line.startswith("Bitbake server started"):

in which case localhostbecontroller now continues with these messages:

2016-01-14 22:21:16,008 DEBUG localhostbecontroller: Waiting bitbake server to start
2016-01-14 22:21:16,509 DEBUG localhostbecontroller: Started bitbake server
2016-01-14 22:21:16,528 DEBUG localhostbecontroller: Build launched, exiting. Follow build logs at /home/fedora/build/toaster_ui.log

where it exits. However, there is no build running. Bitbake server just sits and waits.

I wonder if anyone has succeeded in making this work and can explain to me what I am missing?

Thank you,
Rudi




[1] http://www.yoctoproject.org/docs/2.0/mega-manual/mega-manual.html#toaster-installation-steps




More information about the yocto mailing list