<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.yoctoproject.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=David+Reyna</id>
	<title>Yocto Project - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.yoctoproject.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=David+Reyna"/>
	<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/Special:Contributions/David_Reyna"/>
	<updated>2026-04-05T18:25:46Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.5</generator>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=File:Toaster.sqlite&amp;diff=86722</id>
		<title>File:Toaster.sqlite</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=File:Toaster.sqlite&amp;diff=86722"/>
		<updated>2025-11-30T04:43:26Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: David Reyna uploaded a new version of File:Toaster.sqlite&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sample Toaster data for development purposes.&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=File:Toaster.sqlite&amp;diff=86721</id>
		<title>File:Toaster.sqlite</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=File:Toaster.sqlite&amp;diff=86721"/>
		<updated>2025-11-29T23:12:31Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: David Reyna uploaded a new version of File:Toaster.sqlite&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sample Toaster data for development purposes.&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Contribute_to_Toaster&amp;diff=86712</id>
		<title>Contribute to Toaster</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Contribute_to_Toaster&amp;diff=86712"/>
		<updated>2025-11-15T06:17:44Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Toaster]]&lt;br /&gt;
This page summarises the Toaster development process. We hope this will help you start contributing to the project. We were previously using a process that involved the toaster-next branch on poky-contrib.  This workflow was especially useful in an environment where Toaster was undergoing a lot of change and needed the ability to layer patch sets upon each other before they had been taken up by bitbake.  Since that is not currently the case, toaster-next just adds complication; so it has been removed from this workflow.  See [[Contribute to Toaster (toaster-next version)]] for the old toaster-next based workflow.&lt;br /&gt;
&lt;br /&gt;
== What can I do? ==&lt;br /&gt;
&lt;br /&gt;
The [https://bugzilla.yoctoproject.org/buglist.cgi?product=Toaster Yocto Project Bugzilla instance] lists all the things that need to be done:&lt;br /&gt;
&lt;br /&gt;
* If the issue says &amp;lt;strong&amp;gt;GUI design available&amp;lt;/strong&amp;gt; in the Whiteboard field, there is a design specification document attached to the issue that you should follow. Send questions / comments about it to the [https://lists.yoctoproject.org/listinfo/toaster Toaster mailing list]&lt;br /&gt;
* If the issue says &amp;lt;strong&amp;gt;GUI design pending&amp;lt;/strong&amp;gt; in the Whiteboard field, there is some design work still to be done. Feel free to take the issue and send an email to the [https://lists.yoctoproject.org/listinfo/toaster Toaster mailing list] to find out why the design work is not done yet&lt;br /&gt;
&lt;br /&gt;
== Set up the local repository ==&lt;br /&gt;
&lt;br /&gt;
For development of Toaster we recommend setting up a local install of Toaster. Installation instructions are available in the main [https://docs.yoctoproject.org/toaster-manual/index.html Toaster documentation]&lt;br /&gt;
&lt;br /&gt;
== Submitting patches (bitbake-setup) ==&lt;br /&gt;
&lt;br /&gt;
Toaster code lives in Bitbake repository at [http://git.openembedded.org/bitbake/|http://git.openembedded.org/bitbake/].&lt;br /&gt;
All contributions must be upstreamed to the Bitbake repository in order to make it to the &amp;quot;master&amp;quot; branch of the poky/ repository.&lt;br /&gt;
&lt;br /&gt;
=== Workflow ===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
1) Download master branch of the yocto project&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ git clone https://git.openembedded.org/bitbake/&lt;br /&gt;
  $ ./bitbake/bin/bitbake-setup settings set global top-dir-prefix $PWD&lt;br /&gt;
  $ ./bitbake/bin/bitbake-setup init --non-interactive poky-master poky distro/poky machine/qemux86-64&lt;br /&gt;
  $ cd bitbake-builds/poky-master-poky-distro_poky-machine_qemux86-64&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
2) Start your feature branch off of master, name style of branch is convention, but suggested. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ cd layers/bitbake &lt;br /&gt;
  $ git checkout -b username/toaster/FeatureOrBug origin/master&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
3) Do Work&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
4) Rebase on master. It has probably changed while you were working (unless you are really really fast!)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ git rebase origin/master&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
5) Create your commit&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;strong&amp;gt;NOTE:&amp;lt;/strong&amp;gt; The format of the commit message should be like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  toaster: &amp;lt;module&amp;gt; &amp;lt;short one line summary&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  long(er) description&lt;br /&gt;
&lt;br /&gt;
  [YOCTO #0000]&lt;br /&gt;
&lt;br /&gt;
  Signed-off-by: First Last &amp;lt;name@domain.com&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where YOCTO #0000 is the related bug number if there is one. Signed off by with your git commit -s credentials.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
6) Prepare your patch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
$ git format-patch -1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Submitting patch for integration into Bitbake ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Email list:&amp;lt;/strong&amp;gt; bitbake-devel@lists.openembedded.org&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;strong&amp;gt;NOTE:&amp;lt;/strong&amp;gt; For the email&#039;s subject line, prepend &amp;quot;[bitbake-devel]&amp;quot; to the patch&#039;s subject line&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  TO     : bitbake-devel@lists.openembedded.org&lt;br /&gt;
  SUBJECT: [bitbake-devel][PATCH] toaster: support bitbake-setup&lt;br /&gt;
  CONTENT:&lt;br /&gt;
  From c063178ab0971fe297a9e9bca6e6b04eafc5149c Mon Sep 17 00:00:00 2001&lt;br /&gt;
  From: David Reyna &amp;lt;David.Reyna@windriver.com&amp;gt;&lt;br /&gt;
  Date: Thu, 30 Oct 2025 14:03:35 -0700&lt;br /&gt;
  Subject: [PATCH] toaster: support bitbake-setup&lt;br /&gt;
&lt;br /&gt;
      This adds support for the new bitbake-setup&lt;br /&gt;
  &amp;lt;&amp;lt;&amp;lt;CUT&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
      [YOCTO #16012]&lt;br /&gt;
&lt;br /&gt;
  Signed-off-by: David Reyna &amp;lt;David.Reyna@windriver.com&amp;gt;&lt;br /&gt;
  ---&lt;br /&gt;
   bin/toaster                                   | 21 ++--&lt;br /&gt;
   .../bldcontrol/localhostbecontroller.py       | 99 +++++++++++&lt;br /&gt;
  &amp;lt;&amp;lt;&amp;lt;CUT&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Submitting patches (Poky Classic, OBSOLETE) ==&lt;br /&gt;
&lt;br /&gt;
Publishing your patches to Toaster is a two step process.&lt;br /&gt;
# Sending patches to the [https://lists.yoctoproject.org/listinfo/toaster/| Toaster mailing list] for review&lt;br /&gt;
# Submitting the patches that you reviewed to the upstream repository&lt;br /&gt;
&lt;br /&gt;
By submitting your patches first to the Toaster mailing list, you can be sure the patches are reviewed by the people in the community who are familiar with the Toaster source code, and who have experience developing web applications.&lt;br /&gt;
&lt;br /&gt;
That also means that, by the time the patches are submitted to the upstream mailing lists, they are in pretty good shape. That helps the project maintainers, and hopefully also helps you.&lt;br /&gt;
&lt;br /&gt;
Toaster code lives in Bitbake repository at [http://git.openembedded.org/bitbake/|http://git.openembedded.org/bitbake/].&lt;br /&gt;
All contributions must be upstreamed to the Bitbake repository in order to make it to the &amp;quot;master&amp;quot; branch of the poky/ repository.&lt;br /&gt;
&lt;br /&gt;
=== Workflow ===&lt;br /&gt;
To contribute to toaster you will also need authorization to write to the upstream yocto project repository.  Contact a member of the toaster team for details.&lt;br /&gt;
&lt;br /&gt;
1) Download master branch of the yocto project&lt;br /&gt;
  &amp;lt;code&amp;gt; git clone git://git.yoctoproject.org/poky &amp;amp;&amp;amp; cd poky &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) Add poky-contrib to the local repository you set up above&lt;br /&gt;
  &amp;lt;code&amp;gt; git remote add poky-contrib ssh://git@push.yoctoproject.org/poky-contrib &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Fetch the poky-contrib branches&lt;br /&gt;
  &amp;lt;code&amp;gt; git fetch --all &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4) Start your feature branch off of master, name style of branch is convention, but suggested. &lt;br /&gt;
  &amp;lt;code&amp;gt; git checkout -b username/toaster/FeatureOrBug origin/master &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5) Do Work &lt;br /&gt;
&lt;br /&gt;
6) Test the changes. Run the Django unit tests. People put effort into these so we should make sure we use them.  This assumes you have phantomjs installed.  This can usually be done from the distribution &amp;lt;code&amp;gt; apt-get install phantomjs&amp;lt;/code&amp;gt;,  for example.  If you want to test against Chrome or Firefox, see the README in bitbake/lib/toaster/tests/browser.  &lt;br /&gt;
  &amp;lt;code&amp;gt; pip3 install selenium &amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt;TOASTER_TESTS_BROWSER=phantomjs bitbake/lib/toaster/manage.py test orm toastergui tests.browser &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Note: If you would like to run the tests in a container so they are repeatable and do not continually break due to host upgrades see [[Running Toaster Tests with Containers]]&lt;br /&gt;
&lt;br /&gt;
7) Rebase on master. It has probably changed while you were working (unless you are really really fast!)&lt;br /&gt;
  &amp;lt;code&amp;gt; git rebase origin/master &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8) Push your feature branch to poky-contrib&lt;br /&gt;
 &amp;lt;code&amp;gt; git push -u poky-contrib username/toaster/FeatureOrBug:username/toaster/FeatureOrBug&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
9) Send to the toaster-mailing list using one of the methods outlined below.&lt;br /&gt;
&lt;br /&gt;
10) NOTE: when the patch has been accepted upstream, you can clean up your poy-contrib branch with:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;code&amp;gt; git push -u poky-contrib :username/toaster/FeatureOrBug &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sending patches to Toaster Project ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;NOTE:&amp;lt;/strong&amp;gt; The format of the commit message should be like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    toaster: &amp;lt;module&amp;gt; &amp;lt;short one line summary&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    long(er) description&lt;br /&gt;
&lt;br /&gt;
    [YOCTO #0000]&lt;br /&gt;
&lt;br /&gt;
    Signed-off-by: First Last &amp;lt;name@domain.com&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where YOCTO #0000 is the related bug number if there is one. Signed off by with your git commit -s credentials.&lt;br /&gt;
&lt;br /&gt;
We accept patches on the [https://www.yoctoproject.org/tools-resources/community/mailing-lists toaster mailing list] ( toaster@yoctoproject.org ) by &amp;quot;git send-email&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
e.g.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ git send-email HEAD^ &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can use the utilities in the script directory to prepare your patch&lt;br /&gt;
&lt;br /&gt;
1) Use the create-pull-request script (from poky) to create a pull request while on your feature branch&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/create-pull-request -s &amp;quot;toaster: Fixes and clean ups&amp;quot; -u poky-contrib -r  origin/master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) Review their content, especially the summary mail:&lt;br /&gt;
   &amp;lt;code&amp;gt;edit ./pull-&amp;lt;pid&amp;gt;/0000-cover-letter.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3)When you are satisfied, you can send them with:&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/send-pull-request -a -p ./pull-&amp;lt;pid&amp;gt;&amp;lt;/code&amp;gt; -t toaster@yoctoproject.org&lt;br /&gt;
&lt;br /&gt;
A comprehensive document about commit messages is available on the [http://www.openembedded.org/wiki/Commit_Patch_Message_Guidelines openembedded wiki]&lt;br /&gt;
&lt;br /&gt;
More help learning git is available on [https://try.github.io github] and [http://git-scm.com/documentation/ the official documentation]&lt;br /&gt;
&lt;br /&gt;
=== Sending branches to Toaster Project ===&lt;br /&gt;
&lt;br /&gt;
If you wish to submit whole branches please use the poky-contrib repository see [[Poky Contributions#Poky_Contrib_Branch]] for setup guide.&lt;br /&gt;
&lt;br /&gt;
Once you have pushed a branch please then send an email to the [https://www.yoctoproject.org/tools-resources/community/mailing-lists toaster mailing list] with the subject in the following format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 [review-request] my_branch_name&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the body of the email it&#039;s useful to describe your branch&#039;s functionality, which commits and a link to the git web.&lt;br /&gt;
&lt;br /&gt;
If you need any assistance please post on the mailing list.&lt;br /&gt;
&lt;br /&gt;
=== Submitting patch sets for integration into Bitbake ===&lt;br /&gt;
&lt;br /&gt;
Toaster patches are normally submitted upstream to the BitBake repository by the reviewer (not the author). This tells the upstream maintainers that the patches have been reviewed by the people who are familiar with the Toaster source code, and makes their busy lives a bit easier.&lt;br /&gt;
&lt;br /&gt;
Since development happens on the poky-contrib repository, but the patches need to be merged to the Bitbake repository, the following process should be executed.&lt;br /&gt;
&lt;br /&gt;
1) Bring master up to date&lt;br /&gt;
  &amp;lt;code&amp;gt; git fetch origin master&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt; git checkout master &amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt; git pull [master] &amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
2) Checkout the target branch you wish to upstream&lt;br /&gt;
&lt;br /&gt;
(a) If you are working with a single branch do this:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;code&amp;gt;git checkout username/toaster/FeatureOrBug&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(b) If you are including several branches into this one submission, gather the commit IDs for each branch and do this:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;code&amp;gt;git cherry-pick commit-id-a &amp;lt;/code&amp;gt;&lt;br /&gt;
   &amp;lt;code&amp;gt;git cherry-pick commit-id-b &amp;lt;/code&amp;gt;&lt;br /&gt;
   &amp;lt;code&amp;gt;... &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Create a new branch for submission &lt;br /&gt;
   &amp;lt;code&amp;gt; git checkout -b yourname/submit/username/toaster/FeatureOrBug &amp;lt;/code&amp;gt;&lt;br /&gt;
This will look something like&lt;br /&gt;
   &amp;lt;code&amp;gt; git checkout -b bavery/submit/bob/toaster/FixBug1234 &amp;lt;/code&amp;gt;&lt;br /&gt;
where bavery is signing off on and upstreaming bob&#039;s fix to the Yocto Bugzilla bug 1234.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
---- &lt;br /&gt;
* Alternatively, you can use the patchworks web site:&lt;br /&gt;
  2)  Create a new branch for submission &lt;br /&gt;
   &amp;lt;code&amp;gt; git checkout -b yourname/submit/username/toaster/FeatureOrBug &amp;lt;/code&amp;gt;&lt;br /&gt;
This will look something like&lt;br /&gt;
   &amp;lt;code&amp;gt; git checkout -b bavery/submit/bob/toaster/FixBug1234 &amp;lt;/code&amp;gt;&lt;br /&gt;
where bavery is signing off on and upstreaming bob&#039;s fix to the Yocto Bugzilla bug 1234.&lt;br /&gt;
  3)  Download and apply the mbox patch from the website: https://patchwork.openembedded.org/project/toaster/patches/&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;code&amp;gt; git am -s the-downloaded-patch.mbox &amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
4) Make sure the branch is rebased on current master. &lt;br /&gt;
   &amp;lt;code&amp;gt;git rebase origin/master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5) Test the changes. Run the Django unit tests.  People put effort into these so we should make sure we use them. his assumes you have phantomjs installed.  This can usually be done from the distribution &amp;lt;code&amp;gt; apt-get install phantomjs&amp;lt;/code&amp;gt;,  for example.  If you want to test against Chrome or Firefox, see the README in bitbake/lib/toaster/tests/browser.&lt;br /&gt;
  &amp;lt;code&amp;gt; pip3 install selenium &amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt;TOASTER_TESTS_BROWSER=phantomjs bitbake/lib/toaster/manage.py test orm toastergui tests.browser &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6) Add signed off by to the commit messages (Note: If you applied the mbox patch with &amp;lt;code&amp;gt; git am -s foo.mbox&amp;lt;/code&amp;gt; You do not need to sign off again.)&lt;br /&gt;
   &amp;lt;code&amp;gt;git filter-branch -f --msg-filter &#039;cat &amp;amp;&amp;amp; echo &amp;quot;Signed-off-by: $(git config --get user.name) &amp;lt;$(git config --get user.email)&amp;gt;&amp;quot;&#039; master..HEAD&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7) Push the modified commit messages and rebased version to poky-contrib&lt;br /&gt;
   &amp;lt;code&amp;gt;git push -u poky-contrib yourname/submit/username/toaster/FeatureOrBug  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8) Use the create-pull-request script (from poky) to create a pull request for the appropriate tree/mailing list&lt;br /&gt;
&lt;br /&gt;
(a) For the &#039;bitbake&#039; tree (e.g. bitbake/.../toasterui.py, bitbake/.../toastergui/*):&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/create-pull-request -d bitbake -s &amp;quot;toaster: Fixes and clean ups&amp;quot; -u poky-contrib -r origin/master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(b) for the &#039;meta&#039; tree (e.g. meta/classes/toaster.class):&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/create-pull-request -d meta -s &amp;quot;toaster: Fixes and clean ups&amp;quot; -u poky-contrib -r origin/master&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;strong&amp;gt;Note: If the patch creates any NEW files, the integration scripts that pull it into bitbake will fail. So, if new files are created as part of this patch set, you need to explicitly point that out in the body of the email for the patch set or do it as a PR rather than as a patch set.&lt;br /&gt;
&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
9) Review their content, especially the summary mail:&lt;br /&gt;
   &amp;lt;code&amp;gt;edit ./pull-&amp;lt;pid&amp;gt;/0000-cover-letter.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
10) When you are satisfied, you can send them with:&lt;br /&gt;
   --- for the &#039;bitbake&#039; tree:&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/send-pull-request -a -p ./pull-&amp;lt;pid&amp;gt;&amp;lt;/code&amp;gt; -t bitbake-devel@lists.openembedded.org&lt;br /&gt;
   --- for the &#039;meta&#039; tree:&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/send-pull-request -a -p ./pull-&amp;lt;pid&amp;gt;&amp;lt;/code&amp;gt; -t openembedded-core@lists.openembedded.org&lt;br /&gt;
&lt;br /&gt;
==== Submitting patches for prior releases ====&lt;br /&gt;
&lt;br /&gt;
The procedure is the same, but using the prior release as the base branch instead of the &amp;quot;master&amp;quot; branch in bitbake.&lt;br /&gt;
&lt;br /&gt;
Also, make sure that you add the name of the prior release for which the patchset is intended in the prefix of the patchset, as parameter to the &amp;quot;create-pull-request&amp;quot; command, e.g. &#039;&#039;&#039;-p 1.26&#039;&#039;&#039; for the 1.26 branch.&lt;br /&gt;
&lt;br /&gt;
==== Gotchas ====&lt;br /&gt;
===== Too Big =====&lt;br /&gt;
Sometimes the mailer will refuse to send patches, especially on binary or long-line files. The proper way to go around that is to reply to the patchset you&#039;ve submitted to the mailing list, asking for a git pull directly from the poky-contrib branch.&lt;br /&gt;
===== One Patch of a Long Patch Set Needs Resubmission =====&lt;br /&gt;
Suppose you upstream a 10 commit patch set to the bitbake-devel list and someone finds an issue with patch #3.  Regenerating the whole series is silly so how do you address this?  First, follow the bitbake submission steps until you end up on the yourname/submit/the/target/branch  branch.  Then you can (note &amp;lt;strong&amp;gt;the reset --hard will wipe any local changes in your working dir so commit or stash first&amp;lt;/strong&amp;gt;):&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  git checkout -b yourname/submit/the/target/branch-newHEAD&lt;br /&gt;
  git reset --hard &amp;lt;commit of resubmission issue&amp;gt; &lt;br /&gt;
  git commit --amend --signoff &lt;br /&gt;
  git send-email --in-reply-to=&amp;quot;longNumber.git.me@mycomp.com&amp;quot; --subject-prefix=&amp;quot;bitbake-devel] [PATCHVX 03/10&amp;quot;  --to=bitbake-devel@lists.openembedded.org --no-chain-reply-to --suppress-cc=all -M -1 --relative=bitbake&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The longNumber.git.me@mycomp.com comes from the email message id for the particular patch #3 so that the email threading works. In gmail, you can click on the dropdown button on the right side of the screen and choose &amp;quot;Show Original&amp;quot;.  This will have a field in the header like Message-Id: &amp;lt;4551b56f132497c055f39567946a5d3be347d770.1468363530.git.myemailusername@mycompany.com&amp;gt;  The entire string except the &#039;&amp;lt;&amp;gt;&#039; are used.  for example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  --in-reply-to=&amp;quot;4551b56f132497c055f39567946a5d3be347d770.1468363530.git.myemailusername@mycompany.com&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first issue you are likely to face is that the git filter-branch command in the standard instructions may sign off on too many commits.  If you know you just want to sign off on the last 7 commits on the yourname/submit/the/target/branch you can:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  git filter-branch -f --msg-filter &#039;cat &amp;amp;&amp;amp; echo &amp;quot;Signed-off-by: $(git config --get user.name) &amp;lt;$(git config --get user.email)&amp;gt;&amp;quot;&#039; HEAD~7..HEAD&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Submitting patches for documentation ===&lt;br /&gt;
&lt;br /&gt;
Documentation patches should be sent to [https://lists.yoctoproject.org/listinfo/yocto Yocto mailing list] with [yocto-docs] in the subject, CC Scott Rifenbark (and make sure you send it to his gmail, not his defunct Intel address). For his email address, look at [http://lists.openembedded.org/pipermail/bitbake-devel/2015-October/006632.html this post].&lt;br /&gt;
&lt;br /&gt;
== Code syle guide ==&lt;br /&gt;
&lt;br /&gt;
=== Templates ===&lt;br /&gt;
&lt;br /&gt;
Django has a template language which allows us to render pages based on the data (context). We use the template language to setup the initial state of the page and to create re-usable components that can be included in other pages.&lt;br /&gt;
&lt;br /&gt;
The recommend template code style is as follows&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Yes please:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{var}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
  {# Maintaining indentation #}&lt;br /&gt;
  {% if %}&lt;br /&gt;
   &amp;lt;p&amp;gt;this&amp;lt;/p&amp;gt;&lt;br /&gt;
  {% else %}&lt;br /&gt;
   &amp;lt;p&amp;gt;that&amp;lt;/p&amp;gt;&lt;br /&gt;
  {% endif %}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{% comment %}&lt;br /&gt;
This is a longer comment that describes all the things&lt;br /&gt;
that are below in quite a bit of detail because they&#039;re&lt;br /&gt;
a little more difficult to understand.&lt;br /&gt;
{% endcomment %}&lt;br /&gt;
&lt;br /&gt;
{% for layer in layers_list %}&lt;br /&gt;
 {{layer}}&lt;br /&gt;
{% endfor %}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No thank you:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{var}}&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
{# Maintaining indentation #}&lt;br /&gt;
{%if%}&amp;lt;p&amp;gt;this&amp;lt;/p&amp;gt;{%else%}&amp;lt;p&amp;gt;that&amp;lt;/p&amp;gt;{%endif%}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{#This is a longer comment that describes all the things that are below in quite a bit of detail because they&#039;re a little more difficult to understand. #}&lt;br /&gt;
{%for o in layers_list%}{{o}}{%endfor%}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* Maintain indentation as you would with other languages&lt;br /&gt;
* White space after &#039;%&#039;&lt;br /&gt;
* Comment blocks for longer comments&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Javascript ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Yes please:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;use strict&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* These hold some numbers */&lt;br /&gt;
var oneVar = 1;&lt;br /&gt;
var twoVar = 2;&lt;br /&gt;
&lt;br /&gt;
var cheesesTypes = {&lt;br /&gt;
  cheddar : 1,&lt;br /&gt;
  stilton : 2,&lt;br /&gt;
  emmental : 3, &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function doThingsHere(){&lt;br /&gt;
  return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* If one equals two do some other things and make sure that&lt;br /&gt;
 * if the the click handler is setup correctly.&lt;br /&gt;
 */&lt;br /&gt;
if (one === two) {&lt;br /&gt;
  var cheese = &amp;quot;cheddar&amp;quot;;&lt;br /&gt;
  oneVar = doThingsHere();&lt;br /&gt;
&lt;br /&gt;
  $(this).click(function (event){&lt;br /&gt;
    alert(&amp;quot;Hello&amp;quot;);&lt;br /&gt;
  });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$(&amp;quot;#little-mouse&amp;quot;).focusout(function(){&lt;br /&gt;
  alert(&amp;quot;bye&amp;quot;)&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
if (oneVar)&lt;br /&gt;
  noThingHere();&lt;br /&gt;
else&lt;br /&gt;
  doThingHere();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No thank you:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// These hold some numbers&lt;br /&gt;
oneVar = 1&lt;br /&gt;
twoVar = 2&lt;br /&gt;
&lt;br /&gt;
var cheesesTypes = { cheddar : 1, stilton : 2,  emmental : 3, }&lt;br /&gt;
&lt;br /&gt;
function doThingsHere ()&lt;br /&gt;
{&lt;br /&gt;
return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//If one equals two do some other things and make sure that if the the click handler is setup correctly.&lt;br /&gt;
if( one === two ) {&lt;br /&gt;
var cheese = &amp;quot;cheddar&amp;quot;;&lt;br /&gt;
oneVar = doThingsHere();&lt;br /&gt;
&lt;br /&gt;
    $(this).click(function(event){ alert(&amp;quot;Hello&amp;quot;); });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
document.getElementById(&amp;quot;little-mouse&amp;quot;).addEventListener(&amp;quot;focusout&amp;quot;, function(){&lt;br /&gt;
  alert(&amp;quot;bye&amp;quot;)&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
if (oneVar)&lt;br /&gt;
{&lt;br /&gt;
  noThingHere();&lt;br /&gt;
} else {  doThingHere(); }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* Variables should be marked with &amp;quot;var&amp;quot; &lt;br /&gt;
* Semicolons should be used&lt;br /&gt;
* Keep as close to 80 cols as possible&lt;br /&gt;
* Use 2 space per indentation&lt;br /&gt;
* Open curly braces after parenthesis for functions and close on a new line&lt;br /&gt;
* Use camelCase for function names and variable names &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make use of running your Javascript through jshint we have a .jshint configuration file in that js directory (toastergui/static/js)&lt;br /&gt;
&lt;br /&gt;
e.g. install jshint and add to your current PATH, then run:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ npm install jshint; export PATH=$PATH:$PWD/node_modules/.bin/&lt;br /&gt;
 $ jshint ./toastergui/static/js/base.js&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Yes please:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;something-area&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p class=&amp;quot;important&amp;quot;&amp;gt;This is some text&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
  &amp;lt;p id=&amp;quot;important-text&amp;gt;This is some text&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No thank you:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;somethingarea&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p class=&amp;quot;Important&amp;quot;&amp;gt;This is some text&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;somethingarea&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p id=&amp;quot;ImportantText&amp;quot;&amp;gt;This is&lt;br /&gt;
some text&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* 2 space indentation&lt;br /&gt;
* Lower case, ids hyphenated when multiple words&lt;br /&gt;
* No duplicate ids &lt;br /&gt;
&lt;br /&gt;
* Run your HTML through a [http://validator.w3.org/#validate_by_input HTML validator] available for [http://validator.w3.org/source/ local install]. The w3c validator it&#039;s self doesn&#039;t currently validate html5, it uses as a back end [https://validator.github.io/validator/ Nu Html Checker] which can be installed as a standalone service, full instructions in the readme.&lt;br /&gt;
&lt;br /&gt;
Quick install instructions:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $ mkdir html5-validator &amp;amp;&amp;amp; cd html5-validator&lt;br /&gt;
 $ export JAVA_HOME=/usr/lib/jvm/java-6-openjdk&lt;br /&gt;
 $ git clone https://github.com/validator/validator.git&lt;br /&gt;
 $ python build/build.py all&lt;br /&gt;
 $ python build/build.py all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HTML can be indented quickly using tidy, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 tidy -xml --indent auto --indent-spaces 2 --quiet yes -w -1 --show-body-only yes  ./index.html &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
Lenient [https://www.python.org/dev/peps/pep-0008 pep8]&lt;br /&gt;
Ignoring most of the whitespace around character issues (E124,E203,E201,E265,E303,E302,E231) see toaster/.pep8 and [http://pep8.readthedocs.org/en/latest/intro.html#error-codes error code list]&lt;br /&gt;
&lt;br /&gt;
Fix all issues identified by running code through pep8. We have a fairly lenient config file (toaster/.pep8).&lt;br /&gt;
&lt;br /&gt;
e.g.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ pep8 ./toastergui/urls.py&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run code through pylint and fix identified issues - Some can be reasonably ignored such as doc strings for every function or star-args. No pylintrc config provided here as most issues identified are highly contextual and should be ignored on a case by case basis.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ pylint --load-plugins pylint_django toastergui/tests.py&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Working with design ==&lt;br /&gt;
&lt;br /&gt;
Yes, the Yocto Project is one of those lucky projects with designers around to help in UI matters. We have a document explaining how to work with the design contributors: [[File:Working_with_design.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Debugging Toaster ==&lt;br /&gt;
&lt;br /&gt;
Toaster can be quite complex given that it includes a wide range of technologies and languages from bitbake, events, python, Django, Sqlite, Javescript, CCS, HTML, and more. Here are hints and tips for debugging all of these aspects of Toaster.&lt;br /&gt;
&lt;br /&gt;
=== General debugging tips ===&lt;br /&gt;
&lt;br /&gt;
* The logger is your best friend&lt;br /&gt;
* When possible, build from command line in the Toaster environment to see log messages and errors directly&lt;br /&gt;
* Use &amp;quot;quilt-native&amp;quot; as your quick sanity build target&lt;br /&gt;
* For python code you can use pudb (https://wiki.yoctoproject.org/wiki/TipsAndTricks/DebuggingBitbakeInPudb)&lt;br /&gt;
* For bbclass code (toaster.bbclass) find or set up a python section to use pudb (see above link)&lt;br /&gt;
* Brute force find is your friend for mysterious error messages and tracking all places a variable is used&lt;br /&gt;
**  find bitbake/lib/toaster -exec grep -l  &amp;quot;SEARCH_TEXT&amp;quot; {} \; 2&amp;gt; /dev/null&lt;br /&gt;
* Look in https://wiki.yoctoproject.org/wiki/TipsAndTricks&lt;br /&gt;
&lt;br /&gt;
=== How to debug a ... ===&lt;br /&gt;
&lt;br /&gt;
* A stalled build:&lt;br /&gt;
** Cancel the build and look at one of the below logs to find the exception. The error message should give a clue on the user resolution or indicate a bug to file&lt;br /&gt;
** Failures in git and shell calls are (as of YP-2.4 Rocko) captured as visible build errors in the GUI&lt;br /&gt;
* Python file of a build management script (localhostbecontroller.py,...):&lt;br /&gt;
** Use log statements, and watch &amp;quot;build/toaster_runbuilds.log&amp;quot; (where you started Toaster)&lt;br /&gt;
* Python file of a build runtime scripts:&lt;br /&gt;
** Use log statements, and watch &amp;quot;build-toaster-x/toaster_ui.log&amp;quot;&lt;br /&gt;
* Python file of a Toaster management script (projects, tables):&lt;br /&gt;
** Use log statements, and watch &amp;quot;build/toaster_web.log&amp;quot; (where you started Toaster)&lt;br /&gt;
* Template file&lt;br /&gt;
** Usually the error will appear in the browser via Django, with a trace&lt;br /&gt;
** Add random display text to insure the page your editing is the one that shows&lt;br /&gt;
** Display internal values via page template to see what gets passed&lt;br /&gt;
** Add internal values into the context and add to the page template&lt;br /&gt;
** Use the Firefox/Chrome developer &amp;quot;inspector&amp;quot; to examine the DOM&lt;br /&gt;
* Javascript file&lt;br /&gt;
** Use the Firefox/Chrome developer &amp;quot;inspector&amp;quot; to do inline debugging&lt;br /&gt;
** Watch the Firefox/Chrome developer &amp;quot;console&amp;quot; for error messages&lt;br /&gt;
* The Toaster Database&lt;br /&gt;
** Use an application like &amp;quot;sqlitebrowser&amp;quot; to examine the tables and records&lt;br /&gt;
** Use a Python script to find and dump desired database records (see http://events.linuxfoundation.org/sites/events/files/slides/BitbakeAnalytics_ELC_Portland.pdf)&lt;br /&gt;
&lt;br /&gt;
=== Specific error scenarios ... ===&lt;br /&gt;
&lt;br /&gt;
* The build progress gets stuck at &amp;quot;Loading...&amp;quot;&lt;br /&gt;
** You have a syntax error, either in &#039;localhostbecontroller.py&#039;, the helper classes in &#039;models.py&#039;, or in the related javascript. Look at the tail of &amp;quot;toaster_runbuilds.log&amp;quot; file for pythons errors, and in your browser&#039;s &amp;quot;Console&amp;quot; for javascript errors.&lt;br /&gt;
* The message &amp;quot;Sorry, An error has occurred loading this page&amp;quot;&lt;br /&gt;
** The included javascript has a syntax error. The HTML page being rendered has local JS code at the top that caches these errors and displays the observed message (in order to be less ugly to the customer). That code also tries to add the error message to the browser console but that does not always work, and you are left with no clue&lt;br /&gt;
** You can start bisecting the recent edits you made to the respective JS files to locate the problem change&lt;br /&gt;
** You can also add a breakpoint in the mentioned catch code to see if you can see the error directly&lt;br /&gt;
&lt;br /&gt;
=== How to update from a fix in a ... ===&lt;br /&gt;
&lt;br /&gt;
* Template file: save your text edit and refresh page&lt;br /&gt;
* Javascript file: save your text edit and refresh page (or leave page and come back)&lt;br /&gt;
* Builder scripts: save your text edit and restart Toaster (&amp;quot;localhostbecontroller.py&amp;quot;, &amp;quot;buildinfohelper.py&amp;quot;, &amp;quot;toasterui.py&amp;quot;, &amp;quot;bbcontroller.py&amp;quot;,...)&lt;br /&gt;
* Views and URLs: save your text edit and refresh page&lt;br /&gt;
* Model class members: save your text edit and restart Toaster. You may also need a migration file.&lt;br /&gt;
* Model method: save your text edit and refresh page, else restart Toaster&lt;br /&gt;
* Fixture file (settings.xml, poky.xml, custom.xml): delete Toaster database and restart fresh&lt;br /&gt;
&lt;br /&gt;
=== Where to debug ... ===&lt;br /&gt;
&lt;br /&gt;
* Toaster start and stop, database init&lt;br /&gt;
** bin/toaster&lt;br /&gt;
* Project Defaults (Default machine, distro, layers, ...)&lt;br /&gt;
** bldcontrol/management/commands/checksettings.py&lt;br /&gt;
** orm/fixtures/*.xml&lt;br /&gt;
* Layer Index content (Available machines, distros, layers, ...)&lt;br /&gt;
** orm/management/commands/lsupdates.py&lt;br /&gt;
* Build cloning&lt;br /&gt;
** bldcontrol/localhostbecontroller.py&lt;br /&gt;
* Build start&lt;br /&gt;
** bldcontrol/localhostbecontroller.py&lt;br /&gt;
* URL mappings&lt;br /&gt;
** toastergui/urls.py&lt;br /&gt;
* Views&lt;br /&gt;
** toastergui/views.py&lt;br /&gt;
** toastergui/templates/*&lt;br /&gt;
* Toaster Tables (Layers, Distros, Machines, ...)&lt;br /&gt;
** toastergui/tables.py&lt;br /&gt;
** toastergui/static/js/libtoaster.js&lt;br /&gt;
* Events&lt;br /&gt;
** meta/classes/toaster.bbclass -&amp;gt; &lt;br /&gt;
** lib/bb/ui/toasterui.py -&amp;gt; &lt;br /&gt;
** lib/bb/ui/buildinfohelper.py -&amp;gt; &lt;br /&gt;
** orm/models.py et. al.&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Contribute_to_Toaster&amp;diff=86711</id>
		<title>Contribute to Toaster</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Contribute_to_Toaster&amp;diff=86711"/>
		<updated>2025-11-15T06:08:38Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Toaster]]&lt;br /&gt;
This page summarises the Toaster development process. We hope this will help you start contributing to the project. We were previously using a process that involved the toaster-next branch on poky-contrib.  This workflow was especially useful in an environment where Toaster was undergoing a lot of change and needed the ability to layer patch sets upon each other before they had been taken up by bitbake.  Since that is not currently the case, toaster-next just adds complication; so it has been removed from this workflow.  See [[Contribute to Toaster (toaster-next version)]] for the old toaster-next based workflow.&lt;br /&gt;
&lt;br /&gt;
== What can I do? ==&lt;br /&gt;
&lt;br /&gt;
The [https://bugzilla.yoctoproject.org/buglist.cgi?product=Toaster Yocto Project Bugzilla instance] lists all the things that need to be done:&lt;br /&gt;
&lt;br /&gt;
* If the issue says &amp;lt;strong&amp;gt;GUI design available&amp;lt;/strong&amp;gt; in the Whiteboard field, there is a design specification document attached to the issue that you should follow. Send questions / comments about it to the [https://lists.yoctoproject.org/listinfo/toaster Toaster mailing list]&lt;br /&gt;
* If the issue says &amp;lt;strong&amp;gt;GUI design pending&amp;lt;/strong&amp;gt; in the Whiteboard field, there is some design work still to be done. Feel free to take the issue and send an email to the [https://lists.yoctoproject.org/listinfo/toaster Toaster mailing list] to find out why the design work is not done yet&lt;br /&gt;
&lt;br /&gt;
== Set up the local repository ==&lt;br /&gt;
&lt;br /&gt;
For development of Toaster we recommend setting up a local install of Toaster. Installation instructions are available in the main [https://docs.yoctoproject.org/toaster-manual/index.html Toaster documentation]&lt;br /&gt;
&lt;br /&gt;
== Submitting patches ==&lt;br /&gt;
&lt;br /&gt;
Publishing your patches to Toaster is a two step process.&lt;br /&gt;
# Sending patches to the [https://lists.yoctoproject.org/listinfo/toaster/| Toaster mailing list] for review&lt;br /&gt;
# Submitting the patches that you reviewed to the upstream repository&lt;br /&gt;
&lt;br /&gt;
By submitting your patches first to the Toaster mailing list, you can be sure the patches are reviewed by the people in the community who are familiar with the Toaster source code, and who have experience developing web applications.&lt;br /&gt;
&lt;br /&gt;
That also means that, by the time the patches are submitted to the upstream mailing lists, they are in pretty good shape. That helps the project maintainers, and hopefully also helps you.&lt;br /&gt;
&lt;br /&gt;
Toaster code lives in Bitbake repository at [http://git.openembedded.org/bitbake/|http://git.openembedded.org/bitbake/].&lt;br /&gt;
All contributions must be upstreamed to the Bitbake repository in order to make it to the &amp;quot;master&amp;quot; branch of the poky/ repository.&lt;br /&gt;
&lt;br /&gt;
=== Workflow (bitbake-setup) ===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
1) Download master branch of the yocto project&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ git clone https://git.openembedded.org/bitbake/&lt;br /&gt;
  $ ./bitbake/bin/bitbake-setup settings set global top-dir-prefix $PWD&lt;br /&gt;
  $ ./bitbake/bin/bitbake-setup init --non-interactive poky-master poky distro/poky machine/qemux86-64&lt;br /&gt;
  $ cd bitbake-builds/poky-master-poky-distro_poky-machine_qemux86-64&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
2) Start your feature branch off of master, name style of branch is convention, but suggested. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ cd layers/bitbake &lt;br /&gt;
  $ git checkout -b username/toaster/FeatureOrBug origin/master&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
3) Do Work&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
4) Rebase on master. It has probably changed while you were working (unless you are really really fast!)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ git rebase origin/master&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
5) Create your commit&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;strong&amp;gt;NOTE:&amp;lt;/strong&amp;gt; The format of the commit message should be like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  toaster: &amp;lt;module&amp;gt; &amp;lt;short one line summary&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  long(er) description&lt;br /&gt;
&lt;br /&gt;
  [YOCTO #0000]&lt;br /&gt;
&lt;br /&gt;
  Signed-off-by: First Last &amp;lt;name@domain.com&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where YOCTO #0000 is the related bug number if there is one. Signed off by with your git commit -s credentials.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
6) Prepare your patch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
$ git format-patch -1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
7) Send your patch to the bitbake mailing list&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Email list:&amp;lt;/strong&amp;gt; bitbake-devel@lists.openembedded.org&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;strong&amp;gt;NOTE:&amp;lt;/strong&amp;gt; For the email&#039;s subject line, prepend &amp;quot;[bitbake-devel]&amp;quot; to the patch&#039;s subject line&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  TO: bitbake-devel@lists.openembedded.org&lt;br /&gt;
  SUBJECT: [bitbake-devel][PATCH] toaster: support bitbake-setup&lt;br /&gt;
  CONTENT:&lt;br /&gt;
  From c063178ab0971fe297a9e9bca6e6b04eafc5149c Mon Sep 17 00:00:00 2001&lt;br /&gt;
  From: David Reyna &amp;lt;David.Reyna@windriver.com&amp;gt;&lt;br /&gt;
  Date: Thu, 30 Oct 2025 14:03:35 -0700&lt;br /&gt;
  Subject: [PATCH] toaster: support bitbake-setup&lt;br /&gt;
&lt;br /&gt;
      This adds support for the new bitbake-setup&lt;br /&gt;
  &amp;lt;&amp;lt;&amp;lt;CUT&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
      [YOCTO #16012]&lt;br /&gt;
&lt;br /&gt;
  Signed-off-by: David Reyna &amp;lt;David.Reyna@windriver.com&amp;gt;&lt;br /&gt;
  ---&lt;br /&gt;
   bin/toaster                                   | 21 ++--&lt;br /&gt;
   .../bldcontrol/localhostbecontroller.py       | 99 +++++++++++&lt;br /&gt;
  &amp;lt;&amp;lt;&amp;lt;CUT&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Workflow (Poky Classic, OBSOLETE) ==&lt;br /&gt;
To contribute to toaster you will also need authorization to write to the upstream yocto project repository.  Contact a member of the toaster team for details.&lt;br /&gt;
&lt;br /&gt;
1) Download master branch of the yocto project&lt;br /&gt;
  &amp;lt;code&amp;gt; git clone git://git.yoctoproject.org/poky &amp;amp;&amp;amp; cd poky &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) Add poky-contrib to the local repository you set up above&lt;br /&gt;
  &amp;lt;code&amp;gt; git remote add poky-contrib ssh://git@push.yoctoproject.org/poky-contrib &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Fetch the poky-contrib branches&lt;br /&gt;
  &amp;lt;code&amp;gt; git fetch --all &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4) Start your feature branch off of master, name style of branch is convention, but suggested. &lt;br /&gt;
  &amp;lt;code&amp;gt; git checkout -b username/toaster/FeatureOrBug origin/master &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5) Do Work &lt;br /&gt;
&lt;br /&gt;
6) Test the changes. Run the Django unit tests. People put effort into these so we should make sure we use them.  This assumes you have phantomjs installed.  This can usually be done from the distribution &amp;lt;code&amp;gt; apt-get install phantomjs&amp;lt;/code&amp;gt;,  for example.  If you want to test against Chrome or Firefox, see the README in bitbake/lib/toaster/tests/browser.  &lt;br /&gt;
  &amp;lt;code&amp;gt; pip3 install selenium &amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt;TOASTER_TESTS_BROWSER=phantomjs bitbake/lib/toaster/manage.py test orm toastergui tests.browser &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Note: If you would like to run the tests in a container so they are repeatable and do not continually break due to host upgrades see [[Running Toaster Tests with Containers]]&lt;br /&gt;
&lt;br /&gt;
7) Rebase on master. It has probably changed while you were working (unless you are really really fast!)&lt;br /&gt;
  &amp;lt;code&amp;gt; git rebase origin/master &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8) Push your feature branch to poky-contrib&lt;br /&gt;
 &amp;lt;code&amp;gt; git push -u poky-contrib username/toaster/FeatureOrBug:username/toaster/FeatureOrBug&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
9) Send to the toaster-mailing list using one of the methods outlined below.&lt;br /&gt;
&lt;br /&gt;
10) NOTE: when the patch has been accepted upstream, you can clean up your poy-contrib branch with:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;code&amp;gt; git push -u poky-contrib :username/toaster/FeatureOrBug &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sending patches to Toaster Project ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;NOTE:&amp;lt;/strong&amp;gt; The format of the commit message should be like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    toaster: &amp;lt;module&amp;gt; &amp;lt;short one line summary&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    long(er) description&lt;br /&gt;
&lt;br /&gt;
    [YOCTO #0000]&lt;br /&gt;
&lt;br /&gt;
    Signed-off-by: First Last &amp;lt;name@domain.com&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where YOCTO #0000 is the related bug number if there is one. Signed off by with your git commit -s credentials.&lt;br /&gt;
&lt;br /&gt;
We accept patches on the [https://www.yoctoproject.org/tools-resources/community/mailing-lists toaster mailing list] ( toaster@yoctoproject.org ) by &amp;quot;git send-email&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
e.g.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ git send-email HEAD^ &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can use the utilities in the script directory to prepare your patch&lt;br /&gt;
&lt;br /&gt;
1) Use the create-pull-request script (from poky) to create a pull request while on your feature branch&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/create-pull-request -s &amp;quot;toaster: Fixes and clean ups&amp;quot; -u poky-contrib -r  origin/master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) Review their content, especially the summary mail:&lt;br /&gt;
   &amp;lt;code&amp;gt;edit ./pull-&amp;lt;pid&amp;gt;/0000-cover-letter.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3)When you are satisfied, you can send them with:&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/send-pull-request -a -p ./pull-&amp;lt;pid&amp;gt;&amp;lt;/code&amp;gt; -t toaster@yoctoproject.org&lt;br /&gt;
&lt;br /&gt;
A comprehensive document about commit messages is available on the [http://www.openembedded.org/wiki/Commit_Patch_Message_Guidelines openembedded wiki]&lt;br /&gt;
&lt;br /&gt;
More help learning git is available on [https://try.github.io github] and [http://git-scm.com/documentation/ the official documentation]&lt;br /&gt;
&lt;br /&gt;
=== Sending branches to Toaster Project ===&lt;br /&gt;
&lt;br /&gt;
If you wish to submit whole branches please use the poky-contrib repository see [[Poky Contributions#Poky_Contrib_Branch]] for setup guide.&lt;br /&gt;
&lt;br /&gt;
Once you have pushed a branch please then send an email to the [https://www.yoctoproject.org/tools-resources/community/mailing-lists toaster mailing list] with the subject in the following format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 [review-request] my_branch_name&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the body of the email it&#039;s useful to describe your branch&#039;s functionality, which commits and a link to the git web.&lt;br /&gt;
&lt;br /&gt;
If you need any assistance please post on the mailing list.&lt;br /&gt;
&lt;br /&gt;
=== Submitting patch sets for integration into Bitbake ===&lt;br /&gt;
&lt;br /&gt;
Toaster patches are normally submitted upstream to the BitBake repository by the reviewer (not the author). This tells the upstream maintainers that the patches have been reviewed by the people who are familiar with the Toaster source code, and makes their busy lives a bit easier.&lt;br /&gt;
&lt;br /&gt;
Since development happens on the poky-contrib repository, but the patches need to be merged to the Bitbake repository, the following process should be executed.&lt;br /&gt;
&lt;br /&gt;
1) Bring master up to date&lt;br /&gt;
  &amp;lt;code&amp;gt; git fetch origin master&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt; git checkout master &amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt; git pull [master] &amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
2) Checkout the target branch you wish to upstream&lt;br /&gt;
&lt;br /&gt;
(a) If you are working with a single branch do this:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;code&amp;gt;git checkout username/toaster/FeatureOrBug&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(b) If you are including several branches into this one submission, gather the commit IDs for each branch and do this:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;code&amp;gt;git cherry-pick commit-id-a &amp;lt;/code&amp;gt;&lt;br /&gt;
   &amp;lt;code&amp;gt;git cherry-pick commit-id-b &amp;lt;/code&amp;gt;&lt;br /&gt;
   &amp;lt;code&amp;gt;... &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Create a new branch for submission &lt;br /&gt;
   &amp;lt;code&amp;gt; git checkout -b yourname/submit/username/toaster/FeatureOrBug &amp;lt;/code&amp;gt;&lt;br /&gt;
This will look something like&lt;br /&gt;
   &amp;lt;code&amp;gt; git checkout -b bavery/submit/bob/toaster/FixBug1234 &amp;lt;/code&amp;gt;&lt;br /&gt;
where bavery is signing off on and upstreaming bob&#039;s fix to the Yocto Bugzilla bug 1234.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
---- &lt;br /&gt;
* Alternatively, you can use the patchworks web site:&lt;br /&gt;
  2)  Create a new branch for submission &lt;br /&gt;
   &amp;lt;code&amp;gt; git checkout -b yourname/submit/username/toaster/FeatureOrBug &amp;lt;/code&amp;gt;&lt;br /&gt;
This will look something like&lt;br /&gt;
   &amp;lt;code&amp;gt; git checkout -b bavery/submit/bob/toaster/FixBug1234 &amp;lt;/code&amp;gt;&lt;br /&gt;
where bavery is signing off on and upstreaming bob&#039;s fix to the Yocto Bugzilla bug 1234.&lt;br /&gt;
  3)  Download and apply the mbox patch from the website: https://patchwork.openembedded.org/project/toaster/patches/&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;code&amp;gt; git am -s the-downloaded-patch.mbox &amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
4) Make sure the branch is rebased on current master. &lt;br /&gt;
   &amp;lt;code&amp;gt;git rebase origin/master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5) Test the changes. Run the Django unit tests.  People put effort into these so we should make sure we use them. his assumes you have phantomjs installed.  This can usually be done from the distribution &amp;lt;code&amp;gt; apt-get install phantomjs&amp;lt;/code&amp;gt;,  for example.  If you want to test against Chrome or Firefox, see the README in bitbake/lib/toaster/tests/browser.&lt;br /&gt;
  &amp;lt;code&amp;gt; pip3 install selenium &amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt;TOASTER_TESTS_BROWSER=phantomjs bitbake/lib/toaster/manage.py test orm toastergui tests.browser &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6) Add signed off by to the commit messages (Note: If you applied the mbox patch with &amp;lt;code&amp;gt; git am -s foo.mbox&amp;lt;/code&amp;gt; You do not need to sign off again.)&lt;br /&gt;
   &amp;lt;code&amp;gt;git filter-branch -f --msg-filter &#039;cat &amp;amp;&amp;amp; echo &amp;quot;Signed-off-by: $(git config --get user.name) &amp;lt;$(git config --get user.email)&amp;gt;&amp;quot;&#039; master..HEAD&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7) Push the modified commit messages and rebased version to poky-contrib&lt;br /&gt;
   &amp;lt;code&amp;gt;git push -u poky-contrib yourname/submit/username/toaster/FeatureOrBug  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8) Use the create-pull-request script (from poky) to create a pull request for the appropriate tree/mailing list&lt;br /&gt;
&lt;br /&gt;
(a) For the &#039;bitbake&#039; tree (e.g. bitbake/.../toasterui.py, bitbake/.../toastergui/*):&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/create-pull-request -d bitbake -s &amp;quot;toaster: Fixes and clean ups&amp;quot; -u poky-contrib -r origin/master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(b) for the &#039;meta&#039; tree (e.g. meta/classes/toaster.class):&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/create-pull-request -d meta -s &amp;quot;toaster: Fixes and clean ups&amp;quot; -u poky-contrib -r origin/master&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;strong&amp;gt;Note: If the patch creates any NEW files, the integration scripts that pull it into bitbake will fail. So, if new files are created as part of this patch set, you need to explicitly point that out in the body of the email for the patch set or do it as a PR rather than as a patch set.&lt;br /&gt;
&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
9) Review their content, especially the summary mail:&lt;br /&gt;
   &amp;lt;code&amp;gt;edit ./pull-&amp;lt;pid&amp;gt;/0000-cover-letter.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
10) When you are satisfied, you can send them with:&lt;br /&gt;
   --- for the &#039;bitbake&#039; tree:&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/send-pull-request -a -p ./pull-&amp;lt;pid&amp;gt;&amp;lt;/code&amp;gt; -t bitbake-devel@lists.openembedded.org&lt;br /&gt;
   --- for the &#039;meta&#039; tree:&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/send-pull-request -a -p ./pull-&amp;lt;pid&amp;gt;&amp;lt;/code&amp;gt; -t openembedded-core@lists.openembedded.org&lt;br /&gt;
&lt;br /&gt;
==== Submitting patches for prior releases ====&lt;br /&gt;
&lt;br /&gt;
The procedure is the same, but using the prior release as the base branch instead of the &amp;quot;master&amp;quot; branch in bitbake.&lt;br /&gt;
&lt;br /&gt;
Also, make sure that you add the name of the prior release for which the patchset is intended in the prefix of the patchset, as parameter to the &amp;quot;create-pull-request&amp;quot; command, e.g. &#039;&#039;&#039;-p 1.26&#039;&#039;&#039; for the 1.26 branch.&lt;br /&gt;
&lt;br /&gt;
==== Gotchas ====&lt;br /&gt;
===== Too Big =====&lt;br /&gt;
Sometimes the mailer will refuse to send patches, especially on binary or long-line files. The proper way to go around that is to reply to the patchset you&#039;ve submitted to the mailing list, asking for a git pull directly from the poky-contrib branch.&lt;br /&gt;
===== One Patch of a Long Patch Set Needs Resubmission =====&lt;br /&gt;
Suppose you upstream a 10 commit patch set to the bitbake-devel list and someone finds an issue with patch #3.  Regenerating the whole series is silly so how do you address this?  First, follow the bitbake submission steps until you end up on the yourname/submit/the/target/branch  branch.  Then you can (note &amp;lt;strong&amp;gt;the reset --hard will wipe any local changes in your working dir so commit or stash first&amp;lt;/strong&amp;gt;):&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  git checkout -b yourname/submit/the/target/branch-newHEAD&lt;br /&gt;
  git reset --hard &amp;lt;commit of resubmission issue&amp;gt; &lt;br /&gt;
  git commit --amend --signoff &lt;br /&gt;
  git send-email --in-reply-to=&amp;quot;longNumber.git.me@mycomp.com&amp;quot; --subject-prefix=&amp;quot;bitbake-devel] [PATCHVX 03/10&amp;quot;  --to=bitbake-devel@lists.openembedded.org --no-chain-reply-to --suppress-cc=all -M -1 --relative=bitbake&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The longNumber.git.me@mycomp.com comes from the email message id for the particular patch #3 so that the email threading works. In gmail, you can click on the dropdown button on the right side of the screen and choose &amp;quot;Show Original&amp;quot;.  This will have a field in the header like Message-Id: &amp;lt;4551b56f132497c055f39567946a5d3be347d770.1468363530.git.myemailusername@mycompany.com&amp;gt;  The entire string except the &#039;&amp;lt;&amp;gt;&#039; are used.  for example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  --in-reply-to=&amp;quot;4551b56f132497c055f39567946a5d3be347d770.1468363530.git.myemailusername@mycompany.com&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first issue you are likely to face is that the git filter-branch command in the standard instructions may sign off on too many commits.  If you know you just want to sign off on the last 7 commits on the yourname/submit/the/target/branch you can:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  git filter-branch -f --msg-filter &#039;cat &amp;amp;&amp;amp; echo &amp;quot;Signed-off-by: $(git config --get user.name) &amp;lt;$(git config --get user.email)&amp;gt;&amp;quot;&#039; HEAD~7..HEAD&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Submitting patches for documentation ===&lt;br /&gt;
&lt;br /&gt;
Documentation patches should be sent to [https://lists.yoctoproject.org/listinfo/yocto Yocto mailing list] with [yocto-docs] in the subject, CC Scott Rifenbark (and make sure you send it to his gmail, not his defunct Intel address). For his email address, look at [http://lists.openembedded.org/pipermail/bitbake-devel/2015-October/006632.html this post].&lt;br /&gt;
&lt;br /&gt;
== Code syle guide ==&lt;br /&gt;
&lt;br /&gt;
=== Templates ===&lt;br /&gt;
&lt;br /&gt;
Django has a template language which allows us to render pages based on the data (context). We use the template language to setup the initial state of the page and to create re-usable components that can be included in other pages.&lt;br /&gt;
&lt;br /&gt;
The recommend template code style is as follows&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Yes please:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{var}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
  {# Maintaining indentation #}&lt;br /&gt;
  {% if %}&lt;br /&gt;
   &amp;lt;p&amp;gt;this&amp;lt;/p&amp;gt;&lt;br /&gt;
  {% else %}&lt;br /&gt;
   &amp;lt;p&amp;gt;that&amp;lt;/p&amp;gt;&lt;br /&gt;
  {% endif %}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{% comment %}&lt;br /&gt;
This is a longer comment that describes all the things&lt;br /&gt;
that are below in quite a bit of detail because they&#039;re&lt;br /&gt;
a little more difficult to understand.&lt;br /&gt;
{% endcomment %}&lt;br /&gt;
&lt;br /&gt;
{% for layer in layers_list %}&lt;br /&gt;
 {{layer}}&lt;br /&gt;
{% endfor %}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No thank you:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{var}}&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
{# Maintaining indentation #}&lt;br /&gt;
{%if%}&amp;lt;p&amp;gt;this&amp;lt;/p&amp;gt;{%else%}&amp;lt;p&amp;gt;that&amp;lt;/p&amp;gt;{%endif%}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{#This is a longer comment that describes all the things that are below in quite a bit of detail because they&#039;re a little more difficult to understand. #}&lt;br /&gt;
{%for o in layers_list%}{{o}}{%endfor%}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* Maintain indentation as you would with other languages&lt;br /&gt;
* White space after &#039;%&#039;&lt;br /&gt;
* Comment blocks for longer comments&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Javascript ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Yes please:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;use strict&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* These hold some numbers */&lt;br /&gt;
var oneVar = 1;&lt;br /&gt;
var twoVar = 2;&lt;br /&gt;
&lt;br /&gt;
var cheesesTypes = {&lt;br /&gt;
  cheddar : 1,&lt;br /&gt;
  stilton : 2,&lt;br /&gt;
  emmental : 3, &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function doThingsHere(){&lt;br /&gt;
  return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* If one equals two do some other things and make sure that&lt;br /&gt;
 * if the the click handler is setup correctly.&lt;br /&gt;
 */&lt;br /&gt;
if (one === two) {&lt;br /&gt;
  var cheese = &amp;quot;cheddar&amp;quot;;&lt;br /&gt;
  oneVar = doThingsHere();&lt;br /&gt;
&lt;br /&gt;
  $(this).click(function (event){&lt;br /&gt;
    alert(&amp;quot;Hello&amp;quot;);&lt;br /&gt;
  });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$(&amp;quot;#little-mouse&amp;quot;).focusout(function(){&lt;br /&gt;
  alert(&amp;quot;bye&amp;quot;)&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
if (oneVar)&lt;br /&gt;
  noThingHere();&lt;br /&gt;
else&lt;br /&gt;
  doThingHere();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No thank you:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// These hold some numbers&lt;br /&gt;
oneVar = 1&lt;br /&gt;
twoVar = 2&lt;br /&gt;
&lt;br /&gt;
var cheesesTypes = { cheddar : 1, stilton : 2,  emmental : 3, }&lt;br /&gt;
&lt;br /&gt;
function doThingsHere ()&lt;br /&gt;
{&lt;br /&gt;
return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//If one equals two do some other things and make sure that if the the click handler is setup correctly.&lt;br /&gt;
if( one === two ) {&lt;br /&gt;
var cheese = &amp;quot;cheddar&amp;quot;;&lt;br /&gt;
oneVar = doThingsHere();&lt;br /&gt;
&lt;br /&gt;
    $(this).click(function(event){ alert(&amp;quot;Hello&amp;quot;); });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
document.getElementById(&amp;quot;little-mouse&amp;quot;).addEventListener(&amp;quot;focusout&amp;quot;, function(){&lt;br /&gt;
  alert(&amp;quot;bye&amp;quot;)&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
if (oneVar)&lt;br /&gt;
{&lt;br /&gt;
  noThingHere();&lt;br /&gt;
} else {  doThingHere(); }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* Variables should be marked with &amp;quot;var&amp;quot; &lt;br /&gt;
* Semicolons should be used&lt;br /&gt;
* Keep as close to 80 cols as possible&lt;br /&gt;
* Use 2 space per indentation&lt;br /&gt;
* Open curly braces after parenthesis for functions and close on a new line&lt;br /&gt;
* Use camelCase for function names and variable names &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make use of running your Javascript through jshint we have a .jshint configuration file in that js directory (toastergui/static/js)&lt;br /&gt;
&lt;br /&gt;
e.g. install jshint and add to your current PATH, then run:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ npm install jshint; export PATH=$PATH:$PWD/node_modules/.bin/&lt;br /&gt;
 $ jshint ./toastergui/static/js/base.js&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Yes please:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;something-area&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p class=&amp;quot;important&amp;quot;&amp;gt;This is some text&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
  &amp;lt;p id=&amp;quot;important-text&amp;gt;This is some text&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No thank you:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;somethingarea&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p class=&amp;quot;Important&amp;quot;&amp;gt;This is some text&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;somethingarea&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p id=&amp;quot;ImportantText&amp;quot;&amp;gt;This is&lt;br /&gt;
some text&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* 2 space indentation&lt;br /&gt;
* Lower case, ids hyphenated when multiple words&lt;br /&gt;
* No duplicate ids &lt;br /&gt;
&lt;br /&gt;
* Run your HTML through a [http://validator.w3.org/#validate_by_input HTML validator] available for [http://validator.w3.org/source/ local install]. The w3c validator it&#039;s self doesn&#039;t currently validate html5, it uses as a back end [https://validator.github.io/validator/ Nu Html Checker] which can be installed as a standalone service, full instructions in the readme.&lt;br /&gt;
&lt;br /&gt;
Quick install instructions:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $ mkdir html5-validator &amp;amp;&amp;amp; cd html5-validator&lt;br /&gt;
 $ export JAVA_HOME=/usr/lib/jvm/java-6-openjdk&lt;br /&gt;
 $ git clone https://github.com/validator/validator.git&lt;br /&gt;
 $ python build/build.py all&lt;br /&gt;
 $ python build/build.py all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HTML can be indented quickly using tidy, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 tidy -xml --indent auto --indent-spaces 2 --quiet yes -w -1 --show-body-only yes  ./index.html &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
Lenient [https://www.python.org/dev/peps/pep-0008 pep8]&lt;br /&gt;
Ignoring most of the whitespace around character issues (E124,E203,E201,E265,E303,E302,E231) see toaster/.pep8 and [http://pep8.readthedocs.org/en/latest/intro.html#error-codes error code list]&lt;br /&gt;
&lt;br /&gt;
Fix all issues identified by running code through pep8. We have a fairly lenient config file (toaster/.pep8).&lt;br /&gt;
&lt;br /&gt;
e.g.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ pep8 ./toastergui/urls.py&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run code through pylint and fix identified issues - Some can be reasonably ignored such as doc strings for every function or star-args. No pylintrc config provided here as most issues identified are highly contextual and should be ignored on a case by case basis.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ pylint --load-plugins pylint_django toastergui/tests.py&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Working with design ==&lt;br /&gt;
&lt;br /&gt;
Yes, the Yocto Project is one of those lucky projects with designers around to help in UI matters. We have a document explaining how to work with the design contributors: [[File:Working_with_design.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Debugging Toaster ==&lt;br /&gt;
&lt;br /&gt;
Toaster can be quite complex given that it includes a wide range of technologies and languages from bitbake, events, python, Django, Sqlite, Javescript, CCS, HTML, and more. Here are hints and tips for debugging all of these aspects of Toaster.&lt;br /&gt;
&lt;br /&gt;
=== General debugging tips ===&lt;br /&gt;
&lt;br /&gt;
* The logger is your best friend&lt;br /&gt;
* When possible, build from command line in the Toaster environment to see log messages and errors directly&lt;br /&gt;
* Use &amp;quot;quilt-native&amp;quot; as your quick sanity build target&lt;br /&gt;
* For python code you can use pudb (https://wiki.yoctoproject.org/wiki/TipsAndTricks/DebuggingBitbakeInPudb)&lt;br /&gt;
* For bbclass code (toaster.bbclass) find or set up a python section to use pudb (see above link)&lt;br /&gt;
* Brute force find is your friend for mysterious error messages and tracking all places a variable is used&lt;br /&gt;
**  find bitbake/lib/toaster -exec grep -l  &amp;quot;SEARCH_TEXT&amp;quot; {} \; 2&amp;gt; /dev/null&lt;br /&gt;
* Look in https://wiki.yoctoproject.org/wiki/TipsAndTricks&lt;br /&gt;
&lt;br /&gt;
=== How to debug a ... ===&lt;br /&gt;
&lt;br /&gt;
* A stalled build:&lt;br /&gt;
** Cancel the build and look at one of the below logs to find the exception. The error message should give a clue on the user resolution or indicate a bug to file&lt;br /&gt;
** Failures in git and shell calls are (as of YP-2.4 Rocko) captured as visible build errors in the GUI&lt;br /&gt;
* Python file of a build management script (localhostbecontroller.py,...):&lt;br /&gt;
** Use log statements, and watch &amp;quot;build/toaster_runbuilds.log&amp;quot; (where you started Toaster)&lt;br /&gt;
* Python file of a build runtime scripts:&lt;br /&gt;
** Use log statements, and watch &amp;quot;build-toaster-x/toaster_ui.log&amp;quot;&lt;br /&gt;
* Python file of a Toaster management script (projects, tables):&lt;br /&gt;
** Use log statements, and watch &amp;quot;build/toaster_web.log&amp;quot; (where you started Toaster)&lt;br /&gt;
* Template file&lt;br /&gt;
** Usually the error will appear in the browser via Django, with a trace&lt;br /&gt;
** Add random display text to insure the page your editing is the one that shows&lt;br /&gt;
** Display internal values via page template to see what gets passed&lt;br /&gt;
** Add internal values into the context and add to the page template&lt;br /&gt;
** Use the Firefox/Chrome developer &amp;quot;inspector&amp;quot; to examine the DOM&lt;br /&gt;
* Javascript file&lt;br /&gt;
** Use the Firefox/Chrome developer &amp;quot;inspector&amp;quot; to do inline debugging&lt;br /&gt;
** Watch the Firefox/Chrome developer &amp;quot;console&amp;quot; for error messages&lt;br /&gt;
* The Toaster Database&lt;br /&gt;
** Use an application like &amp;quot;sqlitebrowser&amp;quot; to examine the tables and records&lt;br /&gt;
** Use a Python script to find and dump desired database records (see http://events.linuxfoundation.org/sites/events/files/slides/BitbakeAnalytics_ELC_Portland.pdf)&lt;br /&gt;
&lt;br /&gt;
=== Specific error scenarios ... ===&lt;br /&gt;
&lt;br /&gt;
* The build progress gets stuck at &amp;quot;Loading...&amp;quot;&lt;br /&gt;
** You have a syntax error, either in &#039;localhostbecontroller.py&#039;, the helper classes in &#039;models.py&#039;, or in the related javascript. Look at the tail of &amp;quot;toaster_runbuilds.log&amp;quot; file for pythons errors, and in your browser&#039;s &amp;quot;Console&amp;quot; for javascript errors.&lt;br /&gt;
* The message &amp;quot;Sorry, An error has occurred loading this page&amp;quot;&lt;br /&gt;
** The included javascript has a syntax error. The HTML page being rendered has local JS code at the top that caches these errors and displays the observed message (in order to be less ugly to the customer). That code also tries to add the error message to the browser console but that does not always work, and you are left with no clue&lt;br /&gt;
** You can start bisecting the recent edits you made to the respective JS files to locate the problem change&lt;br /&gt;
** You can also add a breakpoint in the mentioned catch code to see if you can see the error directly&lt;br /&gt;
&lt;br /&gt;
=== How to update from a fix in a ... ===&lt;br /&gt;
&lt;br /&gt;
* Template file: save your text edit and refresh page&lt;br /&gt;
* Javascript file: save your text edit and refresh page (or leave page and come back)&lt;br /&gt;
* Builder scripts: save your text edit and restart Toaster (&amp;quot;localhostbecontroller.py&amp;quot;, &amp;quot;buildinfohelper.py&amp;quot;, &amp;quot;toasterui.py&amp;quot;, &amp;quot;bbcontroller.py&amp;quot;,...)&lt;br /&gt;
* Views and URLs: save your text edit and refresh page&lt;br /&gt;
* Model class members: save your text edit and restart Toaster. You may also need a migration file.&lt;br /&gt;
* Model method: save your text edit and refresh page, else restart Toaster&lt;br /&gt;
* Fixture file (settings.xml, poky.xml, custom.xml): delete Toaster database and restart fresh&lt;br /&gt;
&lt;br /&gt;
=== Where to debug ... ===&lt;br /&gt;
&lt;br /&gt;
* Toaster start and stop, database init&lt;br /&gt;
** bin/toaster&lt;br /&gt;
* Project Defaults (Default machine, distro, layers, ...)&lt;br /&gt;
** bldcontrol/management/commands/checksettings.py&lt;br /&gt;
** orm/fixtures/*.xml&lt;br /&gt;
* Layer Index content (Available machines, distros, layers, ...)&lt;br /&gt;
** orm/management/commands/lsupdates.py&lt;br /&gt;
* Build cloning&lt;br /&gt;
** bldcontrol/localhostbecontroller.py&lt;br /&gt;
* Build start&lt;br /&gt;
** bldcontrol/localhostbecontroller.py&lt;br /&gt;
* URL mappings&lt;br /&gt;
** toastergui/urls.py&lt;br /&gt;
* Views&lt;br /&gt;
** toastergui/views.py&lt;br /&gt;
** toastergui/templates/*&lt;br /&gt;
* Toaster Tables (Layers, Distros, Machines, ...)&lt;br /&gt;
** toastergui/tables.py&lt;br /&gt;
** toastergui/static/js/libtoaster.js&lt;br /&gt;
* Events&lt;br /&gt;
** meta/classes/toaster.bbclass -&amp;gt; &lt;br /&gt;
** lib/bb/ui/toasterui.py -&amp;gt; &lt;br /&gt;
** lib/bb/ui/buildinfohelper.py -&amp;gt; &lt;br /&gt;
** orm/models.py et. al.&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Contribute_to_Toaster&amp;diff=86710</id>
		<title>Contribute to Toaster</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Contribute_to_Toaster&amp;diff=86710"/>
		<updated>2025-11-15T06:07:42Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: Add plain workflow for bitbake-setup model&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Toaster]]&lt;br /&gt;
This page summarises the Toaster development process. We hope this will help you start contributing to the project. We were previously using a process that involved the toaster-next branch on poky-contrib.  This workflow was especially useful in an environment where Toaster was undergoing a lot of change and needed the ability to layer patch sets upon each other before they had been taken up by bitbake.  Since that is not currently the case, toaster-next just adds complication; so it has been removed from this workflow.  See [[Contribute to Toaster (toaster-next version)]] for the old toaster-next based workflow.&lt;br /&gt;
&lt;br /&gt;
== What can I do? ==&lt;br /&gt;
&lt;br /&gt;
The [https://bugzilla.yoctoproject.org/buglist.cgi?product=Toaster Yocto Project Bugzilla instance] lists all the things that need to be done:&lt;br /&gt;
&lt;br /&gt;
* If the issue says &amp;lt;strong&amp;gt;GUI design available&amp;lt;/strong&amp;gt; in the Whiteboard field, there is a design specification document attached to the issue that you should follow. Send questions / comments about it to the [https://lists.yoctoproject.org/listinfo/toaster Toaster mailing list]&lt;br /&gt;
* If the issue says &amp;lt;strong&amp;gt;GUI design pending&amp;lt;/strong&amp;gt; in the Whiteboard field, there is some design work still to be done. Feel free to take the issue and send an email to the [https://lists.yoctoproject.org/listinfo/toaster Toaster mailing list] to find out why the design work is not done yet&lt;br /&gt;
&lt;br /&gt;
== Set up the local repository ==&lt;br /&gt;
&lt;br /&gt;
For development of Toaster we recommend setting up a local install of Toaster. Installation instructions are available in the main [https://docs.yoctoproject.org/toaster-manual/index.html Toaster documentation]&lt;br /&gt;
&lt;br /&gt;
== Submitting patches ==&lt;br /&gt;
&lt;br /&gt;
Publishing your patches to Toaster is a two step process.&lt;br /&gt;
# Sending patches to the [https://lists.yoctoproject.org/listinfo/toaster/| Toaster mailing list] for review&lt;br /&gt;
# Submitting the patches that you reviewed to the upstream repository&lt;br /&gt;
&lt;br /&gt;
By submitting your patches first to the Toaster mailing list, you can be sure the patches are reviewed by the people in the community who are familiar with the Toaster source code, and who have experience developing web applications.&lt;br /&gt;
&lt;br /&gt;
That also means that, by the time the patches are submitted to the upstream mailing lists, they are in pretty good shape. That helps the project maintainers, and hopefully also helps you.&lt;br /&gt;
&lt;br /&gt;
Toaster code lives in Bitbake repository at [http://git.openembedded.org/bitbake/|http://git.openembedded.org/bitbake/].&lt;br /&gt;
All contributions must be upstreamed to the Bitbake repository in order to make it to the &amp;quot;master&amp;quot; branch of the poky/ repository.&lt;br /&gt;
&lt;br /&gt;
=== Workflow (bitbake-setup) ===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
1) Download master branch of the yocto project&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ git clone https://git.openembedded.org/bitbake/&lt;br /&gt;
  $ ./bitbake/bin/bitbake-setup settings set global top-dir-prefix $PWD&lt;br /&gt;
  $ ./bitbake/bin/bitbake-setup init --non-interactive poky-master poky distro/poky machine/qemux86-64&lt;br /&gt;
  $ cd bitbake-builds/poky-master-poky-distro_poky-machine_qemux86-64&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
2) Start your feature branch off of master, name style of branch is convention, but suggested. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ cd layers/bitbake &lt;br /&gt;
  $ git checkout -b username/toaster/FeatureOrBug origin/master&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
3) Do Work&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
4) Rebase on master. It has probably changed while you were working (unless you are really really fast!)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ git rebase origin/master&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
5) Create your commit&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;strong&amp;gt;NOTE:&amp;lt;/strong&amp;gt; The format of the commit message should be like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  toaster: &amp;lt;module&amp;gt; &amp;lt;short one line summary&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  long(er) description&lt;br /&gt;
&lt;br /&gt;
  [YOCTO #0000]&lt;br /&gt;
&lt;br /&gt;
  Signed-off-by: First Last &amp;lt;name@domain.com&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where YOCTO #0000 is the related bug number if there is one. Signed off by with your git commit -s credentials.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
6) Prepare your patch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
$ git format-patch -1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
7) Send your patch to the bitbake mailing list&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Email list:&amp;lt;/strong&amp;gt; bitbake-devel@lists.openembedded.org&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;strong&amp;gt;NOTE:&amp;lt;/strong&amp;gt; For the email&#039;s subject line, prepend &amp;quot;[bitbake-devel]&amp;quot; to the patch&#039;s subject line&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  TO: bitbake-devel@lists.openembedded.org&lt;br /&gt;
  SUBJECT: [bitbake-devel][PATCH] toaster: support bitbake-setup&lt;br /&gt;
  CONTENT:&lt;br /&gt;
  From c063178ab0971fe297a9e9bca6e6b04eafc5149c Mon Sep 17 00:00:00 2001&lt;br /&gt;
  From: David Reyna &amp;lt;David.Reyna@windriver.com&amp;gt;&lt;br /&gt;
  Date: Thu, 30 Oct 2025 14:03:35 -0700&lt;br /&gt;
  Subject: [PATCH] toaster: support bitbake-setup&lt;br /&gt;
&lt;br /&gt;
      This adds support for the new bitbake-setup&lt;br /&gt;
  &amp;lt;&amp;lt;&amp;lt;CUT&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
      [YOCTO #16012]&lt;br /&gt;
&lt;br /&gt;
  Signed-off-by: David Reyna &amp;lt;David.Reyna@windriver.com&amp;gt;&lt;br /&gt;
  ---&lt;br /&gt;
   bin/toaster                                   | 21 ++--&lt;br /&gt;
   .../bldcontrol/localhostbecontroller.py       | 99 +++++++++++&lt;br /&gt;
  &amp;lt;&amp;lt;&amp;lt;CUT&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Workflow (Poky Classic, OBSOLETE) ===&lt;br /&gt;
To contribute to toaster you will also need authorization to write to the upstream yocto project repository.  Contact a member of the toaster team for details.&lt;br /&gt;
&lt;br /&gt;
1) Download master branch of the yocto project&lt;br /&gt;
  &amp;lt;code&amp;gt; git clone git://git.yoctoproject.org/poky &amp;amp;&amp;amp; cd poky &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) Add poky-contrib to the local repository you set up above&lt;br /&gt;
  &amp;lt;code&amp;gt; git remote add poky-contrib ssh://git@push.yoctoproject.org/poky-contrib &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Fetch the poky-contrib branches&lt;br /&gt;
  &amp;lt;code&amp;gt; git fetch --all &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4) Start your feature branch off of master, name style of branch is convention, but suggested. &lt;br /&gt;
  &amp;lt;code&amp;gt; git checkout -b username/toaster/FeatureOrBug origin/master &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5) Do Work &lt;br /&gt;
&lt;br /&gt;
6) Test the changes. Run the Django unit tests. People put effort into these so we should make sure we use them.  This assumes you have phantomjs installed.  This can usually be done from the distribution &amp;lt;code&amp;gt; apt-get install phantomjs&amp;lt;/code&amp;gt;,  for example.  If you want to test against Chrome or Firefox, see the README in bitbake/lib/toaster/tests/browser.  &lt;br /&gt;
  &amp;lt;code&amp;gt; pip3 install selenium &amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt;TOASTER_TESTS_BROWSER=phantomjs bitbake/lib/toaster/manage.py test orm toastergui tests.browser &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Note: If you would like to run the tests in a container so they are repeatable and do not continually break due to host upgrades see [[Running Toaster Tests with Containers]]&lt;br /&gt;
&lt;br /&gt;
7) Rebase on master. It has probably changed while you were working (unless you are really really fast!)&lt;br /&gt;
  &amp;lt;code&amp;gt; git rebase origin/master &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8) Push your feature branch to poky-contrib&lt;br /&gt;
 &amp;lt;code&amp;gt; git push -u poky-contrib username/toaster/FeatureOrBug:username/toaster/FeatureOrBug&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
9) Send to the toaster-mailing list using one of the methods outlined below.&lt;br /&gt;
&lt;br /&gt;
10) NOTE: when the patch has been accepted upstream, you can clean up your poy-contrib branch with:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;code&amp;gt; git push -u poky-contrib :username/toaster/FeatureOrBug &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sending patches to Toaster Project ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;NOTE:&amp;lt;/strong&amp;gt; The format of the commit message should be like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    toaster: &amp;lt;module&amp;gt; &amp;lt;short one line summary&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    long(er) description&lt;br /&gt;
&lt;br /&gt;
    [YOCTO #0000]&lt;br /&gt;
&lt;br /&gt;
    Signed-off-by: First Last &amp;lt;name@domain.com&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where YOCTO #0000 is the related bug number if there is one. Signed off by with your git commit -s credentials.&lt;br /&gt;
&lt;br /&gt;
We accept patches on the [https://www.yoctoproject.org/tools-resources/community/mailing-lists toaster mailing list] ( toaster@yoctoproject.org ) by &amp;quot;git send-email&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
e.g.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ git send-email HEAD^ &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can use the utilities in the script directory to prepare your patch&lt;br /&gt;
&lt;br /&gt;
1) Use the create-pull-request script (from poky) to create a pull request while on your feature branch&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/create-pull-request -s &amp;quot;toaster: Fixes and clean ups&amp;quot; -u poky-contrib -r  origin/master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) Review their content, especially the summary mail:&lt;br /&gt;
   &amp;lt;code&amp;gt;edit ./pull-&amp;lt;pid&amp;gt;/0000-cover-letter.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3)When you are satisfied, you can send them with:&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/send-pull-request -a -p ./pull-&amp;lt;pid&amp;gt;&amp;lt;/code&amp;gt; -t toaster@yoctoproject.org&lt;br /&gt;
&lt;br /&gt;
A comprehensive document about commit messages is available on the [http://www.openembedded.org/wiki/Commit_Patch_Message_Guidelines openembedded wiki]&lt;br /&gt;
&lt;br /&gt;
More help learning git is available on [https://try.github.io github] and [http://git-scm.com/documentation/ the official documentation]&lt;br /&gt;
&lt;br /&gt;
=== Sending branches to Toaster Project ===&lt;br /&gt;
&lt;br /&gt;
If you wish to submit whole branches please use the poky-contrib repository see [[Poky Contributions#Poky_Contrib_Branch]] for setup guide.&lt;br /&gt;
&lt;br /&gt;
Once you have pushed a branch please then send an email to the [https://www.yoctoproject.org/tools-resources/community/mailing-lists toaster mailing list] with the subject in the following format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 [review-request] my_branch_name&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the body of the email it&#039;s useful to describe your branch&#039;s functionality, which commits and a link to the git web.&lt;br /&gt;
&lt;br /&gt;
If you need any assistance please post on the mailing list.&lt;br /&gt;
&lt;br /&gt;
=== Submitting patch sets for integration into Bitbake ===&lt;br /&gt;
&lt;br /&gt;
Toaster patches are normally submitted upstream to the BitBake repository by the reviewer (not the author). This tells the upstream maintainers that the patches have been reviewed by the people who are familiar with the Toaster source code, and makes their busy lives a bit easier.&lt;br /&gt;
&lt;br /&gt;
Since development happens on the poky-contrib repository, but the patches need to be merged to the Bitbake repository, the following process should be executed.&lt;br /&gt;
&lt;br /&gt;
1) Bring master up to date&lt;br /&gt;
  &amp;lt;code&amp;gt; git fetch origin master&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt; git checkout master &amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt; git pull [master] &amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
2) Checkout the target branch you wish to upstream&lt;br /&gt;
&lt;br /&gt;
(a) If you are working with a single branch do this:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;code&amp;gt;git checkout username/toaster/FeatureOrBug&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(b) If you are including several branches into this one submission, gather the commit IDs for each branch and do this:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;code&amp;gt;git cherry-pick commit-id-a &amp;lt;/code&amp;gt;&lt;br /&gt;
   &amp;lt;code&amp;gt;git cherry-pick commit-id-b &amp;lt;/code&amp;gt;&lt;br /&gt;
   &amp;lt;code&amp;gt;... &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Create a new branch for submission &lt;br /&gt;
   &amp;lt;code&amp;gt; git checkout -b yourname/submit/username/toaster/FeatureOrBug &amp;lt;/code&amp;gt;&lt;br /&gt;
This will look something like&lt;br /&gt;
   &amp;lt;code&amp;gt; git checkout -b bavery/submit/bob/toaster/FixBug1234 &amp;lt;/code&amp;gt;&lt;br /&gt;
where bavery is signing off on and upstreaming bob&#039;s fix to the Yocto Bugzilla bug 1234.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
---- &lt;br /&gt;
* Alternatively, you can use the patchworks web site:&lt;br /&gt;
  2)  Create a new branch for submission &lt;br /&gt;
   &amp;lt;code&amp;gt; git checkout -b yourname/submit/username/toaster/FeatureOrBug &amp;lt;/code&amp;gt;&lt;br /&gt;
This will look something like&lt;br /&gt;
   &amp;lt;code&amp;gt; git checkout -b bavery/submit/bob/toaster/FixBug1234 &amp;lt;/code&amp;gt;&lt;br /&gt;
where bavery is signing off on and upstreaming bob&#039;s fix to the Yocto Bugzilla bug 1234.&lt;br /&gt;
  3)  Download and apply the mbox patch from the website: https://patchwork.openembedded.org/project/toaster/patches/&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;code&amp;gt; git am -s the-downloaded-patch.mbox &amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
4) Make sure the branch is rebased on current master. &lt;br /&gt;
   &amp;lt;code&amp;gt;git rebase origin/master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5) Test the changes. Run the Django unit tests.  People put effort into these so we should make sure we use them. his assumes you have phantomjs installed.  This can usually be done from the distribution &amp;lt;code&amp;gt; apt-get install phantomjs&amp;lt;/code&amp;gt;,  for example.  If you want to test against Chrome or Firefox, see the README in bitbake/lib/toaster/tests/browser.&lt;br /&gt;
  &amp;lt;code&amp;gt; pip3 install selenium &amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt;TOASTER_TESTS_BROWSER=phantomjs bitbake/lib/toaster/manage.py test orm toastergui tests.browser &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6) Add signed off by to the commit messages (Note: If you applied the mbox patch with &amp;lt;code&amp;gt; git am -s foo.mbox&amp;lt;/code&amp;gt; You do not need to sign off again.)&lt;br /&gt;
   &amp;lt;code&amp;gt;git filter-branch -f --msg-filter &#039;cat &amp;amp;&amp;amp; echo &amp;quot;Signed-off-by: $(git config --get user.name) &amp;lt;$(git config --get user.email)&amp;gt;&amp;quot;&#039; master..HEAD&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7) Push the modified commit messages and rebased version to poky-contrib&lt;br /&gt;
   &amp;lt;code&amp;gt;git push -u poky-contrib yourname/submit/username/toaster/FeatureOrBug  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8) Use the create-pull-request script (from poky) to create a pull request for the appropriate tree/mailing list&lt;br /&gt;
&lt;br /&gt;
(a) For the &#039;bitbake&#039; tree (e.g. bitbake/.../toasterui.py, bitbake/.../toastergui/*):&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/create-pull-request -d bitbake -s &amp;quot;toaster: Fixes and clean ups&amp;quot; -u poky-contrib -r origin/master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(b) for the &#039;meta&#039; tree (e.g. meta/classes/toaster.class):&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/create-pull-request -d meta -s &amp;quot;toaster: Fixes and clean ups&amp;quot; -u poky-contrib -r origin/master&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;strong&amp;gt;Note: If the patch creates any NEW files, the integration scripts that pull it into bitbake will fail. So, if new files are created as part of this patch set, you need to explicitly point that out in the body of the email for the patch set or do it as a PR rather than as a patch set.&lt;br /&gt;
&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
9) Review their content, especially the summary mail:&lt;br /&gt;
   &amp;lt;code&amp;gt;edit ./pull-&amp;lt;pid&amp;gt;/0000-cover-letter.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
10) When you are satisfied, you can send them with:&lt;br /&gt;
   --- for the &#039;bitbake&#039; tree:&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/send-pull-request -a -p ./pull-&amp;lt;pid&amp;gt;&amp;lt;/code&amp;gt; -t bitbake-devel@lists.openembedded.org&lt;br /&gt;
   --- for the &#039;meta&#039; tree:&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/send-pull-request -a -p ./pull-&amp;lt;pid&amp;gt;&amp;lt;/code&amp;gt; -t openembedded-core@lists.openembedded.org&lt;br /&gt;
&lt;br /&gt;
==== Submitting patches for prior releases ====&lt;br /&gt;
&lt;br /&gt;
The procedure is the same, but using the prior release as the base branch instead of the &amp;quot;master&amp;quot; branch in bitbake.&lt;br /&gt;
&lt;br /&gt;
Also, make sure that you add the name of the prior release for which the patchset is intended in the prefix of the patchset, as parameter to the &amp;quot;create-pull-request&amp;quot; command, e.g. &#039;&#039;&#039;-p 1.26&#039;&#039;&#039; for the 1.26 branch.&lt;br /&gt;
&lt;br /&gt;
==== Gotchas ====&lt;br /&gt;
===== Too Big =====&lt;br /&gt;
Sometimes the mailer will refuse to send patches, especially on binary or long-line files. The proper way to go around that is to reply to the patchset you&#039;ve submitted to the mailing list, asking for a git pull directly from the poky-contrib branch.&lt;br /&gt;
===== One Patch of a Long Patch Set Needs Resubmission =====&lt;br /&gt;
Suppose you upstream a 10 commit patch set to the bitbake-devel list and someone finds an issue with patch #3.  Regenerating the whole series is silly so how do you address this?  First, follow the bitbake submission steps until you end up on the yourname/submit/the/target/branch  branch.  Then you can (note &amp;lt;strong&amp;gt;the reset --hard will wipe any local changes in your working dir so commit or stash first&amp;lt;/strong&amp;gt;):&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  git checkout -b yourname/submit/the/target/branch-newHEAD&lt;br /&gt;
  git reset --hard &amp;lt;commit of resubmission issue&amp;gt; &lt;br /&gt;
  git commit --amend --signoff &lt;br /&gt;
  git send-email --in-reply-to=&amp;quot;longNumber.git.me@mycomp.com&amp;quot; --subject-prefix=&amp;quot;bitbake-devel] [PATCHVX 03/10&amp;quot;  --to=bitbake-devel@lists.openembedded.org --no-chain-reply-to --suppress-cc=all -M -1 --relative=bitbake&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The longNumber.git.me@mycomp.com comes from the email message id for the particular patch #3 so that the email threading works. In gmail, you can click on the dropdown button on the right side of the screen and choose &amp;quot;Show Original&amp;quot;.  This will have a field in the header like Message-Id: &amp;lt;4551b56f132497c055f39567946a5d3be347d770.1468363530.git.myemailusername@mycompany.com&amp;gt;  The entire string except the &#039;&amp;lt;&amp;gt;&#039; are used.  for example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  --in-reply-to=&amp;quot;4551b56f132497c055f39567946a5d3be347d770.1468363530.git.myemailusername@mycompany.com&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first issue you are likely to face is that the git filter-branch command in the standard instructions may sign off on too many commits.  If you know you just want to sign off on the last 7 commits on the yourname/submit/the/target/branch you can:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  git filter-branch -f --msg-filter &#039;cat &amp;amp;&amp;amp; echo &amp;quot;Signed-off-by: $(git config --get user.name) &amp;lt;$(git config --get user.email)&amp;gt;&amp;quot;&#039; HEAD~7..HEAD&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Submitting patches for documentation ===&lt;br /&gt;
&lt;br /&gt;
Documentation patches should be sent to [https://lists.yoctoproject.org/listinfo/yocto Yocto mailing list] with [yocto-docs] in the subject, CC Scott Rifenbark (and make sure you send it to his gmail, not his defunct Intel address). For his email address, look at [http://lists.openembedded.org/pipermail/bitbake-devel/2015-October/006632.html this post].&lt;br /&gt;
&lt;br /&gt;
== Code syle guide ==&lt;br /&gt;
&lt;br /&gt;
=== Templates ===&lt;br /&gt;
&lt;br /&gt;
Django has a template language which allows us to render pages based on the data (context). We use the template language to setup the initial state of the page and to create re-usable components that can be included in other pages.&lt;br /&gt;
&lt;br /&gt;
The recommend template code style is as follows&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Yes please:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{var}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
  {# Maintaining indentation #}&lt;br /&gt;
  {% if %}&lt;br /&gt;
   &amp;lt;p&amp;gt;this&amp;lt;/p&amp;gt;&lt;br /&gt;
  {% else %}&lt;br /&gt;
   &amp;lt;p&amp;gt;that&amp;lt;/p&amp;gt;&lt;br /&gt;
  {% endif %}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{% comment %}&lt;br /&gt;
This is a longer comment that describes all the things&lt;br /&gt;
that are below in quite a bit of detail because they&#039;re&lt;br /&gt;
a little more difficult to understand.&lt;br /&gt;
{% endcomment %}&lt;br /&gt;
&lt;br /&gt;
{% for layer in layers_list %}&lt;br /&gt;
 {{layer}}&lt;br /&gt;
{% endfor %}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No thank you:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{var}}&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
{# Maintaining indentation #}&lt;br /&gt;
{%if%}&amp;lt;p&amp;gt;this&amp;lt;/p&amp;gt;{%else%}&amp;lt;p&amp;gt;that&amp;lt;/p&amp;gt;{%endif%}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{#This is a longer comment that describes all the things that are below in quite a bit of detail because they&#039;re a little more difficult to understand. #}&lt;br /&gt;
{%for o in layers_list%}{{o}}{%endfor%}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* Maintain indentation as you would with other languages&lt;br /&gt;
* White space after &#039;%&#039;&lt;br /&gt;
* Comment blocks for longer comments&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Javascript ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Yes please:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;use strict&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* These hold some numbers */&lt;br /&gt;
var oneVar = 1;&lt;br /&gt;
var twoVar = 2;&lt;br /&gt;
&lt;br /&gt;
var cheesesTypes = {&lt;br /&gt;
  cheddar : 1,&lt;br /&gt;
  stilton : 2,&lt;br /&gt;
  emmental : 3, &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function doThingsHere(){&lt;br /&gt;
  return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* If one equals two do some other things and make sure that&lt;br /&gt;
 * if the the click handler is setup correctly.&lt;br /&gt;
 */&lt;br /&gt;
if (one === two) {&lt;br /&gt;
  var cheese = &amp;quot;cheddar&amp;quot;;&lt;br /&gt;
  oneVar = doThingsHere();&lt;br /&gt;
&lt;br /&gt;
  $(this).click(function (event){&lt;br /&gt;
    alert(&amp;quot;Hello&amp;quot;);&lt;br /&gt;
  });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$(&amp;quot;#little-mouse&amp;quot;).focusout(function(){&lt;br /&gt;
  alert(&amp;quot;bye&amp;quot;)&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
if (oneVar)&lt;br /&gt;
  noThingHere();&lt;br /&gt;
else&lt;br /&gt;
  doThingHere();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No thank you:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// These hold some numbers&lt;br /&gt;
oneVar = 1&lt;br /&gt;
twoVar = 2&lt;br /&gt;
&lt;br /&gt;
var cheesesTypes = { cheddar : 1, stilton : 2,  emmental : 3, }&lt;br /&gt;
&lt;br /&gt;
function doThingsHere ()&lt;br /&gt;
{&lt;br /&gt;
return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//If one equals two do some other things and make sure that if the the click handler is setup correctly.&lt;br /&gt;
if( one === two ) {&lt;br /&gt;
var cheese = &amp;quot;cheddar&amp;quot;;&lt;br /&gt;
oneVar = doThingsHere();&lt;br /&gt;
&lt;br /&gt;
    $(this).click(function(event){ alert(&amp;quot;Hello&amp;quot;); });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
document.getElementById(&amp;quot;little-mouse&amp;quot;).addEventListener(&amp;quot;focusout&amp;quot;, function(){&lt;br /&gt;
  alert(&amp;quot;bye&amp;quot;)&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
if (oneVar)&lt;br /&gt;
{&lt;br /&gt;
  noThingHere();&lt;br /&gt;
} else {  doThingHere(); }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* Variables should be marked with &amp;quot;var&amp;quot; &lt;br /&gt;
* Semicolons should be used&lt;br /&gt;
* Keep as close to 80 cols as possible&lt;br /&gt;
* Use 2 space per indentation&lt;br /&gt;
* Open curly braces after parenthesis for functions and close on a new line&lt;br /&gt;
* Use camelCase for function names and variable names &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make use of running your Javascript through jshint we have a .jshint configuration file in that js directory (toastergui/static/js)&lt;br /&gt;
&lt;br /&gt;
e.g. install jshint and add to your current PATH, then run:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ npm install jshint; export PATH=$PATH:$PWD/node_modules/.bin/&lt;br /&gt;
 $ jshint ./toastergui/static/js/base.js&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Yes please:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;something-area&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p class=&amp;quot;important&amp;quot;&amp;gt;This is some text&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
  &amp;lt;p id=&amp;quot;important-text&amp;gt;This is some text&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No thank you:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;somethingarea&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p class=&amp;quot;Important&amp;quot;&amp;gt;This is some text&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;somethingarea&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p id=&amp;quot;ImportantText&amp;quot;&amp;gt;This is&lt;br /&gt;
some text&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* 2 space indentation&lt;br /&gt;
* Lower case, ids hyphenated when multiple words&lt;br /&gt;
* No duplicate ids &lt;br /&gt;
&lt;br /&gt;
* Run your HTML through a [http://validator.w3.org/#validate_by_input HTML validator] available for [http://validator.w3.org/source/ local install]. The w3c validator it&#039;s self doesn&#039;t currently validate html5, it uses as a back end [https://validator.github.io/validator/ Nu Html Checker] which can be installed as a standalone service, full instructions in the readme.&lt;br /&gt;
&lt;br /&gt;
Quick install instructions:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $ mkdir html5-validator &amp;amp;&amp;amp; cd html5-validator&lt;br /&gt;
 $ export JAVA_HOME=/usr/lib/jvm/java-6-openjdk&lt;br /&gt;
 $ git clone https://github.com/validator/validator.git&lt;br /&gt;
 $ python build/build.py all&lt;br /&gt;
 $ python build/build.py all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HTML can be indented quickly using tidy, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 tidy -xml --indent auto --indent-spaces 2 --quiet yes -w -1 --show-body-only yes  ./index.html &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
Lenient [https://www.python.org/dev/peps/pep-0008 pep8]&lt;br /&gt;
Ignoring most of the whitespace around character issues (E124,E203,E201,E265,E303,E302,E231) see toaster/.pep8 and [http://pep8.readthedocs.org/en/latest/intro.html#error-codes error code list]&lt;br /&gt;
&lt;br /&gt;
Fix all issues identified by running code through pep8. We have a fairly lenient config file (toaster/.pep8).&lt;br /&gt;
&lt;br /&gt;
e.g.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ pep8 ./toastergui/urls.py&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run code through pylint and fix identified issues - Some can be reasonably ignored such as doc strings for every function or star-args. No pylintrc config provided here as most issues identified are highly contextual and should be ignored on a case by case basis.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ pylint --load-plugins pylint_django toastergui/tests.py&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Working with design ==&lt;br /&gt;
&lt;br /&gt;
Yes, the Yocto Project is one of those lucky projects with designers around to help in UI matters. We have a document explaining how to work with the design contributors: [[File:Working_with_design.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Debugging Toaster ==&lt;br /&gt;
&lt;br /&gt;
Toaster can be quite complex given that it includes a wide range of technologies and languages from bitbake, events, python, Django, Sqlite, Javescript, CCS, HTML, and more. Here are hints and tips for debugging all of these aspects of Toaster.&lt;br /&gt;
&lt;br /&gt;
=== General debugging tips ===&lt;br /&gt;
&lt;br /&gt;
* The logger is your best friend&lt;br /&gt;
* When possible, build from command line in the Toaster environment to see log messages and errors directly&lt;br /&gt;
* Use &amp;quot;quilt-native&amp;quot; as your quick sanity build target&lt;br /&gt;
* For python code you can use pudb (https://wiki.yoctoproject.org/wiki/TipsAndTricks/DebuggingBitbakeInPudb)&lt;br /&gt;
* For bbclass code (toaster.bbclass) find or set up a python section to use pudb (see above link)&lt;br /&gt;
* Brute force find is your friend for mysterious error messages and tracking all places a variable is used&lt;br /&gt;
**  find bitbake/lib/toaster -exec grep -l  &amp;quot;SEARCH_TEXT&amp;quot; {} \; 2&amp;gt; /dev/null&lt;br /&gt;
* Look in https://wiki.yoctoproject.org/wiki/TipsAndTricks&lt;br /&gt;
&lt;br /&gt;
=== How to debug a ... ===&lt;br /&gt;
&lt;br /&gt;
* A stalled build:&lt;br /&gt;
** Cancel the build and look at one of the below logs to find the exception. The error message should give a clue on the user resolution or indicate a bug to file&lt;br /&gt;
** Failures in git and shell calls are (as of YP-2.4 Rocko) captured as visible build errors in the GUI&lt;br /&gt;
* Python file of a build management script (localhostbecontroller.py,...):&lt;br /&gt;
** Use log statements, and watch &amp;quot;build/toaster_runbuilds.log&amp;quot; (where you started Toaster)&lt;br /&gt;
* Python file of a build runtime scripts:&lt;br /&gt;
** Use log statements, and watch &amp;quot;build-toaster-x/toaster_ui.log&amp;quot;&lt;br /&gt;
* Python file of a Toaster management script (projects, tables):&lt;br /&gt;
** Use log statements, and watch &amp;quot;build/toaster_web.log&amp;quot; (where you started Toaster)&lt;br /&gt;
* Template file&lt;br /&gt;
** Usually the error will appear in the browser via Django, with a trace&lt;br /&gt;
** Add random display text to insure the page your editing is the one that shows&lt;br /&gt;
** Display internal values via page template to see what gets passed&lt;br /&gt;
** Add internal values into the context and add to the page template&lt;br /&gt;
** Use the Firefox/Chrome developer &amp;quot;inspector&amp;quot; to examine the DOM&lt;br /&gt;
* Javascript file&lt;br /&gt;
** Use the Firefox/Chrome developer &amp;quot;inspector&amp;quot; to do inline debugging&lt;br /&gt;
** Watch the Firefox/Chrome developer &amp;quot;console&amp;quot; for error messages&lt;br /&gt;
* The Toaster Database&lt;br /&gt;
** Use an application like &amp;quot;sqlitebrowser&amp;quot; to examine the tables and records&lt;br /&gt;
** Use a Python script to find and dump desired database records (see http://events.linuxfoundation.org/sites/events/files/slides/BitbakeAnalytics_ELC_Portland.pdf)&lt;br /&gt;
&lt;br /&gt;
=== Specific error scenarios ... ===&lt;br /&gt;
&lt;br /&gt;
* The build progress gets stuck at &amp;quot;Loading...&amp;quot;&lt;br /&gt;
** You have a syntax error, either in &#039;localhostbecontroller.py&#039;, the helper classes in &#039;models.py&#039;, or in the related javascript. Look at the tail of &amp;quot;toaster_runbuilds.log&amp;quot; file for pythons errors, and in your browser&#039;s &amp;quot;Console&amp;quot; for javascript errors.&lt;br /&gt;
* The message &amp;quot;Sorry, An error has occurred loading this page&amp;quot;&lt;br /&gt;
** The included javascript has a syntax error. The HTML page being rendered has local JS code at the top that caches these errors and displays the observed message (in order to be less ugly to the customer). That code also tries to add the error message to the browser console but that does not always work, and you are left with no clue&lt;br /&gt;
** You can start bisecting the recent edits you made to the respective JS files to locate the problem change&lt;br /&gt;
** You can also add a breakpoint in the mentioned catch code to see if you can see the error directly&lt;br /&gt;
&lt;br /&gt;
=== How to update from a fix in a ... ===&lt;br /&gt;
&lt;br /&gt;
* Template file: save your text edit and refresh page&lt;br /&gt;
* Javascript file: save your text edit and refresh page (or leave page and come back)&lt;br /&gt;
* Builder scripts: save your text edit and restart Toaster (&amp;quot;localhostbecontroller.py&amp;quot;, &amp;quot;buildinfohelper.py&amp;quot;, &amp;quot;toasterui.py&amp;quot;, &amp;quot;bbcontroller.py&amp;quot;,...)&lt;br /&gt;
* Views and URLs: save your text edit and refresh page&lt;br /&gt;
* Model class members: save your text edit and restart Toaster. You may also need a migration file.&lt;br /&gt;
* Model method: save your text edit and refresh page, else restart Toaster&lt;br /&gt;
* Fixture file (settings.xml, poky.xml, custom.xml): delete Toaster database and restart fresh&lt;br /&gt;
&lt;br /&gt;
=== Where to debug ... ===&lt;br /&gt;
&lt;br /&gt;
* Toaster start and stop, database init&lt;br /&gt;
** bin/toaster&lt;br /&gt;
* Project Defaults (Default machine, distro, layers, ...)&lt;br /&gt;
** bldcontrol/management/commands/checksettings.py&lt;br /&gt;
** orm/fixtures/*.xml&lt;br /&gt;
* Layer Index content (Available machines, distros, layers, ...)&lt;br /&gt;
** orm/management/commands/lsupdates.py&lt;br /&gt;
* Build cloning&lt;br /&gt;
** bldcontrol/localhostbecontroller.py&lt;br /&gt;
* Build start&lt;br /&gt;
** bldcontrol/localhostbecontroller.py&lt;br /&gt;
* URL mappings&lt;br /&gt;
** toastergui/urls.py&lt;br /&gt;
* Views&lt;br /&gt;
** toastergui/views.py&lt;br /&gt;
** toastergui/templates/*&lt;br /&gt;
* Toaster Tables (Layers, Distros, Machines, ...)&lt;br /&gt;
** toastergui/tables.py&lt;br /&gt;
** toastergui/static/js/libtoaster.js&lt;br /&gt;
* Events&lt;br /&gt;
** meta/classes/toaster.bbclass -&amp;gt; &lt;br /&gt;
** lib/bb/ui/toasterui.py -&amp;gt; &lt;br /&gt;
** lib/bb/ui/buildinfohelper.py -&amp;gt; &lt;br /&gt;
** orm/models.py et. al.&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=File:YP_Presentations_Summary.xlsx&amp;diff=86522</id>
		<title>File:YP Presentations Summary.xlsx</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=File:YP_Presentations_Summary.xlsx&amp;diff=86522"/>
		<updated>2024-12-04T04:16:45Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: David Reyna uploaded a new version of File:YP Presentations Summary.xlsx&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Spread sheet of the YP Presentation archive, under active updates.&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=File:YP_Presentations_Summary.xlsx&amp;diff=86517</id>
		<title>File:YP Presentations Summary.xlsx</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=File:YP_Presentations_Summary.xlsx&amp;diff=86517"/>
		<updated>2024-12-03T06:12:17Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: David Reyna uploaded a new version of File:YP Presentations Summary.xlsx&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Spread sheet of the YP Presentation archive, under active updates.&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=YoctoProject_Summit_yps2024.12&amp;diff=86506</id>
		<title>YoctoProject Summit yps2024.12</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=YoctoProject_Summit_yps2024.12&amp;diff=86506"/>
		<updated>2024-11-26T08:12:29Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: Make DO links in &amp;#039;big&amp;#039; type&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The Yocto Project Summit 2024.12 =&lt;br /&gt;
The Yocto Project Summit, yps2024.12, is a virtual conference from December 3rd to 5th, 2024 to gather members of the Yocto Project community together to discuss ideas and present information related to The Yocto Project.&lt;br /&gt;
&lt;br /&gt;
== Organizing Committee ==&lt;br /&gt;
The organizing committee consists of (alphabetical by first name):&lt;br /&gt;
* David Reyna&lt;br /&gt;
* Josef Holzmayr-Khosh Amoz (YP Community Manager)&lt;br /&gt;
* Megan Knight (Advocacy Manager)&lt;br /&gt;
* Philip Balister&lt;br /&gt;
&lt;br /&gt;
== Registration ==&lt;br /&gt;
&lt;br /&gt;
Registration Link: https://cvent.me/V5kARQ&lt;br /&gt;
&lt;br /&gt;
== Platforms ==&lt;br /&gt;
In terms of platforms we&#039;re using:&lt;br /&gt;
* pretalx for the CfP and schedule&lt;br /&gt;
* the LF&#039;s cvent for registration&lt;br /&gt;
* Zoom for the conference video&lt;br /&gt;
* irc for the conference chat (channel #yocto-summit-2024.12 on Libera.Chat)&lt;br /&gt;
* Digital Ocean for the hands-on classes&lt;br /&gt;
&lt;br /&gt;
== Hands-on Servers Information (Pre-event Preparation) ==&lt;br /&gt;
# If you already have a Digital Ocean account, skip the next 2 steps.&lt;br /&gt;
# To create a Digital Ocean account, please sign up @ &amp;lt;big&amp;gt;[https://do.co/yoctoproject DigitalOcean]&amp;lt;/big&amp;gt; to receive a $200 credit for new users.&lt;br /&gt;
# Confirm your email and add a payment method to satisfy abuse requirements - you won&#039;t be charged unless you leave the training machine running long past the summit&lt;br /&gt;
# Visit &amp;lt;big&amp;gt;https://cloud.digitalocean.com/account/api/tokens&amp;lt;/big&amp;gt; and generate a new token named &#039;&#039;&#039;YPSummit&#039;&#039;&#039;, and copy the string that pops up.&lt;br /&gt;
# Please complete this &amp;lt;big&amp;gt;[https://forms.gle/rPtZ84gbSmKJo2cN9 FORM]&amp;lt;/big&amp;gt; so your API key can be added to the provisioning scripts. It&#039;s unlikely we will be able to offer additional credit to existing account holders this year. Leave the API key blank if you&#039;d like Yocto Project to cover training VM expenses. &lt;br /&gt;
&lt;br /&gt;
After the form has been filled by all participants we will provision machines. When the machines are ready logins will be &amp;quot;ssh ilab01@AXAXAXAX-summit.yocto.io&amp;quot; where AXAXAXAX are the first 8 characters of your confirmation string. The password is the full 11 character confirmation string.&lt;br /&gt;
&lt;br /&gt;
Once you have a verified working server you may delete your api key at &amp;lt;big&amp;gt;https://cloud.digitalocean.com/account/api/tokens&amp;lt;/big&amp;gt;. Otherwise all resources will be removed after the training. Any retained servers will be billed to you after the promotional credit expires in 60 days.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Lab files are available during the event at http://summit.yocto.io/yps2024.12.tgz --&amp;gt;&lt;br /&gt;
Lab files will be available for download once the event begins.&lt;br /&gt;
&lt;br /&gt;
== For more information ==&lt;br /&gt;
* https://www.yoctoproject.org/event/2024-12/&lt;br /&gt;
* https://pretalx.com/yocto-project-summit-2024-12/&lt;br /&gt;
&lt;br /&gt;
== Slide template for presenters ==&lt;br /&gt;
* https://docs.google.com/presentation/d/1ttXgB8Z1gasL7ItCYZ-uXT_FmfnIgPoMK_JtjvBrj1g&lt;br /&gt;
** keep the first and last slides&lt;br /&gt;
** edit the first slide to include your name, presentation title, and (optionally) your company&lt;br /&gt;
** the rest of the slides are examples and can be duplicated, edited, and/or removed&lt;br /&gt;
** please upload your finished slides to your specific event in pretalx&lt;br /&gt;
** Pretalx has an upload limit of 10Mb. Please for example compress your PDF files when you &amp;quot;Save-as&amp;quot;, or use a free service like &amp;quot;https://www.adobe.com/acrobat/online/compress-pdf.html&amp;quot;&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=File:YP_Presentations_Summary.xlsx&amp;diff=86504</id>
		<title>File:YP Presentations Summary.xlsx</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=File:YP_Presentations_Summary.xlsx&amp;diff=86504"/>
		<updated>2024-11-22T03:35:33Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: David Reyna uploaded a new version of File:YP Presentations Summary.xlsx&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Spread sheet of the YP Presentation archive, under active updates.&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=File:YP_Presentations_Summary.xlsx&amp;diff=86501</id>
		<title>File:YP Presentations Summary.xlsx</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=File:YP_Presentations_Summary.xlsx&amp;diff=86501"/>
		<updated>2024-11-21T09:16:52Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: Spread sheet of the YP Presentation archive, under active updates.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Spread sheet of the YP Presentation archive, under active updates.&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=YoctoProject_Summit_yps2024.12&amp;diff=86500</id>
		<title>YoctoProject Summit yps2024.12</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=YoctoProject_Summit_yps2024.12&amp;diff=86500"/>
		<updated>2024-11-20T22:20:54Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: Created page with &amp;quot;= The Yocto Project Summit 2024.12 = The Yocto Project Summit, yps2024.12, is a virtual conference from December 3rd to 5th, 2024 to gather members of the Yocto Project community together to discuss ideas and present information related to The Yocto Project.  == Organizing Committee == The organizing committee consists of (alphabetical by first name): * David Reyna * Josef Holzmayr-Khosh Amoz (YP Community Manager) * Megan Knight (Advocacy Manager) * Philip Balister  ==...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The Yocto Project Summit 2024.12 =&lt;br /&gt;
The Yocto Project Summit, yps2024.12, is a virtual conference from December 3rd to 5th, 2024 to gather members of the Yocto Project community together to discuss ideas and present information related to The Yocto Project.&lt;br /&gt;
&lt;br /&gt;
== Organizing Committee ==&lt;br /&gt;
The organizing committee consists of (alphabetical by first name):&lt;br /&gt;
* David Reyna&lt;br /&gt;
* Josef Holzmayr-Khosh Amoz (YP Community Manager)&lt;br /&gt;
* Megan Knight (Advocacy Manager)&lt;br /&gt;
* Philip Balister&lt;br /&gt;
&lt;br /&gt;
== Registration ==&lt;br /&gt;
&lt;br /&gt;
Registration Link: https://cvent.me/V5kARQ&lt;br /&gt;
&lt;br /&gt;
== Platforms ==&lt;br /&gt;
In terms of platforms we&#039;re using:&lt;br /&gt;
* pretalx for the CfP and schedule&lt;br /&gt;
* the LF&#039;s cvent for registration&lt;br /&gt;
* Zoom for the conference video&lt;br /&gt;
* irc for the conference chat (channel #yocto-summit-2024.12 on Libera.Chat)&lt;br /&gt;
* Digital Ocean for the hands-on classes&lt;br /&gt;
&lt;br /&gt;
== Hands-on Servers Information (Pre-event Preparation) ==&lt;br /&gt;
# If you already have a Digital Ocean account, skip the next 2 steps&lt;br /&gt;
# To create a Digital Ocean account, please sign up @ [https://do.co/yoctoproject DigitalOcean] &lt;br /&gt;
# Confirm your email and add a payment method to satisfy abuse requirements - you won&#039;t be charged unless you leave the training machine running long past the summit&lt;br /&gt;
# Visit https://cloud.digitalocean.com/account/api/tokens and generate a new token named &#039;&#039;&#039;YPSummit&#039;&#039;&#039;, and copy the string that pops up.&lt;br /&gt;
# Please complete this [https://forms.gle/53NFyCRaEpmRWuaa8 form] so your API key can be added to the provisioning scripts and we can top up your account credit.&lt;br /&gt;
&lt;br /&gt;
After the form has been filled by all participants we will provision machines. When the machines are ready logins will be &amp;quot;ssh ilab01@AXAXAXA-summit.yocto.io&amp;quot; where AXAXAXA are the first 7 characters of your confirmation string. The password is the full 11 character confirmation string.&lt;br /&gt;
&lt;br /&gt;
Once you have a verified working server you may delete your api key at https://cloud.digitalocean.com/account/api/tokens. Otherwise all resources will be removed after the training. Any retained servers will be billed to you after the promotional credit expires in 60 days.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Lab files are available during the event at http://summit.yocto.io/yps2023.11.tgz --&amp;gt;&lt;br /&gt;
Lab files will be available for download once the event begins.&lt;br /&gt;
&lt;br /&gt;
== For more information ==&lt;br /&gt;
* https://www.yoctoproject.org/event/2024-12/&lt;br /&gt;
* https://pretalx.com/yocto-project-summit-2024-12/&lt;br /&gt;
&lt;br /&gt;
== Slide template for presenters ==&lt;br /&gt;
* https://docs.google.com/presentation/d/1ttXgB8Z1gasL7ItCYZ-uXT_FmfnIgPoMK_JtjvBrj1g&lt;br /&gt;
** keep the first and last slides&lt;br /&gt;
** edit the first slide to include your name, presentation title, and (optionally) your company&lt;br /&gt;
** the rest of the slides are examples and can be duplicated, edited, and/or removed&lt;br /&gt;
** please upload your finished slides to your specific event in pretalx&lt;br /&gt;
** Pretalx has an upload limit of 10Mb. Please for example compress your PDF files when you &amp;quot;Save-as&amp;quot;, or use a free service like &amp;quot;https://www.adobe.com/acrobat/online/compress-pdf.html&amp;quot;&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Project_EOSS_2024&amp;diff=86334</id>
		<title>Yocto Project EOSS 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Project_EOSS_2024&amp;diff=86334"/>
		<updated>2024-05-09T16:47:08Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Yocto Project® EOSS Mini-Summit 2024 ==&lt;br /&gt;
&lt;br /&gt;
The Yocto Project ran a mini-Summit at EOSS in 2024. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EOSS home page: https://www.eosconference.com/san-diego/agenda/&lt;br /&gt;
&lt;br /&gt;
Mini-Summit: https://www.yoctoproject.org/event/yocto-project-at-embedded-open-source-summit/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;DATE&#039;&#039;&#039;:​ April 16-18, 2024&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LOCATION&#039;&#039;&#039;:​  Seattle, Washington&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Slides ==&lt;br /&gt;
&lt;br /&gt;
Slides are here:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example Wiki page with slides attached ==&lt;br /&gt;
&lt;br /&gt;
https://wiki.yoctoproject.org/wiki/DevDay_Portland_2018&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Project_EOSS_2024&amp;diff=86333</id>
		<title>Yocto Project EOSS 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Project_EOSS_2024&amp;diff=86333"/>
		<updated>2024-05-09T16:37:53Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: Created page with &amp;quot;  == Yocto Project® EOSS Mini-Summit 2024 ==  The Yocto Project ran a mini-Summit at EOSS in 2024.    EOSS home page: https://www.eosconference.com/san-diego/agenda/  Mini-Summit: https://www.yoctoproject.org/event/yocto-project-at-embedded-open-source-summit/   * &amp;#039;&amp;#039;&amp;#039;DATE&amp;#039;&amp;#039;&amp;#039;:​ April 16-18, 2024  * &amp;#039;&amp;#039;&amp;#039;LOCATION&amp;#039;&amp;#039;&amp;#039;:​  Seattle, Washington   == Slides ==  Slides are here:&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Yocto Project® EOSS Mini-Summit 2024 ==&lt;br /&gt;
&lt;br /&gt;
The Yocto Project ran a mini-Summit at EOSS in 2024. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EOSS home page: https://www.eosconference.com/san-diego/agenda/&lt;br /&gt;
&lt;br /&gt;
Mini-Summit: https://www.yoctoproject.org/event/yocto-project-at-embedded-open-source-summit/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;DATE&#039;&#039;&#039;:​ April 16-18, 2024&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LOCATION&#039;&#039;&#039;:​  Seattle, Washington&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Slides ==&lt;br /&gt;
&lt;br /&gt;
Slides are here:&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Contribute_to_Toaster&amp;diff=86104</id>
		<title>Contribute to Toaster</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Contribute_to_Toaster&amp;diff=86104"/>
		<updated>2023-12-01T19:05:55Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Toaster]]&lt;br /&gt;
This page summarises the Toaster development process. We hope this will help you start contributing to the project. We were previously using a process that involved the toaster-next branch on poky-contrib.  This workflow was especially useful in an environment where Toaster was undergoing a lot of change and needed the ability to layer patch sets upon each other before they had been taken up by bitbake.  Since that is not currently the case, toaster-next just adds complication; so it has been removed from this workflow.  See [[Contribute to Toaster (toaster-next version)]] for the old toaster-next based workflow.&lt;br /&gt;
&lt;br /&gt;
== What can I do? ==&lt;br /&gt;
&lt;br /&gt;
The [https://bugzilla.yoctoproject.org/buglist.cgi?product=Toaster Yocto Project Bugzilla instance] lists all the things that need to be done:&lt;br /&gt;
&lt;br /&gt;
* If the issue says &amp;lt;strong&amp;gt;GUI design available&amp;lt;/strong&amp;gt; in the Whiteboard field, there is a design specification document attached to the issue that you should follow. Send questions / comments about it to the [https://lists.yoctoproject.org/listinfo/toaster Toaster mailing list]&lt;br /&gt;
* If the issue says &amp;lt;strong&amp;gt;GUI design pending&amp;lt;/strong&amp;gt; in the Whiteboard field, there is some design work still to be done. Feel free to take the issue and send an email to the [https://lists.yoctoproject.org/listinfo/toaster Toaster mailing list] to find out why the design work is not done yet&lt;br /&gt;
&lt;br /&gt;
== Set up the local repository ==&lt;br /&gt;
&lt;br /&gt;
For development of Toaster we recommend setting up a local install of Toaster. Installation instructions are available in the main [https://docs.yoctoproject.org/toaster-manual/index.html Toaster documentation]&lt;br /&gt;
&lt;br /&gt;
== Submitting patches ==&lt;br /&gt;
&lt;br /&gt;
Publishing your patches to Toaster is a two step process.&lt;br /&gt;
# Sending patches to the [https://lists.yoctoproject.org/listinfo/toaster/| Toaster mailing list] for review&lt;br /&gt;
# Submitting the patches that you reviewed to the upstream repository&lt;br /&gt;
&lt;br /&gt;
By submitting your patches first to the Toaster mailing list, you can be sure the patches are reviewed by the people in the community who are familiar with the Toaster source code, and who have experience developing web applications.&lt;br /&gt;
&lt;br /&gt;
That also means that, by the time the patches are submitted to the upstream mailing lists, they are in pretty good shape. That helps the project maintainers, and hopefully also helps you.&lt;br /&gt;
&lt;br /&gt;
Toaster code lives in Bitbake repository at [http://git.openembedded.org/bitbake/|http://git.openembedded.org/bitbake/].&lt;br /&gt;
All contributions must be upstreamed to the Bitbake repository in order to make it to the &amp;quot;master&amp;quot; branch of the poky/ repository.&lt;br /&gt;
&lt;br /&gt;
=== Workflow ===&lt;br /&gt;
To contribute to toaster you will also need authorization to write to the upstream yocto project repository.  Contact a member of the toaster team for details.&lt;br /&gt;
&lt;br /&gt;
1) Download master branch of the yocto project&lt;br /&gt;
  &amp;lt;code&amp;gt; git clone git://git.yoctoproject.org/poky &amp;amp;&amp;amp; cd poky &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) Add poky-contrib to the local repository you set up above&lt;br /&gt;
  &amp;lt;code&amp;gt; git remote add poky-contrib ssh://git@push.yoctoproject.org/poky-contrib &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Fetch the poky-contrib branches&lt;br /&gt;
  &amp;lt;code&amp;gt; git fetch --all &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4) Start your feature branch off of master, name style of branch is convention, but suggested. &lt;br /&gt;
  &amp;lt;code&amp;gt; git checkout -b username/toaster/FeatureOrBug origin/master &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5) Do Work &lt;br /&gt;
&lt;br /&gt;
6) Test the changes. Run the Django unit tests. People put effort into these so we should make sure we use them.  This assumes you have phantomjs installed.  This can usually be done from the distribution &amp;lt;code&amp;gt; apt-get install phantomjs&amp;lt;/code&amp;gt;,  for example.  If you want to test against Chrome or Firefox, see the README in bitbake/lib/toaster/tests/browser.  &lt;br /&gt;
  &amp;lt;code&amp;gt; pip3 install selenium &amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt;TOASTER_TESTS_BROWSER=phantomjs bitbake/lib/toaster/manage.py test orm toastergui tests.browser &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Note: If you would like to run the tests in a container so they are repeatable and do not continually break due to host upgrades see [[Running Toaster Tests with Containers]]&lt;br /&gt;
&lt;br /&gt;
7) Rebase on master. It has probably changed while you were working (unless you are really really fast!)&lt;br /&gt;
  &amp;lt;code&amp;gt; git rebase origin/master &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8) Push your feature branch to poky-contrib&lt;br /&gt;
 &amp;lt;code&amp;gt; git push -u poky-contrib username/toaster/FeatureOrBug:username/toaster/FeatureOrBug&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
9) Send to the toaster-mailing list using one of the methods outlined below.&lt;br /&gt;
&lt;br /&gt;
10) NOTE: when the patch has been accepted upstream, you can clean up your poy-contrib branch with:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;code&amp;gt; git push -u poky-contrib :username/toaster/FeatureOrBug &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sending patches to Toaster Project ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;NOTE:&amp;lt;/strong&amp;gt; The format of the commit message should be like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    toaster: &amp;lt;module&amp;gt; &amp;lt;short one line summary&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    long(er) description&lt;br /&gt;
&lt;br /&gt;
    [YOCTO #0000]&lt;br /&gt;
&lt;br /&gt;
    Signed-off-by: First Last &amp;lt;name@domain.com&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where YOCTO #0000 is the related bug number if there is one. Signed off by with your git commit -s credentials.&lt;br /&gt;
&lt;br /&gt;
We accept patches on the [https://www.yoctoproject.org/tools-resources/community/mailing-lists toaster mailing list] ( toaster@yoctoproject.org ) by &amp;quot;git send-email&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
e.g.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ git send-email HEAD^ &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can use the utilities in the script directory to prepare your patch&lt;br /&gt;
&lt;br /&gt;
1) Use the create-pull-request script (from poky) to create a pull request while on your feature branch&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/create-pull-request -s &amp;quot;toaster: Fixes and clean ups&amp;quot; -u poky-contrib -r  origin/master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) Review their content, especially the summary mail:&lt;br /&gt;
   &amp;lt;code&amp;gt;edit ./pull-&amp;lt;pid&amp;gt;/0000-cover-letter.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3)When you are satisfied, you can send them with:&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/send-pull-request -a -p ./pull-&amp;lt;pid&amp;gt;&amp;lt;/code&amp;gt; -t toaster@yoctoproject.org&lt;br /&gt;
&lt;br /&gt;
A comprehensive document about commit messages is available on the [http://www.openembedded.org/wiki/Commit_Patch_Message_Guidelines openembedded wiki]&lt;br /&gt;
&lt;br /&gt;
More help learning git is available on [https://try.github.io github] and [http://git-scm.com/documentation/ the official documentation]&lt;br /&gt;
&lt;br /&gt;
=== Sending branches to Toaster Project ===&lt;br /&gt;
&lt;br /&gt;
If you wish to submit whole branches please use the poky-contrib repository see [[Poky Contributions#Poky_Contrib_Branch]] for setup guide.&lt;br /&gt;
&lt;br /&gt;
Once you have pushed a branch please then send an email to the [https://www.yoctoproject.org/tools-resources/community/mailing-lists toaster mailing list] with the subject in the following format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 [review-request] my_branch_name&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the body of the email it&#039;s useful to describe your branch&#039;s functionality, which commits and a link to the git web.&lt;br /&gt;
&lt;br /&gt;
If you need any assistance please post on the mailing list.&lt;br /&gt;
&lt;br /&gt;
=== Submitting patch sets for integration into Bitbake ===&lt;br /&gt;
&lt;br /&gt;
Toaster patches are normally submitted upstream to the BitBake repository by the reviewer (not the author). This tells the upstream maintainers that the patches have been reviewed by the people who are familiar with the Toaster source code, and makes their busy lives a bit easier.&lt;br /&gt;
&lt;br /&gt;
Since development happens on the poky-contrib repository, but the patches need to be merged to the Bitbake repository, the following process should be executed.&lt;br /&gt;
&lt;br /&gt;
1) Bring master up to date&lt;br /&gt;
  &amp;lt;code&amp;gt; git fetch origin master&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt; git checkout master &amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt; git pull [master] &amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
2) Checkout the target branch you wish to upstream&lt;br /&gt;
&lt;br /&gt;
(a) If you are working with a single branch do this:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;code&amp;gt;git checkout username/toaster/FeatureOrBug&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(b) If you are including several branches into this one submission, gather the commit IDs for each branch and do this:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;code&amp;gt;git cherry-pick commit-id-a &amp;lt;/code&amp;gt;&lt;br /&gt;
   &amp;lt;code&amp;gt;git cherry-pick commit-id-b &amp;lt;/code&amp;gt;&lt;br /&gt;
   &amp;lt;code&amp;gt;... &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Create a new branch for submission &lt;br /&gt;
   &amp;lt;code&amp;gt; git checkout -b yourname/submit/username/toaster/FeatureOrBug &amp;lt;/code&amp;gt;&lt;br /&gt;
This will look something like&lt;br /&gt;
   &amp;lt;code&amp;gt; git checkout -b bavery/submit/bob/toaster/FixBug1234 &amp;lt;/code&amp;gt;&lt;br /&gt;
where bavery is signing off on and upstreaming bob&#039;s fix to the Yocto Bugzilla bug 1234.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
---- &lt;br /&gt;
* Alternatively, you can use the patchworks web site:&lt;br /&gt;
  2)  Create a new branch for submission &lt;br /&gt;
   &amp;lt;code&amp;gt; git checkout -b yourname/submit/username/toaster/FeatureOrBug &amp;lt;/code&amp;gt;&lt;br /&gt;
This will look something like&lt;br /&gt;
   &amp;lt;code&amp;gt; git checkout -b bavery/submit/bob/toaster/FixBug1234 &amp;lt;/code&amp;gt;&lt;br /&gt;
where bavery is signing off on and upstreaming bob&#039;s fix to the Yocto Bugzilla bug 1234.&lt;br /&gt;
  3)  Download and apply the mbox patch from the website: https://patchwork.openembedded.org/project/toaster/patches/&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;code&amp;gt; git am -s the-downloaded-patch.mbox &amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
4) Make sure the branch is rebased on current master. &lt;br /&gt;
   &amp;lt;code&amp;gt;git rebase origin/master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5) Test the changes. Run the Django unit tests.  People put effort into these so we should make sure we use them. his assumes you have phantomjs installed.  This can usually be done from the distribution &amp;lt;code&amp;gt; apt-get install phantomjs&amp;lt;/code&amp;gt;,  for example.  If you want to test against Chrome or Firefox, see the README in bitbake/lib/toaster/tests/browser.&lt;br /&gt;
  &amp;lt;code&amp;gt; pip3 install selenium &amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt;TOASTER_TESTS_BROWSER=phantomjs bitbake/lib/toaster/manage.py test orm toastergui tests.browser &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6) Add signed off by to the commit messages (Note: If you applied the mbox patch with &amp;lt;code&amp;gt; git am -s foo.mbox&amp;lt;/code&amp;gt; You do not need to sign off again.)&lt;br /&gt;
   &amp;lt;code&amp;gt;git filter-branch -f --msg-filter &#039;cat &amp;amp;&amp;amp; echo &amp;quot;Signed-off-by: $(git config --get user.name) &amp;lt;$(git config --get user.email)&amp;gt;&amp;quot;&#039; master..HEAD&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7) Push the modified commit messages and rebased version to poky-contrib&lt;br /&gt;
   &amp;lt;code&amp;gt;git push -u poky-contrib yourname/submit/username/toaster/FeatureOrBug  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8) Use the create-pull-request script (from poky) to create a pull request for the appropriate tree/mailing list&lt;br /&gt;
&lt;br /&gt;
(a) For the &#039;bitbake&#039; tree (e.g. bitbake/.../toasterui.py, bitbake/.../toastergui/*):&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/create-pull-request -d bitbake -s &amp;quot;toaster: Fixes and clean ups&amp;quot; -u poky-contrib -r origin/master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(b) for the &#039;meta&#039; tree (e.g. meta/classes/toaster.class):&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/create-pull-request -d meta -s &amp;quot;toaster: Fixes and clean ups&amp;quot; -u poky-contrib -r origin/master&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;strong&amp;gt;Note: If the patch creates any NEW files, the integration scripts that pull it into bitbake will fail. So, if new files are created as part of this patch set, you need to explicitly point that out in the body of the email for the patch set or do it as a PR rather than as a patch set.&lt;br /&gt;
&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
9) Review their content, especially the summary mail:&lt;br /&gt;
   &amp;lt;code&amp;gt;edit ./pull-&amp;lt;pid&amp;gt;/0000-cover-letter.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
10) When you are satisfied, you can send them with:&lt;br /&gt;
   --- for the &#039;bitbake&#039; tree:&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/send-pull-request -a -p ./pull-&amp;lt;pid&amp;gt;&amp;lt;/code&amp;gt; -t bitbake-devel@lists.openembedded.org&lt;br /&gt;
   --- for the &#039;meta&#039; tree:&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/send-pull-request -a -p ./pull-&amp;lt;pid&amp;gt;&amp;lt;/code&amp;gt; -t openembedded-core@lists.openembedded.org&lt;br /&gt;
&lt;br /&gt;
==== Submitting patches for prior releases ====&lt;br /&gt;
&lt;br /&gt;
The procedure is the same, but using the prior release as the base branch instead of the &amp;quot;master&amp;quot; branch in bitbake.&lt;br /&gt;
&lt;br /&gt;
Also, make sure that you add the name of the prior release for which the patchset is intended in the prefix of the patchset, as parameter to the &amp;quot;create-pull-request&amp;quot; command, e.g. &#039;&#039;&#039;-p 1.26&#039;&#039;&#039; for the 1.26 branch.&lt;br /&gt;
&lt;br /&gt;
==== Gotchas ====&lt;br /&gt;
===== Too Big =====&lt;br /&gt;
Sometimes the mailer will refuse to send patches, especially on binary or long-line files. The proper way to go around that is to reply to the patchset you&#039;ve submitted to the mailing list, asking for a git pull directly from the poky-contrib branch.&lt;br /&gt;
===== One Patch of a Long Patch Set Needs Resubmission =====&lt;br /&gt;
Suppose you upstream a 10 commit patch set to the bitbake-devel list and someone finds an issue with patch #3.  Regenerating the whole series is silly so how do you address this?  First, follow the bitbake submission steps until you end up on the yourname/submit/the/target/branch  branch.  Then you can (note &amp;lt;strong&amp;gt;the reset --hard will wipe any local changes in your working dir so commit or stash first&amp;lt;/strong&amp;gt;):&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  git checkout -b yourname/submit/the/target/branch-newHEAD&lt;br /&gt;
  git reset --hard &amp;lt;commit of resubmission issue&amp;gt; &lt;br /&gt;
  git commit --amend --signoff &lt;br /&gt;
  git send-email --in-reply-to=&amp;quot;longNumber.git.me@mycomp.com&amp;quot; --subject-prefix=&amp;quot;bitbake-devel] [PATCHVX 03/10&amp;quot;  --to=bitbake-devel@lists.openembedded.org --no-chain-reply-to --suppress-cc=all -M -1 --relative=bitbake&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The longNumber.git.me@mycomp.com comes from the email message id for the particular patch #3 so that the email threading works. In gmail, you can click on the dropdown button on the right side of the screen and choose &amp;quot;Show Original&amp;quot;.  This will have a field in the header like Message-Id: &amp;lt;4551b56f132497c055f39567946a5d3be347d770.1468363530.git.myemailusername@mycompany.com&amp;gt;  The entire string except the &#039;&amp;lt;&amp;gt;&#039; are used.  for example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  --in-reply-to=&amp;quot;4551b56f132497c055f39567946a5d3be347d770.1468363530.git.myemailusername@mycompany.com&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first issue you are likely to face is that the git filter-branch command in the standard instructions may sign off on too many commits.  If you know you just want to sign off on the last 7 commits on the yourname/submit/the/target/branch you can:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  git filter-branch -f --msg-filter &#039;cat &amp;amp;&amp;amp; echo &amp;quot;Signed-off-by: $(git config --get user.name) &amp;lt;$(git config --get user.email)&amp;gt;&amp;quot;&#039; HEAD~7..HEAD&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Submitting patches for documentation ===&lt;br /&gt;
&lt;br /&gt;
Documentation patches should be sent to [https://lists.yoctoproject.org/listinfo/yocto Yocto mailing list] with [yocto-docs] in the subject, CC Scott Rifenbark (and make sure you send it to his gmail, not his defunct Intel address). For his email address, look at [http://lists.openembedded.org/pipermail/bitbake-devel/2015-October/006632.html this post].&lt;br /&gt;
&lt;br /&gt;
== Code syle guide ==&lt;br /&gt;
&lt;br /&gt;
=== Templates ===&lt;br /&gt;
&lt;br /&gt;
Django has a template language which allows us to render pages based on the data (context). We use the template language to setup the initial state of the page and to create re-usable components that can be included in other pages.&lt;br /&gt;
&lt;br /&gt;
The recommend template code style is as follows&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Yes please:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{var}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
  {# Maintaining indentation #}&lt;br /&gt;
  {% if %}&lt;br /&gt;
   &amp;lt;p&amp;gt;this&amp;lt;/p&amp;gt;&lt;br /&gt;
  {% else %}&lt;br /&gt;
   &amp;lt;p&amp;gt;that&amp;lt;/p&amp;gt;&lt;br /&gt;
  {% endif %}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{% comment %}&lt;br /&gt;
This is a longer comment that describes all the things&lt;br /&gt;
that are below in quite a bit of detail because they&#039;re&lt;br /&gt;
a little more difficult to understand.&lt;br /&gt;
{% endcomment %}&lt;br /&gt;
&lt;br /&gt;
{% for layer in layers_list %}&lt;br /&gt;
 {{layer}}&lt;br /&gt;
{% endfor %}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No thank you:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{var}}&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
{# Maintaining indentation #}&lt;br /&gt;
{%if%}&amp;lt;p&amp;gt;this&amp;lt;/p&amp;gt;{%else%}&amp;lt;p&amp;gt;that&amp;lt;/p&amp;gt;{%endif%}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{#This is a longer comment that describes all the things that are below in quite a bit of detail because they&#039;re a little more difficult to understand. #}&lt;br /&gt;
{%for o in layers_list%}{{o}}{%endfor%}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* Maintain indentation as you would with other languages&lt;br /&gt;
* White space after &#039;%&#039;&lt;br /&gt;
* Comment blocks for longer comments&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Javascript ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Yes please:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;use strict&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* These hold some numbers */&lt;br /&gt;
var oneVar = 1;&lt;br /&gt;
var twoVar = 2;&lt;br /&gt;
&lt;br /&gt;
var cheesesTypes = {&lt;br /&gt;
  cheddar : 1,&lt;br /&gt;
  stilton : 2,&lt;br /&gt;
  emmental : 3, &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function doThingsHere(){&lt;br /&gt;
  return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* If one equals two do some other things and make sure that&lt;br /&gt;
 * if the the click handler is setup correctly.&lt;br /&gt;
 */&lt;br /&gt;
if (one === two) {&lt;br /&gt;
  var cheese = &amp;quot;cheddar&amp;quot;;&lt;br /&gt;
  oneVar = doThingsHere();&lt;br /&gt;
&lt;br /&gt;
  $(this).click(function (event){&lt;br /&gt;
    alert(&amp;quot;Hello&amp;quot;);&lt;br /&gt;
  });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$(&amp;quot;#little-mouse&amp;quot;).focusout(function(){&lt;br /&gt;
  alert(&amp;quot;bye&amp;quot;)&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
if (oneVar)&lt;br /&gt;
  noThingHere();&lt;br /&gt;
else&lt;br /&gt;
  doThingHere();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No thank you:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// These hold some numbers&lt;br /&gt;
oneVar = 1&lt;br /&gt;
twoVar = 2&lt;br /&gt;
&lt;br /&gt;
var cheesesTypes = { cheddar : 1, stilton : 2,  emmental : 3, }&lt;br /&gt;
&lt;br /&gt;
function doThingsHere ()&lt;br /&gt;
{&lt;br /&gt;
return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//If one equals two do some other things and make sure that if the the click handler is setup correctly.&lt;br /&gt;
if( one === two ) {&lt;br /&gt;
var cheese = &amp;quot;cheddar&amp;quot;;&lt;br /&gt;
oneVar = doThingsHere();&lt;br /&gt;
&lt;br /&gt;
    $(this).click(function(event){ alert(&amp;quot;Hello&amp;quot;); });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
document.getElementById(&amp;quot;little-mouse&amp;quot;).addEventListener(&amp;quot;focusout&amp;quot;, function(){&lt;br /&gt;
  alert(&amp;quot;bye&amp;quot;)&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
if (oneVar)&lt;br /&gt;
{&lt;br /&gt;
  noThingHere();&lt;br /&gt;
} else {  doThingHere(); }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* Variables should be marked with &amp;quot;var&amp;quot; &lt;br /&gt;
* Semicolons should be used&lt;br /&gt;
* Keep as close to 80 cols as possible&lt;br /&gt;
* Use 2 space per indentation&lt;br /&gt;
* Open curly braces after parenthesis for functions and close on a new line&lt;br /&gt;
* Use camelCase for function names and variable names &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make use of running your Javascript through jshint we have a .jshint configuration file in that js directory (toastergui/static/js)&lt;br /&gt;
&lt;br /&gt;
e.g. install jshint and add to your current PATH, then run:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ npm install jshint; export PATH=$PATH:$PWD/node_modules/.bin/&lt;br /&gt;
 $ jshint ./toastergui/static/js/base.js&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Yes please:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;something-area&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p class=&amp;quot;important&amp;quot;&amp;gt;This is some text&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
  &amp;lt;p id=&amp;quot;important-text&amp;gt;This is some text&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No thank you:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;somethingarea&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p class=&amp;quot;Important&amp;quot;&amp;gt;This is some text&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;somethingarea&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p id=&amp;quot;ImportantText&amp;quot;&amp;gt;This is&lt;br /&gt;
some text&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* 2 space indentation&lt;br /&gt;
* Lower case, ids hyphenated when multiple words&lt;br /&gt;
* No duplicate ids &lt;br /&gt;
&lt;br /&gt;
* Run your HTML through a [http://validator.w3.org/#validate_by_input HTML validator] available for [http://validator.w3.org/source/ local install]. The w3c validator it&#039;s self doesn&#039;t currently validate html5, it uses as a back end [https://validator.github.io/validator/ Nu Html Checker] which can be installed as a standalone service, full instructions in the readme.&lt;br /&gt;
&lt;br /&gt;
Quick install instructions:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $ mkdir html5-validator &amp;amp;&amp;amp; cd html5-validator&lt;br /&gt;
 $ export JAVA_HOME=/usr/lib/jvm/java-6-openjdk&lt;br /&gt;
 $ git clone https://github.com/validator/validator.git&lt;br /&gt;
 $ python build/build.py all&lt;br /&gt;
 $ python build/build.py all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HTML can be indented quickly using tidy, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 tidy -xml --indent auto --indent-spaces 2 --quiet yes -w -1 --show-body-only yes  ./index.html &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
Lenient [https://www.python.org/dev/peps/pep-0008 pep8]&lt;br /&gt;
Ignoring most of the whitespace around character issues (E124,E203,E201,E265,E303,E302,E231) see toaster/.pep8 and [http://pep8.readthedocs.org/en/latest/intro.html#error-codes error code list]&lt;br /&gt;
&lt;br /&gt;
Fix all issues identified by running code through pep8. We have a fairly lenient config file (toaster/.pep8).&lt;br /&gt;
&lt;br /&gt;
e.g.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ pep8 ./toastergui/urls.py&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run code through pylint and fix identified issues - Some can be reasonably ignored such as doc strings for every function or star-args. No pylintrc config provided here as most issues identified are highly contextual and should be ignored on a case by case basis.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ pylint --load-plugins pylint_django toastergui/tests.py&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Working with design ==&lt;br /&gt;
&lt;br /&gt;
Yes, the Yocto Project is one of those lucky projects with designers around to help in UI matters. We have a document explaining how to work with the design contributors: [[File:Working_with_design.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Debugging Toaster ==&lt;br /&gt;
&lt;br /&gt;
Toaster can be quite complex given that it includes a wide range of technologies and languages from bitbake, events, python, Django, Sqlite, Javescript, CCS, HTML, and more. Here are hints and tips for debugging all of these aspects of Toaster.&lt;br /&gt;
&lt;br /&gt;
=== General debugging tips ===&lt;br /&gt;
&lt;br /&gt;
* The logger is your best friend&lt;br /&gt;
* When possible, build from command line in the Toaster environment to see log messages and errors directly&lt;br /&gt;
* Use &amp;quot;quilt-native&amp;quot; as your quick sanity build target&lt;br /&gt;
* For python code you can use pudb (https://wiki.yoctoproject.org/wiki/TipsAndTricks/DebuggingBitbakeInPudb)&lt;br /&gt;
* For bbclass code (toaster.bbclass) find or set up a python section to use pudb (see above link)&lt;br /&gt;
* Brute force find is your friend for mysterious error messages and tracking all places a variable is used&lt;br /&gt;
**  find bitbake/lib/toaster -exec grep -l  &amp;quot;SEARCH_TEXT&amp;quot; {} \; 2&amp;gt; /dev/null&lt;br /&gt;
* Look in https://wiki.yoctoproject.org/wiki/TipsAndTricks&lt;br /&gt;
&lt;br /&gt;
=== How to debug a ... ===&lt;br /&gt;
&lt;br /&gt;
* A stalled build:&lt;br /&gt;
** Cancel the build and look at one of the below logs to find the exception. The error message should give a clue on the user resolution or indicate a bug to file&lt;br /&gt;
** Failures in git and shell calls are (as of YP-2.4 Rocko) captured as visible build errors in the GUI&lt;br /&gt;
* Python file of a build management script (localhostbecontroller.py,...):&lt;br /&gt;
** Use log statements, and watch &amp;quot;build/toaster_runbuilds.log&amp;quot; (where you started Toaster)&lt;br /&gt;
* Python file of a build runtime scripts:&lt;br /&gt;
** Use log statements, and watch &amp;quot;build-toaster-x/toaster_ui.log&amp;quot;&lt;br /&gt;
* Python file of a Toaster management script (projects, tables):&lt;br /&gt;
** Use log statements, and watch &amp;quot;build/toaster_web.log&amp;quot; (where you started Toaster)&lt;br /&gt;
* Template file&lt;br /&gt;
** Usually the error will appear in the browser via Django, with a trace&lt;br /&gt;
** Add random display text to insure the page your editing is the one that shows&lt;br /&gt;
** Display internal values via page template to see what gets passed&lt;br /&gt;
** Add internal values into the context and add to the page template&lt;br /&gt;
** Use the Firefox/Chrome developer &amp;quot;inspector&amp;quot; to examine the DOM&lt;br /&gt;
* Javascript file&lt;br /&gt;
** Use the Firefox/Chrome developer &amp;quot;inspector&amp;quot; to do inline debugging&lt;br /&gt;
** Watch the Firefox/Chrome developer &amp;quot;console&amp;quot; for error messages&lt;br /&gt;
* The Toaster Database&lt;br /&gt;
** Use an application like &amp;quot;sqlitebrowser&amp;quot; to examine the tables and records&lt;br /&gt;
** Use a Python script to find and dump desired database records (see http://events.linuxfoundation.org/sites/events/files/slides/BitbakeAnalytics_ELC_Portland.pdf)&lt;br /&gt;
&lt;br /&gt;
=== Specific error scenarios ... ===&lt;br /&gt;
&lt;br /&gt;
* The build progress gets stuck at &amp;quot;Loading...&amp;quot;&lt;br /&gt;
** You have a syntax error, either in &#039;localhostbecontroller.py&#039;, the helper classes in &#039;models.py&#039;, or in the related javascript. Look at the tail of &amp;quot;toaster_runbuilds.log&amp;quot; file for pythons errors, and in your browser&#039;s &amp;quot;Console&amp;quot; for javascript errors.&lt;br /&gt;
* The message &amp;quot;Sorry, An error has occurred loading this page&amp;quot;&lt;br /&gt;
** The included javascript has a syntax error. The HTML page being rendered has local JS code at the top that caches these errors and displays the observed message (in order to be less ugly to the customer). That code also tries to add the error message to the browser console but that does not always work, and you are left with no clue&lt;br /&gt;
** You can start bisecting the recent edits you made to the respective JS files to locate the problem change&lt;br /&gt;
** You can also add a breakpoint in the mentioned catch code to see if you can see the error directly&lt;br /&gt;
&lt;br /&gt;
=== How to update from a fix in a ... ===&lt;br /&gt;
&lt;br /&gt;
* Template file: save your text edit and refresh page&lt;br /&gt;
* Javascript file: save your text edit and refresh page (or leave page and come back)&lt;br /&gt;
* Builder scripts: save your text edit and restart Toaster (&amp;quot;localhostbecontroller.py&amp;quot;, &amp;quot;buildinfohelper.py&amp;quot;, &amp;quot;toasterui.py&amp;quot;, &amp;quot;bbcontroller.py&amp;quot;,...)&lt;br /&gt;
* Views and URLs: save your text edit and refresh page&lt;br /&gt;
* Model class members: save your text edit and restart Toaster. You may also need a migration file.&lt;br /&gt;
* Model method: save your text edit and refresh page, else restart Toaster&lt;br /&gt;
* Fixture file (settings.xml, poky.xml, custom.xml): delete Toaster database and restart fresh&lt;br /&gt;
&lt;br /&gt;
=== Where to debug ... ===&lt;br /&gt;
&lt;br /&gt;
* Toaster start and stop, database init&lt;br /&gt;
** bin/toaster&lt;br /&gt;
* Project Defaults (Default machine, distro, layers, ...)&lt;br /&gt;
** bldcontrol/management/commands/checksettings.py&lt;br /&gt;
** orm/fixtures/*.xml&lt;br /&gt;
* Layer Index content (Available machines, distros, layers, ...)&lt;br /&gt;
** orm/management/commands/lsupdates.py&lt;br /&gt;
* Build cloning&lt;br /&gt;
** bldcontrol/localhostbecontroller.py&lt;br /&gt;
* Build start&lt;br /&gt;
** bldcontrol/localhostbecontroller.py&lt;br /&gt;
* URL mappings&lt;br /&gt;
** toastergui/urls.py&lt;br /&gt;
* Views&lt;br /&gt;
** toastergui/views.py&lt;br /&gt;
** toastergui/templates/*&lt;br /&gt;
* Toaster Tables (Layers, Distros, Machines, ...)&lt;br /&gt;
** toastergui/tables.py&lt;br /&gt;
** toastergui/static/js/libtoaster.js&lt;br /&gt;
* Events&lt;br /&gt;
** meta/classes/toaster.bbclass -&amp;gt; &lt;br /&gt;
** lib/bb/ui/toasterui.py -&amp;gt; &lt;br /&gt;
** lib/bb/ui/buildinfohelper.py -&amp;gt; &lt;br /&gt;
** orm/models.py et. al.&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Contribute_to_SRTool&amp;diff=86093</id>
		<title>Contribute to SRTool</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Contribute_to_SRTool&amp;diff=86093"/>
		<updated>2023-11-30T05:59:27Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:SRTool]]&lt;br /&gt;
This page summarizes the Security Response Tool (SRTool) development process. We hope this will help you start contributing to the project. The SRTool is based on the Yocto Project Toaster codebase (Django,Python,Javascript), so many of the process and debugging techniques apply. &lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
== Published content: General CVE management issues and the SRTool ==&lt;br /&gt;
* The SRTool paper for the Embedded Linux Conference, Edinburg 2018:&lt;br /&gt;
** https://events.linuxfoundation.org/wp-content/uploads/2017/12/Keeping-Up-With-The-Joneses-CVEs-David-Reyna-Wind-River-Systems.pdf�&lt;br /&gt;
* Wind River Blog about CVEs and the SRTool&lt;br /&gt;
** http://blogs.windriver.com/wind_river_blog/2018/11/security-response-management-risk-cost-and-best-practices-in-an-imperfect-world.html�&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Set up the local repository and SRTool instance ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;1) Host requirements&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The SRTool should in principle work on any host that supports Yocto Project. It requires &amp;quot;Python3&amp;quot;, &amp;quot;Django &amp;gt;= 1.11&amp;quot;, and &amp;quot;Sqlite3&amp;quot;. A SQL GUI tool like &#039;sqlitebrowser&#039; is recommended.&lt;br /&gt;
&lt;br /&gt;
The required host package installation instructions are the same as Toaster, and the instructions can be found here: [http://www.yoctoproject.org/docs/latest/toaster-manual/toaster-manual.html#toaster-manual-start Toaster documentation]&lt;br /&gt;
&lt;br /&gt;
It was specifically developed and tested with:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: left;&amp;quot;&lt;br /&gt;
! Item&lt;br /&gt;
! Host 1&lt;br /&gt;
! Host 2&lt;br /&gt;
! Host 3&lt;br /&gt;
|-&lt;br /&gt;
|Host&lt;br /&gt;
|Ubuntu 20.04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Python3&lt;br /&gt;
|3.8.10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Django&lt;br /&gt;
|4.00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Sqlite3&lt;br /&gt;
|3.31.1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;2) Cloning the SRTool&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;code&amp;gt; $ git clone git://git.yoctoproject.org/srtool &amp;amp;&amp;amp; cd srtool &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the command if your SSH key is registered:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;code&amp;gt; $ git clone ssh://git@push.yoctoproject.org/srtool &amp;amp;&amp;amp; cd srtool &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;3) Starting the SRTool&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Option #1: Restrict to the local browser:&lt;br /&gt;
  &amp;lt;code&amp;gt; $ ./bin/srt start webport=localhost:9000 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Option #2: Enable remote browsers:&lt;br /&gt;
  &amp;lt;code&amp;gt; $ ./bin/srt start webport=0.0.0.0:9000 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;NOTE&amp;lt;/strong&amp;gt;: The first time you run the SRTool, there will be a delay (30 to 60 minutes) as the default CVE repositories (NIST, Mitre, ...) are scanned, scored, and loaded into the database. After that, the updates will be incremental.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;4) Create a superuser&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need to create at least one super user account to promote users to higher permission levels:&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;code&amp;gt; $ ./bin/srt manage createsuperuser&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;5) Open browser to &amp;lt;IPADDR&amp;gt;:9000&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will bring up the SRTool page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;6) Read the &amp;quot;Guided Tour&amp;quot; &amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Click on the &amp;quot;Guided Tour&amp;quot; button on the home page to see the on-line tool and user information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;7) Create your guest account&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Click on the &amp;quot;Login&amp;quot; button in the top bar, select &amp;quot;Request Account&amp;quot;, fill in the information, Click &amp;quot;Sign Up&amp;quot;, and then log in.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;8) Promote your account to Admin level&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the superuser, click &amp;quot;Management &amp;gt; Manage Users&amp;quot;, click the edit icon for your guest account row, change the &amp;quot;Group&amp;quot; to &amp;quot;Admin&amp;quot;, and click &amp;quot;Submit Changes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
You can now log out of the superuser account and into your own account.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sanity Test Bring-up ==&lt;br /&gt;
&lt;br /&gt;
You can use these steps to start a minimal instance of the SRTool to help validate that the host and the code base are working on your system. This will for example set the environment variable &amp;quot;SRTDBG_MINIMAL_DB=1&amp;quot; which will only fetch a few representative records from each data source.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  $ # Clone the SRTool&lt;br /&gt;
  $ git clone git://git.yoctoproject.org/srtool &amp;amp;&amp;amp; cd srtool &lt;br /&gt;
  $ # Bring down the development assistance tools&lt;br /&gt;
  $ cp bin/dev_tools/* .&lt;br /&gt;
  $ # Prepare the venv and SRTool environment variables&lt;br /&gt;
  $ . prepare_environment.sh&lt;br /&gt;
  $ # Start the SRTool, trigger the CVE downloads&lt;br /&gt;
  $ ./restart.sh&lt;br /&gt;
  ...&lt;br /&gt;
  SRTool webserver started at http://0.0.0.0:9000&lt;br /&gt;
  $ # Create the initial superuser account, who can then create all other accounts&lt;br /&gt;
  $ ./super.sh &lt;br /&gt;
  SRT_MAIN_APP=yp&lt;br /&gt;
  The system will manage.&lt;br /&gt;
  Username: srtool&lt;br /&gt;
  Email address: &lt;br /&gt;
  Password: &lt;br /&gt;
  Password (again): &lt;br /&gt;
  Superuser created successfully.&lt;br /&gt;
  $&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sanity command test:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  $ ./bin/common/srtool_sanity_test.py -i&lt;br /&gt;
  * Host statistics ...&lt;br /&gt;
  Uname       = #44~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Mon May 22 13:39:36 UTC 2 x86_64&lt;br /&gt;
  Django      = (4, 0, 0, &#039;final&#039;, 0)&lt;br /&gt;
  Python3     = Python 3.10.12&lt;br /&gt;
  Sqlite3     = 3.37.2 2022-01-06&lt;br /&gt;
  Server PID  = 95890&lt;br /&gt;
  * Database statistics ... (use &#039;-v&#039; for details)&lt;br /&gt;
  * Table checks ...&lt;br /&gt;
  * Summary ...&lt;br /&gt;
  CVEs        = 219524&lt;br /&gt;
  Users       = 6&lt;br /&gt;
  Data sources= 51&lt;br /&gt;
  $ &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== First Time Bring-up ==&lt;br /&gt;
&lt;br /&gt;
* When you first start, you will have the CVEs from 2015 to 2023&lt;br /&gt;
* You will not have any Vulnerabilities, Investigations, or Defects until you (a) create them, and/or (b) integrate your defect system or other sustaining data.&lt;br /&gt;
* All CVEs will by default get the status &amp;quot;Historical&amp;quot;.&lt;br /&gt;
** The CVEs that were created in the previous 30 days will instead get the status &amp;quot;New&amp;quot;&lt;br /&gt;
** This will allow you to immediately test the CVE triage features&lt;br /&gt;
** The status settings are normally preset by your defect system or other sustaining data&lt;br /&gt;
* You can create a Vulnerability by:&lt;br /&gt;
** Selecting a CVE&lt;br /&gt;
** Click on &amp;quot;Create Vulnerability&amp;quot;&lt;br /&gt;
** Follow the new link to the new Vulnerability&lt;br /&gt;
* You can create an Investigation by:&lt;br /&gt;
** Open a Vulnerability record&lt;br /&gt;
** Click on &amp;quot;Add Product&amp;quot;&lt;br /&gt;
** Select one or more Products, and click &amp;quot;Submit&amp;quot;&lt;br /&gt;
** Observe that the products are added together with new respective Investigations&lt;br /&gt;
** Follow the new link to the new Investigations&lt;br /&gt;
* You can create a Defect by:&lt;br /&gt;
** Open an Investigation record&lt;br /&gt;
** Click on &amp;quot;Create Defect&amp;quot;&lt;br /&gt;
** With the sample defect integration script, a simulated defect will be created and attached to the investigation&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SRTool Primary Goals and Workflows ==&lt;br /&gt;
&lt;br /&gt;
* Goals&lt;br /&gt;
** A common system to track and share security issues, combining community CVE&#039;s&lt;br /&gt;
** A simple yet flexible interface for reporting and exploring the security issues&lt;br /&gt;
** A place to upload and share attachments, including patches, fixes, emails, and documents&lt;br /&gt;
** The ability to generate accurate and up-to-date reports and exports&lt;br /&gt;
** A modular design for easy extension and adoption&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* Primary Workflows&lt;br /&gt;
** Guide and manage the incoming CVE triage process&lt;br /&gt;
** Attach CVEs to specific company products and defects &lt;br /&gt;
** Automated updates from upstream CVEs and internal defect system&lt;br /&gt;
** Ability to generate reports&lt;br /&gt;
** Simple customization for organizations&lt;br /&gt;
** Correlate CVEs with products and release (IN PROGRESS)&lt;br /&gt;
** Correlate CVEs with specific customer builds (IN PROGRESS)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SRTool CVE Lifecycle ==&lt;br /&gt;
&lt;br /&gt;
* CVE are imported&lt;br /&gt;
** New CVEs are imported and triaged from upstream (NIST/MITRE, 1000+/month)&lt;br /&gt;
** Specific CVEs are requested by customers&lt;br /&gt;
* CVEs are managed&lt;br /&gt;
** CVEs are investigated&lt;br /&gt;
** Vulnerable CVEs are assigned to products via defects&lt;br /&gt;
** SRTool manager tracks the progress of open CVEs&lt;br /&gt;
** SRTool manager produces reports as required by customers, field, and management&lt;br /&gt;
* CVEs are resolved&lt;br /&gt;
** CVEs are either fixed or declared not vulnerable&lt;br /&gt;
** Releases are updated with the CVE fixes&lt;br /&gt;
** Resolved CVEs are reported to customers, public website&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Testing the Alternate Sample Organization &#039;ACME&#039; ==&lt;br /&gt;
&lt;br /&gt;
* An example alternate organization (master application) called &amp;quot;acme&amp;quot; is included.&lt;br /&gt;
* This code shows all the ways the SRTool can be easily customized to the needs of your organization&lt;br /&gt;
* To enable it and try it out, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ # Include the quick development tools&lt;br /&gt;
    $ cp bin/dev_tools/* .&lt;br /&gt;
    $ # Reset &#039;acme&#039; as the master app/organization&lt;br /&gt;
    $ ./stop.sh&lt;br /&gt;
    $ ./master_app.sh acme&lt;br /&gt;
    $ ./start.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* When you browse the SRTool pages, will now observe several differences&lt;br /&gt;
** In the top bar the text &amp;quot;[ACME]&amp;quot; will appear in several places. This shows how files like &amp;quot;lib/acme/templates/base.html&amp;quot; can take precedence over the default template files in &amp;quot;lib/srtgui&amp;quot;. &lt;br /&gt;
** In the top left corner the &amp;quot;ACME&amp;quot; logo will appear. This is from &amp;quot;SRTOOL_LOCAL_LOGO&amp;quot; being defined in &amp;quot;datasource.json&amp;quot;.&lt;br /&gt;
** If you click on the ACME logo you will be taken to an ACME hello page. This shows that &amp;quot;lib/acme/urls.py&amp;quot; has extended the URL map, plus how you can implement basic HTML pages in ACME&#039;s &amp;quot;lib/acme/views.py&amp;quot; and &amp;quot;lib/acme/templates/acme_hello.html&amp;quot;.&lt;br /&gt;
** In the ACME hello page, there are links to custom table pages for Products and Defects. This shows how to implement custom Toaster Tables via &amp;quot;lib/acme/urls.py&amp;quot; and &amp;quot;lib/acme/tables.py&amp;quot;&lt;br /&gt;
** In the Products page, when you click &amp;quot;Export&amp;quot; a new report type &amp;quot;ACME Products Table&amp;quot; is appended. This shows how to extend and customize existing or new reports.&lt;br /&gt;
&lt;br /&gt;
* To restore the default &amp;quot;yp&amp;quot; master application, do the following:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ ./stop.sh&lt;br /&gt;
    $ ./master_app.sh yp&lt;br /&gt;
    $ ./start.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Adapting SRTool to your Organization ==&lt;br /&gt;
&lt;br /&gt;
* You can use the sample alternate organization &amp;quot;acme&amp;quot; as a guide to adapt SRTool to your organization&lt;br /&gt;
* In this example, we will instantiate a new organization called &amp;quot;&amp;lt;strong&amp;gt;yoyodyne&amp;lt;/strong&amp;gt;&amp;quot;&lt;br /&gt;
* You should be able to place all of your local content into these two directories:&lt;br /&gt;
** &amp;lt;strong&amp;gt;&amp;quot;./bin/yoyodyne&amp;quot;&amp;lt;/strong&amp;gt;: this is your master datasource directory&lt;br /&gt;
** &amp;lt;strong&amp;gt;&amp;quot;./lib/yoyodyne&amp;quot;&amp;lt;/strong&amp;gt;: this is your master Django App directory&lt;br /&gt;
* If you find you need to make changes in the core SRTool code, we recommend (in preferential order):&lt;br /&gt;
** See if you can make it a generic feature so that it can become part of the mainline codebase&lt;br /&gt;
** See if you can make an easy hook for the mainline code, so that your custom content can still reside in your directories&lt;br /&gt;
** Talk to us on how to easily have managed custom patches to the mainline code (we do this in Toaster)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;1) Instantiate your Organization&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can create a starting customization of the SRTool for your organization with these simple steps. &lt;br /&gt;
* In this example, we will use the name &amp;quot;yoyo&amp;quot; as a shorthand for a mythical &amp;quot;Yoyodyne Corporation&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  $ cd /path_to/srtool_dir&lt;br /&gt;
  $ copy bin/dev_tools/* .&lt;br /&gt;
  $ ./stop.sh&lt;br /&gt;
  $ ./master_app.sh create yoyo&lt;br /&gt;
  $ ./start.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* This script will perform the following actions:&lt;br /&gt;
** Copy the sample &#039;bin/acme&#039; directory to &#039;bin/yoyo&#039;&lt;br /&gt;
** Copy the sample &#039;lib/acme&#039; directory to &#039;lib/yoyo&#039;&lt;br /&gt;
** Rename the respective Acme/ACME/acme labels and filenames to Yoyo/YOYO/yoyo&lt;br /&gt;
** Set &#039;yoyo&#039; as the new main application&lt;br /&gt;
* You now have access to all the preset custom features described above for the ACME sample organization, now for Yoyodyne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;2) Add your defect system integration&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need to implement a defect integration backend script to scan your defect system and instantiate the CVE defects in SRTool database, and then keep them up to date.&lt;br /&gt;
&lt;br /&gt;
* An example implementation template for Jira is provided here. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  bin/common/srtool_jira_template.py&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* You can use this to guide your integration to Jira or to other defect systems.&lt;br /&gt;
* To see how to extend this template to your organization and yet maintain compatibility with upstream, see this section: [https://wiki.yoctoproject.org/wiki/SRTool_Developer_Page#Extending_and_customizing_common.2Ftemplate_code_files Extending and customizing common/template code files]&lt;br /&gt;
* Please contact the SRTool developers for assistance in your defect system integration effort.&lt;br /&gt;
&lt;br /&gt;
The main features of this example code, in addition to the Jira system access, is:&lt;br /&gt;
&lt;br /&gt;
*  The &amp;quot;--init&amp;quot; command&lt;br /&gt;
** This command that will initialize the SRTool database with your SRT related defects. Specifically, this command can used to bootstrap the SRTool database for your company&#039;s data&lt;br /&gt;
** It will create an &amp;quot;Investigation&amp;quot; for each defect, and attach it to the respective product&lt;br /&gt;
** It will create a &amp;quot;Vulnerability&amp;quot; to wrap the respective &amp;quot;Investigation&amp;quot;&lt;br /&gt;
** If should find the respective CVE record if it exists, and attach that to the created &amp;quot;Vulnerability&amp;quot;&lt;br /&gt;
** If a &amp;quot;Vulnerability&amp;quot; record already exists for the defect&#039;s CVE, then this script should attach the new &amp;quot;Investigation&amp;quot; to that &amp;quot;Vulnerability&amp;quot; record.&lt;br /&gt;
* The &amp;quot;--update&amp;quot; command&lt;br /&gt;
** This will scan your CVE-related defects&lt;br /&gt;
** If the matching defect record in the SRTool database does not exist, then treat it like the &amp;quot;--init&amp;quot; command.&lt;br /&gt;
** It will update the SRTool defect record with the current defect system state&lt;br /&gt;
** If the defect has changed priority (or any other important state information), it will create a &amp;quot;Notification&amp;quot; event to the respective manager so that they can know that they need to act on the change.&lt;br /&gt;
* The example code assumes that the CVE names are available via a text-based search, for example when the respective CVE name is in the defect title or comments. If your system uses a different marker, then you will need to code for that.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== High Level Development Plan ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: left;&amp;quot;&lt;br /&gt;
! Release&lt;br /&gt;
! Features&lt;br /&gt;
! Status/date&lt;br /&gt;
|-&lt;br /&gt;
|0.80&lt;br /&gt;
|Multi-host testing, Django user model, Django 2.x support&lt;br /&gt;
|Released (December 2018)&lt;br /&gt;
|-&lt;br /&gt;
|0.90&lt;br /&gt;
|Mapping of CVE-CPE &amp;gt; Packages &amp;gt; Recipes &amp;gt; Product/Release CPEs, Add Releases to Products, modular report definitions&lt;br /&gt;
|Under development (January 2019)&lt;br /&gt;
|-&lt;br /&gt;
|1.00&lt;br /&gt;
|General Release&lt;br /&gt;
|Under development (February 2019)&lt;br /&gt;
|-&lt;br /&gt;
|1.10&lt;br /&gt;
|Improved CPE/package mapping hueristics, advanced reports&lt;br /&gt;
|Under development (March+ 2019)&lt;br /&gt;
|-&lt;br /&gt;
|2.00&lt;br /&gt;
|Add support for importing CVE Checker result&lt;br /&gt;
|Under development (November+ 2023)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== SRTool Bugzilla Page ==&lt;br /&gt;
&lt;br /&gt;
Here is the link to the SRTool Bugzilla Page: [https://bugzilla.yoctoproject.org/buglist.cgi?list_id=609538&amp;amp;bug_status=__all__&amp;amp;query_format=specific&amp;amp;order=relevance%20desc&amp;amp;product=Security%20Response%20Tool SRTool Bugzilla Page]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== SRTool CGIT Page ==&lt;br /&gt;
&lt;br /&gt;
Here is the link to the CGIT Page: [http://git.yoctoproject.org/cgit/cgit.cgi/srtool SRTool CGIT Page]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== SRTool User Page ==&lt;br /&gt;
&lt;br /&gt;
Here is the link to the User&#039;s Documentation page: [https://wiki.yoctoproject.org/wiki/SRTool_User_Page SRTool UserPage]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== SRTool Developer Page ==&lt;br /&gt;
&lt;br /&gt;
Here is the link to the Developer&#039;s page: [https://wiki.yoctoproject.org/wiki/SRTool_Developer_Page SRTool Developer Page]&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=YoctoProject_Summit_yps2023.11&amp;diff=86084</id>
		<title>YoctoProject Summit yps2023.11</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=YoctoProject_Summit_yps2023.11&amp;diff=86084"/>
		<updated>2023-11-27T01:10:04Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: /* Slide template for presenters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The Yocto Project Summit 2023.11 =&lt;br /&gt;
The Yocto Project Summit, yps2023.11, is a virtual conference from November 28th to 30th, 2023 to gather members of the Yocto Project community together to discuss ideas and present information related to The Yocto Project.&lt;br /&gt;
&lt;br /&gt;
== Organizing Committee ==&lt;br /&gt;
The organizing committee consists of (alphabetical by first name):&lt;br /&gt;
* David Reyna&lt;br /&gt;
* Josef Holzmayr-Khosh Amoz (YP Community Manager)&lt;br /&gt;
* Megan Knight (Advocacy Manager)&lt;br /&gt;
* Philip Balister&lt;br /&gt;
* Trevor Woerner&lt;br /&gt;
&lt;br /&gt;
== Registration ==&lt;br /&gt;
&lt;br /&gt;
Registration Link: https://cvent.me/YLyoQz&lt;br /&gt;
&lt;br /&gt;
== Platforms ==&lt;br /&gt;
In terms of platforms we&#039;re using:&lt;br /&gt;
* pretalx for the CfP and schedule&lt;br /&gt;
* the LF&#039;s cvent for registration&lt;br /&gt;
* Zoom for the conference video&lt;br /&gt;
* irc for the conference chat (channel #yocto-summit-2023.11 on Libera.Chat)&lt;br /&gt;
* Digital Ocean for the hands-on classes&lt;br /&gt;
&lt;br /&gt;
== Hands-on Servers Information (Pre-event Preparation) ==&lt;br /&gt;
# If you already have a Digital Ocean account, skip the next 2 steps&lt;br /&gt;
# To create a Digital Ocean account, please sign up @ [https://do.co/yoctoproject DigitalOcean] &lt;br /&gt;
# Confirm your email and add a payment method to satisfy abuse requirements - you won&#039;t be charged unless you leave the training machine running long past the summit&lt;br /&gt;
# Visit https://cloud.digitalocean.com/account/api/tokens and generate a new token named &#039;&#039;&#039;YPSummit&#039;&#039;&#039;, and copy the string that pops up.&lt;br /&gt;
# Please complete this [https://forms.gle/53NFyCRaEpmRWuaa8 form] so your API key can be added to the provisioning scripts and we can top up your account credit.&lt;br /&gt;
&lt;br /&gt;
After the form has been filled by all participants we will provision machines. When the machines are ready logins will be &amp;quot;ssh ilab01@AXAXAXA-summit.yocto.io&amp;quot; where AXAXAXA are the first 7 characters of your confirmation string. The password is the full 11 character confirmation string.&lt;br /&gt;
&lt;br /&gt;
Once you have a verified working server you may delete your api key at https://cloud.digitalocean.com/account/api/tokens. Otherwise all resources will be removed after the training. Any retained servers will be billed to you after the promotional credit expires in 60 days.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Lab files are available during the event at http://summit.yocto.io/yps2023.11.tgz --&amp;gt;&lt;br /&gt;
Lab files will be available for download once the event begins.&lt;br /&gt;
&lt;br /&gt;
== For more information ==&lt;br /&gt;
* https://yoctoproject.org/event/yocto-project-summit-2023-11/&lt;br /&gt;
* https://pretalx.com/yocto-project-summit-2023-11/&lt;br /&gt;
&lt;br /&gt;
== Slide template for presenters ==&lt;br /&gt;
* https://docs.google.com/presentation/d/1ttXgB8Z1gasL7ItCYZ-uXT_FmfnIgPoMK_JtjvBrj1g&lt;br /&gt;
** keep the first and last slides&lt;br /&gt;
** edit the first slide to include your name, presentation title, and (optionally) your company&lt;br /&gt;
** the rest of the slides are examples and can be duplicated, edited, and/or removed&lt;br /&gt;
** please upload your finished slides to your specific event in pretalx&lt;br /&gt;
** Pretalx has an upload limit of 10Mb. Please for example compress your PDF files when you &amp;quot;Save-as&amp;quot;, or use a free service like &amp;quot;https://www.adobe.com/acrobat/online/compress-pdf.html&amp;quot;&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=YoctoProject_Summit_yps2023.11&amp;diff=86077</id>
		<title>YoctoProject Summit yps2023.11</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=YoctoProject_Summit_yps2023.11&amp;diff=86077"/>
		<updated>2023-11-23T00:22:40Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The Yocto Project Summit 2023.11 =&lt;br /&gt;
The Yocto Project Summit, yps2023.11, is a virtual conference from November 28th to 30th, 2023 to gather members of the Yocto Project community together to discuss ideas and present information related to The Yocto Project.&lt;br /&gt;
&lt;br /&gt;
== Organizing Committee ==&lt;br /&gt;
The organizing committee consists of (alphabetical by first name):&lt;br /&gt;
* David Reyna&lt;br /&gt;
* Josef Holzmayr-Khosh Amoz (YP Community Manager)&lt;br /&gt;
* Philip Balister&lt;br /&gt;
* Megan Knight (Advocacy Manager)&lt;br /&gt;
* Trevor Woerner&lt;br /&gt;
&lt;br /&gt;
== Registration ==&lt;br /&gt;
&lt;br /&gt;
Registration Link: https://cvent.me/YLyoQz&lt;br /&gt;
&lt;br /&gt;
== Platforms ==&lt;br /&gt;
In terms of platforms we&#039;re using:&lt;br /&gt;
* pretalx for the CfP and schedule&lt;br /&gt;
* the LF&#039;s cvent for registration&lt;br /&gt;
* Zoom for the conference video&lt;br /&gt;
* irc for the conference chat (channel #yocto-summit-2023.11 on Libera.Chat)&lt;br /&gt;
* Digital Ocean for the hands-on classes&lt;br /&gt;
&lt;br /&gt;
== Hands-on Servers Information (Pre-event Preparation) ==&lt;br /&gt;
# If you already have a Digital Ocean account, skip the next 2 steps&lt;br /&gt;
# To create a Digital Ocean account, please sign up @ [https://do.co/yoctoproject DigitalOcean] &lt;br /&gt;
# Confirm your email and add a payment method to satisfy abuse requirements - you won&#039;t be charged unless you leave the training machine running long past the summit&lt;br /&gt;
# Visit https://cloud.digitalocean.com/account/api/tokens and generate a new token named &#039;&#039;&#039;YPSummit&#039;&#039;&#039;, and copy the string that pops up.&lt;br /&gt;
# Please complete this [https://forms.gle/53NFyCRaEpmRWuaa8 form] so your API key can be added to the provisioning scripts and we can top up your account credit.&lt;br /&gt;
&lt;br /&gt;
After the form has been filled by all participants we will provision machines. When the machines are ready logins will be &amp;quot;ssh ilab01@AXAXAXA-summit.yocto.io&amp;quot; where AXAXAXA are the first 7 characters of your confirmation string. The password is the full 11 character confirmation string.&lt;br /&gt;
&lt;br /&gt;
Once you have a verified working server you may delete your api key at https://cloud.digitalocean.com/account/api/tokens. Otherwise all resources will be removed after the training. Any retained servers will be billed to you after the promotional credit expires in 60 days.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Lab files are available during the event at http://summit.yocto.io/yps2023.11.tgz --&amp;gt;&lt;br /&gt;
Lab files will be available for download once the event begins.&lt;br /&gt;
&lt;br /&gt;
== For more information ==&lt;br /&gt;
* https://yoctoproject.org/event/yocto-project-summit-2023-11/&lt;br /&gt;
* https://pretalx.com/yocto-project-summit-2023-11/&lt;br /&gt;
&lt;br /&gt;
== Slide template for presenters ==&lt;br /&gt;
* https://docs.google.com/presentation/d/1ttXgB8Z1gasL7ItCYZ-uXT_FmfnIgPoMK_JtjvBrj1g&lt;br /&gt;
** keep the first and last slides&lt;br /&gt;
** edit the first slide to include your name, presentation title, and (optionally) your company&lt;br /&gt;
** the rest of the slides are examples and can be duplicated, edited, and/or removed&lt;br /&gt;
** please upload your finished slides to your specific event in pretalx&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Contribute_to_SRTool&amp;diff=86005</id>
		<title>Contribute to SRTool</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Contribute_to_SRTool&amp;diff=86005"/>
		<updated>2023-10-18T10:21:09Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:SRTool]]&lt;br /&gt;
This page summarizes the Security Response Tool (SRTool) development process. We hope this will help you start contributing to the project. The SRTool is based on the Yocto Project Toaster codebase (Django,Python,Javascript), so many of the process and debugging techniques apply. &lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
== Published content: General CVE management issues and the SRTool ==&lt;br /&gt;
* The SRTool paper for the Embedded Linux Conference, Edinburg 2018:&lt;br /&gt;
** https://events.linuxfoundation.org/wp-content/uploads/2017/12/Keeping-Up-With-The-Joneses-CVEs-David-Reyna-Wind-River-Systems.pdf�&lt;br /&gt;
* Wind River Blog about CVEs and the SRTool&lt;br /&gt;
** http://blogs.windriver.com/wind_river_blog/2018/11/security-response-management-risk-cost-and-best-practices-in-an-imperfect-world.html�&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Set up the local repository and SRTool instance ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;1) Host requirements&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The SRTool should in principle work on any host that supports Yocto Project. It requires &amp;quot;Python3&amp;quot;, &amp;quot;Django &amp;gt;= 1.11&amp;quot;, and &amp;quot;Sqlite3&amp;quot;. A SQL GUI tool like &#039;sqlitebrowser&#039; is recommended.&lt;br /&gt;
&lt;br /&gt;
The required host package installation instructions are the same as Toaster, and the instructions can be found here: [http://www.yoctoproject.org/docs/latest/toaster-manual/toaster-manual.html#toaster-manual-start Toaster documentation]&lt;br /&gt;
&lt;br /&gt;
It was specifically developed and tested with:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: left;&amp;quot;&lt;br /&gt;
! Item&lt;br /&gt;
! Host 1&lt;br /&gt;
! Host 2&lt;br /&gt;
! Host 3&lt;br /&gt;
|-&lt;br /&gt;
|Host&lt;br /&gt;
|Ubuntu 20.04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Python3&lt;br /&gt;
|3.8.10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Django&lt;br /&gt;
|4.00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Sqlite3&lt;br /&gt;
|3.31.1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;2) Cloning the SRTool&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;code&amp;gt; $ git clone git://git.yoctoproject.org/srtool &amp;amp;&amp;amp; cd srtool &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the command if your SSH key is registered:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;code&amp;gt; $ git clone ssh://git@push.yoctoproject.org/srtool &amp;amp;&amp;amp; cd srtool &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;3) Starting the SRTool&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Option #1: Restrict to the local browser:&lt;br /&gt;
  &amp;lt;code&amp;gt; $ ./bin/srt start webport=localhost:9000 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Option #2: Enable remote browsers:&lt;br /&gt;
  &amp;lt;code&amp;gt; $ ./bin/srt start webport=0.0.0.0:9000 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;NOTE&amp;lt;/strong&amp;gt;: The first time you run the SRTool, there will be a delay (30 to 60 minutes) as the default CVE repositories (NIST, Mitre, ...) are scanned, scored, and loaded into the database. After that, the updates will be incremental.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;4) Create a superuser&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need to create at least one super user account to promote users to higher permission levels:&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;code&amp;gt; $ ./bin/srt manage createsuperuser&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;5) Open browser to &amp;lt;IPADDR&amp;gt;:9000&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will bring up the SRTool page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;6) Read the &amp;quot;Guided Tour&amp;quot; &amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Click on the &amp;quot;Guided Tour&amp;quot; button on the home page to see the on-line tool and user information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;7) Create your guest account&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Click on the &amp;quot;Login&amp;quot; button in the top bar, select &amp;quot;Request Account&amp;quot;, fill in the information, Click &amp;quot;Sign Up&amp;quot;, and then log in.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;8) Promote your account to Admin level&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the superuser, click &amp;quot;Management &amp;gt; Manage Users&amp;quot;, click the edit icon for your guest account row, change the &amp;quot;Group&amp;quot; to &amp;quot;Admin&amp;quot;, and click &amp;quot;Submit Changes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
You can now log out of the superuser account and into your own account.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sanity Test Bring-up ==&lt;br /&gt;
&lt;br /&gt;
You can use these steps to start a minimal instance of the SRTool to help validate that the host and the code base are working on your system. This will for example set the environment variable &amp;quot;SRTDBG_MINIMAL_DB=1&amp;quot; which will only fetch a few representative records from each data source.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  $ # Clone the SRTool&lt;br /&gt;
  $ git clone git://git.yoctoproject.org/srtool &amp;amp;&amp;amp; cd srtool &lt;br /&gt;
  $ # Bring down the development assistance tools&lt;br /&gt;
  $ cp bin/dev_tools/* .&lt;br /&gt;
  $ # Prepare the venv and SRTool environment variables&lt;br /&gt;
  $ . prepare_environment.sh&lt;br /&gt;
  $ # Start the SRTool, trigger the CVE downloads&lt;br /&gt;
  $ ./restart.sh&lt;br /&gt;
  ...&lt;br /&gt;
  SRTool webserver started at http://0.0.0.0:9000&lt;br /&gt;
  $ # Create the initial superuser account, who can then create all other accounts&lt;br /&gt;
  $ ./super.sh &lt;br /&gt;
  SRT_MAIN_APP=yp&lt;br /&gt;
  The system will manage.&lt;br /&gt;
  Username: srtool&lt;br /&gt;
  Email address: &lt;br /&gt;
  Password: &lt;br /&gt;
  Password (again): &lt;br /&gt;
  Superuser created successfully.&lt;br /&gt;
  $&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sanity command test:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  $ ./bin/common/srtool_sanity_test.py -i&lt;br /&gt;
  * Host statistics ...&lt;br /&gt;
  Uname       = #44~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Mon May 22 13:39:36 UTC 2 x86_64&lt;br /&gt;
  Django      = (4, 0, 0, &#039;final&#039;, 0)&lt;br /&gt;
  Python3     = Python 3.10.12&lt;br /&gt;
  Sqlite3     = 3.37.2 2022-01-06&lt;br /&gt;
  Server PID  = 95890&lt;br /&gt;
  * Database statistics ... (use &#039;-v&#039; for details)&lt;br /&gt;
  * Table checks ...&lt;br /&gt;
  * Summary ...&lt;br /&gt;
  CVEs        = 219524&lt;br /&gt;
  Users       = 6&lt;br /&gt;
  Data sources= 51&lt;br /&gt;
  $ &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== First Time Bring-up ==&lt;br /&gt;
&lt;br /&gt;
* When you first start, you will have the CVEs from 2015 to 2023&lt;br /&gt;
* You will not have any Vulnerabilities, Investigations, or Defects until you (a) create them, and/or (b) integrate your defect system or other sustaining data.&lt;br /&gt;
* All CVEs will by default get the status &amp;quot;Historical&amp;quot;.&lt;br /&gt;
** The CVEs that were created in the previous 30 days will instead get the status &amp;quot;New&amp;quot;&lt;br /&gt;
** This will allow you to immediately test the CVE triage features&lt;br /&gt;
** The status settings are normally preset by your defect system or other sustaining data&lt;br /&gt;
* You can create a Vulnerability by:&lt;br /&gt;
** Selecting a CVE&lt;br /&gt;
** Click on &amp;quot;Create Vulnerability&amp;quot;&lt;br /&gt;
** Follow the new link to the new Vulnerability&lt;br /&gt;
* You can create an Investigation by:&lt;br /&gt;
** Open a Vulnerability record&lt;br /&gt;
** Click on &amp;quot;Add Product&amp;quot;&lt;br /&gt;
** Select one or more Products, and click &amp;quot;Submit&amp;quot;&lt;br /&gt;
** Observe that the products are added together with new respective Investigations&lt;br /&gt;
** Follow the new link to the new Investigations&lt;br /&gt;
* You can create a Defect by:&lt;br /&gt;
** Open an Investigation record&lt;br /&gt;
** Click on &amp;quot;Create Defect&amp;quot;&lt;br /&gt;
** With the sample defect integration script, a simulated defect will be created and attached to the investigation&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SRTool Primary Goals and Workflows ==&lt;br /&gt;
&lt;br /&gt;
* Goals&lt;br /&gt;
** A common system to track and share security issues, combining community CVE&#039;s&lt;br /&gt;
** A simple yet flexible interface for reporting and exploring the security issues&lt;br /&gt;
** A place to upload and share attachments, including patches, fixes, emails, and documents&lt;br /&gt;
** The ability to generate accurate and up-to-date reports and exports&lt;br /&gt;
** A modular design for easy extension and adoption&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* Primary Workflows&lt;br /&gt;
** Guide and manage the incoming CVE triage process&lt;br /&gt;
** Attach CVEs to specific company products and defects &lt;br /&gt;
** Automated updates from upstream CVEs and internal defect system&lt;br /&gt;
** Ability to generate reports&lt;br /&gt;
** Simple customization for organizations&lt;br /&gt;
** Correlate CVEs with products and release (IN PROGRESS)&lt;br /&gt;
** Correlate CVEs with specific customer builds (IN PROGRESS)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SRTool CVE Lifecycle ==&lt;br /&gt;
&lt;br /&gt;
* CVE are imported&lt;br /&gt;
** New CVEs are imported and triaged from upstream (NIST/MITRE, 1000+/month)&lt;br /&gt;
** Specific CVEs are requested by customers&lt;br /&gt;
* CVEs are managed&lt;br /&gt;
** CVEs are investigated&lt;br /&gt;
** Vulnerable CVEs are assigned to products via defects&lt;br /&gt;
** SRTool manager tracks the progress of open CVEs&lt;br /&gt;
** SRTool manager produces reports as required by customers, field, and management&lt;br /&gt;
* CVEs are resolved&lt;br /&gt;
** CVEs are either fixed or declared not vulnerable&lt;br /&gt;
** Releases are updated with the CVE fixes&lt;br /&gt;
** Resolved CVEs are reported to customers, public website&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Testing the Alternate Sample Organization &#039;ACME&#039; ==&lt;br /&gt;
&lt;br /&gt;
* An example alternate organization (master application) called &amp;quot;acme&amp;quot; is included.&lt;br /&gt;
* This code shows all the ways the SRTool can be easily customized to the needs of your organization&lt;br /&gt;
* To enable it and try it out, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ # Include the quick development tools&lt;br /&gt;
    $ cp bin/dev_tools/* .&lt;br /&gt;
    $ # Reset &#039;acme&#039; as the master app/organization&lt;br /&gt;
    $ ./stop.sh&lt;br /&gt;
    $ ./master_app.sh acme&lt;br /&gt;
    $ ./start.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* When you browse the SRTool pages, will now observe several differences&lt;br /&gt;
** In the top bar the text &amp;quot;[ACME]&amp;quot; will appear in several places. This shows how files like &amp;quot;lib/acme/templates/base.html&amp;quot; can take precedence over the default template files in &amp;quot;lib/srtgui&amp;quot;. &lt;br /&gt;
** In the top left corner the &amp;quot;ACME&amp;quot; logo will appear. This is from &amp;quot;SRTOOL_LOCAL_LOGO&amp;quot; being defined in &amp;quot;datasource.json&amp;quot;.&lt;br /&gt;
** If you click on the ACME logo you will be taken to an ACME hello page. This shows that &amp;quot;lib/acme/urls.py&amp;quot; has extended the URL map, plus how you can implement basic HTML pages in ACME&#039;s &amp;quot;lib/acme/views.py&amp;quot; and &amp;quot;lib/acme/templates/acme_hello.html&amp;quot;.&lt;br /&gt;
** In the ACME hello page, there are links to custom table pages for Products and Defects. This shows how to implement custom Toaster Tables via &amp;quot;lib/acme/urls.py&amp;quot; and &amp;quot;lib/acme/tables.py&amp;quot;&lt;br /&gt;
** In the Products page, when you click &amp;quot;Export&amp;quot; a new report type &amp;quot;ACME Products Table&amp;quot; is appended. This shows how to extend and customize existing or new reports.&lt;br /&gt;
&lt;br /&gt;
* To restore the default &amp;quot;yp&amp;quot; master application, do the following:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ ./stop.sh&lt;br /&gt;
    $ ./master_app.sh yp&lt;br /&gt;
    $ ./start.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Adapting SRTool to your Organization ==&lt;br /&gt;
&lt;br /&gt;
* You can use the sample alternate organization &amp;quot;acme&amp;quot; as a guide to adapt SRTool to your organization&lt;br /&gt;
* In this example, we will instantiate a new organization called &amp;quot;&amp;lt;strong&amp;gt;yoyodyne&amp;lt;/strong&amp;gt;&amp;quot;&lt;br /&gt;
* You should be able to place all of your local content into these two directories:&lt;br /&gt;
** &amp;lt;strong&amp;gt;&amp;quot;./bin/yoyodyne&amp;quot;&amp;lt;/strong&amp;gt;: this is your master datasource directory&lt;br /&gt;
** &amp;lt;strong&amp;gt;&amp;quot;./lib/yoyodyne&amp;quot;&amp;lt;/strong&amp;gt;: this is your master Django App directory&lt;br /&gt;
* If you find you need to make changes in the core SRTool code, we recommend (in preferential order):&lt;br /&gt;
** See if you can make it a generic feature so that it can become part of the mainline codebase&lt;br /&gt;
** See if you can make an easy hook for the mainline code, so that your custom content can still reside in your directories&lt;br /&gt;
** Talk to us on how to easily have managed custom patches to the mainline code (we do this in Toaster)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;1) Instantiate your Organization&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can create a starting customization of the SRTool for your organization with these simple steps. &lt;br /&gt;
* In this example, we will use the name &amp;quot;yoyo&amp;quot; as a shorthand for a mythical &amp;quot;Yoyodyne Corporation&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  $ cd /path_to/srtool_dir&lt;br /&gt;
  $ copy bin/dev_tools/* .&lt;br /&gt;
  $ ./stop.sh&lt;br /&gt;
  $ ./master_app.sh create yoyo&lt;br /&gt;
  $ ./start.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* This script will perform the following actions:&lt;br /&gt;
** Copy the sample &#039;bin/acme&#039; directory to &#039;bin/yoyo&#039;&lt;br /&gt;
** Copy the sample &#039;lib/acme&#039; directory to &#039;lib/yoyo&#039;&lt;br /&gt;
** Rename the respective Acme/ACME/acme labels and filenames to Yoyo/YOYO/yoyo&lt;br /&gt;
** Set &#039;yoyo&#039; as the new main application&lt;br /&gt;
* You now have access to all the preset custom features described above for the ACME sample organization, now for Yoyodyne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;2) Add your defect system integration&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need to implement a defect integration backend script to scan your defect system and instantiate the CVE defects in SRTool database, and then keep them up to date.&lt;br /&gt;
&lt;br /&gt;
* An example implementation template for Jira is provided here. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  bin/common/srtool_jira_template.py&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* You can use this to guide your integration to Jira or to other defect systems.&lt;br /&gt;
* To see how to extend this template to your organization and yet maintain compatibility with upstream, see this section: [https://wiki.yoctoproject.org/wiki/SRTool_Developer_Page#Extending_and_customizing_common.2Ftemplate_code_files Extending and customizing common/template code files]&lt;br /&gt;
* Please contact the SRTool developers for assistance in your defect system integration effort.&lt;br /&gt;
&lt;br /&gt;
The main features of this example code, in addition to the Jira system access, is:&lt;br /&gt;
&lt;br /&gt;
*  The &amp;quot;--init&amp;quot; command&lt;br /&gt;
** This command that will initialize the SRTool database with your SRT related defects. Specifically, this command can used to bootstrap the SRTool database for your company&#039;s data&lt;br /&gt;
** It will create an &amp;quot;Investigation&amp;quot; for each defect, and attach it to the respective product&lt;br /&gt;
** It will create a &amp;quot;Vulnerability&amp;quot; to wrap the respective &amp;quot;Investigation&amp;quot;&lt;br /&gt;
** If should find the respective CVE record if it exists, and attach that to the created &amp;quot;Vulnerability&amp;quot;&lt;br /&gt;
** If a &amp;quot;Vulnerability&amp;quot; record already exists for the defect&#039;s CVE, then this script should attach the new &amp;quot;Investigation&amp;quot; to that &amp;quot;Vulnerability&amp;quot; record.&lt;br /&gt;
* The &amp;quot;--update&amp;quot; command&lt;br /&gt;
** This will scan your CVE-related defects&lt;br /&gt;
** If the matching defect record in the SRTool database does not exist, then treat it like the &amp;quot;--init&amp;quot; command.&lt;br /&gt;
** It will update the SRTool defect record with the current defect system state&lt;br /&gt;
** If the defect has changed priority (or any other important state information), it will create a &amp;quot;Notification&amp;quot; event to the respective manager so that they can know that they need to act on the change.&lt;br /&gt;
* The example code assumes that the CVE names are available via a text-based search, for example when the respective CVE name is in the defect title or comments. If your system uses a different marker, then you will need to code for that.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== High Level Development Plan ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: left;&amp;quot;&lt;br /&gt;
! Release&lt;br /&gt;
! Features&lt;br /&gt;
! Status/date&lt;br /&gt;
|-&lt;br /&gt;
|0.80&lt;br /&gt;
|Multi-host testing, Django user model, Django 2.x support&lt;br /&gt;
|Released (December 2018)&lt;br /&gt;
|-&lt;br /&gt;
|0.90&lt;br /&gt;
|Mapping of CVE-CPE &amp;gt; Packages &amp;gt; Recipes &amp;gt; Product/Release CPEs, Add Releases to Products, modular report definitions&lt;br /&gt;
|Under development (January 2019)&lt;br /&gt;
|-&lt;br /&gt;
|1.00&lt;br /&gt;
|General Release&lt;br /&gt;
|Under development (February 2019)&lt;br /&gt;
|-&lt;br /&gt;
|1.10&lt;br /&gt;
|Improved CPE/package mapping hueristics, advanced reports&lt;br /&gt;
|Under development (March+ 2019)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== SRTool Bugzilla Page ==&lt;br /&gt;
&lt;br /&gt;
Here is the link to the SRTool Bugzilla Page: [https://bugzilla.yoctoproject.org/buglist.cgi?list_id=609538&amp;amp;bug_status=__all__&amp;amp;query_format=specific&amp;amp;order=relevance%20desc&amp;amp;product=Security%20Response%20Tool SRTool Bugzilla Page]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== SRTool CGIT Page ==&lt;br /&gt;
&lt;br /&gt;
Here is the link to the CGIT Page: [http://git.yoctoproject.org/cgit/cgit.cgi/srtool SRTool CGIT Page]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== SRTool User Page ==&lt;br /&gt;
&lt;br /&gt;
Here is the link to the User&#039;s Documentation page: [https://wiki.yoctoproject.org/wiki/SRTool_User_Page SRTool UserPage]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== SRTool Developer Page ==&lt;br /&gt;
&lt;br /&gt;
Here is the link to the Developer&#039;s page: [https://wiki.yoctoproject.org/wiki/SRTool_Developer_Page SRTool Developer Page]&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Contribute_to_SRTool&amp;diff=86004</id>
		<title>Contribute to SRTool</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Contribute_to_SRTool&amp;diff=86004"/>
		<updated>2023-10-18T10:16:49Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:SRTool]]&lt;br /&gt;
This page summarizes the Security Response Tool (SRTool) development process. We hope this will help you start contributing to the project. The SRTool is based on the Yocto Project Toaster codebase (Django,Python,Javascript), so many of the process and debugging techniques apply. &lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
== Published content: General CVE management issues and the SRTool ==&lt;br /&gt;
* The SRTool paper for the Embedded Linux Conference, Edinburg 2018:&lt;br /&gt;
** https://events.linuxfoundation.org/wp-content/uploads/2017/12/Keeping-Up-With-The-Joneses-CVEs-David-Reyna-Wind-River-Systems.pdf�&lt;br /&gt;
* Wind River Blog about CVEs and the SRTool&lt;br /&gt;
** http://blogs.windriver.com/wind_river_blog/2018/11/security-response-management-risk-cost-and-best-practices-in-an-imperfect-world.html�&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Set up the local repository and SRTool instance ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;1) Host requirements&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The SRTool should in principle work on any host that supports Yocto Project. It requires &amp;quot;Python3&amp;quot;, &amp;quot;Django &amp;gt;= 1.11&amp;quot;, and &amp;quot;Sqlite3&amp;quot;. A SQL GUI tool like &#039;sqlitebrowser&#039; is recommended.&lt;br /&gt;
&lt;br /&gt;
The required host package installation instructions are the same as Toaster, and the instructions can be found here: [http://www.yoctoproject.org/docs/latest/toaster-manual/toaster-manual.html#toaster-manual-start Toaster documentation]&lt;br /&gt;
&lt;br /&gt;
It was specifically developed and tested with:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: left;&amp;quot;&lt;br /&gt;
! Item&lt;br /&gt;
! Host 1&lt;br /&gt;
! Host 2&lt;br /&gt;
! Host 3&lt;br /&gt;
|-&lt;br /&gt;
|Host&lt;br /&gt;
|Ubuntu 20.04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Python3&lt;br /&gt;
|3.8.10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Django&lt;br /&gt;
|4.00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Sqlite3&lt;br /&gt;
|3.31.1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;2) Cloning the SRTool&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;code&amp;gt; $ git clone git://git.yoctoproject.org/srtool &amp;amp;&amp;amp; cd srtool &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the command if your SSH key is registered:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;code&amp;gt; $ git clone ssh://git@push.yoctoproject.org/srtool &amp;amp;&amp;amp; cd srtool &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;3) Starting the SRTool&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Option #1: Restrict to the local browser:&lt;br /&gt;
  &amp;lt;code&amp;gt; $ ./bin/srt start webport=localhost:9000 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Option #2: Enable remote browsers:&lt;br /&gt;
  &amp;lt;code&amp;gt; $ ./bin/srt start webport=0.0.0.0:9000 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;NOTE&amp;lt;/strong&amp;gt;: The first time you run the SRTool, there will be a delay (30 to 60 minutes) as the default CVE repositories (NIST, Mitre, ...) are scanned, scored, and loaded into the database. After that, the updates will be incremental.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;4) Create a superuser&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need to create at least one super user account to promote users to higher permission levels:&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;code&amp;gt; $ ./bin/srt manage createsuperuser&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;5) Open browser to &amp;lt;IPADDR&amp;gt;:9000&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will bring up the SRTool page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;6) Read the &amp;quot;Guided Tour&amp;quot; &amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Click on the &amp;quot;Guided Tour&amp;quot; button on the home page to see the on-line tool and user information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;7) Create your guest account&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Click on the &amp;quot;Login&amp;quot; button in the top bar, select &amp;quot;Request Account&amp;quot;, fill in the information, Click &amp;quot;Sign Up&amp;quot;, and then log in.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;8) Promote your account to Admin level&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the superuser, click &amp;quot;Management &amp;gt; Manage Users&amp;quot;, click the edit icon for your guest account row, change the &amp;quot;Group&amp;quot; to &amp;quot;Admin&amp;quot;, and click &amp;quot;Submit Changes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
You can now log out of the superuser account and into your own account.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sanity Test Bring-up ==&lt;br /&gt;
&lt;br /&gt;
You can use these steps to start a minimal instance of the SRTool to help validate that the host and the code base are working on your system. This will for example set the environment variable &amp;quot;SRTDBG_MINIMAL_DB=1&amp;quot; which will only fetch a few representative records from each data source.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  $ git pull&lt;br /&gt;
  $ # Copy the dev tools to the base directory&lt;br /&gt;
  $ cp bin/dev_tools/* .&lt;br /&gt;
  $ # Source the debug environment&lt;br /&gt;
  $ . ./srt_env.sh debug&lt;br /&gt;
  $ # Start the system from scratch&lt;br /&gt;
  $ ./recreate.sh&lt;br /&gt;
  $ # Run the sanity test&lt;br /&gt;
  $ ./bin/common/srtool_sanity_test.py -i&lt;br /&gt;
  $ &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  $ ./bin/common/srtool_sanity_test.py -i&lt;br /&gt;
  * Host statistics ...&lt;br /&gt;
  Uname       = #44~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Mon May 22 13:39:36 UTC 2 x86_64&lt;br /&gt;
  Django      = (4, 0, 0, &#039;final&#039;, 0)&lt;br /&gt;
  Python3     = Python 3.10.12&lt;br /&gt;
  Sqlite3     = 3.37.2 2022-01-06&lt;br /&gt;
  Server PID  = 95890&lt;br /&gt;
  * Database statistics ... (use &#039;-v&#039; for details)&lt;br /&gt;
  * Table checks ...&lt;br /&gt;
  * Summary ...&lt;br /&gt;
  CVEs        = 219524&lt;br /&gt;
  Users       = 6&lt;br /&gt;
  Data sources= 51&lt;br /&gt;
  $ &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To re-start as the full instance, do this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  $ # Source the standard environment&lt;br /&gt;
  $ . ./srt_env.sh&lt;br /&gt;
  $ # Start the system from scratch&lt;br /&gt;
  $ ./recreate.sh&lt;br /&gt;
  $ &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== First Time Bring-up ==&lt;br /&gt;
&lt;br /&gt;
* When you first start, you will have the CVEs from 2015 to 2023&lt;br /&gt;
* You will not have any Vulnerabilities, Investigations, or Defects until you (a) create them, and/or (b) integrate your defect system or other sustaining data.&lt;br /&gt;
* All CVEs will by default get the status &amp;quot;Historical&amp;quot;.&lt;br /&gt;
** The CVEs that were created in the previous 30 days will instead get the status &amp;quot;New&amp;quot;&lt;br /&gt;
** This will allow you to immediately test the CVE triage features&lt;br /&gt;
** The status settings are normally preset by your defect system or other sustaining data&lt;br /&gt;
* You can create a Vulnerability by:&lt;br /&gt;
** Selecting a CVE&lt;br /&gt;
** Click on &amp;quot;Create Vulnerability&amp;quot;&lt;br /&gt;
** Follow the new link to the new Vulnerability&lt;br /&gt;
* You can create an Investigation by:&lt;br /&gt;
** Open a Vulnerability record&lt;br /&gt;
** Click on &amp;quot;Add Product&amp;quot;&lt;br /&gt;
** Select one or more Products, and click &amp;quot;Submit&amp;quot;&lt;br /&gt;
** Observe that the products are added together with new respective Investigations&lt;br /&gt;
** Follow the new link to the new Investigations&lt;br /&gt;
* You can create a Defect by:&lt;br /&gt;
** Open an Investigation record&lt;br /&gt;
** Click on &amp;quot;Create Defect&amp;quot;&lt;br /&gt;
** With the sample defect integration script, a simulated defect will be created and attached to the investigation&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SRTool Primary Goals and Workflows ==&lt;br /&gt;
&lt;br /&gt;
* Goals&lt;br /&gt;
** A common system to track and share security issues, combining community CVE&#039;s&lt;br /&gt;
** A simple yet flexible interface for reporting and exploring the security issues&lt;br /&gt;
** A place to upload and share attachments, including patches, fixes, emails, and documents&lt;br /&gt;
** The ability to generate accurate and up-to-date reports and exports&lt;br /&gt;
** A modular design for easy extension and adoption&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* Primary Workflows&lt;br /&gt;
** Guide and manage the incoming CVE triage process&lt;br /&gt;
** Attach CVEs to specific company products and defects &lt;br /&gt;
** Automated updates from upstream CVEs and internal defect system&lt;br /&gt;
** Ability to generate reports&lt;br /&gt;
** Simple customization for organizations&lt;br /&gt;
** Correlate CVEs with products and release (IN PROGRESS)&lt;br /&gt;
** Correlate CVEs with specific customer builds (IN PROGRESS)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SRTool CVE Lifecycle ==&lt;br /&gt;
&lt;br /&gt;
* CVE are imported&lt;br /&gt;
** New CVEs are imported and triaged from upstream (NIST/MITRE, 1000+/month)&lt;br /&gt;
** Specific CVEs are requested by customers&lt;br /&gt;
* CVEs are managed&lt;br /&gt;
** CVEs are investigated&lt;br /&gt;
** Vulnerable CVEs are assigned to products via defects&lt;br /&gt;
** SRTool manager tracks the progress of open CVEs&lt;br /&gt;
** SRTool manager produces reports as required by customers, field, and management&lt;br /&gt;
* CVEs are resolved&lt;br /&gt;
** CVEs are either fixed or declared not vulnerable&lt;br /&gt;
** Releases are updated with the CVE fixes&lt;br /&gt;
** Resolved CVEs are reported to customers, public website&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Testing the Alternate Sample Organization &#039;ACME&#039; ==&lt;br /&gt;
&lt;br /&gt;
* An example alternate organization (master application) called &amp;quot;acme&amp;quot; is included.&lt;br /&gt;
* This code shows all the ways the SRTool can be easily customized to the needs of your organization&lt;br /&gt;
* To enable it and try it out, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ # Include the quick development tools&lt;br /&gt;
    $ cp bin/dev_tools/* .&lt;br /&gt;
    $ # Reset &#039;acme&#039; as the master app/organization&lt;br /&gt;
    $ ./stop.sh&lt;br /&gt;
    $ ./master_app.sh acme&lt;br /&gt;
    $ ./start.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* When you browse the SRTool pages, will now observe several differences&lt;br /&gt;
** In the top bar the text &amp;quot;[ACME]&amp;quot; will appear in several places. This shows how files like &amp;quot;lib/acme/templates/base.html&amp;quot; can take precedence over the default template files in &amp;quot;lib/srtgui&amp;quot;. &lt;br /&gt;
** In the top left corner the &amp;quot;ACME&amp;quot; logo will appear. This is from &amp;quot;SRTOOL_LOCAL_LOGO&amp;quot; being defined in &amp;quot;datasource.json&amp;quot;.&lt;br /&gt;
** If you click on the ACME logo you will be taken to an ACME hello page. This shows that &amp;quot;lib/acme/urls.py&amp;quot; has extended the URL map, plus how you can implement basic HTML pages in ACME&#039;s &amp;quot;lib/acme/views.py&amp;quot; and &amp;quot;lib/acme/templates/acme_hello.html&amp;quot;.&lt;br /&gt;
** In the ACME hello page, there are links to custom table pages for Products and Defects. This shows how to implement custom Toaster Tables via &amp;quot;lib/acme/urls.py&amp;quot; and &amp;quot;lib/acme/tables.py&amp;quot;&lt;br /&gt;
** In the Products page, when you click &amp;quot;Export&amp;quot; a new report type &amp;quot;ACME Products Table&amp;quot; is appended. This shows how to extend and customize existing or new reports.&lt;br /&gt;
&lt;br /&gt;
* To restore the default &amp;quot;yp&amp;quot; master application, do the following:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ ./stop.sh&lt;br /&gt;
    $ ./master_app.sh yp&lt;br /&gt;
    $ ./start.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Adapting SRTool to your Organization ==&lt;br /&gt;
&lt;br /&gt;
* You can use the sample alternate organization &amp;quot;acme&amp;quot; as a guide to adapt SRTool to your organization&lt;br /&gt;
* In this example, we will instantiate a new organization called &amp;quot;&amp;lt;strong&amp;gt;yoyodyne&amp;lt;/strong&amp;gt;&amp;quot;&lt;br /&gt;
* You should be able to place all of your local content into these two directories:&lt;br /&gt;
** &amp;lt;strong&amp;gt;&amp;quot;./bin/yoyodyne&amp;quot;&amp;lt;/strong&amp;gt;: this is your master datasource directory&lt;br /&gt;
** &amp;lt;strong&amp;gt;&amp;quot;./lib/yoyodyne&amp;quot;&amp;lt;/strong&amp;gt;: this is your master Django App directory&lt;br /&gt;
* If you find you need to make changes in the core SRTool code, we recommend (in preferential order):&lt;br /&gt;
** See if you can make it a generic feature so that it can become part of the mainline codebase&lt;br /&gt;
** See if you can make an easy hook for the mainline code, so that your custom content can still reside in your directories&lt;br /&gt;
** Talk to us on how to easily have managed custom patches to the mainline code (we do this in Toaster)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;1) Instantiate your Organization&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can create a starting customization of the SRTool for your organization with these simple steps. &lt;br /&gt;
* In this example, we will use the name &amp;quot;yoyo&amp;quot; as a shorthand for a mythical &amp;quot;Yoyodyne Corporation&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  $ cd /path_to/srtool_dir&lt;br /&gt;
  $ copy bin/dev_tools/* .&lt;br /&gt;
  $ ./stop.sh&lt;br /&gt;
  $ ./master_app.sh create yoyo&lt;br /&gt;
  $ ./start.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* This script will perform the following actions:&lt;br /&gt;
** Copy the sample &#039;bin/acme&#039; directory to &#039;bin/yoyo&#039;&lt;br /&gt;
** Copy the sample &#039;lib/acme&#039; directory to &#039;lib/yoyo&#039;&lt;br /&gt;
** Rename the respective Acme/ACME/acme labels and filenames to Yoyo/YOYO/yoyo&lt;br /&gt;
** Set &#039;yoyo&#039; as the new main application&lt;br /&gt;
* You now have access to all the preset custom features described above for the ACME sample organization, now for Yoyodyne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;2) Add your defect system integration&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need to implement a defect integration backend script to scan your defect system and instantiate the CVE defects in SRTool database, and then keep them up to date.&lt;br /&gt;
&lt;br /&gt;
* An example implementation template for Jira is provided here. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  bin/common/srtool_jira_template.py&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* You can use this to guide your integration to Jira or to other defect systems.&lt;br /&gt;
* To see how to extend this template to your organization and yet maintain compatibility with upstream, see this section: [https://wiki.yoctoproject.org/wiki/SRTool_Developer_Page#Extending_and_customizing_common.2Ftemplate_code_files Extending and customizing common/template code files]&lt;br /&gt;
* Please contact the SRTool developers for assistance in your defect system integration effort.&lt;br /&gt;
&lt;br /&gt;
The main features of this example code, in addition to the Jira system access, is:&lt;br /&gt;
&lt;br /&gt;
*  The &amp;quot;--init&amp;quot; command&lt;br /&gt;
** This command that will initialize the SRTool database with your SRT related defects. Specifically, this command can used to bootstrap the SRTool database for your company&#039;s data&lt;br /&gt;
** It will create an &amp;quot;Investigation&amp;quot; for each defect, and attach it to the respective product&lt;br /&gt;
** It will create a &amp;quot;Vulnerability&amp;quot; to wrap the respective &amp;quot;Investigation&amp;quot;&lt;br /&gt;
** If should find the respective CVE record if it exists, and attach that to the created &amp;quot;Vulnerability&amp;quot;&lt;br /&gt;
** If a &amp;quot;Vulnerability&amp;quot; record already exists for the defect&#039;s CVE, then this script should attach the new &amp;quot;Investigation&amp;quot; to that &amp;quot;Vulnerability&amp;quot; record.&lt;br /&gt;
* The &amp;quot;--update&amp;quot; command&lt;br /&gt;
** This will scan your CVE-related defects&lt;br /&gt;
** If the matching defect record in the SRTool database does not exist, then treat it like the &amp;quot;--init&amp;quot; command.&lt;br /&gt;
** It will update the SRTool defect record with the current defect system state&lt;br /&gt;
** If the defect has changed priority (or any other important state information), it will create a &amp;quot;Notification&amp;quot; event to the respective manager so that they can know that they need to act on the change.&lt;br /&gt;
* The example code assumes that the CVE names are available via a text-based search, for example when the respective CVE name is in the defect title or comments. If your system uses a different marker, then you will need to code for that.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== High Level Development Plan ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: left;&amp;quot;&lt;br /&gt;
! Release&lt;br /&gt;
! Features&lt;br /&gt;
! Status/date&lt;br /&gt;
|-&lt;br /&gt;
|0.80&lt;br /&gt;
|Multi-host testing, Django user model, Django 2.x support&lt;br /&gt;
|Released (December 2018)&lt;br /&gt;
|-&lt;br /&gt;
|0.90&lt;br /&gt;
|Mapping of CVE-CPE &amp;gt; Packages &amp;gt; Recipes &amp;gt; Product/Release CPEs, Add Releases to Products, modular report definitions&lt;br /&gt;
|Under development (January 2019)&lt;br /&gt;
|-&lt;br /&gt;
|1.00&lt;br /&gt;
|General Release&lt;br /&gt;
|Under development (February 2019)&lt;br /&gt;
|-&lt;br /&gt;
|1.10&lt;br /&gt;
|Improved CPE/package mapping hueristics, advanced reports&lt;br /&gt;
|Under development (March+ 2019)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== SRTool Bugzilla Page ==&lt;br /&gt;
&lt;br /&gt;
Here is the link to the SRTool Bugzilla Page: [https://bugzilla.yoctoproject.org/buglist.cgi?list_id=609538&amp;amp;bug_status=__all__&amp;amp;query_format=specific&amp;amp;order=relevance%20desc&amp;amp;product=Security%20Response%20Tool SRTool Bugzilla Page]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== SRTool CGIT Page ==&lt;br /&gt;
&lt;br /&gt;
Here is the link to the CGIT Page: [http://git.yoctoproject.org/cgit/cgit.cgi/srtool SRTool CGIT Page]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== SRTool User Page ==&lt;br /&gt;
&lt;br /&gt;
Here is the link to the User&#039;s Documentation page: [https://wiki.yoctoproject.org/wiki/SRTool_User_Page SRTool UserPage]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== SRTool Developer Page ==&lt;br /&gt;
&lt;br /&gt;
Here is the link to the Developer&#039;s page: [https://wiki.yoctoproject.org/wiki/SRTool_Developer_Page SRTool Developer Page]&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Contribute_to_SRTool&amp;diff=85992</id>
		<title>Contribute to SRTool</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Contribute_to_SRTool&amp;diff=85992"/>
		<updated>2023-10-15T22:10:25Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:SRTool]]&lt;br /&gt;
This page summarizes the Security Response Tool (SRTool) development process. We hope this will help you start contributing to the project. The SRTool is based on the Yocto Project Toaster codebase (Django,Python,Javascript), so many of the process and debugging techniques apply. &lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
== Published content: General CVE management issues and the SRTool ==&lt;br /&gt;
* The SRTool paper for the Embedded Linux Conference, Edinburg 2018:&lt;br /&gt;
** https://events.linuxfoundation.org/wp-content/uploads/2017/12/Keeping-Up-With-The-Joneses-CVEs-David-Reyna-Wind-River-Systems.pdf�&lt;br /&gt;
* Wind River Blog about CVEs and the SRTool&lt;br /&gt;
** http://blogs.windriver.com/wind_river_blog/2018/11/security-response-management-risk-cost-and-best-practices-in-an-imperfect-world.html�&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Set up the local repository and SRTool instance ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;1) Host requirements&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The SRTool should in principle work on any host that supports Yocto Project. It requires &amp;quot;Python3&amp;quot;, &amp;quot;Django &amp;gt;= 1.11&amp;quot;, and &amp;quot;Sqlite3&amp;quot;. A SQL GUI tool like &#039;sqlitebrowser&#039; is recommended.&lt;br /&gt;
&lt;br /&gt;
The required host package installation instructions are the same as Toaster, and the instructions can be found here: [http://www.yoctoproject.org/docs/latest/toaster-manual/toaster-manual.html#toaster-manual-start Toaster documentation]&lt;br /&gt;
&lt;br /&gt;
It was specifically developed and tested with:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: left;&amp;quot;&lt;br /&gt;
! Item&lt;br /&gt;
! Host 1&lt;br /&gt;
! Host 2&lt;br /&gt;
! Host 3&lt;br /&gt;
|-&lt;br /&gt;
|Host&lt;br /&gt;
|Ubuntu 20.04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Python3&lt;br /&gt;
|3.8.10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Django&lt;br /&gt;
|4.00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Sqlite3&lt;br /&gt;
|3.31.1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;2) Cloning the SRTool&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;code&amp;gt; $ git clone git://git.yoctoproject.org/srtool &amp;amp;&amp;amp; cd srtool &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the command if your SSH key is registered:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;code&amp;gt; $ git clone ssh://git@push.yoctoproject.org/srtool &amp;amp;&amp;amp; cd srtool &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;3) Starting the SRTool&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Option #1: Restrict to the local browser:&lt;br /&gt;
  &amp;lt;code&amp;gt; $ ./bin/srt start webport=localhost:9000 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Option #2: Enable remote browsers:&lt;br /&gt;
  &amp;lt;code&amp;gt; $ ./bin/srt start webport=0.0.0.0:9000 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;NOTE&amp;lt;/strong&amp;gt;: The first time you run the SRTool, there will be a delay (30 to 60 minutes) as the default CVE repositories (NIST, Mitre, ...) are scanned, scored, and loaded into the database. After that, the updates will be incremental.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;4) Create a superuser&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need to create at least one super user account to promote users to higher permission levels:&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;code&amp;gt; $ ./bin/srt manage createsuperuser&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;5) Open browser to &amp;lt;IPADDR&amp;gt;:9000&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will bring up the SRTool page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;6) Read the &amp;quot;Guided Tour&amp;quot; &amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Click on the &amp;quot;Guided Tour&amp;quot; button on the home page to see the on-line tool and user information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;7) Create your guest account&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Click on the &amp;quot;Login&amp;quot; button in the top bar, select &amp;quot;Request Account&amp;quot;, fill in the information, Click &amp;quot;Sign Up&amp;quot;, and then log in.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;8) Promote your account to Admin level&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the superuser, click &amp;quot;Management &amp;gt; Manage Users&amp;quot;, click the edit icon for your guest account row, change the &amp;quot;Group&amp;quot; to &amp;quot;Admin&amp;quot;, and click &amp;quot;Submit Changes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
You can now log out of the superuser account and into your own account.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sanity Test Bring-up ==&lt;br /&gt;
&lt;br /&gt;
You can use these steps to start a minimal instance of the SRTool to help validate that the host and the code base are working on your system. This will for example set the environment variable &amp;quot;SRTDBG_MINIMAL_DB=1&amp;quot; which will only fetch a few representative records from each data source.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  $ git pull&lt;br /&gt;
  $ # Copy the dev tools to the base directory&lt;br /&gt;
  $ cp bin/dev_tools/* .&lt;br /&gt;
  $ # Source the debug environment&lt;br /&gt;
  $ . ./srt_env.sh debug&lt;br /&gt;
  $ # Start the system from scratch&lt;br /&gt;
  $ ./recreate.sh&lt;br /&gt;
  $ # Run the sanity test&lt;br /&gt;
  $ ./bin/common/srtool_sanity_test.py -i&lt;br /&gt;
  $ &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  $ ./bin/common/srtool_sanity_test.py -i&lt;br /&gt;
  ...&lt;br /&gt;
  $ &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To re-start as the full instance, do this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  $ # Source the standard environment&lt;br /&gt;
  $ . ./srt_env.sh&lt;br /&gt;
  $ # Start the system from scratch&lt;br /&gt;
  $ ./recreate.sh&lt;br /&gt;
  $ &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== First Time Bring-up ==&lt;br /&gt;
&lt;br /&gt;
* When you first start, you will have the CVEs from 2015 to 2023&lt;br /&gt;
* You will not have any Vulnerabilities, Investigations, or Defects until you (a) create them, and/or (b) integrate your defect system or other sustaining data.&lt;br /&gt;
* All CVEs will by default get the status &amp;quot;Historical&amp;quot;.&lt;br /&gt;
** The CVEs that were created in the previous 30 days will instead get the status &amp;quot;New&amp;quot;&lt;br /&gt;
** This will allow you to immediately test the CVE triage features&lt;br /&gt;
** The status settings are normally preset by your defect system or other sustaining data&lt;br /&gt;
* You can create a Vulnerability by:&lt;br /&gt;
** Selecting a CVE&lt;br /&gt;
** Click on &amp;quot;Create Vulnerability&amp;quot;&lt;br /&gt;
** Follow the new link to the new Vulnerability&lt;br /&gt;
* You can create an Investigation by:&lt;br /&gt;
** Open a Vulnerability record&lt;br /&gt;
** Click on &amp;quot;Add Product&amp;quot;&lt;br /&gt;
** Select one or more Products, and click &amp;quot;Submit&amp;quot;&lt;br /&gt;
** Observe that the products are added together with new respective Investigations&lt;br /&gt;
** Follow the new link to the new Investigations&lt;br /&gt;
* You can create a Defect by:&lt;br /&gt;
** Open an Investigation record&lt;br /&gt;
** Click on &amp;quot;Create Defect&amp;quot;&lt;br /&gt;
** With the sample defect integration script, a simulated defect will be created and attached to the investigation&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SRTool Primary Goals and Workflows ==&lt;br /&gt;
&lt;br /&gt;
* Goals&lt;br /&gt;
** A common system to track and share security issues, combining community CVE&#039;s&lt;br /&gt;
** A simple yet flexible interface for reporting and exploring the security issues&lt;br /&gt;
** A place to upload and share attachments, including patches, fixes, emails, and documents&lt;br /&gt;
** The ability to generate accurate and up-to-date reports and exports&lt;br /&gt;
** A modular design for easy extension and adoption&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* Primary Workflows&lt;br /&gt;
** Guide and manage the incoming CVE triage process&lt;br /&gt;
** Attach CVEs to specific company products and defects &lt;br /&gt;
** Automated updates from upstream CVEs and internal defect system&lt;br /&gt;
** Ability to generate reports&lt;br /&gt;
** Simple customization for organizations&lt;br /&gt;
** Correlate CVEs with products and release (IN PROGRESS)&lt;br /&gt;
** Correlate CVEs with specific customer builds (IN PROGRESS)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SRTool CVE Lifecycle ==&lt;br /&gt;
&lt;br /&gt;
* CVE are imported&lt;br /&gt;
** New CVEs are imported and triaged from upstream (NIST/MITRE, 1000+/month)&lt;br /&gt;
** Specific CVEs are requested by customers&lt;br /&gt;
* CVEs are managed&lt;br /&gt;
** CVEs are investigated&lt;br /&gt;
** Vulnerable CVEs are assigned to products via defects&lt;br /&gt;
** SRTool manager tracks the progress of open CVEs&lt;br /&gt;
** SRTool manager produces reports as required by customers, field, and management&lt;br /&gt;
* CVEs are resolved&lt;br /&gt;
** CVEs are either fixed or declared not vulnerable&lt;br /&gt;
** Releases are updated with the CVE fixes&lt;br /&gt;
** Resolved CVEs are reported to customers, public website&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Testing the Alternate Sample Organization &#039;ACME&#039; ==&lt;br /&gt;
&lt;br /&gt;
* An example alternate organization (master application) called &amp;quot;acme&amp;quot; is included.&lt;br /&gt;
* This code shows all the ways the SRTool can be easily customized to the needs of your organization&lt;br /&gt;
* To enable it and try it out, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ # Include the quick development tools&lt;br /&gt;
    $ cp bin/dev_tools/* .&lt;br /&gt;
    $ # Reset &#039;acme&#039; as the master app/organization&lt;br /&gt;
    $ ./stop.sh&lt;br /&gt;
    $ ./master_app.sh acme&lt;br /&gt;
    $ ./start.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* When you browse the SRTool pages, will now observe several differences&lt;br /&gt;
** In the top bar the text &amp;quot;[ACME]&amp;quot; will appear in several places. This shows how files like &amp;quot;lib/acme/templates/base.html&amp;quot; can take precedence over the default template files in &amp;quot;lib/srtgui&amp;quot;. &lt;br /&gt;
** In the top left corner the &amp;quot;ACME&amp;quot; logo will appear. This is from &amp;quot;SRTOOL_LOCAL_LOGO&amp;quot; being defined in &amp;quot;datasource.json&amp;quot;.&lt;br /&gt;
** If you click on the ACME logo you will be taken to an ACME hello page. This shows that &amp;quot;lib/acme/urls.py&amp;quot; has extended the URL map, plus how you can implement basic HTML pages in ACME&#039;s &amp;quot;lib/acme/views.py&amp;quot; and &amp;quot;lib/acme/templates/acme_hello.html&amp;quot;.&lt;br /&gt;
** In the ACME hello page, there are links to custom table pages for Products and Defects. This shows how to implement custom Toaster Tables via &amp;quot;lib/acme/urls.py&amp;quot; and &amp;quot;lib/acme/tables.py&amp;quot;&lt;br /&gt;
** In the Products page, when you click &amp;quot;Export&amp;quot; a new report type &amp;quot;ACME Products Table&amp;quot; is appended. This shows how to extend and customize existing or new reports.&lt;br /&gt;
&lt;br /&gt;
* To restore the default &amp;quot;yp&amp;quot; master application, do the following:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ ./stop.sh&lt;br /&gt;
    $ ./master_app.sh yp&lt;br /&gt;
    $ ./start.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Adapting SRTool to your Organization ==&lt;br /&gt;
&lt;br /&gt;
* You can use the sample alternate organization &amp;quot;acme&amp;quot; as a guide to adapt SRTool to your organization&lt;br /&gt;
* In this example, we will instantiate a new organization called &amp;quot;&amp;lt;strong&amp;gt;yoyodyne&amp;lt;/strong&amp;gt;&amp;quot;&lt;br /&gt;
* You should be able to place all of your local content into these two directories:&lt;br /&gt;
** &amp;lt;strong&amp;gt;&amp;quot;./bin/yoyodyne&amp;quot;&amp;lt;/strong&amp;gt;: this is your master datasource directory&lt;br /&gt;
** &amp;lt;strong&amp;gt;&amp;quot;./lib/yoyodyne&amp;quot;&amp;lt;/strong&amp;gt;: this is your master Django App directory&lt;br /&gt;
* If you find you need to make changes in the core SRTool code, we recommend (in preferential order):&lt;br /&gt;
** See if you can make it a generic feature so that it can become part of the mainline codebase&lt;br /&gt;
** See if you can make an easy hook for the mainline code, so that your custom content can still reside in your directories&lt;br /&gt;
** Talk to us on how to easily have managed custom patches to the mainline code (we do this in Toaster)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;1) Instantiate your Organization&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can create a starting customization of the SRTool for your organization with these simple steps. &lt;br /&gt;
* In this example, we will use the name &amp;quot;yoyo&amp;quot; as a shorthand for a mythical &amp;quot;Yoyodyne Corporation&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  $ cd /path_to/srtool_dir&lt;br /&gt;
  $ copy bin/dev_tools/* .&lt;br /&gt;
  $ ./stop.sh&lt;br /&gt;
  $ ./master_app.sh create yoyo&lt;br /&gt;
  $ ./start.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* This script will perform the following actions:&lt;br /&gt;
** Copy the sample &#039;bin/acme&#039; directory to &#039;bin/yoyo&#039;&lt;br /&gt;
** Copy the sample &#039;lib/acme&#039; directory to &#039;lib/yoyo&#039;&lt;br /&gt;
** Rename the respective Acme/ACME/acme labels and filenames to Yoyo/YOYO/yoyo&lt;br /&gt;
** Set &#039;yoyo&#039; as the new main application&lt;br /&gt;
* You now have access to all the preset custom features described above for the ACME sample organization, now for Yoyodyne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;2) Add your defect system integration&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need to implement a defect integration backend script to scan your defect system and instantiate the CVE defects in SRTool database, and then keep them up to date.&lt;br /&gt;
&lt;br /&gt;
* An example implementation template for Jira is provided here. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  bin/common/srtool_jira_template.py&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* You can use this to guide your integration to Jira or to other defect systems.&lt;br /&gt;
* To see how to extend this template to your organization and yet maintain compatibility with upstream, see this section: [https://wiki.yoctoproject.org/wiki/SRTool_Developer_Page#Extending_and_customizing_common.2Ftemplate_code_files Extending and customizing common/template code files]&lt;br /&gt;
* Please contact the SRTool developers for assistance in your defect system integration effort.&lt;br /&gt;
&lt;br /&gt;
The main features of this example code, in addition to the Jira system access, is:&lt;br /&gt;
&lt;br /&gt;
*  The &amp;quot;--init&amp;quot; command&lt;br /&gt;
** This command that will initialize the SRTool database with your SRT related defects. Specifically, this command can used to bootstrap the SRTool database for your company&#039;s data&lt;br /&gt;
** It will create an &amp;quot;Investigation&amp;quot; for each defect, and attach it to the respective product&lt;br /&gt;
** It will create a &amp;quot;Vulnerability&amp;quot; to wrap the respective &amp;quot;Investigation&amp;quot;&lt;br /&gt;
** If should find the respective CVE record if it exists, and attach that to the created &amp;quot;Vulnerability&amp;quot;&lt;br /&gt;
** If a &amp;quot;Vulnerability&amp;quot; record already exists for the defect&#039;s CVE, then this script should attach the new &amp;quot;Investigation&amp;quot; to that &amp;quot;Vulnerability&amp;quot; record.&lt;br /&gt;
* The &amp;quot;--update&amp;quot; command&lt;br /&gt;
** This will scan your CVE-related defects&lt;br /&gt;
** If the matching defect record in the SRTool database does not exist, then treat it like the &amp;quot;--init&amp;quot; command.&lt;br /&gt;
** It will update the SRTool defect record with the current defect system state&lt;br /&gt;
** If the defect has changed priority (or any other important state information), it will create a &amp;quot;Notification&amp;quot; event to the respective manager so that they can know that they need to act on the change.&lt;br /&gt;
* The example code assumes that the CVE names are available via a text-based search, for example when the respective CVE name is in the defect title or comments. If your system uses a different marker, then you will need to code for that.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== High Level Development Plan ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: left;&amp;quot;&lt;br /&gt;
! Release&lt;br /&gt;
! Features&lt;br /&gt;
! Status/date&lt;br /&gt;
|-&lt;br /&gt;
|0.80&lt;br /&gt;
|Multi-host testing, Django user model, Django 2.x support&lt;br /&gt;
|Released (December 2018)&lt;br /&gt;
|-&lt;br /&gt;
|0.90&lt;br /&gt;
|Mapping of CVE-CPE &amp;gt; Packages &amp;gt; Recipes &amp;gt; Product/Release CPEs, Add Releases to Products, modular report definitions&lt;br /&gt;
|Under development (January 2019)&lt;br /&gt;
|-&lt;br /&gt;
|1.00&lt;br /&gt;
|General Release&lt;br /&gt;
|Under development (February 2019)&lt;br /&gt;
|-&lt;br /&gt;
|1.10&lt;br /&gt;
|Improved CPE/package mapping hueristics, advanced reports&lt;br /&gt;
|Under development (March+ 2019)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== SRTool Bugzilla Page ==&lt;br /&gt;
&lt;br /&gt;
Here is the link to the SRTool Bugzilla Page: [https://bugzilla.yoctoproject.org/buglist.cgi?list_id=609538&amp;amp;bug_status=__all__&amp;amp;query_format=specific&amp;amp;order=relevance%20desc&amp;amp;product=Security%20Response%20Tool SRTool Bugzilla Page]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== SRTool CGIT Page ==&lt;br /&gt;
&lt;br /&gt;
Here is the link to the CGIT Page: [http://git.yoctoproject.org/cgit/cgit.cgi/srtool SRTool CGIT Page]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== SRTool User Page ==&lt;br /&gt;
&lt;br /&gt;
Here is the link to the User&#039;s Documentation page: [https://wiki.yoctoproject.org/wiki/SRTool_User_Page SRTool UserPage]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== SRTool Developer Page ==&lt;br /&gt;
&lt;br /&gt;
Here is the link to the Developer&#039;s page: [https://wiki.yoctoproject.org/wiki/SRTool_Developer_Page SRTool Developer Page]&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Contribute_to_SRTool&amp;diff=85991</id>
		<title>Contribute to SRTool</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Contribute_to_SRTool&amp;diff=85991"/>
		<updated>2023-10-15T22:09:43Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:SRTool]]&lt;br /&gt;
This page summarizes the Security Response Tool (SRTool) development process. We hope this will help you start contributing to the project. The SRTool is based on the Yocto Project Toaster codebase (Django,Python,Javascript), so many of the process and debugging techniques apply. &lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
== Published content: General CVE management issues and the SRTool ==&lt;br /&gt;
* The SRTool paper for the Embedded Linux Conference, Edinburg 2018:&lt;br /&gt;
** https://events.linuxfoundation.org/wp-content/uploads/2017/12/Keeping-Up-With-The-Joneses-CVEs-David-Reyna-Wind-River-Systems.pdf�&lt;br /&gt;
* Wind River Blog about CVEs and the SRTool&lt;br /&gt;
** http://blogs.windriver.com/wind_river_blog/2018/11/security-response-management-risk-cost-and-best-practices-in-an-imperfect-world.html�&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Set up the local repository and SRTool instance ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;1) Host requirements&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The SRTool should in principle work on any host that supports Yocto Project. It requires &amp;quot;Python3&amp;quot;, &amp;quot;Django &amp;gt;= 1.11&amp;quot;, and &amp;quot;Sqlite3&amp;quot;. A SQL GUI tool like &#039;sqlitebrowser&#039; is recommended.&lt;br /&gt;
&lt;br /&gt;
The required host package installation instructions are the same as Toaster, and the instructions can be found here: [http://www.yoctoproject.org/docs/latest/toaster-manual/toaster-manual.html#toaster-manual-start Toaster documentation]&lt;br /&gt;
&lt;br /&gt;
It was specifically developed and tested with:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: left;&amp;quot;&lt;br /&gt;
! Item&lt;br /&gt;
! Host 1&lt;br /&gt;
! Host 2&lt;br /&gt;
! Host 3&lt;br /&gt;
|-&lt;br /&gt;
|Host&lt;br /&gt;
|Ubuntu 20.04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Python3&lt;br /&gt;
|3.8.10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Django&lt;br /&gt;
|4.00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Sqlite3&lt;br /&gt;
|3.31.1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;2) Cloning the SRTool&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;code&amp;gt; $ git clone git://git.yoctoproject.org/srtool &amp;amp;&amp;amp; cd srtool &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the command if your SSH key is registered:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;code&amp;gt; $ git clone ssh://git@push.yoctoproject.org/srtool &amp;amp;&amp;amp; cd srtool &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;3) Starting the SRTool&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Option #1: Restrict to the local browser:&lt;br /&gt;
  &amp;lt;code&amp;gt; $ ./bin/srt start webport=localhost:9000 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Option #2: Enable remote browsers:&lt;br /&gt;
  &amp;lt;code&amp;gt; $ ./bin/srt start webport=0.0.0.0:9000 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;NOTE&amp;lt;/strong&amp;gt;: The first time you run the SRTool, there will be a delay (30 to 60 minutes) as the default CVE repositories (NIST, Mitre, ...) are scanned, scored, and loaded into the database. After that, the updates will be incremental.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;4) Create a superuser&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need to create at least one super user account to promote users to higher permission levels:&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;code&amp;gt; $ ./bin/srt manage createsuperuser&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;5) Open browser to &amp;lt;IPADDR&amp;gt;:9000&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will bring up the SRTool page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;6) Read the &amp;quot;Guided Tour&amp;quot; &amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Click on the &amp;quot;Guided Tour&amp;quot; button on the home page to see the on-line tool and user information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;7) Create your guest account&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Click on the &amp;quot;Login&amp;quot; button in the top bar, select &amp;quot;Request Account&amp;quot;, fill in the information, Click &amp;quot;Sign Up&amp;quot;, and then log in.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;8) Promote your account to Admin level&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the superuser, click &amp;quot;Management &amp;gt; Manage Users&amp;quot;, click the edit icon for your guest account row, change the &amp;quot;Group&amp;quot; to &amp;quot;Admin&amp;quot;, and click &amp;quot;Submit Changes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
You can now log out of the superuser account and into your own account.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sanity Test Bring-up ==&lt;br /&gt;
&lt;br /&gt;
You can use these steps to start a minimal instance of the SRTool to help validate that the host and the code base are working on your system. This will for example set the environment variable &amp;quot;SRTDBG_MINIMAL_DB=1&amp;quot; which will only fetch a few representative records from each data source.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  $ git pull&lt;br /&gt;
  $ # Copy the dev tools to the base directory&lt;br /&gt;
  $ cp bin/dev_tools/* .&lt;br /&gt;
  $ # Source the debug environment&lt;br /&gt;
  $ . ./srt_env.sh debug&lt;br /&gt;
  $ # Start the system from scratch&lt;br /&gt;
  $ ./recreate.sh&lt;br /&gt;
  $ # Run the sanity test&lt;br /&gt;
  $ ./bin/common/srtool_sanity_test.py -i&lt;br /&gt;
  $ &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  $ ./bin/common/srtool_sanity_test.py -i&lt;br /&gt;
...&lt;br /&gt;
  $ &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To re-start as the full instance, do this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  $ # Source the standard environment&lt;br /&gt;
  $ . ./srt_env.sh&lt;br /&gt;
  $ # Start the system from scratch&lt;br /&gt;
  $ ./recreate.sh&lt;br /&gt;
  $ &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== First Time Bring-up ==&lt;br /&gt;
&lt;br /&gt;
* When you first start, you will have the CVEs from 2015 to 2023&lt;br /&gt;
* You will not have any Vulnerabilities, Investigations, or Defects until you (a) create them, and/or (b) integrate your defect system or other sustaining data.&lt;br /&gt;
* All CVEs will by default get the status &amp;quot;Historical&amp;quot;.&lt;br /&gt;
** The CVEs that were created in the previous 30 days will instead get the status &amp;quot;New&amp;quot;&lt;br /&gt;
** This will allow you to immediately test the CVE triage features&lt;br /&gt;
** The status settings are normally preset by your defect system or other sustaining data&lt;br /&gt;
* You can create a Vulnerability by:&lt;br /&gt;
** Selecting a CVE&lt;br /&gt;
** Click on &amp;quot;Create Vulnerability&amp;quot;&lt;br /&gt;
** Follow the new link to the new Vulnerability&lt;br /&gt;
* You can create an Investigation by:&lt;br /&gt;
** Open a Vulnerability record&lt;br /&gt;
** Click on &amp;quot;Add Product&amp;quot;&lt;br /&gt;
** Select one or more Products, and click &amp;quot;Submit&amp;quot;&lt;br /&gt;
** Observe that the products are added together with new respective Investigations&lt;br /&gt;
** Follow the new link to the new Investigations&lt;br /&gt;
* You can create a Defect by:&lt;br /&gt;
** Open an Investigation record&lt;br /&gt;
** Click on &amp;quot;Create Defect&amp;quot;&lt;br /&gt;
** With the sample defect integration script, a simulated defect will be created and attached to the investigation&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SRTool Primary Goals and Workflows ==&lt;br /&gt;
&lt;br /&gt;
* Goals&lt;br /&gt;
** A common system to track and share security issues, combining community CVE&#039;s&lt;br /&gt;
** A simple yet flexible interface for reporting and exploring the security issues&lt;br /&gt;
** A place to upload and share attachments, including patches, fixes, emails, and documents&lt;br /&gt;
** The ability to generate accurate and up-to-date reports and exports&lt;br /&gt;
** A modular design for easy extension and adoption&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* Primary Workflows&lt;br /&gt;
** Guide and manage the incoming CVE triage process&lt;br /&gt;
** Attach CVEs to specific company products and defects &lt;br /&gt;
** Automated updates from upstream CVEs and internal defect system&lt;br /&gt;
** Ability to generate reports&lt;br /&gt;
** Simple customization for organizations&lt;br /&gt;
** Correlate CVEs with products and release (IN PROGRESS)&lt;br /&gt;
** Correlate CVEs with specific customer builds (IN PROGRESS)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SRTool CVE Lifecycle ==&lt;br /&gt;
&lt;br /&gt;
* CVE are imported&lt;br /&gt;
** New CVEs are imported and triaged from upstream (NIST/MITRE, 1000+/month)&lt;br /&gt;
** Specific CVEs are requested by customers&lt;br /&gt;
* CVEs are managed&lt;br /&gt;
** CVEs are investigated&lt;br /&gt;
** Vulnerable CVEs are assigned to products via defects&lt;br /&gt;
** SRTool manager tracks the progress of open CVEs&lt;br /&gt;
** SRTool manager produces reports as required by customers, field, and management&lt;br /&gt;
* CVEs are resolved&lt;br /&gt;
** CVEs are either fixed or declared not vulnerable&lt;br /&gt;
** Releases are updated with the CVE fixes&lt;br /&gt;
** Resolved CVEs are reported to customers, public website&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Testing the Alternate Sample Organization &#039;ACME&#039; ==&lt;br /&gt;
&lt;br /&gt;
* An example alternate organization (master application) called &amp;quot;acme&amp;quot; is included.&lt;br /&gt;
* This code shows all the ways the SRTool can be easily customized to the needs of your organization&lt;br /&gt;
* To enable it and try it out, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ # Include the quick development tools&lt;br /&gt;
    $ cp bin/dev_tools/* .&lt;br /&gt;
    $ # Reset &#039;acme&#039; as the master app/organization&lt;br /&gt;
    $ ./stop.sh&lt;br /&gt;
    $ ./master_app.sh acme&lt;br /&gt;
    $ ./start.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* When you browse the SRTool pages, will now observe several differences&lt;br /&gt;
** In the top bar the text &amp;quot;[ACME]&amp;quot; will appear in several places. This shows how files like &amp;quot;lib/acme/templates/base.html&amp;quot; can take precedence over the default template files in &amp;quot;lib/srtgui&amp;quot;. &lt;br /&gt;
** In the top left corner the &amp;quot;ACME&amp;quot; logo will appear. This is from &amp;quot;SRTOOL_LOCAL_LOGO&amp;quot; being defined in &amp;quot;datasource.json&amp;quot;.&lt;br /&gt;
** If you click on the ACME logo you will be taken to an ACME hello page. This shows that &amp;quot;lib/acme/urls.py&amp;quot; has extended the URL map, plus how you can implement basic HTML pages in ACME&#039;s &amp;quot;lib/acme/views.py&amp;quot; and &amp;quot;lib/acme/templates/acme_hello.html&amp;quot;.&lt;br /&gt;
** In the ACME hello page, there are links to custom table pages for Products and Defects. This shows how to implement custom Toaster Tables via &amp;quot;lib/acme/urls.py&amp;quot; and &amp;quot;lib/acme/tables.py&amp;quot;&lt;br /&gt;
** In the Products page, when you click &amp;quot;Export&amp;quot; a new report type &amp;quot;ACME Products Table&amp;quot; is appended. This shows how to extend and customize existing or new reports.&lt;br /&gt;
&lt;br /&gt;
* To restore the default &amp;quot;yp&amp;quot; master application, do the following:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ ./stop.sh&lt;br /&gt;
    $ ./master_app.sh yp&lt;br /&gt;
    $ ./start.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Adapting SRTool to your Organization ==&lt;br /&gt;
&lt;br /&gt;
* You can use the sample alternate organization &amp;quot;acme&amp;quot; as a guide to adapt SRTool to your organization&lt;br /&gt;
* In this example, we will instantiate a new organization called &amp;quot;&amp;lt;strong&amp;gt;yoyodyne&amp;lt;/strong&amp;gt;&amp;quot;&lt;br /&gt;
* You should be able to place all of your local content into these two directories:&lt;br /&gt;
** &amp;lt;strong&amp;gt;&amp;quot;./bin/yoyodyne&amp;quot;&amp;lt;/strong&amp;gt;: this is your master datasource directory&lt;br /&gt;
** &amp;lt;strong&amp;gt;&amp;quot;./lib/yoyodyne&amp;quot;&amp;lt;/strong&amp;gt;: this is your master Django App directory&lt;br /&gt;
* If you find you need to make changes in the core SRTool code, we recommend (in preferential order):&lt;br /&gt;
** See if you can make it a generic feature so that it can become part of the mainline codebase&lt;br /&gt;
** See if you can make an easy hook for the mainline code, so that your custom content can still reside in your directories&lt;br /&gt;
** Talk to us on how to easily have managed custom patches to the mainline code (we do this in Toaster)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;1) Instantiate your Organization&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can create a starting customization of the SRTool for your organization with these simple steps. &lt;br /&gt;
* In this example, we will use the name &amp;quot;yoyo&amp;quot; as a shorthand for a mythical &amp;quot;Yoyodyne Corporation&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  $ cd /path_to/srtool_dir&lt;br /&gt;
  $ copy bin/dev_tools/* .&lt;br /&gt;
  $ ./stop.sh&lt;br /&gt;
  $ ./master_app.sh create yoyo&lt;br /&gt;
  $ ./start.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* This script will perform the following actions:&lt;br /&gt;
** Copy the sample &#039;bin/acme&#039; directory to &#039;bin/yoyo&#039;&lt;br /&gt;
** Copy the sample &#039;lib/acme&#039; directory to &#039;lib/yoyo&#039;&lt;br /&gt;
** Rename the respective Acme/ACME/acme labels and filenames to Yoyo/YOYO/yoyo&lt;br /&gt;
** Set &#039;yoyo&#039; as the new main application&lt;br /&gt;
* You now have access to all the preset custom features described above for the ACME sample organization, now for Yoyodyne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;2) Add your defect system integration&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need to implement a defect integration backend script to scan your defect system and instantiate the CVE defects in SRTool database, and then keep them up to date.&lt;br /&gt;
&lt;br /&gt;
* An example implementation template for Jira is provided here. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  bin/common/srtool_jira_template.py&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* You can use this to guide your integration to Jira or to other defect systems.&lt;br /&gt;
* To see how to extend this template to your organization and yet maintain compatibility with upstream, see this section: [https://wiki.yoctoproject.org/wiki/SRTool_Developer_Page#Extending_and_customizing_common.2Ftemplate_code_files Extending and customizing common/template code files]&lt;br /&gt;
* Please contact the SRTool developers for assistance in your defect system integration effort.&lt;br /&gt;
&lt;br /&gt;
The main features of this example code, in addition to the Jira system access, is:&lt;br /&gt;
&lt;br /&gt;
*  The &amp;quot;--init&amp;quot; command&lt;br /&gt;
** This command that will initialize the SRTool database with your SRT related defects. Specifically, this command can used to bootstrap the SRTool database for your company&#039;s data&lt;br /&gt;
** It will create an &amp;quot;Investigation&amp;quot; for each defect, and attach it to the respective product&lt;br /&gt;
** It will create a &amp;quot;Vulnerability&amp;quot; to wrap the respective &amp;quot;Investigation&amp;quot;&lt;br /&gt;
** If should find the respective CVE record if it exists, and attach that to the created &amp;quot;Vulnerability&amp;quot;&lt;br /&gt;
** If a &amp;quot;Vulnerability&amp;quot; record already exists for the defect&#039;s CVE, then this script should attach the new &amp;quot;Investigation&amp;quot; to that &amp;quot;Vulnerability&amp;quot; record.&lt;br /&gt;
* The &amp;quot;--update&amp;quot; command&lt;br /&gt;
** This will scan your CVE-related defects&lt;br /&gt;
** If the matching defect record in the SRTool database does not exist, then treat it like the &amp;quot;--init&amp;quot; command.&lt;br /&gt;
** It will update the SRTool defect record with the current defect system state&lt;br /&gt;
** If the defect has changed priority (or any other important state information), it will create a &amp;quot;Notification&amp;quot; event to the respective manager so that they can know that they need to act on the change.&lt;br /&gt;
* The example code assumes that the CVE names are available via a text-based search, for example when the respective CVE name is in the defect title or comments. If your system uses a different marker, then you will need to code for that.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== High Level Development Plan ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: left;&amp;quot;&lt;br /&gt;
! Release&lt;br /&gt;
! Features&lt;br /&gt;
! Status/date&lt;br /&gt;
|-&lt;br /&gt;
|0.80&lt;br /&gt;
|Multi-host testing, Django user model, Django 2.x support&lt;br /&gt;
|Released (December 2018)&lt;br /&gt;
|-&lt;br /&gt;
|0.90&lt;br /&gt;
|Mapping of CVE-CPE &amp;gt; Packages &amp;gt; Recipes &amp;gt; Product/Release CPEs, Add Releases to Products, modular report definitions&lt;br /&gt;
|Under development (January 2019)&lt;br /&gt;
|-&lt;br /&gt;
|1.00&lt;br /&gt;
|General Release&lt;br /&gt;
|Under development (February 2019)&lt;br /&gt;
|-&lt;br /&gt;
|1.10&lt;br /&gt;
|Improved CPE/package mapping hueristics, advanced reports&lt;br /&gt;
|Under development (March+ 2019)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== SRTool Bugzilla Page ==&lt;br /&gt;
&lt;br /&gt;
Here is the link to the SRTool Bugzilla Page: [https://bugzilla.yoctoproject.org/buglist.cgi?list_id=609538&amp;amp;bug_status=__all__&amp;amp;query_format=specific&amp;amp;order=relevance%20desc&amp;amp;product=Security%20Response%20Tool SRTool Bugzilla Page]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== SRTool CGIT Page ==&lt;br /&gt;
&lt;br /&gt;
Here is the link to the CGIT Page: [http://git.yoctoproject.org/cgit/cgit.cgi/srtool SRTool CGIT Page]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== SRTool User Page ==&lt;br /&gt;
&lt;br /&gt;
Here is the link to the User&#039;s Documentation page: [https://wiki.yoctoproject.org/wiki/SRTool_User_Page SRTool UserPage]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== SRTool Developer Page ==&lt;br /&gt;
&lt;br /&gt;
Here is the link to the Developer&#039;s page: [https://wiki.yoctoproject.org/wiki/SRTool_Developer_Page SRTool Developer Page]&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Contribute_to_SRTool&amp;diff=85990</id>
		<title>Contribute to SRTool</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Contribute_to_SRTool&amp;diff=85990"/>
		<updated>2023-10-15T21:58:53Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:SRTool]]&lt;br /&gt;
This page summarizes the Security Response Tool (SRTool) development process. We hope this will help you start contributing to the project. The SRTool is based on the Yocto Project Toaster codebase (Django,Python,Javascript), so many of the process and debugging techniques apply. &lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
== Published content: General CVE management issues and the SRTool ==&lt;br /&gt;
* The SRTool paper for the Embedded Linux Conference, Edinburg 2018:&lt;br /&gt;
** https://events.linuxfoundation.org/wp-content/uploads/2017/12/Keeping-Up-With-The-Joneses-CVEs-David-Reyna-Wind-River-Systems.pdf�&lt;br /&gt;
* Wind River Blog about CVEs and the SRTool&lt;br /&gt;
** http://blogs.windriver.com/wind_river_blog/2018/11/security-response-management-risk-cost-and-best-practices-in-an-imperfect-world.html�&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Set up the local repository and SRTool instance ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;1) Host requirements&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The SRTool should in principle work on any host that supports Yocto Project. It requires &amp;quot;Python3&amp;quot;, &amp;quot;Django &amp;gt;= 1.11&amp;quot;, and &amp;quot;Sqlite3&amp;quot;. A SQL GUI tool like &#039;sqlitebrowser&#039; is recommended.&lt;br /&gt;
&lt;br /&gt;
The required host package installation instructions are the same as Toaster, and the instructions can be found here: [http://www.yoctoproject.org/docs/latest/toaster-manual/toaster-manual.html#toaster-manual-start Toaster documentation]&lt;br /&gt;
&lt;br /&gt;
It was specifically developed and tested with:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: left;&amp;quot;&lt;br /&gt;
! Item&lt;br /&gt;
! Host 1&lt;br /&gt;
! Host 2&lt;br /&gt;
! Host 3&lt;br /&gt;
|-&lt;br /&gt;
|Host&lt;br /&gt;
|Ubuntu 20.04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Python3&lt;br /&gt;
|3.8.10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Django&lt;br /&gt;
|4.00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Sqlite3&lt;br /&gt;
|3.31.1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;2) Cloning the SRTool&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;code&amp;gt; $ git clone git://git.yoctoproject.org/srtool &amp;amp;&amp;amp; cd srtool &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the command if your SSH key is registered:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;code&amp;gt; $ git clone ssh://git@push.yoctoproject.org/srtool &amp;amp;&amp;amp; cd srtool &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;3) Starting the SRTool&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Option #1: Restrict to the local browser:&lt;br /&gt;
  &amp;lt;code&amp;gt; $ ./bin/srt start webport=localhost:9000 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Option #2: Enable remote browsers:&lt;br /&gt;
  &amp;lt;code&amp;gt; $ ./bin/srt start webport=0.0.0.0:9000 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;NOTE&amp;lt;/strong&amp;gt;: The first time you run the SRTool, there will be a delay (30 to 60 minutes) as the default CVE repositories (NIST, Mitre, ...) are scanned, scored, and loaded into the database. After that, the updates will be incremental.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;4) Create a superuser&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need to create at least one super user account to promote users to higher permission levels:&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;code&amp;gt; $ ./bin/srt manage createsuperuser&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;5) Open browser to &amp;lt;IPADDR&amp;gt;:9000&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will bring up the SRTool page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;6) Read the &amp;quot;Guided Tour&amp;quot; &amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Click on the &amp;quot;Guided Tour&amp;quot; button on the home page to see the on-line tool and user information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;7) Create your guest account&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Click on the &amp;quot;Login&amp;quot; button in the top bar, select &amp;quot;Request Account&amp;quot;, fill in the information, Click &amp;quot;Sign Up&amp;quot;, and then log in.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;8) Promote your account to Admin level&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the superuser, click &amp;quot;Management &amp;gt; Manage Users&amp;quot;, click the edit icon for your guest account row, change the &amp;quot;Group&amp;quot; to &amp;quot;Admin&amp;quot;, and click &amp;quot;Submit Changes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
You can now log out of the superuser account and into your own account.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sanity Test Bring-up ==&lt;br /&gt;
&lt;br /&gt;
You can use these steps to start a minimal instance of the SRTool to help validate that the host and the code base are working on your system. This will for example set the environment variable &amp;quot;SRTDBG_MINIMAL_DB=1&amp;quot; which will only fetch a few representative records from each data source.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  $ git pull&lt;br /&gt;
  $ # Copy the dev tools to the base directory&lt;br /&gt;
  $ cp bin/dev_tools/* .&lt;br /&gt;
  $ # Source the debug environment&lt;br /&gt;
  $ . ./srt_env.sh debug&lt;br /&gt;
  $ # Start the system from scratch&lt;br /&gt;
  $ ./recreate.sh&lt;br /&gt;
  $ # Run the sanity test&lt;br /&gt;
  $ ./bin/common/srtool_sanity_test.py -i&lt;br /&gt;
  $ &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  $ ./bin/common/srtool_sanity_test.py -i&lt;br /&gt;
  Uname       = #35~16.04.1-Ubuntu SMP Thu Jan 25 10:13:43 UTC 2018 x86_64&lt;br /&gt;
  Django      = (1, 11, 8, &#039;final&#039;, 0)&lt;br /&gt;
  Python3     = Python 3.5.2&lt;br /&gt;
  Sqlite3     = 3.11.0 2016-02-15&lt;br /&gt;
  Server PID  = 10234&lt;br /&gt;
  Server Port = [10234](/opt/srtool/lib/manage.py runserver --noreload 0.0.0.0:9123)&lt;br /&gt;
  CVEs        = 64&lt;br /&gt;
  Users       = 5&lt;br /&gt;
  Data source = 22&lt;br /&gt;
  $ &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To re-start as the full instance, do this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  $ # Source the standard environment&lt;br /&gt;
  $ . ./srt_env.sh&lt;br /&gt;
  $ # Start the system from scratch&lt;br /&gt;
  $ ./recreate.sh&lt;br /&gt;
  $ &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== First Time Bring-up ==&lt;br /&gt;
&lt;br /&gt;
* When you first start, you will have the CVEs from 2015 to 2023&lt;br /&gt;
* You will not have any Vulnerabilities, Investigations, or Defects until you (a) create them, and/or (b) integrate your defect system or other sustaining data.&lt;br /&gt;
* All CVEs will by default get the status &amp;quot;Historical&amp;quot;.&lt;br /&gt;
** The CVEs that were created in the previous 30 days will instead get the status &amp;quot;New&amp;quot;&lt;br /&gt;
** This will allow you to immediately test the CVE triage features&lt;br /&gt;
** The status settings are normally preset by your defect system or other sustaining data&lt;br /&gt;
* You can create a Vulnerability by:&lt;br /&gt;
** Selecting a CVE&lt;br /&gt;
** Click on &amp;quot;Create Vulnerability&amp;quot;&lt;br /&gt;
** Follow the new link to the new Vulnerability&lt;br /&gt;
* You can create an Investigation by:&lt;br /&gt;
** Open a Vulnerability record&lt;br /&gt;
** Click on &amp;quot;Add Product&amp;quot;&lt;br /&gt;
** Select one or more Products, and click &amp;quot;Submit&amp;quot;&lt;br /&gt;
** Observe that the products are added together with new respective Investigations&lt;br /&gt;
** Follow the new link to the new Investigations&lt;br /&gt;
* You can create a Defect by:&lt;br /&gt;
** Open an Investigation record&lt;br /&gt;
** Click on &amp;quot;Create Defect&amp;quot;&lt;br /&gt;
** With the sample defect integration script, a simulated defect will be created and attached to the investigation&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SRTool Primary Goals and Workflows ==&lt;br /&gt;
&lt;br /&gt;
* Goals&lt;br /&gt;
** A common system to track and share security issues, combining community CVE&#039;s&lt;br /&gt;
** A simple yet flexible interface for reporting and exploring the security issues&lt;br /&gt;
** A place to upload and share attachments, including patches, fixes, emails, and documents&lt;br /&gt;
** The ability to generate accurate and up-to-date reports and exports&lt;br /&gt;
** A modular design for easy extension and adoption&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* Primary Workflows&lt;br /&gt;
** Guide and manage the incoming CVE triage process&lt;br /&gt;
** Attach CVEs to specific company products and defects &lt;br /&gt;
** Automated updates from upstream CVEs and internal defect system&lt;br /&gt;
** Ability to generate reports&lt;br /&gt;
** Simple customization for organizations&lt;br /&gt;
** Correlate CVEs with products and release (IN PROGRESS)&lt;br /&gt;
** Correlate CVEs with specific customer builds (IN PROGRESS)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SRTool CVE Lifecycle ==&lt;br /&gt;
&lt;br /&gt;
* CVE are imported&lt;br /&gt;
** New CVEs are imported and triaged from upstream (NIST/MITRE, 1000+/month)&lt;br /&gt;
** Specific CVEs are requested by customers&lt;br /&gt;
* CVEs are managed&lt;br /&gt;
** CVEs are investigated&lt;br /&gt;
** Vulnerable CVEs are assigned to products via defects&lt;br /&gt;
** SRTool manager tracks the progress of open CVEs&lt;br /&gt;
** SRTool manager produces reports as required by customers, field, and management&lt;br /&gt;
* CVEs are resolved&lt;br /&gt;
** CVEs are either fixed or declared not vulnerable&lt;br /&gt;
** Releases are updated with the CVE fixes&lt;br /&gt;
** Resolved CVEs are reported to customers, public website&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Testing the Alternate Sample Organization &#039;ACME&#039; ==&lt;br /&gt;
&lt;br /&gt;
* An example alternate organization (master application) called &amp;quot;acme&amp;quot; is included.&lt;br /&gt;
* This code shows all the ways the SRTool can be easily customized to the needs of your organization&lt;br /&gt;
* To enable it and try it out, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ # Include the quick development tools&lt;br /&gt;
    $ cp bin/dev_tools/* .&lt;br /&gt;
    $ # Reset &#039;acme&#039; as the master app/organization&lt;br /&gt;
    $ ./stop.sh&lt;br /&gt;
    $ ./master_app.sh acme&lt;br /&gt;
    $ ./start.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* When you browse the SRTool pages, will now observe several differences&lt;br /&gt;
** In the top bar the text &amp;quot;[ACME]&amp;quot; will appear in several places. This shows how files like &amp;quot;lib/acme/templates/base.html&amp;quot; can take precedence over the default template files in &amp;quot;lib/srtgui&amp;quot;. &lt;br /&gt;
** In the top left corner the &amp;quot;ACME&amp;quot; logo will appear. This is from &amp;quot;SRTOOL_LOCAL_LOGO&amp;quot; being defined in &amp;quot;datasource.json&amp;quot;.&lt;br /&gt;
** If you click on the ACME logo you will be taken to an ACME hello page. This shows that &amp;quot;lib/acme/urls.py&amp;quot; has extended the URL map, plus how you can implement basic HTML pages in ACME&#039;s &amp;quot;lib/acme/views.py&amp;quot; and &amp;quot;lib/acme/templates/acme_hello.html&amp;quot;.&lt;br /&gt;
** In the ACME hello page, there are links to custom table pages for Products and Defects. This shows how to implement custom Toaster Tables via &amp;quot;lib/acme/urls.py&amp;quot; and &amp;quot;lib/acme/tables.py&amp;quot;&lt;br /&gt;
** In the Products page, when you click &amp;quot;Export&amp;quot; a new report type &amp;quot;ACME Products Table&amp;quot; is appended. This shows how to extend and customize existing or new reports.&lt;br /&gt;
&lt;br /&gt;
* To restore the default &amp;quot;yp&amp;quot; master application, do the following:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ ./stop.sh&lt;br /&gt;
    $ ./master_app.sh yp&lt;br /&gt;
    $ ./start.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Adapting SRTool to your Organization ==&lt;br /&gt;
&lt;br /&gt;
* You can use the sample alternate organization &amp;quot;acme&amp;quot; as a guide to adapt SRTool to your organization&lt;br /&gt;
* In this example, we will instantiate a new organization called &amp;quot;&amp;lt;strong&amp;gt;yoyodyne&amp;lt;/strong&amp;gt;&amp;quot;&lt;br /&gt;
* You should be able to place all of your local content into these two directories:&lt;br /&gt;
** &amp;lt;strong&amp;gt;&amp;quot;./bin/yoyodyne&amp;quot;&amp;lt;/strong&amp;gt;: this is your master datasource directory&lt;br /&gt;
** &amp;lt;strong&amp;gt;&amp;quot;./lib/yoyodyne&amp;quot;&amp;lt;/strong&amp;gt;: this is your master Django App directory&lt;br /&gt;
* If you find you need to make changes in the core SRTool code, we recommend (in preferential order):&lt;br /&gt;
** See if you can make it a generic feature so that it can become part of the mainline codebase&lt;br /&gt;
** See if you can make an easy hook for the mainline code, so that your custom content can still reside in your directories&lt;br /&gt;
** Talk to us on how to easily have managed custom patches to the mainline code (we do this in Toaster)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;1) Instantiate your Organization&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can create a starting customization of the SRTool for your organization with these simple steps. &lt;br /&gt;
* In this example, we will use the name &amp;quot;yoyo&amp;quot; as a shorthand for a mythical &amp;quot;Yoyodyne Corporation&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  $ cd /path_to/srtool_dir&lt;br /&gt;
  $ copy bin/dev_tools/* .&lt;br /&gt;
  $ ./stop.sh&lt;br /&gt;
  $ ./master_app.sh create yoyo&lt;br /&gt;
  $ ./start.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* This script will perform the following actions:&lt;br /&gt;
** Copy the sample &#039;bin/acme&#039; directory to &#039;bin/yoyo&#039;&lt;br /&gt;
** Copy the sample &#039;lib/acme&#039; directory to &#039;lib/yoyo&#039;&lt;br /&gt;
** Rename the respective Acme/ACME/acme labels and filenames to Yoyo/YOYO/yoyo&lt;br /&gt;
** Set &#039;yoyo&#039; as the new main application&lt;br /&gt;
* You now have access to all the preset custom features described above for the ACME sample organization, now for Yoyodyne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;2) Add your defect system integration&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need to implement a defect integration backend script to scan your defect system and instantiate the CVE defects in SRTool database, and then keep them up to date.&lt;br /&gt;
&lt;br /&gt;
* An example implementation template for Jira is provided here. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  bin/common/srtool_jira_template.py&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* You can use this to guide your integration to Jira or to other defect systems.&lt;br /&gt;
* To see how to extend this template to your organization and yet maintain compatibility with upstream, see this section: [https://wiki.yoctoproject.org/wiki/SRTool_Developer_Page#Extending_and_customizing_common.2Ftemplate_code_files Extending and customizing common/template code files]&lt;br /&gt;
* Please contact the SRTool developers for assistance in your defect system integration effort.&lt;br /&gt;
&lt;br /&gt;
The main features of this example code, in addition to the Jira system access, is:&lt;br /&gt;
&lt;br /&gt;
*  The &amp;quot;--init&amp;quot; command&lt;br /&gt;
** This command that will initialize the SRTool database with your SRT related defects. Specifically, this command can used to bootstrap the SRTool database for your company&#039;s data&lt;br /&gt;
** It will create an &amp;quot;Investigation&amp;quot; for each defect, and attach it to the respective product&lt;br /&gt;
** It will create a &amp;quot;Vulnerability&amp;quot; to wrap the respective &amp;quot;Investigation&amp;quot;&lt;br /&gt;
** If should find the respective CVE record if it exists, and attach that to the created &amp;quot;Vulnerability&amp;quot;&lt;br /&gt;
** If a &amp;quot;Vulnerability&amp;quot; record already exists for the defect&#039;s CVE, then this script should attach the new &amp;quot;Investigation&amp;quot; to that &amp;quot;Vulnerability&amp;quot; record.&lt;br /&gt;
* The &amp;quot;--update&amp;quot; command&lt;br /&gt;
** This will scan your CVE-related defects&lt;br /&gt;
** If the matching defect record in the SRTool database does not exist, then treat it like the &amp;quot;--init&amp;quot; command.&lt;br /&gt;
** It will update the SRTool defect record with the current defect system state&lt;br /&gt;
** If the defect has changed priority (or any other important state information), it will create a &amp;quot;Notification&amp;quot; event to the respective manager so that they can know that they need to act on the change.&lt;br /&gt;
* The example code assumes that the CVE names are available via a text-based search, for example when the respective CVE name is in the defect title or comments. If your system uses a different marker, then you will need to code for that.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== High Level Development Plan ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: left;&amp;quot;&lt;br /&gt;
! Release&lt;br /&gt;
! Features&lt;br /&gt;
! Status/date&lt;br /&gt;
|-&lt;br /&gt;
|0.80&lt;br /&gt;
|Multi-host testing, Django user model, Django 2.x support&lt;br /&gt;
|Released (December 2018)&lt;br /&gt;
|-&lt;br /&gt;
|0.90&lt;br /&gt;
|Mapping of CVE-CPE &amp;gt; Packages &amp;gt; Recipes &amp;gt; Product/Release CPEs, Add Releases to Products, modular report definitions&lt;br /&gt;
|Under development (January 2019)&lt;br /&gt;
|-&lt;br /&gt;
|1.00&lt;br /&gt;
|General Release&lt;br /&gt;
|Under development (February 2019)&lt;br /&gt;
|-&lt;br /&gt;
|1.10&lt;br /&gt;
|Improved CPE/package mapping hueristics, advanced reports&lt;br /&gt;
|Under development (March+ 2019)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== SRTool Bugzilla Page ==&lt;br /&gt;
&lt;br /&gt;
Here is the link to the SRTool Bugzilla Page: [https://bugzilla.yoctoproject.org/buglist.cgi?list_id=609538&amp;amp;bug_status=__all__&amp;amp;query_format=specific&amp;amp;order=relevance%20desc&amp;amp;product=Security%20Response%20Tool SRTool Bugzilla Page]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== SRTool CGIT Page ==&lt;br /&gt;
&lt;br /&gt;
Here is the link to the CGIT Page: [http://git.yoctoproject.org/cgit/cgit.cgi/srtool SRTool CGIT Page]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== SRTool User Page ==&lt;br /&gt;
&lt;br /&gt;
Here is the link to the User&#039;s Documentation page: [https://wiki.yoctoproject.org/wiki/SRTool_User_Page SRTool UserPage]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== SRTool Developer Page ==&lt;br /&gt;
&lt;br /&gt;
Here is the link to the Developer&#039;s page: [https://wiki.yoctoproject.org/wiki/SRTool_Developer_Page SRTool Developer Page]&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Contribute_to_SRTool&amp;diff=85989</id>
		<title>Contribute to SRTool</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Contribute_to_SRTool&amp;diff=85989"/>
		<updated>2023-10-15T21:57:47Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:SRTool]]&lt;br /&gt;
This page summarizes the Security Response Tool (SRTool) development process. We hope this will help you start contributing to the project. The SRTool is based on the Yocto Project Toaster codebase (Django,Python,Javascript), so many of the process and debugging techniques apply. &lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
== Published content: General CVE management issues and the SRTool ==&lt;br /&gt;
* The SRTool paper for the Embedded Linux Conference, Edinburg 2018:&lt;br /&gt;
** https://events.linuxfoundation.org/wp-content/uploads/2017/12/Keeping-Up-With-The-Joneses-CVEs-David-Reyna-Wind-River-Systems.pdf�&lt;br /&gt;
* Wind River Blog about CVEs and the SRTool&lt;br /&gt;
** http://blogs.windriver.com/wind_river_blog/2018/11/security-response-management-risk-cost-and-best-practices-in-an-imperfect-world.html�&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Set up the local repository and SRTool instance ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;1) Host requirements&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The SRTool should in principle work on any host that supports Yocto Project. It requires &amp;quot;Python3&amp;quot;, &amp;quot;Django &amp;gt;= 1.11&amp;quot;, and &amp;quot;Sqlite3&amp;quot;. A SQL GUI tool like &#039;sqlitebrowser&#039; is recommended.&lt;br /&gt;
&lt;br /&gt;
The required host package installation instructions are the same as Toaster, and the instructions can be found here: [http://www.yoctoproject.org/docs/latest/toaster-manual/toaster-manual.html#toaster-manual-start Toaster documentation]&lt;br /&gt;
&lt;br /&gt;
It was specifically developed and tested with:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: left;&amp;quot;&lt;br /&gt;
! Item&lt;br /&gt;
! Host 1&lt;br /&gt;
! Host 2&lt;br /&gt;
! Host 3&lt;br /&gt;
|-&lt;br /&gt;
|Host&lt;br /&gt;
|Ubuntu 20.04&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Python3&lt;br /&gt;
|3.8.10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Django&lt;br /&gt;
|4.00&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Sqlite3&lt;br /&gt;
|3.31.1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;2) Cloning the SRTool&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;code&amp;gt; $ git clone git://git.yoctoproject.org/srtool &amp;amp;&amp;amp; cd srtool &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the command if your SSH key is registered:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;code&amp;gt; $ git clone ssh://git@push.yoctoproject.org/srtool &amp;amp;&amp;amp; cd srtool &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;3) Starting the SRTool&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Option #1: Restrict to the local browser:&lt;br /&gt;
  &amp;lt;code&amp;gt; $ ./bin/srt start webport=localhost:9000 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Option #2: Enable remote browsers:&lt;br /&gt;
  &amp;lt;code&amp;gt; $ ./bin/srt start webport=0.0.0.0:9000 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;NOTE&amp;lt;/strong&amp;gt;: The first time you run the SRTool, there will be a delay (30 to 60 minutes) as the default CVE repositories (NIST, Mitre, ...) are scanned, scored, and loaded into the database. After that, the updates will be incremental.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;4) Create a superuser&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need to create at least one super user account to promote users to higher permission levels:&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;code&amp;gt; $ ./bin/srt manage createsuperuser&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;5) Open browser to &amp;lt;IPADDR&amp;gt;:9000&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will bring up the SRTool page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;6) Read the &amp;quot;Guided Tour&amp;quot; &amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Click on the &amp;quot;Guided Tour&amp;quot; button on the home page to see the on-line tool and user information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;7) Create your guest account&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Click on the &amp;quot;Login&amp;quot; button in the top bar, select &amp;quot;Request Account&amp;quot;, fill in the information, Click &amp;quot;Sign Up&amp;quot;, and then log in.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;8) Promote your account to Admin level&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the superuser, click &amp;quot;Management &amp;gt; Manage Users&amp;quot;, click the edit icon for your guest account row, change the &amp;quot;Group&amp;quot; to &amp;quot;Admin&amp;quot;, and click &amp;quot;Submit Changes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
You can now log out of the superuser account and into your own account.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sanity Test Bring-up ==&lt;br /&gt;
&lt;br /&gt;
You can use these steps to start a minimal instance of the SRTool to help validate that the host and the code base are working on your system. This will for example set the environment variable &amp;quot;SRTDBG_MINIMAL_DB=1&amp;quot; which will only fetch a few representative records from each data source.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  $ git pull&lt;br /&gt;
  $ # Copy the dev tools to the base directory&lt;br /&gt;
  $ cp bin/dev_tools/* .&lt;br /&gt;
  $ # Source the debug environment&lt;br /&gt;
  $ . ./srt_env.sh debug&lt;br /&gt;
  $ # Start the system from scratch&lt;br /&gt;
  $ ./recreate.sh&lt;br /&gt;
  $ # Run the sanity test&lt;br /&gt;
  $ ./bin/common/srtool_sanity_test.py -i&lt;br /&gt;
  $ &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  $ ./bin/common/srtool_sanity_test.py -i&lt;br /&gt;
  Uname       = #35~16.04.1-Ubuntu SMP Thu Jan 25 10:13:43 UTC 2018 x86_64&lt;br /&gt;
  Django      = (1, 11, 8, &#039;final&#039;, 0)&lt;br /&gt;
  Python3     = Python 3.5.2&lt;br /&gt;
  Sqlite3     = 3.11.0 2016-02-15&lt;br /&gt;
  Server PID  = 10234&lt;br /&gt;
  Server Port = [10234](/opt/srtool/lib/manage.py runserver --noreload 0.0.0.0:9123)&lt;br /&gt;
  CVEs        = 64&lt;br /&gt;
  Users       = 5&lt;br /&gt;
  Data source = 22&lt;br /&gt;
  $ &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To re-start as the full instance, do this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  $ # Source the standard environment&lt;br /&gt;
  $ . ./srt_env.sh&lt;br /&gt;
  $ # Start the system from scratch&lt;br /&gt;
  $ ./recreate.sh&lt;br /&gt;
  $ &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== First Time Bring-up ==&lt;br /&gt;
&lt;br /&gt;
* When you first start, you will have the CVEs from 2015 to 2018&lt;br /&gt;
* You will not have any Vulnerabilities, Investigations, or Defects until you (a) create them, and/or (b) integrate your defect system or other sustaining data.&lt;br /&gt;
* All CVEs will by default get the status &amp;quot;Historical&amp;quot;.&lt;br /&gt;
** The CVEs that were created in the previous 30 days will instead get the status &amp;quot;New&amp;quot;&lt;br /&gt;
** This will allow you to immediately test the CVE triage features&lt;br /&gt;
** The status settings are normally preset by your defect system or other sustaining data&lt;br /&gt;
* You can create a Vulnerability by:&lt;br /&gt;
** Selecting a CVE&lt;br /&gt;
** Click on &amp;quot;Create Vulnerability&amp;quot;&lt;br /&gt;
** Follow the new link to the new Vulnerability&lt;br /&gt;
* You can create an Investigation by:&lt;br /&gt;
** Open a Vulnerability record&lt;br /&gt;
** Click on &amp;quot;Add Product&amp;quot;&lt;br /&gt;
** Select one or more Products, and click &amp;quot;Submit&amp;quot;&lt;br /&gt;
** Observe that the products are added together with new respective Investigations&lt;br /&gt;
** Follow the new link to the new Investigations&lt;br /&gt;
* You can create a Defect by:&lt;br /&gt;
** Open an Investigation record&lt;br /&gt;
** Click on &amp;quot;Create Defect&amp;quot;&lt;br /&gt;
** With the sample defect integration script, a simulated defect will be created and attached to the investigation&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SRTool Primary Goals and Workflows ==&lt;br /&gt;
&lt;br /&gt;
* Goals&lt;br /&gt;
** A common system to track and share security issues, combining community CVE&#039;s&lt;br /&gt;
** A simple yet flexible interface for reporting and exploring the security issues&lt;br /&gt;
** A place to upload and share attachments, including patches, fixes, emails, and documents&lt;br /&gt;
** The ability to generate accurate and up-to-date reports and exports&lt;br /&gt;
** A modular design for easy extension and adoption&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* Primary Workflows&lt;br /&gt;
** Guide and manage the incoming CVE triage process&lt;br /&gt;
** Attach CVEs to specific company products and defects &lt;br /&gt;
** Automated updates from upstream CVEs and internal defect system&lt;br /&gt;
** Ability to generate reports&lt;br /&gt;
** Simple customization for organizations&lt;br /&gt;
** Correlate CVEs with products and release (IN PROGRESS)&lt;br /&gt;
** Correlate CVEs with specific customer builds (IN PROGRESS)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SRTool CVE Lifecycle ==&lt;br /&gt;
&lt;br /&gt;
* CVE are imported&lt;br /&gt;
** New CVEs are imported and triaged from upstream (NIST/MITRE, 1000+/month)&lt;br /&gt;
** Specific CVEs are requested by customers&lt;br /&gt;
* CVEs are managed&lt;br /&gt;
** CVEs are investigated&lt;br /&gt;
** Vulnerable CVEs are assigned to products via defects&lt;br /&gt;
** SRTool manager tracks the progress of open CVEs&lt;br /&gt;
** SRTool manager produces reports as required by customers, field, and management&lt;br /&gt;
* CVEs are resolved&lt;br /&gt;
** CVEs are either fixed or declared not vulnerable&lt;br /&gt;
** Releases are updated with the CVE fixes&lt;br /&gt;
** Resolved CVEs are reported to customers, public website&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Testing the Alternate Sample Organization &#039;ACME&#039; ==&lt;br /&gt;
&lt;br /&gt;
* An example alternate organization (master application) called &amp;quot;acme&amp;quot; is included.&lt;br /&gt;
* This code shows all the ways the SRTool can be easily customized to the needs of your organization&lt;br /&gt;
* To enable it and try it out, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ # Include the quick development tools&lt;br /&gt;
    $ cp bin/dev_tools/* .&lt;br /&gt;
    $ # Reset &#039;acme&#039; as the master app/organization&lt;br /&gt;
    $ ./stop.sh&lt;br /&gt;
    $ ./master_app.sh acme&lt;br /&gt;
    $ ./start.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* When you browse the SRTool pages, will now observe several differences&lt;br /&gt;
** In the top bar the text &amp;quot;[ACME]&amp;quot; will appear in several places. This shows how files like &amp;quot;lib/acme/templates/base.html&amp;quot; can take precedence over the default template files in &amp;quot;lib/srtgui&amp;quot;. &lt;br /&gt;
** In the top left corner the &amp;quot;ACME&amp;quot; logo will appear. This is from &amp;quot;SRTOOL_LOCAL_LOGO&amp;quot; being defined in &amp;quot;datasource.json&amp;quot;.&lt;br /&gt;
** If you click on the ACME logo you will be taken to an ACME hello page. This shows that &amp;quot;lib/acme/urls.py&amp;quot; has extended the URL map, plus how you can implement basic HTML pages in ACME&#039;s &amp;quot;lib/acme/views.py&amp;quot; and &amp;quot;lib/acme/templates/acme_hello.html&amp;quot;.&lt;br /&gt;
** In the ACME hello page, there are links to custom table pages for Products and Defects. This shows how to implement custom Toaster Tables via &amp;quot;lib/acme/urls.py&amp;quot; and &amp;quot;lib/acme/tables.py&amp;quot;&lt;br /&gt;
** In the Products page, when you click &amp;quot;Export&amp;quot; a new report type &amp;quot;ACME Products Table&amp;quot; is appended. This shows how to extend and customize existing or new reports.&lt;br /&gt;
&lt;br /&gt;
* To restore the default &amp;quot;yp&amp;quot; master application, do the following:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ ./stop.sh&lt;br /&gt;
    $ ./master_app.sh yp&lt;br /&gt;
    $ ./start.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Adapting SRTool to your Organization ==&lt;br /&gt;
&lt;br /&gt;
* You can use the sample alternate organization &amp;quot;acme&amp;quot; as a guide to adapt SRTool to your organization&lt;br /&gt;
* In this example, we will instantiate a new organization called &amp;quot;&amp;lt;strong&amp;gt;yoyodyne&amp;lt;/strong&amp;gt;&amp;quot;&lt;br /&gt;
* You should be able to place all of your local content into these two directories:&lt;br /&gt;
** &amp;lt;strong&amp;gt;&amp;quot;./bin/yoyodyne&amp;quot;&amp;lt;/strong&amp;gt;: this is your master datasource directory&lt;br /&gt;
** &amp;lt;strong&amp;gt;&amp;quot;./lib/yoyodyne&amp;quot;&amp;lt;/strong&amp;gt;: this is your master Django App directory&lt;br /&gt;
* If you find you need to make changes in the core SRTool code, we recommend (in preferential order):&lt;br /&gt;
** See if you can make it a generic feature so that it can become part of the mainline codebase&lt;br /&gt;
** See if you can make an easy hook for the mainline code, so that your custom content can still reside in your directories&lt;br /&gt;
** Talk to us on how to easily have managed custom patches to the mainline code (we do this in Toaster)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;1) Instantiate your Organization&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can create a starting customization of the SRTool for your organization with these simple steps. &lt;br /&gt;
* In this example, we will use the name &amp;quot;yoyo&amp;quot; as a shorthand for a mythical &amp;quot;Yoyodyne Corporation&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  $ cd /path_to/srtool_dir&lt;br /&gt;
  $ copy bin/dev_tools/* .&lt;br /&gt;
  $ ./stop.sh&lt;br /&gt;
  $ ./master_app.sh create yoyo&lt;br /&gt;
  $ ./start.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* This script will perform the following actions:&lt;br /&gt;
** Copy the sample &#039;bin/acme&#039; directory to &#039;bin/yoyo&#039;&lt;br /&gt;
** Copy the sample &#039;lib/acme&#039; directory to &#039;lib/yoyo&#039;&lt;br /&gt;
** Rename the respective Acme/ACME/acme labels and filenames to Yoyo/YOYO/yoyo&lt;br /&gt;
** Set &#039;yoyo&#039; as the new main application&lt;br /&gt;
* You now have access to all the preset custom features described above for the ACME sample organization, now for Yoyodyne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;2) Add your defect system integration&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need to implement a defect integration backend script to scan your defect system and instantiate the CVE defects in SRTool database, and then keep them up to date.&lt;br /&gt;
&lt;br /&gt;
* An example implementation template for Jira is provided here. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  bin/common/srtool_jira_template.py&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* You can use this to guide your integration to Jira or to other defect systems.&lt;br /&gt;
* To see how to extend this template to your organization and yet maintain compatibility with upstream, see this section: [https://wiki.yoctoproject.org/wiki/SRTool_Developer_Page#Extending_and_customizing_common.2Ftemplate_code_files Extending and customizing common/template code files]&lt;br /&gt;
* Please contact the SRTool developers for assistance in your defect system integration effort.&lt;br /&gt;
&lt;br /&gt;
The main features of this example code, in addition to the Jira system access, is:&lt;br /&gt;
&lt;br /&gt;
*  The &amp;quot;--init&amp;quot; command&lt;br /&gt;
** This command that will initialize the SRTool database with your SRT related defects. Specifically, this command can used to bootstrap the SRTool database for your company&#039;s data&lt;br /&gt;
** It will create an &amp;quot;Investigation&amp;quot; for each defect, and attach it to the respective product&lt;br /&gt;
** It will create a &amp;quot;Vulnerability&amp;quot; to wrap the respective &amp;quot;Investigation&amp;quot;&lt;br /&gt;
** If should find the respective CVE record if it exists, and attach that to the created &amp;quot;Vulnerability&amp;quot;&lt;br /&gt;
** If a &amp;quot;Vulnerability&amp;quot; record already exists for the defect&#039;s CVE, then this script should attach the new &amp;quot;Investigation&amp;quot; to that &amp;quot;Vulnerability&amp;quot; record.&lt;br /&gt;
* The &amp;quot;--update&amp;quot; command&lt;br /&gt;
** This will scan your CVE-related defects&lt;br /&gt;
** If the matching defect record in the SRTool database does not exist, then treat it like the &amp;quot;--init&amp;quot; command.&lt;br /&gt;
** It will update the SRTool defect record with the current defect system state&lt;br /&gt;
** If the defect has changed priority (or any other important state information), it will create a &amp;quot;Notification&amp;quot; event to the respective manager so that they can know that they need to act on the change.&lt;br /&gt;
* The example code assumes that the CVE names are available via a text-based search, for example when the respective CVE name is in the defect title or comments. If your system uses a different marker, then you will need to code for that.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== High Level Development Plan ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: left;&amp;quot;&lt;br /&gt;
! Release&lt;br /&gt;
! Features&lt;br /&gt;
! Status/date&lt;br /&gt;
|-&lt;br /&gt;
|0.80&lt;br /&gt;
|Multi-host testing, Django user model, Django 2.x support&lt;br /&gt;
|Released (December 2018)&lt;br /&gt;
|-&lt;br /&gt;
|0.90&lt;br /&gt;
|Mapping of CVE-CPE &amp;gt; Packages &amp;gt; Recipes &amp;gt; Product/Release CPEs, Add Releases to Products, modular report definitions&lt;br /&gt;
|Under development (January 2019)&lt;br /&gt;
|-&lt;br /&gt;
|1.00&lt;br /&gt;
|General Release&lt;br /&gt;
|Under development (February 2019)&lt;br /&gt;
|-&lt;br /&gt;
|1.10&lt;br /&gt;
|Improved CPE/package mapping hueristics, advanced reports&lt;br /&gt;
|Under development (March+ 2019)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== SRTool Bugzilla Page ==&lt;br /&gt;
&lt;br /&gt;
Here is the link to the SRTool Bugzilla Page: [https://bugzilla.yoctoproject.org/buglist.cgi?list_id=609538&amp;amp;bug_status=__all__&amp;amp;query_format=specific&amp;amp;order=relevance%20desc&amp;amp;product=Security%20Response%20Tool SRTool Bugzilla Page]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== SRTool CGIT Page ==&lt;br /&gt;
&lt;br /&gt;
Here is the link to the CGIT Page: [http://git.yoctoproject.org/cgit/cgit.cgi/srtool SRTool CGIT Page]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== SRTool User Page ==&lt;br /&gt;
&lt;br /&gt;
Here is the link to the User&#039;s Documentation page: [https://wiki.yoctoproject.org/wiki/SRTool_User_Page SRTool UserPage]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== SRTool Developer Page ==&lt;br /&gt;
&lt;br /&gt;
Here is the link to the Developer&#039;s page: [https://wiki.yoctoproject.org/wiki/SRTool_Developer_Page SRTool Developer Page]&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=YoctoProject_Summit_yps2022.11&amp;diff=85536</id>
		<title>YoctoProject Summit yps2022.11</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=YoctoProject_Summit_yps2022.11&amp;diff=85536"/>
		<updated>2022-11-16T02:36:54Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: /* Hands-on Servers Information */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The Yocto Project Summit 2022.11 =&lt;br /&gt;
The Yocto Project Summit, yps2022.11, is a virtual conference from November 29 to December 1, 2022 to gather members of the Yocto Project community together to discuss ideas and present information related to The Yocto Project.&lt;br /&gt;
&lt;br /&gt;
== Organizing Committee ==&lt;br /&gt;
The organizing committee consists of (alphabetical by first name):&lt;br /&gt;
* Behan Webster&lt;br /&gt;
* David Reyna&lt;br /&gt;
* Josef Holzmayr-Khosh Amoz&lt;br /&gt;
* Megan Knight (Advocacy Manager)&lt;br /&gt;
* Nicolas Dechesne (YP Community Manager)&lt;br /&gt;
&lt;br /&gt;
== Platforms ==&lt;br /&gt;
In terms of platforms we&#039;re using:&lt;br /&gt;
* pretalx for the CfP and schedule&lt;br /&gt;
* the LF&#039;s cvent for registration&lt;br /&gt;
* Zoom for the conference video&lt;br /&gt;
* irc for the conference chat (channel #yocto-summit-2022.11 on Libera.Chat)&lt;br /&gt;
* Digital Ocean for the hands-on classes&lt;br /&gt;
&lt;br /&gt;
== Hands-on Servers Information (Pre-event Preparation) ==&lt;br /&gt;
# If you already have a Digital Ocean account, skip the next 2 steps&lt;br /&gt;
# To create a Digital Ocean account, please sign up @ [https://do.co/yoctoproject DigitalOcean] &lt;br /&gt;
# Confirm your email and add a payment method to satisfy abuse requirements - you won&#039;t be charged unless you leave the training machine running long past the summit&lt;br /&gt;
# Visit https://cloud.digitalocean.com/account/api/tokens and generate a new token named &#039;&#039;&#039;YPSummit&#039;&#039;&#039;, and copy the string that pops up.&lt;br /&gt;
# Please complete this [https://forms.gle/53NFyCRaEpmRWuaa8 form] so your API key can be added to the provisioning scripts and we can top up your account credit.&lt;br /&gt;
&lt;br /&gt;
After the form has been filled by all participants we will provision machines. When the machines are ready logins will be &amp;quot;ssh ilab01@AXAXAXA-summit.yocto.io&amp;quot; where AXAXAXA are the first 7 characters of your confirmation string. The password is the full 11 character confirmation string.&lt;br /&gt;
&lt;br /&gt;
Once you have a verified working server you may delete your api key at https://cloud.digitalocean.com/account/api/tokens. Otherwise all resources will be removed after the training. Any retained servers will be billed to you after the promotional credit expires in 60 days.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Lab files are available during the event at http://summit.yocto.io/yps2022.11.tgz --&amp;gt;&lt;br /&gt;
Lab files will be available for download once the event begins.&lt;br /&gt;
&lt;br /&gt;
== For more information ==&lt;br /&gt;
* https://www.yoctoproject.org/yocto-project-summit-2022-11/&lt;br /&gt;
* https://pretalx.com/yocto-project-summit-2022-11/&lt;br /&gt;
&lt;br /&gt;
== Slide template for presenters ==&lt;br /&gt;
* https://docs.google.com/presentation/d/1b0cWLZ6ZJpxd7G6HIwUZvo39X9TUUqdiG28J5EDXyYg&lt;br /&gt;
** keep the first and last slides&lt;br /&gt;
** edit the first slide to include your name, presentation title, and (optionally) your company&lt;br /&gt;
** the rest of the slides are examples and can be duplicated, edited, and/or removed&lt;br /&gt;
** please upload your finished slides to your specific event in pretalx&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=YoctoProject_Summit_yps2022.11&amp;diff=85535</id>
		<title>YoctoProject Summit yps2022.11</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=YoctoProject_Summit_yps2022.11&amp;diff=85535"/>
		<updated>2022-11-16T02:30:58Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: /* Hands-on Servers Information */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The Yocto Project Summit 2022.11 =&lt;br /&gt;
The Yocto Project Summit, yps2022.11, is a virtual conference from November 29 to December 1, 2022 to gather members of the Yocto Project community together to discuss ideas and present information related to The Yocto Project.&lt;br /&gt;
&lt;br /&gt;
== Organizing Committee ==&lt;br /&gt;
The organizing committee consists of (alphabetical by first name):&lt;br /&gt;
* Behan Webster&lt;br /&gt;
* David Reyna&lt;br /&gt;
* Josef Holzmayr-Khosh Amoz&lt;br /&gt;
* Megan Knight (Advocacy Manager)&lt;br /&gt;
* Nicolas Dechesne (YP Community Manager)&lt;br /&gt;
&lt;br /&gt;
== Platforms ==&lt;br /&gt;
In terms of platforms we&#039;re using:&lt;br /&gt;
* pretalx for the CfP and schedule&lt;br /&gt;
* the LF&#039;s cvent for registration&lt;br /&gt;
* Zoom for the conference video&lt;br /&gt;
* irc for the conference chat (channel #yocto-summit-2022.11 on Libera.Chat)&lt;br /&gt;
* Digital Ocean for the hands-on classes&lt;br /&gt;
&lt;br /&gt;
== Hands-on Servers Information ==&lt;br /&gt;
# If you already have a Digital Ocean account, skip the next 2 steps&lt;br /&gt;
# To create a Digital Ocean account, please sign up @ [https://do.co/yoctoproject DigitalOcean] &lt;br /&gt;
# Confirm your email and add a payment method to satisfy abuse requirements - you won&#039;t be charged unless you leave the training machine running long past the summit&lt;br /&gt;
# Visit https://cloud.digitalocean.com/account/api/tokens and generate a new token named &#039;&#039;&#039;YPSummit&#039;&#039;&#039;, and copy the string that pops up.&lt;br /&gt;
# Please complete this [https://forms.gle/53NFyCRaEpmRWuaa8 form] so your API key can be added to the provisioning scripts and we can top up your account credit.&lt;br /&gt;
&lt;br /&gt;
After the form has been filled by all participants we will provision machines. When the machines are ready logins will be &amp;quot;ssh ilab01@AXAXAXA-summit.yocto.io&amp;quot; where AXAXAXA are the first 7 characters of your confirmation string. The password is the full 11 character confirmation string.&lt;br /&gt;
&lt;br /&gt;
Once you have a verified working server you may delete your api key at https://cloud.digitalocean.com/account/api/tokens. Otherwise all resources will be removed after the training. Any retained servers will be billed to you after the promotional credit expires in 60 days.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Lab files are available during the event at http://summit.yocto.io/yps2022.11.tgz --&amp;gt;&lt;br /&gt;
Lab files will be available for download once the event begins.&lt;br /&gt;
&lt;br /&gt;
== For more information ==&lt;br /&gt;
* https://www.yoctoproject.org/yocto-project-summit-2022-11/&lt;br /&gt;
* https://pretalx.com/yocto-project-summit-2022-11/&lt;br /&gt;
&lt;br /&gt;
== Slide template for presenters ==&lt;br /&gt;
* https://docs.google.com/presentation/d/1b0cWLZ6ZJpxd7G6HIwUZvo39X9TUUqdiG28J5EDXyYg&lt;br /&gt;
** keep the first and last slides&lt;br /&gt;
** edit the first slide to include your name, presentation title, and (optionally) your company&lt;br /&gt;
** the rest of the slides are examples and can be duplicated, edited, and/or removed&lt;br /&gt;
** please upload your finished slides to your specific event in pretalx&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=YoctoProject_Summit_yps2022.11&amp;diff=85524</id>
		<title>YoctoProject Summit yps2022.11</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=YoctoProject_Summit_yps2022.11&amp;diff=85524"/>
		<updated>2022-11-08T17:26:22Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: /* Organizing Committee */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The Yocto Project Summit 2022.11 =&lt;br /&gt;
The Yocto Project Summit, yps2022.11, is a virtual conference from November 29 to December 1, 2022 to gather members of the Yocto Project community together to discuss ideas and present information related to The Yocto Project.&lt;br /&gt;
&lt;br /&gt;
== Organizing Committee ==&lt;br /&gt;
The organizing committee consists of (alphabetical by first name):&lt;br /&gt;
* Behan Webster&lt;br /&gt;
* David Reyna&lt;br /&gt;
* Josef Holzmayr-Khosh Amoz&lt;br /&gt;
* Megan Knight (Advocacy Manager)&lt;br /&gt;
* Nicolas Dechesne (YP Community Manager)&lt;br /&gt;
&lt;br /&gt;
== Platforms ==&lt;br /&gt;
In terms of platforms we&#039;re using:&lt;br /&gt;
* pretalx for the CfP and schedule&lt;br /&gt;
* the LF&#039;s cvent for registration&lt;br /&gt;
* Zoom for the conference video&lt;br /&gt;
* irc for the conference chat (channel #yocto-summit-2022.11 on Libera.Chat)&lt;br /&gt;
* Digital Ocean for the hands-on classes&lt;br /&gt;
&lt;br /&gt;
== Hands-on Servers Information ==&lt;br /&gt;
# If you already have a Digital Ocean account, skip the next 2 steps&lt;br /&gt;
# To create a Digital Ocean account, please sign up @ [https://cloud.digitalocean.com/registrations/new?refcode=3b1eb93990e5&amp;amp;utm_medium=partnership&amp;amp;utm_source=linuxfoundation_&amp;amp;utm_content=app&amp;amp;utm_campaign=yocto_project&amp;amp;utm_content=conversion DigitalOcean] &lt;br /&gt;
# Confirm your email and add a payment method to satisfy abuse requirements - you won&#039;t be charged unless you leave the training machine running long past the summit&lt;br /&gt;
# Visit https://cloud.digitalocean.com/account/api/tokens and generate a new token named YPSummit copy the string that pops up.&lt;br /&gt;
# Please complete this [https://forms.gle/cpvjx9fxDWYduQuLA form] so your API key can be added to the provisioning scripts and we can top up your account credit.&lt;br /&gt;
&lt;br /&gt;
After the form has been filled by all participants we will provision machines. When the machines are ready logins will be &amp;quot;ssh ilab01@AXAXAX-summit.yocto.io&amp;quot; where AXAXAX are the first 6 characters of your confirmation string. The password is the full 11 character confirmation string.&lt;br /&gt;
&lt;br /&gt;
Once you have a verified working server you may delete your api key at https://cloud.digitalocean.com/account/api/tokens. Otherwise all resources will be removed after the training. Any retained servers will be billed to you after the promotional credit expires in 60 days.&lt;br /&gt;
&lt;br /&gt;
Lab files are available during the event at http://summit.yocto.io/yps2022.11.tgz&lt;br /&gt;
&lt;br /&gt;
== For more information ==&lt;br /&gt;
* https://www.yoctoproject.org/yocto-project-summit-2022-11/&lt;br /&gt;
* https://pretalx.com/yocto-project-summit-2022-11/&lt;br /&gt;
&lt;br /&gt;
== Slide template for presenters ==&lt;br /&gt;
* https://docs.google.com/presentation/d/1b0cWLZ6ZJpxd7G6HIwUZvo39X9TUUqdiG28J5EDXyYg&lt;br /&gt;
** keep the first and last slides&lt;br /&gt;
** edit the first slide to include your name, presentation title, and (optionally) your company&lt;br /&gt;
** the rest of the slides are examples and can be duplicated, edited, and/or removed&lt;br /&gt;
** please upload your finished slides to your specific event in pretalx&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=YoctoProject_Summit_yps2022.11&amp;diff=85523</id>
		<title>YoctoProject Summit yps2022.11</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=YoctoProject_Summit_yps2022.11&amp;diff=85523"/>
		<updated>2022-11-08T17:16:11Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: /* Slide template for presenters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The Yocto Project Summit 2022.11 =&lt;br /&gt;
The Yocto Project Summit, yps2022.11, is a virtual conference from November 29 to December 1, 2022 to gather members of the Yocto Project community together to discuss ideas and present information related to The Yocto Project.&lt;br /&gt;
&lt;br /&gt;
== Organizing Committee ==&lt;br /&gt;
The organizing committee consists of (alphabetical by first name):&lt;br /&gt;
* Behan Webster&lt;br /&gt;
* David Reyna&lt;br /&gt;
* Josef Holzmayr-Khosh Amoz&lt;br /&gt;
* Megan Knight&lt;br /&gt;
* Nicolas Dechesne (YP Community Manager)&lt;br /&gt;
&lt;br /&gt;
== Platforms ==&lt;br /&gt;
In terms of platforms we&#039;re using:&lt;br /&gt;
* pretalx for the CfP and schedule&lt;br /&gt;
* the LF&#039;s cvent for registration&lt;br /&gt;
* Zoom for the conference video&lt;br /&gt;
* irc for the conference chat (channel #yocto-summit-2022.11 on Libera.Chat)&lt;br /&gt;
* Digital Ocean for the hands-on classes&lt;br /&gt;
&lt;br /&gt;
== Hands-on Servers Information ==&lt;br /&gt;
# If you already have a Digital Ocean account, skip the next 2 steps&lt;br /&gt;
# To create a Digital Ocean account, please sign up @ [https://cloud.digitalocean.com/registrations/new?refcode=3b1eb93990e5&amp;amp;utm_medium=partnership&amp;amp;utm_source=linuxfoundation_&amp;amp;utm_content=app&amp;amp;utm_campaign=yocto_project&amp;amp;utm_content=conversion DigitalOcean] &lt;br /&gt;
# Confirm your email and add a payment method to satisfy abuse requirements - you won&#039;t be charged unless you leave the training machine running long past the summit&lt;br /&gt;
# Visit https://cloud.digitalocean.com/account/api/tokens and generate a new token named YPSummit copy the string that pops up.&lt;br /&gt;
# Please complete this [https://forms.gle/cpvjx9fxDWYduQuLA form] so your API key can be added to the provisioning scripts and we can top up your account credit.&lt;br /&gt;
&lt;br /&gt;
After the form has been filled by all participants we will provision machines. When the machines are ready logins will be &amp;quot;ssh ilab01@AXAXAX-summit.yocto.io&amp;quot; where AXAXAX are the first 6 characters of your confirmation string. The password is the full 11 character confirmation string.&lt;br /&gt;
&lt;br /&gt;
Once you have a verified working server you may delete your api key at https://cloud.digitalocean.com/account/api/tokens. Otherwise all resources will be removed after the training. Any retained servers will be billed to you after the promotional credit expires in 60 days.&lt;br /&gt;
&lt;br /&gt;
Lab files are available during the event at http://summit.yocto.io/yps2022.11.tgz&lt;br /&gt;
&lt;br /&gt;
== For more information ==&lt;br /&gt;
* https://www.yoctoproject.org/yocto-project-summit-2022-11/&lt;br /&gt;
* https://pretalx.com/yocto-project-summit-2022-11/&lt;br /&gt;
&lt;br /&gt;
== Slide template for presenters ==&lt;br /&gt;
* https://docs.google.com/presentation/d/1b0cWLZ6ZJpxd7G6HIwUZvo39X9TUUqdiG28J5EDXyYg&lt;br /&gt;
** keep the first and last slides&lt;br /&gt;
** edit the first slide to include your name, presentation title, and (optionally) your company&lt;br /&gt;
** the rest of the slides are examples and can be duplicated, edited, and/or removed&lt;br /&gt;
** please upload your finished slides to your specific event in pretalx&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=YoctoProject_Summit_yps2022.11&amp;diff=85522</id>
		<title>YoctoProject Summit yps2022.11</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=YoctoProject_Summit_yps2022.11&amp;diff=85522"/>
		<updated>2022-11-08T17:02:48Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: Created page with &amp;quot;= The Yocto Project Summit 2022.11 = The Yocto Project Summit, yps2022.11, is a virtual conference from November 29 to December 1, 2022 to gather members of the Yocto Project ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The Yocto Project Summit 2022.11 =&lt;br /&gt;
The Yocto Project Summit, yps2022.11, is a virtual conference from November 29 to December 1, 2022 to gather members of the Yocto Project community together to discuss ideas and present information related to The Yocto Project.&lt;br /&gt;
&lt;br /&gt;
== Organizing Committee ==&lt;br /&gt;
The organizing committee consists of (alphabetical by first name):&lt;br /&gt;
* Behan Webster&lt;br /&gt;
* David Reyna&lt;br /&gt;
* Josef Holzmayr-Khosh Amoz&lt;br /&gt;
* Megan Knight&lt;br /&gt;
* Nicolas Dechesne (YP Community Manager)&lt;br /&gt;
&lt;br /&gt;
== Platforms ==&lt;br /&gt;
In terms of platforms we&#039;re using:&lt;br /&gt;
* pretalx for the CfP and schedule&lt;br /&gt;
* the LF&#039;s cvent for registration&lt;br /&gt;
* Zoom for the conference video&lt;br /&gt;
* irc for the conference chat (channel #yocto-summit-2022.11 on Libera.Chat)&lt;br /&gt;
* Digital Ocean for the hands-on classes&lt;br /&gt;
&lt;br /&gt;
== Hands-on Servers Information ==&lt;br /&gt;
# If you already have a Digital Ocean account, skip the next 2 steps&lt;br /&gt;
# To create a Digital Ocean account, please sign up @ [https://cloud.digitalocean.com/registrations/new?refcode=3b1eb93990e5&amp;amp;utm_medium=partnership&amp;amp;utm_source=linuxfoundation_&amp;amp;utm_content=app&amp;amp;utm_campaign=yocto_project&amp;amp;utm_content=conversion DigitalOcean] &lt;br /&gt;
# Confirm your email and add a payment method to satisfy abuse requirements - you won&#039;t be charged unless you leave the training machine running long past the summit&lt;br /&gt;
# Visit https://cloud.digitalocean.com/account/api/tokens and generate a new token named YPSummit copy the string that pops up.&lt;br /&gt;
# Please complete this [https://forms.gle/cpvjx9fxDWYduQuLA form] so your API key can be added to the provisioning scripts and we can top up your account credit.&lt;br /&gt;
&lt;br /&gt;
After the form has been filled by all participants we will provision machines. When the machines are ready logins will be &amp;quot;ssh ilab01@AXAXAX-summit.yocto.io&amp;quot; where AXAXAX are the first 6 characters of your confirmation string. The password is the full 11 character confirmation string.&lt;br /&gt;
&lt;br /&gt;
Once you have a verified working server you may delete your api key at https://cloud.digitalocean.com/account/api/tokens. Otherwise all resources will be removed after the training. Any retained servers will be billed to you after the promotional credit expires in 60 days.&lt;br /&gt;
&lt;br /&gt;
Lab files are available during the event at http://summit.yocto.io/yps2022.11.tgz&lt;br /&gt;
&lt;br /&gt;
== For more information ==&lt;br /&gt;
* https://www.yoctoproject.org/yocto-project-summit-2022-11/&lt;br /&gt;
* https://pretalx.com/yocto-project-summit-2022-11/&lt;br /&gt;
&lt;br /&gt;
== Slide template for presenters ==&lt;br /&gt;
* https://docs.google.com/presentation/d/1Z6FSvgyaDBZtPC1GtT6iQiMflArKl0BvNMP6rSHqnEg/&lt;br /&gt;
** keep the first and last slides&lt;br /&gt;
** edit the first slide to include your name, presentation title, and (optionally) your company&lt;br /&gt;
** the rest of the slides are examples and can be duplicated, edited, and/or removed&lt;br /&gt;
** please upload your finished slides to your specific event in pretalx&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Conference_Production&amp;diff=85314</id>
		<title>Yocto Conference Production</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Conference_Production&amp;diff=85314"/>
		<updated>2022-06-20T21:20:07Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: /* How to Work the Yocto Project Booth */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Producing a Yocto Project Conference&lt;br /&gt;
&lt;br /&gt;
This page is intended to be a guide on how Yocto Project conferences (e.g. ELC and ELCE), Developer Days, and Summits are designed and executed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== High Level Calendar ==&lt;br /&gt;
&lt;br /&gt;
* Three months out&lt;br /&gt;
** Set the tentative dates&lt;br /&gt;
** Make arrangements with the conference for booth and DevDay/Summit registration&lt;br /&gt;
** Set up a preliminary budget, get tentative approval&lt;br /&gt;
** Setup flights and hotels&lt;br /&gt;
* Two months out&lt;br /&gt;
** Close the contracts&lt;br /&gt;
** Advertise event&lt;br /&gt;
** Announce the Call for Papers (CFP)&lt;br /&gt;
** Gather/order booth swag and collateral&lt;br /&gt;
** Setup conference page at Yocto home page&lt;br /&gt;
* One month out&lt;br /&gt;
** Announce presenters for DevDay/Summit&lt;br /&gt;
** Insure that conference registration is fully up&lt;br /&gt;
* One week out&lt;br /&gt;
** Confirm that presenter papers are coming together&lt;br /&gt;
** Confirm booth host schedule&lt;br /&gt;
&lt;br /&gt;
== Conference ==&lt;br /&gt;
&lt;br /&gt;
* Conferences are ideal ways to:&lt;br /&gt;
** Have an anchor for the booth, DevDay/Summit&lt;br /&gt;
** Advertise the project&lt;br /&gt;
** Connect with our community&lt;br /&gt;
** Connect between each other&lt;br /&gt;
** Advertise the DevDay/Summit&lt;br /&gt;
** Manage the DevDay/Summit registration and money&lt;br /&gt;
&lt;br /&gt;
We have been working primarily with the Embedded Linux Conference, sponsored by the project&#039;s parent organization The Linux Foundation. We have typically sponsored both a booth and a Yocto Project DevDay/Summit in conjunction with ELC/ELCE, given its high synergy.&lt;br /&gt;
&lt;br /&gt;
=== Physical Conference ===&lt;br /&gt;
&lt;br /&gt;
* Yocto Project must sign up for a booth&lt;br /&gt;
** Typically we join at the Bronze level, which provides a basic booth at a reasonable cost&lt;br /&gt;
** The contract must be negotiated several months ahead&lt;br /&gt;
** There is typically no penalty for later registration, but it could result in a late posting of the DevDay/Summit advertising and registration page, which can potentially affect attendance&lt;br /&gt;
* The Yocto Project booth pop-up&lt;br /&gt;
** Local the booth pop-up (currently with David) &lt;br /&gt;
** The booth travels as normal luggage, about 30-40 pounds&lt;br /&gt;
** The booth takes about 20 minutes to assemble and disassemble&lt;br /&gt;
* Booth posters &lt;br /&gt;
** If possible it is good to bring a collapsible stand, so that posters of the daily schedule of Yocto Project related talks can be advertised, in addition to the DevDay/Summit&lt;br /&gt;
** If no stand is present, then posters hanging in front the the booth pop-up and stand-up displays on the booth itself can be used&lt;br /&gt;
** There is a requirement to display the primary Yocto Project members (e.g. Platinum) at the booth&lt;br /&gt;
* Booth Content&lt;br /&gt;
** There should be handouts on the booth, for example:&lt;br /&gt;
*** Cards&lt;br /&gt;
*** Yocti&lt;br /&gt;
*** Swag (USB battery packs, spinners, pens, T-shirts&lt;br /&gt;
** T-Shirts are great giveaways and great live conference advertisements, but do require cost, transportation, and size distribution considerations&lt;br /&gt;
** Hand outs&lt;br /&gt;
*** It is good to have brochures that provide technical content about the project&lt;br /&gt;
*** We currently have a short form (~ 4 pages, and an older long form ~ pages with testimonials)&lt;br /&gt;
** Display computer&lt;br /&gt;
*** We often have a display running from a laptop or NUC. This can provide live browsing of the Yocto Project home page, documentation, Layer Index, DevDay/Summit home page. Visitors sometimes suggest web pages of their own as part of their questions.&lt;br /&gt;
** Demos&lt;br /&gt;
*** We try to have live demos at the booth, to attract visitors and stimulate conversations&lt;br /&gt;
*** Examples include Software Defined Radio, routers, robots, and once a race car&lt;br /&gt;
** Booth Hours&lt;br /&gt;
*** We usually get about 4 hours the day before the conference floor opens to prepare our booth&lt;br /&gt;
*** We typically need the booth attended 8 hours a day, in particular in between sessions and during lunch&lt;br /&gt;
*** ELC/ELCE typically have a special booth walk evening, where the entire conference is at the booths for 2 to 3 hours  &lt;br /&gt;
** Booth Attendance&lt;br /&gt;
*** It is important to arrange a schedule of booth watchers, so that we look organized and can be available to catch visitors&lt;br /&gt;
*** The booth schedule is typically 2 people per 2 hour slots across the open hours&lt;br /&gt;
*** One of the best part of the conference is that Yocto Project people generally hang around the booth even if they are not actually in the booth, so it is often easy to find an expert if a visitor asks a hard question&lt;br /&gt;
*** When the booth is closed each evening, the loose content must be locked up in the booth, and the key must go to someone whom is guaranteed to open the booth the next morning&lt;br /&gt;
** Booth Interaction&lt;br /&gt;
*** Each booth is given a badge scanner so that we can catch the visitors, This information is very important to the Yocto Project Advocacy Committee&lt;br /&gt;
*** Generally people are pleased to allow you to scan their badges, so no worries&lt;br /&gt;
*** We often offer the swag in exchange for the badge scan, to make this more efficient&lt;br /&gt;
*** There will generally be 20% of the people who come just for the swag, and that is ok&lt;br /&gt;
&lt;br /&gt;
=== Virtual Conference ===&lt;br /&gt;
&lt;br /&gt;
Virtual conferences share many of the same aspects of physical conferences. Here are the differences.&lt;br /&gt;
&lt;br /&gt;
* Booth Setup&lt;br /&gt;
** The conference will set up accounts a month ahead so that the virtual booth can be customized&lt;br /&gt;
** The conference will typically have a walk through the weeks before to insure that the booths are coming together and any questions can be answered&lt;br /&gt;
** Virtual booths are generally very limited (and not just because of the Bronze level), so one make the best that one can&lt;br /&gt;
** The virtual booth will typically require:&lt;br /&gt;
*** A central picture (and/or movie)&lt;br /&gt;
*** Links that are customized to any attached documents or web pages&lt;br /&gt;
*** A banner, good for messages-of-the-day (like relevant talks)&lt;br /&gt;
* Booth swag&lt;br /&gt;
** The booth &amp;quot;posters&amp;quot; will be present either on the virtual booth&#039;s page, or as downloadable documents&lt;br /&gt;
** All of the give away content will be electronic documents, including the brochures&lt;br /&gt;
** While we cannot physically give away swag, there are other possibilities like themed T-shirts that can be ordered directly by the visitors, at perhaps a discount&lt;br /&gt;
* Booth Attendance&lt;br /&gt;
** There is still the need to have the booth coverage managed for the same reason as a physical booth&lt;br /&gt;
** In place of physical interaction with visitors, the conferences usually include some form of live blog between the booth managers and visitors. This interface is alas usually very limited and clumsy, so it is often limited to basic greetings for forwarding people to the right documents and to the DevDay/Summit, and directing visitors to the YP slack channel&lt;br /&gt;
** The booth is still important for the basic reasons of advertising for the project and the DevDay/Summit&lt;br /&gt;
** In the recent virtual summits, we have still received a virtual visitor list and generally what they looked at, which is evidence that the booth is visited more that what the blog would reflect&lt;br /&gt;
* Slack Channel&lt;br /&gt;
** We have found that a separate Slack channel is very effective&lt;br /&gt;
** We usually set up a technical stream and a separate gossip stream (to not overwhelm visitors)&lt;br /&gt;
** That interface is much more flexible and friendly&lt;br /&gt;
** It is also persistent across and after the conference &lt;br /&gt;
* Zoom Channel&lt;br /&gt;
** We have experimented with setting up a separate Zoom channel for direct conversations with visitors, but it was not really used. The slack channel ended up much more useful&lt;br /&gt;
&lt;br /&gt;
== Summit ==&lt;br /&gt;
&lt;br /&gt;
=== Developer Day versus Summit ===&lt;br /&gt;
&lt;br /&gt;
* DevDays&lt;br /&gt;
** Typically a single day, generally for the smaller ELC NA conference&lt;br /&gt;
** The speakers historically were directly invited, though this is moving to a CFP&lt;br /&gt;
** Ideally there are two tracks, the Beginning Class and the Intermediate Class&lt;br /&gt;
* Summits &lt;br /&gt;
** Typically two days, generally for the larger ELC Europe conference&lt;br /&gt;
** The speakers invited via CFP&lt;br /&gt;
** Beginning Track:&lt;br /&gt;
*** Day 1: Beginning Class&lt;br /&gt;
*** Day 2: Hands on Class&lt;br /&gt;
** Intermediate Track:&lt;br /&gt;
*** Day 1: Advanced and Intermediate Presentations&lt;br /&gt;
*** Day 2: Intermediate Presentations&lt;br /&gt;
&lt;br /&gt;
=== Budget and Costs ===&lt;br /&gt;
&lt;br /&gt;
It is important to create a budget early and get approval from the YP treasurer, especially around the high cost items like travel and lodging. All sample costs below are in $USD.&lt;br /&gt;
&lt;br /&gt;
* Conference fees, booth registration&lt;br /&gt;
** Typically a few hundred dollars at the Bronze level&lt;br /&gt;
* DevDay/Summit Attendee Registration&lt;br /&gt;
** This is contracted via the ELC event, $2-$3 per person, 2%-3% credit card transaction fees&lt;br /&gt;
* DevDay/Summit Room Rentals (physical events)&lt;br /&gt;
** Room Rentals are typically via the event organizer and would be part of the contract.&lt;br /&gt;
** We have for some events (e.g. ELCE Prague) rented our own rooms from nearby hotels&lt;br /&gt;
** We have also had member companies sponsor the location (e.g. several ELC Portland events by Mentor Graphics)&lt;br /&gt;
** In recent years we have had to pass on the Beginning Class for physical events, due both the high cost and lack of room availability&lt;br /&gt;
** For virtual events we have used sponsored Zoom accounts, so there is no incremental costs for the additional tracks&lt;br /&gt;
* Travel and Lodging&lt;br /&gt;
** Typically core people have their travel and hotel costs covered&lt;br /&gt;
** Core people include for example the YP Architect, the booth manager (Advocacy lead), the DevDay/Summit manager (Training Lead)&lt;br /&gt;
** These costs depend on the distance traveled&lt;br /&gt;
* Class Accounts&lt;br /&gt;
** These are the virtual server accounts used for the hands-on classes&lt;br /&gt;
** The class accounts generally cost around $30 per student, though we have had the benefit of full or partial in-kind donations in the past&lt;br /&gt;
* DevDay/Summit Call For Papers&lt;br /&gt;
** We have moved to Pretalx to manage the CFPs, at a cost of ~$200 per event&lt;br /&gt;
* DevDay/Summit attendee Registration Fees&lt;br /&gt;
** For physical events it as been in the $200 range, to help cover the conference fees, registration costs, room rentals, and class accounts&lt;br /&gt;
** For virtual events it has been in the $40 to $50 range to cover the class accounts and CFP management&lt;br /&gt;
** We may in the future separate the Hands-on classes as a distinct track and added cost, just to isolate the class account fees&lt;br /&gt;
* Post event speaker gifts&lt;br /&gt;
** We try to set aside a small gift to the presenters as a thank you to their donated time, so that needs to be included in the budget&lt;br /&gt;
&lt;br /&gt;
=== Physical Summit ===&lt;br /&gt;
&lt;br /&gt;
* Initial Organization&lt;br /&gt;
* Budget&lt;br /&gt;
* CFP Process&lt;br /&gt;
* Speaker Management&lt;br /&gt;
* Presentation Types &lt;br /&gt;
** Keynote&lt;br /&gt;
*** We usually set aside the first 15 minutes or so for a joint keynote to all attendees, typically given by the Community Manager or the Advocacy Lead&lt;br /&gt;
*** We also sometimes have the Keynote given separately to the different tracks when it is not feasible to have every join in one space&lt;br /&gt;
** Short Talk&lt;br /&gt;
*** Usually a 30 minute slot, touching on a topic&lt;br /&gt;
** Extended Talk&lt;br /&gt;
*** Usually a 45 minute slot (60 minutes max), allowing a deeper dive&lt;br /&gt;
** Hands On Class&lt;br /&gt;
*** Usually a 90 minute to 2 hour slot, allowing time for interaction and instruction&lt;br /&gt;
** Post Event Hangout&lt;br /&gt;
*** It has been beneficial to set aside a hangout space after the last day, either in the same space if possible (in the room or in Slack), or at a rendezvous near by. These have gone from 30-60 minutes in the room to several hours after the virtual events&lt;br /&gt;
* Daily Schedule&lt;br /&gt;
** Talks and Classes&lt;br /&gt;
** Breaks&lt;br /&gt;
*** We typically have a mid-morning break and a mid-afternoon break&lt;br /&gt;
** Lunch&lt;br /&gt;
*** Lunch is typically one hour, and is usually sponsored by YP or is donated by a member company &lt;br /&gt;
* Class Accounts&lt;br /&gt;
** These are the virtual server accounts used for the hands-on classes&lt;br /&gt;
** They are typically based on a recent Ubuntu release&lt;br /&gt;
** These are created and managed by Michael&lt;br /&gt;
** The class images are typically created by the DeyDay/Summit manager (David), based on the class content&lt;br /&gt;
* Site visits&lt;br /&gt;
* WIFI Considerations&lt;br /&gt;
* Class Reviews&lt;br /&gt;
* Post Event Activities&lt;br /&gt;
&lt;br /&gt;
=== Virtual Summit ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Considerations and Practicalities ==&lt;br /&gt;
&lt;br /&gt;
=== How to Work the Yocto Project Booth ===&lt;br /&gt;
&lt;br /&gt;
1) Why You Are Here&lt;br /&gt;
&lt;br /&gt;
We are all part of the open source Linux community, all trying to make Linux useful to the larger world.&lt;br /&gt;
&lt;br /&gt;
In this booth we are contributing to this multi-faceted world of embedded Linux with a community and tool set that is both powerful and extensive.&lt;br /&gt;
&lt;br /&gt;
We are here to help people achieve their dreams, and we want people to enjoy the benefits of our project and we embrace people that want to become part of our community as users and contributors&lt;br /&gt;
&lt;br /&gt;
We give thanks to the many individuals and corporate partners that work together and help make this community strong and vibrant.&lt;br /&gt;
&lt;br /&gt;
2) The Fundamental YP Elevator Speech&lt;br /&gt;
&lt;br /&gt;
Directly from the YP website front page. This is your foundational information.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;The Yocto Project. It&#039;s not an embedded Linux Distribution, It creates a custom one for you.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;The Yocto Project (YP) is an open source collaboration project that helps developers create custom Linux-based systems regardless of the hardware architecture.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;The project provides a flexible set of tools and a space where embedded developers worldwide can share technologies, software stacks, configurations, and best practices that can be used to create tailored Linux images for embedded and IOT devices, or anywhere a customized Linux OS is needed.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3) How To Greet People&lt;br /&gt;
&lt;br /&gt;
It is usually best to start with these two questions:&lt;br /&gt;
  (a) &amp;quot;Do you know about Yocto Project?&amp;quot;, or &amp;quot;How much to you know about Yocto Project?&amp;quot;&lt;br /&gt;
  (b) &amp;quot;What question(s) do you have?&amp;quot;, or &amp;quot;What problems are you trying to solve?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
By starting with these basic questions, you will know how best to help them out and direct your efforts, as opposed to attempting a full presentation that might completely miss the mark.&lt;br /&gt;
&lt;br /&gt;
When talking to people, it is great to:&lt;br /&gt;
  * Lead with Yocto Project (open source!)&lt;br /&gt;
  * Follow with the YP Community (stronger together!) &lt;br /&gt;
  * Then if they are interested, go into depth about your particular company and skill set (we all bring our own special things to the table!)&lt;br /&gt;
&lt;br /&gt;
In this manner we pay respect to our open source credentials before differentiating into specific companies.&lt;br /&gt;
&lt;br /&gt;
4) Always Be Positive About The Larger Community, Even About &amp;quot;Competitors&amp;quot;&lt;br /&gt;
&lt;br /&gt;
We often get questions about &amp;quot;competitors&amp;quot;, most often being Buildroot.&lt;br /&gt;
&lt;br /&gt;
My standard answer is that:&lt;br /&gt;
  * Buildroot is definitely an easier build system to learn, use, and start projects with, and if that works for your project then that is a great choice, especially since it is &amp;quot;Makefile&amp;quot; based. &lt;br /&gt;
  * If however the time comes that you need a more powerful and extensible build system that can support your growing designs, then Yocto Project becomes the excellent choice. Yocto Project is &amp;quot;bitbake&amp;quot; based and does have a high learning curve, but it has the power to carry you forward with complex designs over many years.&lt;br /&gt;
  * The point is that everyone serves the community in different ways and each system has their strong points, and there is every reason to embrace. &lt;br /&gt;
&lt;br /&gt;
5) Common Questions and Answers&lt;br /&gt;
&lt;br /&gt;
Here is a rough summary of common questions and their answers.&lt;br /&gt;
&lt;br /&gt;
  (a) About 30% of the people are just passing by an have no idea about what YP is.&lt;br /&gt;
  &lt;br /&gt;
Give them the elevator pitch to help them understand what we are all about. If they have problems that YP can help with, given them the brochure, and point them to the web site and all its resources.&lt;br /&gt;
&lt;br /&gt;
  (b) About 30% of the people want to know if YP supports their specific CPU or user space package.&lt;br /&gt;
  &lt;br /&gt;
Bring up the Yocto Project &amp;quot;Layer Index&amp;quot; website and search for their CPU and/or packages.&lt;br /&gt;
&lt;br /&gt;
   http://layers.openembedded.org/layerindex/branch/master/layers/&lt;br /&gt;
   &lt;br /&gt;
  * The &amp;quot;Machines&amp;quot; tab has the list of 828 supported CPU variants. &lt;br /&gt;
  * The &amp;quot;Recipes&amp;quot; tab has the list of 22861 supported packages&lt;br /&gt;
  * The &amp;quot;Layers&amp;quot; tab has the list of 418 supported layers for features, package sets, machines, packages, and so forth.&lt;br /&gt;
&lt;br /&gt;
  (c) About 10% will want to know about general features, like &amp;quot;Security&amp;quot;, &amp;quot;CVEs&amp;quot;, and &amp;quot;Long Term Support (LTS).&lt;br /&gt;
&lt;br /&gt;
We do have a security team together with our Commercial Partners, and we are actively fixing CVEs all the time.&lt;br /&gt;
&lt;br /&gt;
We do have two LTS releases (2020 and now 2022), for people who want to stay with a specific release for a long time, as opposed to the bi-yearly updates.&lt;br /&gt;
&lt;br /&gt;
  (d) About 10% will ask about esoteric features.&lt;br /&gt;
&lt;br /&gt;
If you do not know, either find someone nearby who does know or get their name and tell them you will get back to them.&lt;br /&gt;
&lt;br /&gt;
  (e) About 20% will be people who have come by the booth as part of a booth browse promotion by LF. &lt;br /&gt;
&lt;br /&gt;
Sign their cards, see if YP can help them, and then thank them for stopping by.&lt;br /&gt;
&lt;br /&gt;
6) Your resources&lt;br /&gt;
&lt;br /&gt;
  * The handout brochures, with detailed information and links&lt;br /&gt;
  * The Yocto Project home page, with its extensive documentation and information&lt;br /&gt;
  * The Yocto Project community, with regular open meetings, chat channels, email lists, and again our fabulous documentation&lt;br /&gt;
  * The Yocto Project experts who like to hang out near the booth&lt;br /&gt;
  * The live demo, to show YP in action&lt;br /&gt;
  * The twice-yearly YP Summits, with several days of presentations and hands-on classes – the next one is in November&lt;br /&gt;
&lt;br /&gt;
7) You may not know the answer, but you know someone who does&lt;br /&gt;
&lt;br /&gt;
Do not worry if you do not know answers to the questions that come your way.&lt;br /&gt;
&lt;br /&gt;
The important thing is that even if you do not know, there are people that you know who do know the answer. Get their name, their contact information, and their specific question. Give that question to other people in the booth and/or send it directly to the people who can help, for example:   david.reyna@windriver.com&lt;br /&gt;
&lt;br /&gt;
8) How to finish your conversation&lt;br /&gt;
&lt;br /&gt;
If they seem like a likely candidate, make sure you scan their badge and mark their area and level of interest. If they have a card get it and mark the same on the back. Give the collected cards to one of the booth leaders.&lt;br /&gt;
&lt;br /&gt;
== Past Conference Data ==&lt;br /&gt;
&lt;br /&gt;
=== Summer 2021 (Self Sponsored) ===&lt;br /&gt;
&lt;br /&gt;
In progress...&lt;br /&gt;
&lt;br /&gt;
=== Fall 2020 Virtual (ELCE Dublin) ===&lt;br /&gt;
&lt;br /&gt;
* Summit:&lt;br /&gt;
** Day 1:&lt;br /&gt;
*** Beginning Class: ~100&lt;br /&gt;
*** Intermediate Class: ~150&lt;br /&gt;
** Day 2:&lt;br /&gt;
*** Hands On Classes: ~50&lt;br /&gt;
*** Intermediate Class: ~150&lt;br /&gt;
&lt;br /&gt;
=== Summmer 2020 Virtual (ELC Austin) ===&lt;br /&gt;
&lt;br /&gt;
* Conference Presentations YP-related&lt;br /&gt;
** Monday:&lt;br /&gt;
*** LTS: 238 peak attendance, 377 registered&lt;br /&gt;
*** BoF: 157 peak attendance&lt;br /&gt;
*** Slack: 238&lt;br /&gt;
&lt;br /&gt;
* DevDay:&lt;br /&gt;
** Class: Start=173,Peak=181,End=164&lt;br /&gt;
*** Slack:&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Conference_Production&amp;diff=85313</id>
		<title>Yocto Conference Production</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Conference_Production&amp;diff=85313"/>
		<updated>2022-06-20T21:18:23Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: /* Considerations and Practicalities */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Producing a Yocto Project Conference&lt;br /&gt;
&lt;br /&gt;
This page is intended to be a guide on how Yocto Project conferences (e.g. ELC and ELCE), Developer Days, and Summits are designed and executed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== High Level Calendar ==&lt;br /&gt;
&lt;br /&gt;
* Three months out&lt;br /&gt;
** Set the tentative dates&lt;br /&gt;
** Make arrangements with the conference for booth and DevDay/Summit registration&lt;br /&gt;
** Set up a preliminary budget, get tentative approval&lt;br /&gt;
** Setup flights and hotels&lt;br /&gt;
* Two months out&lt;br /&gt;
** Close the contracts&lt;br /&gt;
** Advertise event&lt;br /&gt;
** Announce the Call for Papers (CFP)&lt;br /&gt;
** Gather/order booth swag and collateral&lt;br /&gt;
** Setup conference page at Yocto home page&lt;br /&gt;
* One month out&lt;br /&gt;
** Announce presenters for DevDay/Summit&lt;br /&gt;
** Insure that conference registration is fully up&lt;br /&gt;
* One week out&lt;br /&gt;
** Confirm that presenter papers are coming together&lt;br /&gt;
** Confirm booth host schedule&lt;br /&gt;
&lt;br /&gt;
== Conference ==&lt;br /&gt;
&lt;br /&gt;
* Conferences are ideal ways to:&lt;br /&gt;
** Have an anchor for the booth, DevDay/Summit&lt;br /&gt;
** Advertise the project&lt;br /&gt;
** Connect with our community&lt;br /&gt;
** Connect between each other&lt;br /&gt;
** Advertise the DevDay/Summit&lt;br /&gt;
** Manage the DevDay/Summit registration and money&lt;br /&gt;
&lt;br /&gt;
We have been working primarily with the Embedded Linux Conference, sponsored by the project&#039;s parent organization The Linux Foundation. We have typically sponsored both a booth and a Yocto Project DevDay/Summit in conjunction with ELC/ELCE, given its high synergy.&lt;br /&gt;
&lt;br /&gt;
=== Physical Conference ===&lt;br /&gt;
&lt;br /&gt;
* Yocto Project must sign up for a booth&lt;br /&gt;
** Typically we join at the Bronze level, which provides a basic booth at a reasonable cost&lt;br /&gt;
** The contract must be negotiated several months ahead&lt;br /&gt;
** There is typically no penalty for later registration, but it could result in a late posting of the DevDay/Summit advertising and registration page, which can potentially affect attendance&lt;br /&gt;
* The Yocto Project booth pop-up&lt;br /&gt;
** Local the booth pop-up (currently with David) &lt;br /&gt;
** The booth travels as normal luggage, about 30-40 pounds&lt;br /&gt;
** The booth takes about 20 minutes to assemble and disassemble&lt;br /&gt;
* Booth posters &lt;br /&gt;
** If possible it is good to bring a collapsible stand, so that posters of the daily schedule of Yocto Project related talks can be advertised, in addition to the DevDay/Summit&lt;br /&gt;
** If no stand is present, then posters hanging in front the the booth pop-up and stand-up displays on the booth itself can be used&lt;br /&gt;
** There is a requirement to display the primary Yocto Project members (e.g. Platinum) at the booth&lt;br /&gt;
* Booth Content&lt;br /&gt;
** There should be handouts on the booth, for example:&lt;br /&gt;
*** Cards&lt;br /&gt;
*** Yocti&lt;br /&gt;
*** Swag (USB battery packs, spinners, pens, T-shirts&lt;br /&gt;
** T-Shirts are great giveaways and great live conference advertisements, but do require cost, transportation, and size distribution considerations&lt;br /&gt;
** Hand outs&lt;br /&gt;
*** It is good to have brochures that provide technical content about the project&lt;br /&gt;
*** We currently have a short form (~ 4 pages, and an older long form ~ pages with testimonials)&lt;br /&gt;
** Display computer&lt;br /&gt;
*** We often have a display running from a laptop or NUC. This can provide live browsing of the Yocto Project home page, documentation, Layer Index, DevDay/Summit home page. Visitors sometimes suggest web pages of their own as part of their questions.&lt;br /&gt;
** Demos&lt;br /&gt;
*** We try to have live demos at the booth, to attract visitors and stimulate conversations&lt;br /&gt;
*** Examples include Software Defined Radio, routers, robots, and once a race car&lt;br /&gt;
** Booth Hours&lt;br /&gt;
*** We usually get about 4 hours the day before the conference floor opens to prepare our booth&lt;br /&gt;
*** We typically need the booth attended 8 hours a day, in particular in between sessions and during lunch&lt;br /&gt;
*** ELC/ELCE typically have a special booth walk evening, where the entire conference is at the booths for 2 to 3 hours  &lt;br /&gt;
** Booth Attendance&lt;br /&gt;
*** It is important to arrange a schedule of booth watchers, so that we look organized and can be available to catch visitors&lt;br /&gt;
*** The booth schedule is typically 2 people per 2 hour slots across the open hours&lt;br /&gt;
*** One of the best part of the conference is that Yocto Project people generally hang around the booth even if they are not actually in the booth, so it is often easy to find an expert if a visitor asks a hard question&lt;br /&gt;
*** When the booth is closed each evening, the loose content must be locked up in the booth, and the key must go to someone whom is guaranteed to open the booth the next morning&lt;br /&gt;
** Booth Interaction&lt;br /&gt;
*** Each booth is given a badge scanner so that we can catch the visitors, This information is very important to the Yocto Project Advocacy Committee&lt;br /&gt;
*** Generally people are pleased to allow you to scan their badges, so no worries&lt;br /&gt;
*** We often offer the swag in exchange for the badge scan, to make this more efficient&lt;br /&gt;
*** There will generally be 20% of the people who come just for the swag, and that is ok&lt;br /&gt;
&lt;br /&gt;
=== Virtual Conference ===&lt;br /&gt;
&lt;br /&gt;
Virtual conferences share many of the same aspects of physical conferences. Here are the differences.&lt;br /&gt;
&lt;br /&gt;
* Booth Setup&lt;br /&gt;
** The conference will set up accounts a month ahead so that the virtual booth can be customized&lt;br /&gt;
** The conference will typically have a walk through the weeks before to insure that the booths are coming together and any questions can be answered&lt;br /&gt;
** Virtual booths are generally very limited (and not just because of the Bronze level), so one make the best that one can&lt;br /&gt;
** The virtual booth will typically require:&lt;br /&gt;
*** A central picture (and/or movie)&lt;br /&gt;
*** Links that are customized to any attached documents or web pages&lt;br /&gt;
*** A banner, good for messages-of-the-day (like relevant talks)&lt;br /&gt;
* Booth swag&lt;br /&gt;
** The booth &amp;quot;posters&amp;quot; will be present either on the virtual booth&#039;s page, or as downloadable documents&lt;br /&gt;
** All of the give away content will be electronic documents, including the brochures&lt;br /&gt;
** While we cannot physically give away swag, there are other possibilities like themed T-shirts that can be ordered directly by the visitors, at perhaps a discount&lt;br /&gt;
* Booth Attendance&lt;br /&gt;
** There is still the need to have the booth coverage managed for the same reason as a physical booth&lt;br /&gt;
** In place of physical interaction with visitors, the conferences usually include some form of live blog between the booth managers and visitors. This interface is alas usually very limited and clumsy, so it is often limited to basic greetings for forwarding people to the right documents and to the DevDay/Summit, and directing visitors to the YP slack channel&lt;br /&gt;
** The booth is still important for the basic reasons of advertising for the project and the DevDay/Summit&lt;br /&gt;
** In the recent virtual summits, we have still received a virtual visitor list and generally what they looked at, which is evidence that the booth is visited more that what the blog would reflect&lt;br /&gt;
* Slack Channel&lt;br /&gt;
** We have found that a separate Slack channel is very effective&lt;br /&gt;
** We usually set up a technical stream and a separate gossip stream (to not overwhelm visitors)&lt;br /&gt;
** That interface is much more flexible and friendly&lt;br /&gt;
** It is also persistent across and after the conference &lt;br /&gt;
* Zoom Channel&lt;br /&gt;
** We have experimented with setting up a separate Zoom channel for direct conversations with visitors, but it was not really used. The slack channel ended up much more useful&lt;br /&gt;
&lt;br /&gt;
== Summit ==&lt;br /&gt;
&lt;br /&gt;
=== Developer Day versus Summit ===&lt;br /&gt;
&lt;br /&gt;
* DevDays&lt;br /&gt;
** Typically a single day, generally for the smaller ELC NA conference&lt;br /&gt;
** The speakers historically were directly invited, though this is moving to a CFP&lt;br /&gt;
** Ideally there are two tracks, the Beginning Class and the Intermediate Class&lt;br /&gt;
* Summits &lt;br /&gt;
** Typically two days, generally for the larger ELC Europe conference&lt;br /&gt;
** The speakers invited via CFP&lt;br /&gt;
** Beginning Track:&lt;br /&gt;
*** Day 1: Beginning Class&lt;br /&gt;
*** Day 2: Hands on Class&lt;br /&gt;
** Intermediate Track:&lt;br /&gt;
*** Day 1: Advanced and Intermediate Presentations&lt;br /&gt;
*** Day 2: Intermediate Presentations&lt;br /&gt;
&lt;br /&gt;
=== Budget and Costs ===&lt;br /&gt;
&lt;br /&gt;
It is important to create a budget early and get approval from the YP treasurer, especially around the high cost items like travel and lodging. All sample costs below are in $USD.&lt;br /&gt;
&lt;br /&gt;
* Conference fees, booth registration&lt;br /&gt;
** Typically a few hundred dollars at the Bronze level&lt;br /&gt;
* DevDay/Summit Attendee Registration&lt;br /&gt;
** This is contracted via the ELC event, $2-$3 per person, 2%-3% credit card transaction fees&lt;br /&gt;
* DevDay/Summit Room Rentals (physical events)&lt;br /&gt;
** Room Rentals are typically via the event organizer and would be part of the contract.&lt;br /&gt;
** We have for some events (e.g. ELCE Prague) rented our own rooms from nearby hotels&lt;br /&gt;
** We have also had member companies sponsor the location (e.g. several ELC Portland events by Mentor Graphics)&lt;br /&gt;
** In recent years we have had to pass on the Beginning Class for physical events, due both the high cost and lack of room availability&lt;br /&gt;
** For virtual events we have used sponsored Zoom accounts, so there is no incremental costs for the additional tracks&lt;br /&gt;
* Travel and Lodging&lt;br /&gt;
** Typically core people have their travel and hotel costs covered&lt;br /&gt;
** Core people include for example the YP Architect, the booth manager (Advocacy lead), the DevDay/Summit manager (Training Lead)&lt;br /&gt;
** These costs depend on the distance traveled&lt;br /&gt;
* Class Accounts&lt;br /&gt;
** These are the virtual server accounts used for the hands-on classes&lt;br /&gt;
** The class accounts generally cost around $30 per student, though we have had the benefit of full or partial in-kind donations in the past&lt;br /&gt;
* DevDay/Summit Call For Papers&lt;br /&gt;
** We have moved to Pretalx to manage the CFPs, at a cost of ~$200 per event&lt;br /&gt;
* DevDay/Summit attendee Registration Fees&lt;br /&gt;
** For physical events it as been in the $200 range, to help cover the conference fees, registration costs, room rentals, and class accounts&lt;br /&gt;
** For virtual events it has been in the $40 to $50 range to cover the class accounts and CFP management&lt;br /&gt;
** We may in the future separate the Hands-on classes as a distinct track and added cost, just to isolate the class account fees&lt;br /&gt;
* Post event speaker gifts&lt;br /&gt;
** We try to set aside a small gift to the presenters as a thank you to their donated time, so that needs to be included in the budget&lt;br /&gt;
&lt;br /&gt;
=== Physical Summit ===&lt;br /&gt;
&lt;br /&gt;
* Initial Organization&lt;br /&gt;
* Budget&lt;br /&gt;
* CFP Process&lt;br /&gt;
* Speaker Management&lt;br /&gt;
* Presentation Types &lt;br /&gt;
** Keynote&lt;br /&gt;
*** We usually set aside the first 15 minutes or so for a joint keynote to all attendees, typically given by the Community Manager or the Advocacy Lead&lt;br /&gt;
*** We also sometimes have the Keynote given separately to the different tracks when it is not feasible to have every join in one space&lt;br /&gt;
** Short Talk&lt;br /&gt;
*** Usually a 30 minute slot, touching on a topic&lt;br /&gt;
** Extended Talk&lt;br /&gt;
*** Usually a 45 minute slot (60 minutes max), allowing a deeper dive&lt;br /&gt;
** Hands On Class&lt;br /&gt;
*** Usually a 90 minute to 2 hour slot, allowing time for interaction and instruction&lt;br /&gt;
** Post Event Hangout&lt;br /&gt;
*** It has been beneficial to set aside a hangout space after the last day, either in the same space if possible (in the room or in Slack), or at a rendezvous near by. These have gone from 30-60 minutes in the room to several hours after the virtual events&lt;br /&gt;
* Daily Schedule&lt;br /&gt;
** Talks and Classes&lt;br /&gt;
** Breaks&lt;br /&gt;
*** We typically have a mid-morning break and a mid-afternoon break&lt;br /&gt;
** Lunch&lt;br /&gt;
*** Lunch is typically one hour, and is usually sponsored by YP or is donated by a member company &lt;br /&gt;
* Class Accounts&lt;br /&gt;
** These are the virtual server accounts used for the hands-on classes&lt;br /&gt;
** They are typically based on a recent Ubuntu release&lt;br /&gt;
** These are created and managed by Michael&lt;br /&gt;
** The class images are typically created by the DeyDay/Summit manager (David), based on the class content&lt;br /&gt;
* Site visits&lt;br /&gt;
* WIFI Considerations&lt;br /&gt;
* Class Reviews&lt;br /&gt;
* Post Event Activities&lt;br /&gt;
&lt;br /&gt;
=== Virtual Summit ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Considerations and Practicalities ==&lt;br /&gt;
&lt;br /&gt;
=== How to Work the Yocto Project Booth ===&lt;br /&gt;
&lt;br /&gt;
1) Why You Are Here&lt;br /&gt;
&lt;br /&gt;
We are all part of the open source Linux community, all trying to make Linux useful to the larger world.&lt;br /&gt;
&lt;br /&gt;
In this booth we are contributing to this multi-faceted world of embedded Linux with a community and tool set that is both powerful and extensive.&lt;br /&gt;
&lt;br /&gt;
We are here to help people achieve their dreams, and we want people to enjoy the benefits of our project and we embrace people that want to become part of our community as users and contributors&lt;br /&gt;
&lt;br /&gt;
We give thanks to the many individuals and corporate partners that work together and help make this community strong and vibrant.&lt;br /&gt;
&lt;br /&gt;
2) The Fundamental YP Elevator Speech&lt;br /&gt;
&lt;br /&gt;
Directly from the YP website front page. This is your foundational information.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;The Yocto Project. It&#039;s not an embedded Linux Distribution, It creates a custom one for you.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;The Yocto Project (YP) is an open source collaboration project that helps developers create custom Linux-based systems regardless of the hardware architecture.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;The project provides a flexible set of tools and a space where embedded developers worldwide can share technologies, software stacks, configurations, and best practices that can be used to create tailored Linux images for embedded and IOT devices, or anywhere a customized Linux OS is needed.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3) How To Greet People&lt;br /&gt;
&lt;br /&gt;
It is usually best to start with these two questions:&lt;br /&gt;
  (a) &amp;quot;Do you know about Yocto Project?&amp;quot;, or &amp;quot;How much to you know about Yocto Project?&amp;quot;&lt;br /&gt;
  (b) &amp;quot;What question(s) do you have?&amp;quot;, or &amp;quot;What problem are you trying to solve?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
By starting with these basic questions, you will know how best to help them out and direct your efforts, as opposed to attempting a full presentation that might completely miss the mark.&lt;br /&gt;
&lt;br /&gt;
When talking to people, it is great to:&lt;br /&gt;
  * Lead with Yocto Project (open source!)&lt;br /&gt;
  * Follow with the YP Community (stronger together!) &lt;br /&gt;
  * Then if they are interested, go into depth about your particular company and skill set (we all bring our own special things to the table!)&lt;br /&gt;
&lt;br /&gt;
In this manner we pay respect to our open source credentials before differentiating into specific companies.&lt;br /&gt;
&lt;br /&gt;
4) Always Be Positive About The Larger Community, Even About &amp;quot;Competitors&amp;quot;&lt;br /&gt;
&lt;br /&gt;
We often get questions about &amp;quot;competitors&amp;quot;, most often being Buildroot.&lt;br /&gt;
&lt;br /&gt;
My standard answer is that:&lt;br /&gt;
  * Buildroot is definitely an easier build system to learn, use, and start projects with, and if that works for your project then that is a great choice, especially since it is &amp;quot;Makefile&amp;quot; based. &lt;br /&gt;
  * If however the time comes that you need a more powerful and extensible build system that can support your growing designs, then Yocto Project becomes the excellent choice. Yocto Project is &amp;quot;bitbake&amp;quot; based and does have a high learning curve, but it has the power to carry you forward with complex designs over many years.&lt;br /&gt;
  * The point is that everyone serves the community in different ways and each system has their strong points, and there is every reason to embrace. &lt;br /&gt;
&lt;br /&gt;
5) Common Questions and Answers&lt;br /&gt;
&lt;br /&gt;
Here is a rough summary of common questions and their answers.&lt;br /&gt;
&lt;br /&gt;
  (a) About 30% of the people are just passing by an have no idea about what YP is.&lt;br /&gt;
  &lt;br /&gt;
Give them the elevator pitch to help them understand what we are all about. If they have problems that YP can help with, given them the brochure, and point them to the web site and all its resources.&lt;br /&gt;
&lt;br /&gt;
  (b) About 30% of the people want to know if YP supports their specific CPU or user space package.&lt;br /&gt;
  &lt;br /&gt;
Bring up the Yocto Project &amp;quot;Layer Index&amp;quot; website and search for their CPU and/or packages.&lt;br /&gt;
&lt;br /&gt;
   http://layers.openembedded.org/layerindex/branch/master/layers/&lt;br /&gt;
   &lt;br /&gt;
  * The &amp;quot;Machines&amp;quot; tab has the list of 828 supported CPU variants. &lt;br /&gt;
  * The &amp;quot;Recipes&amp;quot; tab has the list of 22861 supported packages&lt;br /&gt;
  * The &amp;quot;Layers&amp;quot; tab has the list of 418 supported layers for features, package sets, machines, packages, and so forth.&lt;br /&gt;
&lt;br /&gt;
  (c) About 10% will want to know about general features, like &amp;quot;Security&amp;quot;, &amp;quot;CVEs&amp;quot;, and &amp;quot;Long Term Support (LTS).&lt;br /&gt;
&lt;br /&gt;
We do have a security team together with our Commercial Partners, and we are actively fixing CVEs all the time.&lt;br /&gt;
&lt;br /&gt;
We do have two LTS releases (2020 and now 2022), for people who want to stay with a specific release for a long time, as opposed to the bi-yearly updates.&lt;br /&gt;
&lt;br /&gt;
  (d) About 10% will ask about esoteric features.&lt;br /&gt;
&lt;br /&gt;
If you do not know, either find someone nearby who does know or get their name and tell them you will get back to them.&lt;br /&gt;
&lt;br /&gt;
  (e) About 20% will be people who have come by the booth as part of a booth browse promotion by LF. &lt;br /&gt;
&lt;br /&gt;
Sign their cards, see if YP can help them, and then thank them for stopping by.&lt;br /&gt;
&lt;br /&gt;
6) Your resources&lt;br /&gt;
&lt;br /&gt;
  * The handout brochures, with detailed information and links&lt;br /&gt;
  * The Yocto Project home page, with its extensive documentation and information&lt;br /&gt;
  * The Yocto Project community, with regular open meetings, chat channels, email lists, and again our fabulous documentation&lt;br /&gt;
  * The Yocto Project expects who like to hang out near the booth&lt;br /&gt;
  * The live demo, to show YP in action&lt;br /&gt;
  * The twice-yearly YP Summits, with several days of presentations and hands-on classes – the next one is in November&lt;br /&gt;
&lt;br /&gt;
7) You may not know the answer, but you know someone who does&lt;br /&gt;
&lt;br /&gt;
Do not worry if you do not know answers to the questions that come your way.&lt;br /&gt;
&lt;br /&gt;
The important thing is that even if you do not know, there are people that you know who do know the answer. Get their name, their contact information, and their specific question. Give that question to other people in the booth and/or send it directly to the people who can help, for example:   david.reyna@windriver.com&lt;br /&gt;
&lt;br /&gt;
8) How to finish your conversation&lt;br /&gt;
&lt;br /&gt;
If they seem like a likely candidate, make sure you scan their badge and mark their area and level of interest. If they have a card get it and mark the same on the back. Give the collected cards to one of the booth leaders.&lt;br /&gt;
&lt;br /&gt;
== Past Conference Data ==&lt;br /&gt;
&lt;br /&gt;
=== Summer 2021 (Self Sponsored) ===&lt;br /&gt;
&lt;br /&gt;
In progress...&lt;br /&gt;
&lt;br /&gt;
=== Fall 2020 Virtual (ELCE Dublin) ===&lt;br /&gt;
&lt;br /&gt;
* Summit:&lt;br /&gt;
** Day 1:&lt;br /&gt;
*** Beginning Class: ~100&lt;br /&gt;
*** Intermediate Class: ~150&lt;br /&gt;
** Day 2:&lt;br /&gt;
*** Hands On Classes: ~50&lt;br /&gt;
*** Intermediate Class: ~150&lt;br /&gt;
&lt;br /&gt;
=== Summmer 2020 Virtual (ELC Austin) ===&lt;br /&gt;
&lt;br /&gt;
* Conference Presentations YP-related&lt;br /&gt;
** Monday:&lt;br /&gt;
*** LTS: 238 peak attendance, 377 registered&lt;br /&gt;
*** BoF: 157 peak attendance&lt;br /&gt;
*** Slack: 238&lt;br /&gt;
&lt;br /&gt;
* DevDay:&lt;br /&gt;
** Class: Start=173,Peak=181,End=164&lt;br /&gt;
*** Slack:&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Contribute_to_Toaster&amp;diff=85188</id>
		<title>Contribute to Toaster</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Contribute_to_Toaster&amp;diff=85188"/>
		<updated>2022-03-12T06:56:52Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: /* Workflow */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Toaster]]&lt;br /&gt;
This page summarises the Toaster development process. We hope this will help you start contributing to the project. We were previously using a process that involved the toaster-next branch on poky-contrib.  This workflow was especially useful in an environment where Toaster was undergoing a lot of change and needed the ability to layer patch sets upon each other before they had been taken up by bitbake.  Since that is not currently the case, toaster-next just adds complication; so it has been removed from this workflow.  See [[Contribute to Toaster (toaster-next version)]] for the old toaster-next based workflow.&lt;br /&gt;
&lt;br /&gt;
== What can I do? ==&lt;br /&gt;
&lt;br /&gt;
The [https://bugzilla.yoctoproject.org/buglist.cgi?product=Toaster Yocto Project Bugzilla instance] lists all the things that need to be done:&lt;br /&gt;
&lt;br /&gt;
* If the issue says &amp;lt;strong&amp;gt;GUI design available&amp;lt;/strong&amp;gt; in the Whiteboard field, there is a design specification document attached to the issue that you should follow. Send questions / comments about it to the [https://lists.yoctoproject.org/listinfo/toaster Toaster mailing list]&lt;br /&gt;
* If the issue says &amp;lt;strong&amp;gt;GUI design pending&amp;lt;/strong&amp;gt; in the Whiteboard field, there is some design work still to be done. Feel free to take the issue and send an email to the [https://lists.yoctoproject.org/listinfo/toaster Toaster mailing list] to find out why the design work is not done yet&lt;br /&gt;
&lt;br /&gt;
== Set up the local repository ==&lt;br /&gt;
&lt;br /&gt;
For development of Toaster we recommend setting up a local install of Toaster. Installation instructions are available in the main [http://www.yoctoproject.org/docs/latest/toaster-manual/toaster-manual.html#toaster-manual-start Toaster documentation]&lt;br /&gt;
&lt;br /&gt;
== Submitting patches ==&lt;br /&gt;
&lt;br /&gt;
Publishing your patches to Toaster is a two step process.&lt;br /&gt;
# Sending patches to the [https://lists.yoctoproject.org/listinfo/toaster/| Toaster mailing list] for review&lt;br /&gt;
# Submitting the patches that you reviewed to the upstream repository&lt;br /&gt;
&lt;br /&gt;
By submitting your patches first to the Toaster mailing list, you can be sure the patches are reviewed by the people in the community who are familiar with the Toaster source code, and who have experience developing web applications.&lt;br /&gt;
&lt;br /&gt;
That also means that, by the time the patches are submitted to the upstream mailing lists, they are in pretty good shape. That helps the project maintainers, and hopefully also helps you.&lt;br /&gt;
&lt;br /&gt;
Toaster code lives in Bitbake repository at [http://git.openembedded.org/bitbake/|http://git.openembedded.org/bitbake/].&lt;br /&gt;
All contributions must be upstreamed to the Bitbake repository in order to make it to the &amp;quot;master&amp;quot; branch of the poky/ repository.&lt;br /&gt;
&lt;br /&gt;
=== Workflow ===&lt;br /&gt;
To contribute to toaster you will also need authorization to write to the upstream yocto project repository.  Contact a member of the toaster team for details.&lt;br /&gt;
&lt;br /&gt;
1) Download master branch of the yocto project&lt;br /&gt;
  &amp;lt;code&amp;gt; git clone git://git.yoctoproject.org/poky &amp;amp;&amp;amp; cd poky &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) Add poky-contrib to the local repository you set up above&lt;br /&gt;
  &amp;lt;code&amp;gt; git remote add poky-contrib ssh://git@push.yoctoproject.org/poky-contrib &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Fetch the poky-contrib branches&lt;br /&gt;
  &amp;lt;code&amp;gt; git fetch --all &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4) Start your feature branch off of master, name style of branch is convention, but suggested. &lt;br /&gt;
  &amp;lt;code&amp;gt; git checkout -b username/toaster/FeatureOrBug origin/master &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5) Do Work &lt;br /&gt;
&lt;br /&gt;
6) Test the changes. Run the Django unit tests. People put effort into these so we should make sure we use them.  This assumes you have phantomjs installed.  This can usually be done from the distribution &amp;lt;code&amp;gt; apt-get install phantomjs&amp;lt;/code&amp;gt;,  for example.  If you want to test against Chrome or Firefox, see the README in bitbake/lib/toaster/tests/browser.  &lt;br /&gt;
  &amp;lt;code&amp;gt; pip3 install selenium &amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt;TOASTER_TESTS_BROWSER=phantomjs bitbake/lib/toaster/manage.py test orm toastergui tests.browser &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Note: If you would like to run the tests in a container so they are repeatable and do not continually break due to host upgrades see [[Running Toaster Tests with Containers]]&lt;br /&gt;
&lt;br /&gt;
7) Rebase on master. It has probably changed while you were working (unless you are really really fast!)&lt;br /&gt;
  &amp;lt;code&amp;gt; git rebase origin/master &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8) Push your feature branch to poky-contrib&lt;br /&gt;
 &amp;lt;code&amp;gt; git push -u poky-contrib username/toaster/FeatureOrBug:username/toaster/FeatureOrBug&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
9) Send to the toaster-mailing list using one of the methods outlined below.&lt;br /&gt;
&lt;br /&gt;
10) NOTE: when the patch has been accepted upstream, you can clean up your poy-contrib branch with:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;code&amp;gt; git push -u poky-contrib :username/toaster/FeatureOrBug &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sending patches to Toaster Project ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;NOTE:&amp;lt;/strong&amp;gt; The format of the commit message should be like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    toaster: &amp;lt;module&amp;gt; &amp;lt;short one line summary&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    long(er) description&lt;br /&gt;
&lt;br /&gt;
    [YOCTO #0000]&lt;br /&gt;
&lt;br /&gt;
    Signed-off-by: First Last &amp;lt;name@domain.com&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where YOCTO #0000 is the related bug number if there is one. Signed off by with your git commit -s credentials.&lt;br /&gt;
&lt;br /&gt;
We accept patches on the [https://www.yoctoproject.org/tools-resources/community/mailing-lists toaster mailing list] ( toaster@yoctoproject.org ) by &amp;quot;git send-email&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
e.g.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ git send-email HEAD^ &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can use the utilities in the script directory to prepare your patch&lt;br /&gt;
&lt;br /&gt;
1) Use the create-pull-request script (from poky) to create a pull request while on your feature branch&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/create-pull-request -s &amp;quot;toaster: Fixes and clean ups&amp;quot; -u poky-contrib -r  origin/master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) Review their content, especially the summary mail:&lt;br /&gt;
   &amp;lt;code&amp;gt;edit ./pull-&amp;lt;pid&amp;gt;/0000-cover-letter.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3)When you are satisfied, you can send them with:&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/send-pull-request -a -p ./pull-&amp;lt;pid&amp;gt;&amp;lt;/code&amp;gt; -t toaster@yoctoproject.org&lt;br /&gt;
&lt;br /&gt;
A comprehensive document about commit messages is available on the [http://www.openembedded.org/wiki/Commit_Patch_Message_Guidelines openembedded wiki]&lt;br /&gt;
&lt;br /&gt;
More help learning git is available on [https://try.github.io github] and [http://git-scm.com/documentation/ the official documentation]&lt;br /&gt;
&lt;br /&gt;
=== Sending branches to Toaster Project ===&lt;br /&gt;
&lt;br /&gt;
If you wish to submit whole branches please use the poky-contrib repository see [[Poky Contributions#Poky_Contrib_Branch]] for setup guide.&lt;br /&gt;
&lt;br /&gt;
Once you have pushed a branch please then send an email to the [https://www.yoctoproject.org/tools-resources/community/mailing-lists toaster mailing list] with the subject in the following format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 [review-request] my_branch_name&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the body of the email it&#039;s useful to describe your branch&#039;s functionality, which commits and a link to the git web.&lt;br /&gt;
&lt;br /&gt;
If you need any assistance please post on the mailing list.&lt;br /&gt;
&lt;br /&gt;
=== Submitting patch sets for integration into Bitbake ===&lt;br /&gt;
&lt;br /&gt;
Toaster patches are normally submitted upstream to the BitBake repository by the reviewer (not the author). This tells the upstream maintainers that the patches have been reviewed by the people who are familiar with the Toaster source code, and makes their busy lives a bit easier.&lt;br /&gt;
&lt;br /&gt;
Since development happens on the poky-contrib repository, but the patches need to be merged to the Bitbake repository, the following process should be executed.&lt;br /&gt;
&lt;br /&gt;
1) Bring master up to date&lt;br /&gt;
  &amp;lt;code&amp;gt; git fetch origin master&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt; git checkout master &amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt; git pull [master] &amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
2) Checkout the target branch you wish to upstream&lt;br /&gt;
&lt;br /&gt;
(a) If you are working with a single branch do this:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;code&amp;gt;git checkout username/toaster/FeatureOrBug&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(b) If you are including several branches into this one submission, gather the commit IDs for each branch and do this:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;code&amp;gt;git cherry-pick commit-id-a &amp;lt;/code&amp;gt;&lt;br /&gt;
   &amp;lt;code&amp;gt;git cherry-pick commit-id-b &amp;lt;/code&amp;gt;&lt;br /&gt;
   &amp;lt;code&amp;gt;... &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Create a new branch for submission &lt;br /&gt;
   &amp;lt;code&amp;gt; git checkout -b yourname/submit/username/toaster/FeatureOrBug &amp;lt;/code&amp;gt;&lt;br /&gt;
This will look something like&lt;br /&gt;
   &amp;lt;code&amp;gt; git checkout -b bavery/submit/bob/toaster/FixBug1234 &amp;lt;/code&amp;gt;&lt;br /&gt;
where bavery is signing off on and upstreaming bob&#039;s fix to the Yocto Bugzilla bug 1234.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
---- &lt;br /&gt;
* Alternatively, you can use the patchworks web site:&lt;br /&gt;
  2)  Create a new branch for submission &lt;br /&gt;
   &amp;lt;code&amp;gt; git checkout -b yourname/submit/username/toaster/FeatureOrBug &amp;lt;/code&amp;gt;&lt;br /&gt;
This will look something like&lt;br /&gt;
   &amp;lt;code&amp;gt; git checkout -b bavery/submit/bob/toaster/FixBug1234 &amp;lt;/code&amp;gt;&lt;br /&gt;
where bavery is signing off on and upstreaming bob&#039;s fix to the Yocto Bugzilla bug 1234.&lt;br /&gt;
  3)  Download and apply the mbox patch from the website: https://patchwork.openembedded.org/project/toaster/patches/&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;code&amp;gt; git am -s the-downloaded-patch.mbox &amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
4) Make sure the branch is rebased on current master. &lt;br /&gt;
   &amp;lt;code&amp;gt;git rebase origin/master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5) Test the changes. Run the Django unit tests.  People put effort into these so we should make sure we use them. his assumes you have phantomjs installed.  This can usually be done from the distribution &amp;lt;code&amp;gt; apt-get install phantomjs&amp;lt;/code&amp;gt;,  for example.  If you want to test against Chrome or Firefox, see the README in bitbake/lib/toaster/tests/browser.&lt;br /&gt;
  &amp;lt;code&amp;gt; pip3 install selenium &amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt;TOASTER_TESTS_BROWSER=phantomjs bitbake/lib/toaster/manage.py test orm toastergui tests.browser &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6) Add signed off by to the commit messages (Note: If you applied the mbox patch with &amp;lt;code&amp;gt; git am -s foo.mbox&amp;lt;/code&amp;gt; You do not need to sign off again.)&lt;br /&gt;
   &amp;lt;code&amp;gt;git filter-branch -f --msg-filter &#039;cat &amp;amp;&amp;amp; echo &amp;quot;Signed-off-by: $(git config --get user.name) &amp;lt;$(git config --get user.email)&amp;gt;&amp;quot;&#039; master..HEAD&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7) Push the modified commit messages and rebased version to poky-contrib&lt;br /&gt;
   &amp;lt;code&amp;gt;git push -u poky-contrib yourname/submit/username/toaster/FeatureOrBug  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8) Use the create-pull-request script (from poky) to create a pull request for the appropriate tree/mailing list&lt;br /&gt;
&lt;br /&gt;
(a) For the &#039;bitbake&#039; tree (e.g. bitbake/.../toasterui.py, bitbake/.../toastergui/*):&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/create-pull-request -d bitbake -s &amp;quot;toaster: Fixes and clean ups&amp;quot; -u poky-contrib -r origin/master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(b) for the &#039;meta&#039; tree (e.g. meta/classes/toaster.class):&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/create-pull-request -d meta -s &amp;quot;toaster: Fixes and clean ups&amp;quot; -u poky-contrib -r origin/master&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;strong&amp;gt;Note: If the patch creates any NEW files, the integration scripts that pull it into bitbake will fail. So, if new files are created as part of this patch set, you need to explicitly point that out in the body of the email for the patch set or do it as a PR rather than as a patch set.&lt;br /&gt;
&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
9) Review their content, especially the summary mail:&lt;br /&gt;
   &amp;lt;code&amp;gt;edit ./pull-&amp;lt;pid&amp;gt;/0000-cover-letter.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
10) When you are satisfied, you can send them with:&lt;br /&gt;
   --- for the &#039;bitbake&#039; tree:&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/send-pull-request -a -p ./pull-&amp;lt;pid&amp;gt;&amp;lt;/code&amp;gt; -t bitbake-devel@lists.openembedded.org&lt;br /&gt;
   --- for the &#039;meta&#039; tree:&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/send-pull-request -a -p ./pull-&amp;lt;pid&amp;gt;&amp;lt;/code&amp;gt; -t openembedded-core@lists.openembedded.org&lt;br /&gt;
&lt;br /&gt;
==== Submitting patches for prior releases ====&lt;br /&gt;
&lt;br /&gt;
The procedure is the same, but using the prior release as the base branch instead of the &amp;quot;master&amp;quot; branch in bitbake.&lt;br /&gt;
&lt;br /&gt;
Also, make sure that you add the name of the prior release for which the patchset is intended in the prefix of the patchset, as parameter to the &amp;quot;create-pull-request&amp;quot; command, e.g. &#039;&#039;&#039;-p 1.26&#039;&#039;&#039; for the 1.26 branch.&lt;br /&gt;
&lt;br /&gt;
==== Gotchas ====&lt;br /&gt;
===== Too Big =====&lt;br /&gt;
Sometimes the mailer will refuse to send patches, especially on binary or long-line files. The proper way to go around that is to reply to the patchset you&#039;ve submitted to the mailing list, asking for a git pull directly from the poky-contrib branch.&lt;br /&gt;
===== One Patch of a Long Patch Set Needs Resubmission =====&lt;br /&gt;
Suppose you upstream a 10 commit patch set to the bitbake-devel list and someone finds an issue with patch #3.  Regenerating the whole series is silly so how do you address this?  First, follow the bitbake submission steps until you end up on the yourname/submit/the/target/branch  branch.  Then you can (note &amp;lt;strong&amp;gt;the reset --hard will wipe any local changes in your working dir so commit or stash first&amp;lt;/strong&amp;gt;):&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  git checkout -b yourname/submit/the/target/branch-newHEAD&lt;br /&gt;
  git reset --hard &amp;lt;commit of resubmission issue&amp;gt; &lt;br /&gt;
  git commit --amend --signoff &lt;br /&gt;
  git send-email --in-reply-to=&amp;quot;longNumber.git.me@mycomp.com&amp;quot; --subject-prefix=&amp;quot;bitbake-devel] [PATCHVX 03/10&amp;quot;  --to=bitbake-devel@lists.openembedded.org --no-chain-reply-to --suppress-cc=all -M -1 --relative=bitbake&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The longNumber.git.me@mycomp.com comes from the email message id for the particular patch #3 so that the email threading works. In gmail, you can click on the dropdown button on the right side of the screen and choose &amp;quot;Show Original&amp;quot;.  This will have a field in the header like Message-Id: &amp;lt;4551b56f132497c055f39567946a5d3be347d770.1468363530.git.myemailusername@mycompany.com&amp;gt;  The entire string except the &#039;&amp;lt;&amp;gt;&#039; are used.  for example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  --in-reply-to=&amp;quot;4551b56f132497c055f39567946a5d3be347d770.1468363530.git.myemailusername@mycompany.com&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first issue you are likely to face is that the git filter-branch command in the standard instructions may sign off on too many commits.  If you know you just want to sign off on the last 7 commits on the yourname/submit/the/target/branch you can:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  git filter-branch -f --msg-filter &#039;cat &amp;amp;&amp;amp; echo &amp;quot;Signed-off-by: $(git config --get user.name) &amp;lt;$(git config --get user.email)&amp;gt;&amp;quot;&#039; HEAD~7..HEAD&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Submitting patches for documentation ===&lt;br /&gt;
&lt;br /&gt;
Documentation patches should be sent to [https://lists.yoctoproject.org/listinfo/yocto Yocto mailing list] with [yocto-docs] in the subject, CC Scott Rifenbark (and make sure you send it to his gmail, not his defunct Intel address). For his email address, look at [http://lists.openembedded.org/pipermail/bitbake-devel/2015-October/006632.html this post].&lt;br /&gt;
&lt;br /&gt;
== Code syle guide ==&lt;br /&gt;
&lt;br /&gt;
=== Templates ===&lt;br /&gt;
&lt;br /&gt;
Django has a template language which allows us to render pages based on the data (context). We use the template language to setup the initial state of the page and to create re-usable components that can be included in other pages.&lt;br /&gt;
&lt;br /&gt;
The recommend template code style is as follows&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Yes please:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{var}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
  {# Maintaining indentation #}&lt;br /&gt;
  {% if %}&lt;br /&gt;
   &amp;lt;p&amp;gt;this&amp;lt;/p&amp;gt;&lt;br /&gt;
  {% else %}&lt;br /&gt;
   &amp;lt;p&amp;gt;that&amp;lt;/p&amp;gt;&lt;br /&gt;
  {% endif %}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{% comment %}&lt;br /&gt;
This is a longer comment that describes all the things&lt;br /&gt;
that are below in quite a bit of detail because they&#039;re&lt;br /&gt;
a little more difficult to understand.&lt;br /&gt;
{% endcomment %}&lt;br /&gt;
&lt;br /&gt;
{% for layer in layers_list %}&lt;br /&gt;
 {{layer}}&lt;br /&gt;
{% endfor %}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No thank you:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{var}}&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
{# Maintaining indentation #}&lt;br /&gt;
{%if%}&amp;lt;p&amp;gt;this&amp;lt;/p&amp;gt;{%else%}&amp;lt;p&amp;gt;that&amp;lt;/p&amp;gt;{%endif%}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{#This is a longer comment that describes all the things that are below in quite a bit of detail because they&#039;re a little more difficult to understand. #}&lt;br /&gt;
{%for o in layers_list%}{{o}}{%endfor%}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* Maintain indentation as you would with other languages&lt;br /&gt;
* White space after &#039;%&#039;&lt;br /&gt;
* Comment blocks for longer comments&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Javascript ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Yes please:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;use strict&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* These hold some numbers */&lt;br /&gt;
var oneVar = 1;&lt;br /&gt;
var twoVar = 2;&lt;br /&gt;
&lt;br /&gt;
var cheesesTypes = {&lt;br /&gt;
  cheddar : 1,&lt;br /&gt;
  stilton : 2,&lt;br /&gt;
  emmental : 3, &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function doThingsHere(){&lt;br /&gt;
  return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* If one equals two do some other things and make sure that&lt;br /&gt;
 * if the the click handler is setup correctly.&lt;br /&gt;
 */&lt;br /&gt;
if (one === two) {&lt;br /&gt;
  var cheese = &amp;quot;cheddar&amp;quot;;&lt;br /&gt;
  oneVar = doThingsHere();&lt;br /&gt;
&lt;br /&gt;
  $(this).click(function (event){&lt;br /&gt;
    alert(&amp;quot;Hello&amp;quot;);&lt;br /&gt;
  });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$(&amp;quot;#little-mouse&amp;quot;).focusout(function(){&lt;br /&gt;
  alert(&amp;quot;bye&amp;quot;)&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
if (oneVar)&lt;br /&gt;
  noThingHere();&lt;br /&gt;
else&lt;br /&gt;
  doThingHere();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No thank you:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// These hold some numbers&lt;br /&gt;
oneVar = 1&lt;br /&gt;
twoVar = 2&lt;br /&gt;
&lt;br /&gt;
var cheesesTypes = { cheddar : 1, stilton : 2,  emmental : 3, }&lt;br /&gt;
&lt;br /&gt;
function doThingsHere ()&lt;br /&gt;
{&lt;br /&gt;
return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//If one equals two do some other things and make sure that if the the click handler is setup correctly.&lt;br /&gt;
if( one === two ) {&lt;br /&gt;
var cheese = &amp;quot;cheddar&amp;quot;;&lt;br /&gt;
oneVar = doThingsHere();&lt;br /&gt;
&lt;br /&gt;
    $(this).click(function(event){ alert(&amp;quot;Hello&amp;quot;); });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
document.getElementById(&amp;quot;little-mouse&amp;quot;).addEventListener(&amp;quot;focusout&amp;quot;, function(){&lt;br /&gt;
  alert(&amp;quot;bye&amp;quot;)&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
if (oneVar)&lt;br /&gt;
{&lt;br /&gt;
  noThingHere();&lt;br /&gt;
} else {  doThingHere(); }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* Variables should be marked with &amp;quot;var&amp;quot; &lt;br /&gt;
* Semicolons should be used&lt;br /&gt;
* Keep as close to 80 cols as possible&lt;br /&gt;
* Use 2 space per indentation&lt;br /&gt;
* Open curly braces after parenthesis for functions and close on a new line&lt;br /&gt;
* Use camelCase for function names and variable names &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make use of running your Javascript through jshint we have a .jshint configuration file in that js directory (toastergui/static/js)&lt;br /&gt;
&lt;br /&gt;
e.g. install jshint and add to your current PATH, then run:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ npm install jshint; export PATH=$PATH:$PWD/node_modules/.bin/&lt;br /&gt;
 $ jshint ./toastergui/static/js/base.js&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Yes please:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;something-area&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p class=&amp;quot;important&amp;quot;&amp;gt;This is some text&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
  &amp;lt;p id=&amp;quot;important-text&amp;gt;This is some text&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No thank you:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;somethingarea&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p class=&amp;quot;Important&amp;quot;&amp;gt;This is some text&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;somethingarea&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p id=&amp;quot;ImportantText&amp;quot;&amp;gt;This is&lt;br /&gt;
some text&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* 2 space indentation&lt;br /&gt;
* Lower case, ids hyphenated when multiple words&lt;br /&gt;
* No duplicate ids &lt;br /&gt;
&lt;br /&gt;
* Run your HTML through a [http://validator.w3.org/#validate_by_input HTML validator] available for [http://validator.w3.org/source/ local install]. The w3c validator it&#039;s self doesn&#039;t currently validate html5, it uses as a back end [https://validator.github.io/validator/ Nu Html Checker] which can be installed as a standalone service, full instructions in the readme.&lt;br /&gt;
&lt;br /&gt;
Quick install instructions:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $ mkdir html5-validator &amp;amp;&amp;amp; cd html5-validator&lt;br /&gt;
 $ export JAVA_HOME=/usr/lib/jvm/java-6-openjdk&lt;br /&gt;
 $ git clone https://github.com/validator/validator.git&lt;br /&gt;
 $ python build/build.py all&lt;br /&gt;
 $ python build/build.py all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HTML can be indented quickly using tidy, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 tidy -xml --indent auto --indent-spaces 2 --quiet yes -w -1 --show-body-only yes  ./index.html &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
Lenient [https://www.python.org/dev/peps/pep-0008 pep8]&lt;br /&gt;
Ignoring most of the whitespace around character issues (E124,E203,E201,E265,E303,E302,E231) see toaster/.pep8 and [http://pep8.readthedocs.org/en/latest/intro.html#error-codes error code list]&lt;br /&gt;
&lt;br /&gt;
Fix all issues identified by running code through pep8. We have a fairly lenient config file (toaster/.pep8).&lt;br /&gt;
&lt;br /&gt;
e.g.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ pep8 ./toastergui/urls.py&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run code through pylint and fix identified issues - Some can be reasonably ignored such as doc strings for every function or star-args. No pylintrc config provided here as most issues identified are highly contextual and should be ignored on a case by case basis.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ pylint --load-plugins pylint_django toastergui/tests.py&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Working with design ==&lt;br /&gt;
&lt;br /&gt;
Yes, the Yocto Project is one of those lucky projects with designers around to help in UI matters. We have a document explaining how to work with the design contributors: [[File:Working_with_design.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Debugging Toaster ==&lt;br /&gt;
&lt;br /&gt;
Toaster can be quite complex given that it includes a wide range of technologies and languages from bitbake, events, python, Django, Sqlite, Javescript, CCS, HTML, and more. Here are hints and tips for debugging all of these aspects of Toaster.&lt;br /&gt;
&lt;br /&gt;
=== General debugging tips ===&lt;br /&gt;
&lt;br /&gt;
* The logger is your best friend&lt;br /&gt;
* When possible, build from command line in the Toaster environment to see log messages and errors directly&lt;br /&gt;
* Use &amp;quot;quilt-native&amp;quot; as your quick sanity build target&lt;br /&gt;
* For python code you can use pudb (https://wiki.yoctoproject.org/wiki/TipsAndTricks/DebuggingBitbakeInPudb)&lt;br /&gt;
* For bbclass code (toaster.bbclass) find or set up a python section to use pudb (see above link)&lt;br /&gt;
* Brute force find is your friend for mysterious error messages and tracking all places a variable is used&lt;br /&gt;
**  find bitbake/lib/toaster -exec grep -l  &amp;quot;SEARCH_TEXT&amp;quot; {} \; 2&amp;gt; /dev/null&lt;br /&gt;
* Look in https://wiki.yoctoproject.org/wiki/TipsAndTricks&lt;br /&gt;
&lt;br /&gt;
=== How to debug a ... ===&lt;br /&gt;
&lt;br /&gt;
* A stalled build:&lt;br /&gt;
** Cancel the build and look at one of the below logs to find the exception. The error message should give a clue on the user resolution or indicate a bug to file&lt;br /&gt;
** Failures in git and shell calls are (as of YP-2.4 Rocko) captured as visible build errors in the GUI&lt;br /&gt;
* Python file of a build management script (localhostbecontroller.py,...):&lt;br /&gt;
** Use log statements, and watch &amp;quot;build/toaster_runbuilds.log&amp;quot; (where you started Toaster)&lt;br /&gt;
* Python file of a build runtime scripts:&lt;br /&gt;
** Use log statements, and watch &amp;quot;build-toaster-x/toaster_ui.log&amp;quot;&lt;br /&gt;
* Python file of a Toaster management script (projects, tables):&lt;br /&gt;
** Use log statements, and watch &amp;quot;build/toaster_web.log&amp;quot; (where you started Toaster)&lt;br /&gt;
* Template file&lt;br /&gt;
** Usually the error will appear in the browser via Django, with a trace&lt;br /&gt;
** Add random display text to insure the page your editing is the one that shows&lt;br /&gt;
** Display internal values via page template to see what gets passed&lt;br /&gt;
** Add internal values into the context and add to the page template&lt;br /&gt;
** Use the Firefox/Chrome developer &amp;quot;inspector&amp;quot; to examine the DOM&lt;br /&gt;
* Javascript file&lt;br /&gt;
** Use the Firefox/Chrome developer &amp;quot;inspector&amp;quot; to do inline debugging&lt;br /&gt;
** Watch the Firefox/Chrome developer &amp;quot;console&amp;quot; for error messages&lt;br /&gt;
* The Toaster Database&lt;br /&gt;
** Use an application like &amp;quot;sqlitebrowser&amp;quot; to examine the tables and records&lt;br /&gt;
** Use a Python script to find and dump desired database records (see http://events.linuxfoundation.org/sites/events/files/slides/BitbakeAnalytics_ELC_Portland.pdf)&lt;br /&gt;
&lt;br /&gt;
=== Specific error scenarios ... ===&lt;br /&gt;
&lt;br /&gt;
* The build progress gets stuck at &amp;quot;Loading...&amp;quot;&lt;br /&gt;
** You have a syntax error, either in &#039;localhostbecontroller.py&#039;, the helper classes in &#039;models.py&#039;, or in the related javascript. Look at the tail of &amp;quot;toaster_runbuilds.log&amp;quot; file for pythons errors, and in your browser&#039;s &amp;quot;Console&amp;quot; for javascript errors.&lt;br /&gt;
* The message &amp;quot;Sorry, An error has occurred loading this page&amp;quot;&lt;br /&gt;
** The included javascript has a syntax error. The HTML page being rendered has local JS code at the top that caches these errors and displays the observed message (in order to be less ugly to the customer). That code also tries to add the error message to the browser console but that does not always work, and you are left with no clue&lt;br /&gt;
** You can start bisecting the recent edits you made to the respective JS files to locate the problem change&lt;br /&gt;
** You can also add a breakpoint in the mentioned catch code to see if you can see the error directly&lt;br /&gt;
&lt;br /&gt;
=== How to update from a fix in a ... ===&lt;br /&gt;
&lt;br /&gt;
* Template file: save your text edit and refresh page&lt;br /&gt;
* Javascript file: save your text edit and refresh page (or leave page and come back)&lt;br /&gt;
* Builder scripts: save your text edit and restart Toaster (&amp;quot;localhostbecontroller.py&amp;quot;, &amp;quot;buildinfohelper.py&amp;quot;, &amp;quot;toasterui.py&amp;quot;, &amp;quot;bbcontroller.py&amp;quot;,...)&lt;br /&gt;
* Views and URLs: save your text edit and refresh page&lt;br /&gt;
* Model class members: save your text edit and restart Toaster. You may also need a migration file.&lt;br /&gt;
* Model method: save your text edit and refresh page, else restart Toaster&lt;br /&gt;
* Fixture file (settings.xml, poky.xml, custom.xml): delete Toaster database and restart fresh&lt;br /&gt;
&lt;br /&gt;
=== Where to debug ... ===&lt;br /&gt;
&lt;br /&gt;
* Toaster start and stop, database init&lt;br /&gt;
** bin/toaster&lt;br /&gt;
* Project Defaults (Default machine, distro, layers, ...)&lt;br /&gt;
** bldcontrol/management/commands/checksettings.py&lt;br /&gt;
** orm/fixtures/*.xml&lt;br /&gt;
* Layer Index content (Available machines, distros, layers, ...)&lt;br /&gt;
** orm/management/commands/lsupdates.py&lt;br /&gt;
* Build cloning&lt;br /&gt;
** bldcontrol/localhostbecontroller.py&lt;br /&gt;
* Build start&lt;br /&gt;
** bldcontrol/localhostbecontroller.py&lt;br /&gt;
* URL mappings&lt;br /&gt;
** toastergui/urls.py&lt;br /&gt;
* Views&lt;br /&gt;
** toastergui/views.py&lt;br /&gt;
** toastergui/templates/*&lt;br /&gt;
* Toaster Tables (Layers, Distros, Machines, ...)&lt;br /&gt;
** toastergui/tables.py&lt;br /&gt;
** toastergui/static/js/libtoaster.js&lt;br /&gt;
* Events&lt;br /&gt;
** meta/classes/toaster.bbclass -&amp;gt; &lt;br /&gt;
** lib/bb/ui/toasterui.py -&amp;gt; &lt;br /&gt;
** lib/bb/ui/buildinfohelper.py -&amp;gt; &lt;br /&gt;
** orm/models.py et. al.&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Contribute_to_Toaster&amp;diff=85183</id>
		<title>Contribute to Toaster</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Contribute_to_Toaster&amp;diff=85183"/>
		<updated>2022-03-08T17:56:59Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: /* Workflow */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Toaster]]&lt;br /&gt;
This page summarises the Toaster development process. We hope this will help you start contributing to the project. We were previously using a process that involved the toaster-next branch on poky-contrib.  This workflow was especially useful in an environment where Toaster was undergoing a lot of change and needed the ability to layer patch sets upon each other before they had been taken up by bitbake.  Since that is not currently the case, toaster-next just adds complication; so it has been removed from this workflow.  See [[Contribute to Toaster (toaster-next version)]] for the old toaster-next based workflow.&lt;br /&gt;
&lt;br /&gt;
== What can I do? ==&lt;br /&gt;
&lt;br /&gt;
The [https://bugzilla.yoctoproject.org/buglist.cgi?product=Toaster Yocto Project Bugzilla instance] lists all the things that need to be done:&lt;br /&gt;
&lt;br /&gt;
* If the issue says &amp;lt;strong&amp;gt;GUI design available&amp;lt;/strong&amp;gt; in the Whiteboard field, there is a design specification document attached to the issue that you should follow. Send questions / comments about it to the [https://lists.yoctoproject.org/listinfo/toaster Toaster mailing list]&lt;br /&gt;
* If the issue says &amp;lt;strong&amp;gt;GUI design pending&amp;lt;/strong&amp;gt; in the Whiteboard field, there is some design work still to be done. Feel free to take the issue and send an email to the [https://lists.yoctoproject.org/listinfo/toaster Toaster mailing list] to find out why the design work is not done yet&lt;br /&gt;
&lt;br /&gt;
== Set up the local repository ==&lt;br /&gt;
&lt;br /&gt;
For development of Toaster we recommend setting up a local install of Toaster. Installation instructions are available in the main [http://www.yoctoproject.org/docs/latest/toaster-manual/toaster-manual.html#toaster-manual-start Toaster documentation]&lt;br /&gt;
&lt;br /&gt;
== Submitting patches ==&lt;br /&gt;
&lt;br /&gt;
Publishing your patches to Toaster is a two step process.&lt;br /&gt;
# Sending patches to the [https://lists.yoctoproject.org/listinfo/toaster/| Toaster mailing list] for review&lt;br /&gt;
# Submitting the patches that you reviewed to the upstream repository&lt;br /&gt;
&lt;br /&gt;
By submitting your patches first to the Toaster mailing list, you can be sure the patches are reviewed by the people in the community who are familiar with the Toaster source code, and who have experience developing web applications.&lt;br /&gt;
&lt;br /&gt;
That also means that, by the time the patches are submitted to the upstream mailing lists, they are in pretty good shape. That helps the project maintainers, and hopefully also helps you.&lt;br /&gt;
&lt;br /&gt;
Toaster code lives in Bitbake repository at [http://git.openembedded.org/bitbake/|http://git.openembedded.org/bitbake/].&lt;br /&gt;
All contributions must be upstreamed to the Bitbake repository in order to make it to the &amp;quot;master&amp;quot; branch of the poky/ repository.&lt;br /&gt;
&lt;br /&gt;
=== Workflow ===&lt;br /&gt;
To contribute to toaster you will also need authorization to write to the upstream yocto project repository.  Contact a member of the toaster team for details.&lt;br /&gt;
&lt;br /&gt;
1) Download master branch of the yocto project&lt;br /&gt;
  &amp;lt;code&amp;gt; git clone git://git.yoctoproject.org/poky &amp;amp;&amp;amp; cd poky &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) Add poky-contrib to the local repository you set up above&lt;br /&gt;
  &amp;lt;code&amp;gt; [old] git remote add poky-contrib ssh://git@git.yoctoproject.org/poky-contrib &amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt; git remote add poky-contrib https://git.yoctoproject.org/git/poky-contrib &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Fetch the poky-contrib branches&lt;br /&gt;
  &amp;lt;code&amp;gt; git fetch --all &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4) Start your feature branch off of master, name style of branch is convention, but suggested. &lt;br /&gt;
  &amp;lt;code&amp;gt; git checkout -b username/toaster/FeatureOrBug origin/master &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5) Do Work &lt;br /&gt;
&lt;br /&gt;
6) Test the changes. Run the Django unit tests. People put effort into these so we should make sure we use them.  This assumes you have phantomjs installed.  This can usually be done from the distribution &amp;lt;code&amp;gt; apt-get install phantomjs&amp;lt;/code&amp;gt;,  for example.  If you want to test against Chrome or Firefox, see the README in bitbake/lib/toaster/tests/browser.  &lt;br /&gt;
  &amp;lt;code&amp;gt; pip3 install selenium &amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt;TOASTER_TESTS_BROWSER=phantomjs bitbake/lib/toaster/manage.py test orm toastergui tests.browser &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Note: If you would like to run the tests in a container so they are repeatable and do not continually break due to host upgrades see [[Running Toaster Tests with Containers]]&lt;br /&gt;
&lt;br /&gt;
7) Rebase on master. It has probably changed while you were working (unless you are really really fast!)&lt;br /&gt;
  &amp;lt;code&amp;gt; git rebase origin/master &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8) Push your feature branch to poky-contrib&lt;br /&gt;
 &amp;lt;code&amp;gt; git push -u poky-contrib username/toaster/FeatureOrBug:username/toaster/FeatureOrBug&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
9) Send to the toaster-mailing list using one of the methods outlined below.&lt;br /&gt;
&lt;br /&gt;
10) NOTE: when the patch has been accepted upstream, you can clean up your poy-contrib branch with:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;code&amp;gt; git push -u poky-contrib :username/toaster/FeatureOrBug &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sending patches to Toaster Project ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;NOTE:&amp;lt;/strong&amp;gt; The format of the commit message should be like this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    toaster: &amp;lt;module&amp;gt; &amp;lt;short one line summary&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    long(er) description&lt;br /&gt;
&lt;br /&gt;
    [YOCTO #0000]&lt;br /&gt;
&lt;br /&gt;
    Signed-off-by: First Last &amp;lt;name@domain.com&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where YOCTO #0000 is the related bug number if there is one. Signed off by with your git commit -s credentials.&lt;br /&gt;
&lt;br /&gt;
We accept patches on the [https://www.yoctoproject.org/tools-resources/community/mailing-lists toaster mailing list] ( toaster@yoctoproject.org ) by &amp;quot;git send-email&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
e.g.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ git send-email HEAD^ &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can use the utilities in the script directory to prepare your patch&lt;br /&gt;
&lt;br /&gt;
1) Use the create-pull-request script (from poky) to create a pull request while on your feature branch&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/create-pull-request -s &amp;quot;toaster: Fixes and clean ups&amp;quot; -u poky-contrib -r  origin/master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) Review their content, especially the summary mail:&lt;br /&gt;
   &amp;lt;code&amp;gt;edit ./pull-&amp;lt;pid&amp;gt;/0000-cover-letter.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3)When you are satisfied, you can send them with:&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/send-pull-request -a -p ./pull-&amp;lt;pid&amp;gt;&amp;lt;/code&amp;gt; -t toaster@yoctoproject.org&lt;br /&gt;
&lt;br /&gt;
A comprehensive document about commit messages is available on the [http://www.openembedded.org/wiki/Commit_Patch_Message_Guidelines openembedded wiki]&lt;br /&gt;
&lt;br /&gt;
More help learning git is available on [https://try.github.io github] and [http://git-scm.com/documentation/ the official documentation]&lt;br /&gt;
&lt;br /&gt;
=== Sending branches to Toaster Project ===&lt;br /&gt;
&lt;br /&gt;
If you wish to submit whole branches please use the poky-contrib repository see [[Poky Contributions#Poky_Contrib_Branch]] for setup guide.&lt;br /&gt;
&lt;br /&gt;
Once you have pushed a branch please then send an email to the [https://www.yoctoproject.org/tools-resources/community/mailing-lists toaster mailing list] with the subject in the following format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 [review-request] my_branch_name&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the body of the email it&#039;s useful to describe your branch&#039;s functionality, which commits and a link to the git web.&lt;br /&gt;
&lt;br /&gt;
If you need any assistance please post on the mailing list.&lt;br /&gt;
&lt;br /&gt;
=== Submitting patch sets for integration into Bitbake ===&lt;br /&gt;
&lt;br /&gt;
Toaster patches are normally submitted upstream to the BitBake repository by the reviewer (not the author). This tells the upstream maintainers that the patches have been reviewed by the people who are familiar with the Toaster source code, and makes their busy lives a bit easier.&lt;br /&gt;
&lt;br /&gt;
Since development happens on the poky-contrib repository, but the patches need to be merged to the Bitbake repository, the following process should be executed.&lt;br /&gt;
&lt;br /&gt;
1) Bring master up to date&lt;br /&gt;
  &amp;lt;code&amp;gt; git fetch origin master&amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt; git checkout master &amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt; git pull [master] &amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
2) Checkout the target branch you wish to upstream&lt;br /&gt;
&lt;br /&gt;
(a) If you are working with a single branch do this:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;code&amp;gt;git checkout username/toaster/FeatureOrBug&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(b) If you are including several branches into this one submission, gather the commit IDs for each branch and do this:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;code&amp;gt;git cherry-pick commit-id-a &amp;lt;/code&amp;gt;&lt;br /&gt;
   &amp;lt;code&amp;gt;git cherry-pick commit-id-b &amp;lt;/code&amp;gt;&lt;br /&gt;
   &amp;lt;code&amp;gt;... &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Create a new branch for submission &lt;br /&gt;
   &amp;lt;code&amp;gt; git checkout -b yourname/submit/username/toaster/FeatureOrBug &amp;lt;/code&amp;gt;&lt;br /&gt;
This will look something like&lt;br /&gt;
   &amp;lt;code&amp;gt; git checkout -b bavery/submit/bob/toaster/FixBug1234 &amp;lt;/code&amp;gt;&lt;br /&gt;
where bavery is signing off on and upstreaming bob&#039;s fix to the Yocto Bugzilla bug 1234.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
---- &lt;br /&gt;
* Alternatively, you can use the patchworks web site:&lt;br /&gt;
  2)  Create a new branch for submission &lt;br /&gt;
   &amp;lt;code&amp;gt; git checkout -b yourname/submit/username/toaster/FeatureOrBug &amp;lt;/code&amp;gt;&lt;br /&gt;
This will look something like&lt;br /&gt;
   &amp;lt;code&amp;gt; git checkout -b bavery/submit/bob/toaster/FixBug1234 &amp;lt;/code&amp;gt;&lt;br /&gt;
where bavery is signing off on and upstreaming bob&#039;s fix to the Yocto Bugzilla bug 1234.&lt;br /&gt;
  3)  Download and apply the mbox patch from the website: https://patchwork.openembedded.org/project/toaster/patches/&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;code&amp;gt; git am -s the-downloaded-patch.mbox &amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
4) Make sure the branch is rebased on current master. &lt;br /&gt;
   &amp;lt;code&amp;gt;git rebase origin/master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5) Test the changes. Run the Django unit tests.  People put effort into these so we should make sure we use them. his assumes you have phantomjs installed.  This can usually be done from the distribution &amp;lt;code&amp;gt; apt-get install phantomjs&amp;lt;/code&amp;gt;,  for example.  If you want to test against Chrome or Firefox, see the README in bitbake/lib/toaster/tests/browser.&lt;br /&gt;
  &amp;lt;code&amp;gt; pip3 install selenium &amp;lt;/code&amp;gt;&lt;br /&gt;
  &amp;lt;code&amp;gt;TOASTER_TESTS_BROWSER=phantomjs bitbake/lib/toaster/manage.py test orm toastergui tests.browser &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6) Add signed off by to the commit messages (Note: If you applied the mbox patch with &amp;lt;code&amp;gt; git am -s foo.mbox&amp;lt;/code&amp;gt; You do not need to sign off again.)&lt;br /&gt;
   &amp;lt;code&amp;gt;git filter-branch -f --msg-filter &#039;cat &amp;amp;&amp;amp; echo &amp;quot;Signed-off-by: $(git config --get user.name) &amp;lt;$(git config --get user.email)&amp;gt;&amp;quot;&#039; master..HEAD&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7) Push the modified commit messages and rebased version to poky-contrib&lt;br /&gt;
   &amp;lt;code&amp;gt;git push -u poky-contrib yourname/submit/username/toaster/FeatureOrBug  &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8) Use the create-pull-request script (from poky) to create a pull request for the appropriate tree/mailing list&lt;br /&gt;
&lt;br /&gt;
(a) For the &#039;bitbake&#039; tree (e.g. bitbake/.../toasterui.py, bitbake/.../toastergui/*):&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/create-pull-request -d bitbake -s &amp;quot;toaster: Fixes and clean ups&amp;quot; -u poky-contrib -r origin/master&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(b) for the &#039;meta&#039; tree (e.g. meta/classes/toaster.class):&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/create-pull-request -d meta -s &amp;quot;toaster: Fixes and clean ups&amp;quot; -u poky-contrib -r origin/master&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;strong&amp;gt;Note: If the patch creates any NEW files, the integration scripts that pull it into bitbake will fail. So, if new files are created as part of this patch set, you need to explicitly point that out in the body of the email for the patch set or do it as a PR rather than as a patch set.&lt;br /&gt;
&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
9) Review their content, especially the summary mail:&lt;br /&gt;
   &amp;lt;code&amp;gt;edit ./pull-&amp;lt;pid&amp;gt;/0000-cover-letter.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
10) When you are satisfied, you can send them with:&lt;br /&gt;
   --- for the &#039;bitbake&#039; tree:&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/send-pull-request -a -p ./pull-&amp;lt;pid&amp;gt;&amp;lt;/code&amp;gt; -t bitbake-devel@lists.openembedded.org&lt;br /&gt;
   --- for the &#039;meta&#039; tree:&lt;br /&gt;
   &amp;lt;code&amp;gt;./scripts/send-pull-request -a -p ./pull-&amp;lt;pid&amp;gt;&amp;lt;/code&amp;gt; -t openembedded-core@lists.openembedded.org&lt;br /&gt;
&lt;br /&gt;
==== Submitting patches for prior releases ====&lt;br /&gt;
&lt;br /&gt;
The procedure is the same, but using the prior release as the base branch instead of the &amp;quot;master&amp;quot; branch in bitbake.&lt;br /&gt;
&lt;br /&gt;
Also, make sure that you add the name of the prior release for which the patchset is intended in the prefix of the patchset, as parameter to the &amp;quot;create-pull-request&amp;quot; command, e.g. &#039;&#039;&#039;-p 1.26&#039;&#039;&#039; for the 1.26 branch.&lt;br /&gt;
&lt;br /&gt;
==== Gotchas ====&lt;br /&gt;
===== Too Big =====&lt;br /&gt;
Sometimes the mailer will refuse to send patches, especially on binary or long-line files. The proper way to go around that is to reply to the patchset you&#039;ve submitted to the mailing list, asking for a git pull directly from the poky-contrib branch.&lt;br /&gt;
===== One Patch of a Long Patch Set Needs Resubmission =====&lt;br /&gt;
Suppose you upstream a 10 commit patch set to the bitbake-devel list and someone finds an issue with patch #3.  Regenerating the whole series is silly so how do you address this?  First, follow the bitbake submission steps until you end up on the yourname/submit/the/target/branch  branch.  Then you can (note &amp;lt;strong&amp;gt;the reset --hard will wipe any local changes in your working dir so commit or stash first&amp;lt;/strong&amp;gt;):&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  git checkout -b yourname/submit/the/target/branch-newHEAD&lt;br /&gt;
  git reset --hard &amp;lt;commit of resubmission issue&amp;gt; &lt;br /&gt;
  git commit --amend --signoff &lt;br /&gt;
  git send-email --in-reply-to=&amp;quot;longNumber.git.me@mycomp.com&amp;quot; --subject-prefix=&amp;quot;bitbake-devel] [PATCHVX 03/10&amp;quot;  --to=bitbake-devel@lists.openembedded.org --no-chain-reply-to --suppress-cc=all -M -1 --relative=bitbake&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The longNumber.git.me@mycomp.com comes from the email message id for the particular patch #3 so that the email threading works. In gmail, you can click on the dropdown button on the right side of the screen and choose &amp;quot;Show Original&amp;quot;.  This will have a field in the header like Message-Id: &amp;lt;4551b56f132497c055f39567946a5d3be347d770.1468363530.git.myemailusername@mycompany.com&amp;gt;  The entire string except the &#039;&amp;lt;&amp;gt;&#039; are used.  for example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  --in-reply-to=&amp;quot;4551b56f132497c055f39567946a5d3be347d770.1468363530.git.myemailusername@mycompany.com&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first issue you are likely to face is that the git filter-branch command in the standard instructions may sign off on too many commits.  If you know you just want to sign off on the last 7 commits on the yourname/submit/the/target/branch you can:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  git filter-branch -f --msg-filter &#039;cat &amp;amp;&amp;amp; echo &amp;quot;Signed-off-by: $(git config --get user.name) &amp;lt;$(git config --get user.email)&amp;gt;&amp;quot;&#039; HEAD~7..HEAD&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Submitting patches for documentation ===&lt;br /&gt;
&lt;br /&gt;
Documentation patches should be sent to [https://lists.yoctoproject.org/listinfo/yocto Yocto mailing list] with [yocto-docs] in the subject, CC Scott Rifenbark (and make sure you send it to his gmail, not his defunct Intel address). For his email address, look at [http://lists.openembedded.org/pipermail/bitbake-devel/2015-October/006632.html this post].&lt;br /&gt;
&lt;br /&gt;
== Code syle guide ==&lt;br /&gt;
&lt;br /&gt;
=== Templates ===&lt;br /&gt;
&lt;br /&gt;
Django has a template language which allows us to render pages based on the data (context). We use the template language to setup the initial state of the page and to create re-usable components that can be included in other pages.&lt;br /&gt;
&lt;br /&gt;
The recommend template code style is as follows&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Yes please:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{var}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
  {# Maintaining indentation #}&lt;br /&gt;
  {% if %}&lt;br /&gt;
   &amp;lt;p&amp;gt;this&amp;lt;/p&amp;gt;&lt;br /&gt;
  {% else %}&lt;br /&gt;
   &amp;lt;p&amp;gt;that&amp;lt;/p&amp;gt;&lt;br /&gt;
  {% endif %}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{% comment %}&lt;br /&gt;
This is a longer comment that describes all the things&lt;br /&gt;
that are below in quite a bit of detail because they&#039;re&lt;br /&gt;
a little more difficult to understand.&lt;br /&gt;
{% endcomment %}&lt;br /&gt;
&lt;br /&gt;
{% for layer in layers_list %}&lt;br /&gt;
 {{layer}}&lt;br /&gt;
{% endfor %}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No thank you:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{var}}&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
{# Maintaining indentation #}&lt;br /&gt;
{%if%}&amp;lt;p&amp;gt;this&amp;lt;/p&amp;gt;{%else%}&amp;lt;p&amp;gt;that&amp;lt;/p&amp;gt;{%endif%}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{#This is a longer comment that describes all the things that are below in quite a bit of detail because they&#039;re a little more difficult to understand. #}&lt;br /&gt;
{%for o in layers_list%}{{o}}{%endfor%}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* Maintain indentation as you would with other languages&lt;br /&gt;
* White space after &#039;%&#039;&lt;br /&gt;
* Comment blocks for longer comments&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Javascript ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Yes please:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;use strict&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
/* These hold some numbers */&lt;br /&gt;
var oneVar = 1;&lt;br /&gt;
var twoVar = 2;&lt;br /&gt;
&lt;br /&gt;
var cheesesTypes = {&lt;br /&gt;
  cheddar : 1,&lt;br /&gt;
  stilton : 2,&lt;br /&gt;
  emmental : 3, &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
function doThingsHere(){&lt;br /&gt;
  return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* If one equals two do some other things and make sure that&lt;br /&gt;
 * if the the click handler is setup correctly.&lt;br /&gt;
 */&lt;br /&gt;
if (one === two) {&lt;br /&gt;
  var cheese = &amp;quot;cheddar&amp;quot;;&lt;br /&gt;
  oneVar = doThingsHere();&lt;br /&gt;
&lt;br /&gt;
  $(this).click(function (event){&lt;br /&gt;
    alert(&amp;quot;Hello&amp;quot;);&lt;br /&gt;
  });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$(&amp;quot;#little-mouse&amp;quot;).focusout(function(){&lt;br /&gt;
  alert(&amp;quot;bye&amp;quot;)&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
if (oneVar)&lt;br /&gt;
  noThingHere();&lt;br /&gt;
else&lt;br /&gt;
  doThingHere();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No thank you:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// These hold some numbers&lt;br /&gt;
oneVar = 1&lt;br /&gt;
twoVar = 2&lt;br /&gt;
&lt;br /&gt;
var cheesesTypes = { cheddar : 1, stilton : 2,  emmental : 3, }&lt;br /&gt;
&lt;br /&gt;
function doThingsHere ()&lt;br /&gt;
{&lt;br /&gt;
return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//If one equals two do some other things and make sure that if the the click handler is setup correctly.&lt;br /&gt;
if( one === two ) {&lt;br /&gt;
var cheese = &amp;quot;cheddar&amp;quot;;&lt;br /&gt;
oneVar = doThingsHere();&lt;br /&gt;
&lt;br /&gt;
    $(this).click(function(event){ alert(&amp;quot;Hello&amp;quot;); });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
document.getElementById(&amp;quot;little-mouse&amp;quot;).addEventListener(&amp;quot;focusout&amp;quot;, function(){&lt;br /&gt;
  alert(&amp;quot;bye&amp;quot;)&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
if (oneVar)&lt;br /&gt;
{&lt;br /&gt;
  noThingHere();&lt;br /&gt;
} else {  doThingHere(); }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* Variables should be marked with &amp;quot;var&amp;quot; &lt;br /&gt;
* Semicolons should be used&lt;br /&gt;
* Keep as close to 80 cols as possible&lt;br /&gt;
* Use 2 space per indentation&lt;br /&gt;
* Open curly braces after parenthesis for functions and close on a new line&lt;br /&gt;
* Use camelCase for function names and variable names &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make use of running your Javascript through jshint we have a .jshint configuration file in that js directory (toastergui/static/js)&lt;br /&gt;
&lt;br /&gt;
e.g. install jshint and add to your current PATH, then run:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ npm install jshint; export PATH=$PATH:$PWD/node_modules/.bin/&lt;br /&gt;
 $ jshint ./toastergui/static/js/base.js&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Yes please:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;something-area&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p class=&amp;quot;important&amp;quot;&amp;gt;This is some text&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
  &amp;lt;p id=&amp;quot;important-text&amp;gt;This is some text&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No thank you:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;somethingarea&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;p class=&amp;quot;Important&amp;quot;&amp;gt;This is some text&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;somethingarea&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p id=&amp;quot;ImportantText&amp;quot;&amp;gt;This is&lt;br /&gt;
some text&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* 2 space indentation&lt;br /&gt;
* Lower case, ids hyphenated when multiple words&lt;br /&gt;
* No duplicate ids &lt;br /&gt;
&lt;br /&gt;
* Run your HTML through a [http://validator.w3.org/#validate_by_input HTML validator] available for [http://validator.w3.org/source/ local install]. The w3c validator it&#039;s self doesn&#039;t currently validate html5, it uses as a back end [https://validator.github.io/validator/ Nu Html Checker] which can be installed as a standalone service, full instructions in the readme.&lt;br /&gt;
&lt;br /&gt;
Quick install instructions:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $ mkdir html5-validator &amp;amp;&amp;amp; cd html5-validator&lt;br /&gt;
 $ export JAVA_HOME=/usr/lib/jvm/java-6-openjdk&lt;br /&gt;
 $ git clone https://github.com/validator/validator.git&lt;br /&gt;
 $ python build/build.py all&lt;br /&gt;
 $ python build/build.py all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HTML can be indented quickly using tidy, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 tidy -xml --indent auto --indent-spaces 2 --quiet yes -w -1 --show-body-only yes  ./index.html &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
Lenient [https://www.python.org/dev/peps/pep-0008 pep8]&lt;br /&gt;
Ignoring most of the whitespace around character issues (E124,E203,E201,E265,E303,E302,E231) see toaster/.pep8 and [http://pep8.readthedocs.org/en/latest/intro.html#error-codes error code list]&lt;br /&gt;
&lt;br /&gt;
Fix all issues identified by running code through pep8. We have a fairly lenient config file (toaster/.pep8).&lt;br /&gt;
&lt;br /&gt;
e.g.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ pep8 ./toastergui/urls.py&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run code through pylint and fix identified issues - Some can be reasonably ignored such as doc strings for every function or star-args. No pylintrc config provided here as most issues identified are highly contextual and should be ignored on a case by case basis.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ pylint --load-plugins pylint_django toastergui/tests.py&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Working with design ==&lt;br /&gt;
&lt;br /&gt;
Yes, the Yocto Project is one of those lucky projects with designers around to help in UI matters. We have a document explaining how to work with the design contributors: [[File:Working_with_design.pdf]]&lt;br /&gt;
&lt;br /&gt;
== Debugging Toaster ==&lt;br /&gt;
&lt;br /&gt;
Toaster can be quite complex given that it includes a wide range of technologies and languages from bitbake, events, python, Django, Sqlite, Javescript, CCS, HTML, and more. Here are hints and tips for debugging all of these aspects of Toaster.&lt;br /&gt;
&lt;br /&gt;
=== General debugging tips ===&lt;br /&gt;
&lt;br /&gt;
* The logger is your best friend&lt;br /&gt;
* When possible, build from command line in the Toaster environment to see log messages and errors directly&lt;br /&gt;
* Use &amp;quot;quilt-native&amp;quot; as your quick sanity build target&lt;br /&gt;
* For python code you can use pudb (https://wiki.yoctoproject.org/wiki/TipsAndTricks/DebuggingBitbakeInPudb)&lt;br /&gt;
* For bbclass code (toaster.bbclass) find or set up a python section to use pudb (see above link)&lt;br /&gt;
* Brute force find is your friend for mysterious error messages and tracking all places a variable is used&lt;br /&gt;
**  find bitbake/lib/toaster -exec grep -l  &amp;quot;SEARCH_TEXT&amp;quot; {} \; 2&amp;gt; /dev/null&lt;br /&gt;
* Look in https://wiki.yoctoproject.org/wiki/TipsAndTricks&lt;br /&gt;
&lt;br /&gt;
=== How to debug a ... ===&lt;br /&gt;
&lt;br /&gt;
* A stalled build:&lt;br /&gt;
** Cancel the build and look at one of the below logs to find the exception. The error message should give a clue on the user resolution or indicate a bug to file&lt;br /&gt;
** Failures in git and shell calls are (as of YP-2.4 Rocko) captured as visible build errors in the GUI&lt;br /&gt;
* Python file of a build management script (localhostbecontroller.py,...):&lt;br /&gt;
** Use log statements, and watch &amp;quot;build/toaster_runbuilds.log&amp;quot; (where you started Toaster)&lt;br /&gt;
* Python file of a build runtime scripts:&lt;br /&gt;
** Use log statements, and watch &amp;quot;build-toaster-x/toaster_ui.log&amp;quot;&lt;br /&gt;
* Python file of a Toaster management script (projects, tables):&lt;br /&gt;
** Use log statements, and watch &amp;quot;build/toaster_web.log&amp;quot; (where you started Toaster)&lt;br /&gt;
* Template file&lt;br /&gt;
** Usually the error will appear in the browser via Django, with a trace&lt;br /&gt;
** Add random display text to insure the page your editing is the one that shows&lt;br /&gt;
** Display internal values via page template to see what gets passed&lt;br /&gt;
** Add internal values into the context and add to the page template&lt;br /&gt;
** Use the Firefox/Chrome developer &amp;quot;inspector&amp;quot; to examine the DOM&lt;br /&gt;
* Javascript file&lt;br /&gt;
** Use the Firefox/Chrome developer &amp;quot;inspector&amp;quot; to do inline debugging&lt;br /&gt;
** Watch the Firefox/Chrome developer &amp;quot;console&amp;quot; for error messages&lt;br /&gt;
* The Toaster Database&lt;br /&gt;
** Use an application like &amp;quot;sqlitebrowser&amp;quot; to examine the tables and records&lt;br /&gt;
** Use a Python script to find and dump desired database records (see http://events.linuxfoundation.org/sites/events/files/slides/BitbakeAnalytics_ELC_Portland.pdf)&lt;br /&gt;
&lt;br /&gt;
=== Specific error scenarios ... ===&lt;br /&gt;
&lt;br /&gt;
* The build progress gets stuck at &amp;quot;Loading...&amp;quot;&lt;br /&gt;
** You have a syntax error, either in &#039;localhostbecontroller.py&#039;, the helper classes in &#039;models.py&#039;, or in the related javascript. Look at the tail of &amp;quot;toaster_runbuilds.log&amp;quot; file for pythons errors, and in your browser&#039;s &amp;quot;Console&amp;quot; for javascript errors.&lt;br /&gt;
* The message &amp;quot;Sorry, An error has occurred loading this page&amp;quot;&lt;br /&gt;
** The included javascript has a syntax error. The HTML page being rendered has local JS code at the top that caches these errors and displays the observed message (in order to be less ugly to the customer). That code also tries to add the error message to the browser console but that does not always work, and you are left with no clue&lt;br /&gt;
** You can start bisecting the recent edits you made to the respective JS files to locate the problem change&lt;br /&gt;
** You can also add a breakpoint in the mentioned catch code to see if you can see the error directly&lt;br /&gt;
&lt;br /&gt;
=== How to update from a fix in a ... ===&lt;br /&gt;
&lt;br /&gt;
* Template file: save your text edit and refresh page&lt;br /&gt;
* Javascript file: save your text edit and refresh page (or leave page and come back)&lt;br /&gt;
* Builder scripts: save your text edit and restart Toaster (&amp;quot;localhostbecontroller.py&amp;quot;, &amp;quot;buildinfohelper.py&amp;quot;, &amp;quot;toasterui.py&amp;quot;, &amp;quot;bbcontroller.py&amp;quot;,...)&lt;br /&gt;
* Views and URLs: save your text edit and refresh page&lt;br /&gt;
* Model class members: save your text edit and restart Toaster. You may also need a migration file.&lt;br /&gt;
* Model method: save your text edit and refresh page, else restart Toaster&lt;br /&gt;
* Fixture file (settings.xml, poky.xml, custom.xml): delete Toaster database and restart fresh&lt;br /&gt;
&lt;br /&gt;
=== Where to debug ... ===&lt;br /&gt;
&lt;br /&gt;
* Toaster start and stop, database init&lt;br /&gt;
** bin/toaster&lt;br /&gt;
* Project Defaults (Default machine, distro, layers, ...)&lt;br /&gt;
** bldcontrol/management/commands/checksettings.py&lt;br /&gt;
** orm/fixtures/*.xml&lt;br /&gt;
* Layer Index content (Available machines, distros, layers, ...)&lt;br /&gt;
** orm/management/commands/lsupdates.py&lt;br /&gt;
* Build cloning&lt;br /&gt;
** bldcontrol/localhostbecontroller.py&lt;br /&gt;
* Build start&lt;br /&gt;
** bldcontrol/localhostbecontroller.py&lt;br /&gt;
* URL mappings&lt;br /&gt;
** toastergui/urls.py&lt;br /&gt;
* Views&lt;br /&gt;
** toastergui/views.py&lt;br /&gt;
** toastergui/templates/*&lt;br /&gt;
* Toaster Tables (Layers, Distros, Machines, ...)&lt;br /&gt;
** toastergui/tables.py&lt;br /&gt;
** toastergui/static/js/libtoaster.js&lt;br /&gt;
* Events&lt;br /&gt;
** meta/classes/toaster.bbclass -&amp;gt; &lt;br /&gt;
** lib/bb/ui/toasterui.py -&amp;gt; &lt;br /&gt;
** lib/bb/ui/buildinfohelper.py -&amp;gt; &lt;br /&gt;
** orm/models.py et. al.&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=YP_Summit_May_2021&amp;diff=84674</id>
		<title>YP Summit May 2021</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=YP_Summit_May_2021&amp;diff=84674"/>
		<updated>2021-05-13T19:31:03Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: Created page with &amp;quot;This page contains slides for the talks in the Yocto Project Summit, May 2021   YP DevDay Virtual home page is here: [https://www.yoctoproject.org/yocto-project-virtual-summit...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains slides for the talks in the Yocto Project Summit, May 2021&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
YP DevDay Virtual home page is here: [https://www.yoctoproject.org/yocto-project-virtual-summit-2021/ https://www.yoctoproject.org/yocto-project-virtual-summit-2021/] &lt;br /&gt;
&lt;br /&gt;
== Slides ==&lt;br /&gt;
&lt;br /&gt;
* Presenter Slides&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Conference_Production&amp;diff=84579</id>
		<title>Yocto Conference Production</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Conference_Production&amp;diff=84579"/>
		<updated>2021-03-22T18:05:33Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: /* High Level Calendar */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Producing a Yocto Project Conference&lt;br /&gt;
&lt;br /&gt;
This page is intended to be a guide on how Yocto Project conferences (e.g. ELC and ELCE), Developer Days, and Summits are designed and executed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== High Level Calendar ==&lt;br /&gt;
&lt;br /&gt;
* Three months out&lt;br /&gt;
** Set the tentative dates&lt;br /&gt;
** Make arrangements with the conference for booth and DevDay/Summit registration&lt;br /&gt;
** Set up a preliminary budget, get tentative approval&lt;br /&gt;
** Setup flights and hotels&lt;br /&gt;
* Two months out&lt;br /&gt;
** Close the contracts&lt;br /&gt;
** Advertise event&lt;br /&gt;
** Announce the Call for Papers (CFP)&lt;br /&gt;
** Gather/order booth swag and collateral&lt;br /&gt;
** Setup conference page at Yocto home page&lt;br /&gt;
* One month out&lt;br /&gt;
** Announce presenters for DevDay/Summit&lt;br /&gt;
** Insure that conference registration is fully up&lt;br /&gt;
* One week out&lt;br /&gt;
** Confirm that presenter papers are coming together&lt;br /&gt;
** Confirm booth host schedule&lt;br /&gt;
&lt;br /&gt;
== Conference ==&lt;br /&gt;
&lt;br /&gt;
* Conferences are ideal ways to:&lt;br /&gt;
** Have an anchor for the booth, DevDay/Summit&lt;br /&gt;
** Advertise the project&lt;br /&gt;
** Connect with our community&lt;br /&gt;
** Connect between each other&lt;br /&gt;
** Advertise the DevDay/Summit&lt;br /&gt;
** Manage the DevDay/Summit registration and money&lt;br /&gt;
&lt;br /&gt;
We have been working primarily with the Embedded Linux Conference, sponsored by the project&#039;s parent organization The Linux Foundation. We have typically sponsored both a booth and a Yocto Project DevDay/Summit in conjunction with ELC/ELCE, given its high synergy.&lt;br /&gt;
&lt;br /&gt;
=== Physical Conference ===&lt;br /&gt;
&lt;br /&gt;
* Yocto Project must sign up for a booth&lt;br /&gt;
** Typically we join at the Bronze level, which provides a basic booth at a reasonable cost&lt;br /&gt;
** The contract must be negotiated several months ahead&lt;br /&gt;
** There is typically no penalty for later registration, but it could result in a late posting of the DevDay/Summit advertising and registration page, which can potentially affect attendance&lt;br /&gt;
* The Yocto Project booth pop-up&lt;br /&gt;
** Local the booth pop-up (currently with David) &lt;br /&gt;
** The booth travels as normal luggage, about 30-40 pounds&lt;br /&gt;
** The booth takes about 20 minutes to assemble and disassemble&lt;br /&gt;
* Booth posters &lt;br /&gt;
** If possible it is good to bring a collapsible stand, so that posters of the daily schedule of Yocto Project related talks can be advertised, in addition to the DevDay/Summit&lt;br /&gt;
** If no stand is present, then posters hanging in front the the booth pop-up and stand-up displays on the booth itself can be used&lt;br /&gt;
** There is a requirement to display the primary Yocto Project members (e.g. Platinum) at the booth&lt;br /&gt;
* Booth Content&lt;br /&gt;
** There should be handouts on the booth, for example:&lt;br /&gt;
*** Cards&lt;br /&gt;
*** Yocti&lt;br /&gt;
*** Swag (USB battery packs, spinners, pens, T-shirts&lt;br /&gt;
** T-Shirts are great giveaways and great live conference advertisements, but do require cost, transportation, and size distribution considerations&lt;br /&gt;
** Hand outs&lt;br /&gt;
*** It is good to have brochures that provide technical content about the project&lt;br /&gt;
*** We currently have a short form (~ 4 pages, and an older long form ~ pages with testimonials)&lt;br /&gt;
** Display computer&lt;br /&gt;
*** We often have a display running from a laptop or NUC. This can provide live browsing of the Yocto Project home page, documentation, Layer Index, DevDay/Summit home page. Visitors sometimes suggest web pages of their own as part of their questions.&lt;br /&gt;
** Demos&lt;br /&gt;
*** We try to have live demos at the booth, to attract visitors and stimulate conversations&lt;br /&gt;
*** Examples include Software Defined Radio, routers, robots, and once a race car&lt;br /&gt;
** Booth Hours&lt;br /&gt;
*** We usually get about 4 hours the day before the conference floor opens to prepare our booth&lt;br /&gt;
*** We typically need the booth attended 8 hours a day, in particular in between sessions and during lunch&lt;br /&gt;
*** ELC/ELCE typically have a special booth walk evening, where the entire conference is at the booths for 2 to 3 hours  &lt;br /&gt;
** Booth Attendance&lt;br /&gt;
*** It is important to arrange a schedule of booth watchers, so that we look organized and can be available to catch visitors&lt;br /&gt;
*** The booth schedule is typically 2 people per 2 hour slots across the open hours&lt;br /&gt;
*** One of the best part of the conference is that Yocto Project people generally hang around the booth even if they are not actually in the booth, so it is often easy to find an expert if a visitor asks a hard question&lt;br /&gt;
*** When the booth is closed each evening, the loose content must be locked up in the booth, and the key must go to someone whom is guaranteed to open the booth the next morning&lt;br /&gt;
** Booth Interaction&lt;br /&gt;
*** Each booth is given a badge scanner so that we can catch the visitors, This information is very important to the Yocto Project Advocacy Committee&lt;br /&gt;
*** Generally people are pleased to allow you to scan their badges, so no worries&lt;br /&gt;
*** We often offer the swag in exchange for the badge scan, to make this more efficient&lt;br /&gt;
*** There will generally be 20% of the people who come just for the swag, and that is ok&lt;br /&gt;
&lt;br /&gt;
=== Virtual Conference ===&lt;br /&gt;
&lt;br /&gt;
Virtual conferences share many of the same aspects of physical conferences. Here are the differences.&lt;br /&gt;
&lt;br /&gt;
* Booth Setup&lt;br /&gt;
** The conference will set up accounts a month ahead so that the virtual booth can be customized&lt;br /&gt;
** The conference will typically have a walk through the weeks before to insure that the booths are coming together and any questions can be answered&lt;br /&gt;
** Virtual booths are generally very limited (and not just because of the Bronze level), so one make the best that one can&lt;br /&gt;
** The virtual booth will typically require:&lt;br /&gt;
*** A central picture (and/or movie)&lt;br /&gt;
*** Links that are customized to any attached documents or web pages&lt;br /&gt;
*** A banner, good for messages-of-the-day (like relevant talks)&lt;br /&gt;
* Booth swag&lt;br /&gt;
** The booth &amp;quot;posters&amp;quot; will be present either on the virtual booth&#039;s page, or as downloadable documents&lt;br /&gt;
** All of the give away content will be electronic documents, including the brochures&lt;br /&gt;
** While we cannot physically give away swag, there are other possibilities like themed T-shirts that can be ordered directly by the visitors, at perhaps a discount&lt;br /&gt;
* Booth Attendance&lt;br /&gt;
** There is still the need to have the booth coverage managed for the same reason as a physical booth&lt;br /&gt;
** In place of physical interaction with visitors, the conferences usually include some form of live blog between the booth managers and visitors. This interface is alas usually very limited and clumsy, so it is often limited to basic greetings for forwarding people to the right documents and to the DevDay/Summit, and directing visitors to the YP slack channel&lt;br /&gt;
** The booth is still important for the basic reasons of advertising for the project and the DevDay/Summit&lt;br /&gt;
** In the recent virtual summits, we have still received a virtual visitor list and generally what they looked at, which is evidence that the booth is visited more that what the blog would reflect&lt;br /&gt;
* Slack Channel&lt;br /&gt;
** We have found that a separate Slack channel is very effective&lt;br /&gt;
** We usually set up a technical stream and a separate gossip stream (to not overwhelm visitors)&lt;br /&gt;
** That interface is much more flexible and friendly&lt;br /&gt;
** It is also persistent across and after the conference &lt;br /&gt;
* Zoom Channel&lt;br /&gt;
** We have experimented with setting up a separate Zoom channel for direct conversations with visitors, but it was not really used. The slack channel ended up much more useful&lt;br /&gt;
&lt;br /&gt;
== Summit ==&lt;br /&gt;
&lt;br /&gt;
=== Developer Day versus Summit ===&lt;br /&gt;
&lt;br /&gt;
* DevDays&lt;br /&gt;
** Typically a single day, generally for the smaller ELC NA conference&lt;br /&gt;
** The speakers historically were directly invited, though this is moving to a CFP&lt;br /&gt;
** Ideally there are two tracks, the Beginning Class and the Intermediate Class&lt;br /&gt;
* Summits &lt;br /&gt;
** Typically two days, generally for the larger ELC Europe conference&lt;br /&gt;
** The speakers invited via CFP&lt;br /&gt;
** Beginning Track:&lt;br /&gt;
*** Day 1: Beginning Class&lt;br /&gt;
*** Day 2: Hands on Class&lt;br /&gt;
** Intermediate Track:&lt;br /&gt;
*** Day 1: Advanced and Intermediate Presentations&lt;br /&gt;
*** Day 2: Intermediate Presentations&lt;br /&gt;
&lt;br /&gt;
=== Budget and Costs ===&lt;br /&gt;
&lt;br /&gt;
It is important to create a budget early and get approval from the YP treasurer, especially around the high cost items like travel and lodging. All sample costs below are in $USD.&lt;br /&gt;
&lt;br /&gt;
* Conference fees, booth registration&lt;br /&gt;
** Typically a few hundred dollars at the Bronze level&lt;br /&gt;
* DevDay/Summit Attendee Registration&lt;br /&gt;
** This is contracted via the ELC event, $2-$3 per person, 2%-3% credit card transaction fees&lt;br /&gt;
* DevDay/Summit Room Rentals (physical events)&lt;br /&gt;
** Room Rentals are typically via the event organizer and would be part of the contract.&lt;br /&gt;
** We have for some events (e.g. ELCE Prague) rented our own rooms from nearby hotels&lt;br /&gt;
** We have also had member companies sponsor the location (e.g. several ELC Portland events by Mentor Graphics)&lt;br /&gt;
** In recent years we have had to pass on the Beginning Class for physical events, due both the high cost and lack of room availability&lt;br /&gt;
** For virtual events we have used sponsored Zoom accounts, so there is no incremental costs for the additional tracks&lt;br /&gt;
* Travel and Lodging&lt;br /&gt;
** Typically core people have their travel and hotel costs covered&lt;br /&gt;
** Core people include for example the YP Architect, the booth manager (Advocacy lead), the DevDay/Summit manager (Training Lead)&lt;br /&gt;
** These costs depend on the distance traveled&lt;br /&gt;
* Class Accounts&lt;br /&gt;
** These are the virtual server accounts used for the hands-on classes&lt;br /&gt;
** The class accounts generally cost around $30 per student, though we have had the benefit of full or partial in-kind donations in the past&lt;br /&gt;
* DevDay/Summit Call For Papers&lt;br /&gt;
** We have moved to Pretalx to manage the CFPs, at a cost of ~$200 per event&lt;br /&gt;
* DevDay/Summit attendee Registration Fees&lt;br /&gt;
** For physical events it as been in the $200 range, to help cover the conference fees, registration costs, room rentals, and class accounts&lt;br /&gt;
** For virtual events it has been in the $40 to $50 range to cover the class accounts and CFP management&lt;br /&gt;
** We may in the future separate the Hands-on classes as a distinct track and added cost, just to isolate the class account fees&lt;br /&gt;
* Post event speaker gifts&lt;br /&gt;
** We try to set aside a small gift to the presenters as a thank you to their donated time, so that needs to be included in the budget&lt;br /&gt;
&lt;br /&gt;
=== Physical Summit ===&lt;br /&gt;
&lt;br /&gt;
* Initial Organization&lt;br /&gt;
* Budget&lt;br /&gt;
* CFP Process&lt;br /&gt;
* Speaker Management&lt;br /&gt;
* Presentation Types &lt;br /&gt;
** Keynote&lt;br /&gt;
*** We usually set aside the first 15 minutes or so for a joint keynote to all attendees, typically given by the Community Manager or the Advocacy Lead&lt;br /&gt;
*** We also sometimes have the Keynote given separately to the different tracks when it is not feasible to have every join in one space&lt;br /&gt;
** Short Talk&lt;br /&gt;
*** Usually a 30 minute slot, touching on a topic&lt;br /&gt;
** Extended Talk&lt;br /&gt;
*** Usually a 45 minute slot (60 minutes max), allowing a deeper dive&lt;br /&gt;
** Hands On Class&lt;br /&gt;
*** Usually a 90 minute to 2 hour slot, allowing time for interaction and instruction&lt;br /&gt;
** Post Event Hangout&lt;br /&gt;
*** It has been beneficial to set aside a hangout space after the last day, either in the same space if possible (in the room or in Slack), or at a rendezvous near by. These have gone from 30-60 minutes in the room to several hours after the virtual events&lt;br /&gt;
* Daily Schedule&lt;br /&gt;
** Talks and Classes&lt;br /&gt;
** Breaks&lt;br /&gt;
*** We typically have a mid-morning break and a mid-afternoon break&lt;br /&gt;
** Lunch&lt;br /&gt;
*** Lunch is typically one hour, and is usually sponsored by YP or is donated by a member company &lt;br /&gt;
* Class Accounts&lt;br /&gt;
** These are the virtual server accounts used for the hands-on classes&lt;br /&gt;
** They are typically based on a recent Ubuntu release&lt;br /&gt;
** These are created and managed by Michael&lt;br /&gt;
** The class images are typically created by the DeyDay/Summit manager (David), based on the class content&lt;br /&gt;
* Site visits&lt;br /&gt;
* WIFI Considerations&lt;br /&gt;
* Class Reviews&lt;br /&gt;
* Post Event Activities&lt;br /&gt;
&lt;br /&gt;
=== Virtual Summit ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Considerations and Practicalities ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Past Conference Data ==&lt;br /&gt;
&lt;br /&gt;
=== Summer 2021 (Self Sponsored) ===&lt;br /&gt;
&lt;br /&gt;
In progress...&lt;br /&gt;
&lt;br /&gt;
=== Fall 2020 Virtual (ELCE Dublin) ===&lt;br /&gt;
&lt;br /&gt;
* Summit:&lt;br /&gt;
** Day 1:&lt;br /&gt;
*** Beginning Class: ~100&lt;br /&gt;
*** Intermediate Class: ~150&lt;br /&gt;
** Day 2:&lt;br /&gt;
*** Hands On Classes: ~50&lt;br /&gt;
*** Intermediate Class: ~150&lt;br /&gt;
&lt;br /&gt;
=== Summmer 2020 Virtual (ELC Austin) ===&lt;br /&gt;
&lt;br /&gt;
* Conference Presentations YP-related&lt;br /&gt;
** Monday:&lt;br /&gt;
*** LTS: 238 peak attendance, 377 registered&lt;br /&gt;
*** BoF: 157 peak attendance&lt;br /&gt;
*** Slack: 238&lt;br /&gt;
&lt;br /&gt;
* DevDay:&lt;br /&gt;
** Class: Start=173,Peak=181,End=164&lt;br /&gt;
*** Slack:&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Conference_Production&amp;diff=84578</id>
		<title>Yocto Conference Production</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Conference_Production&amp;diff=84578"/>
		<updated>2021-03-22T18:02:15Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Producing a Yocto Project Conference&lt;br /&gt;
&lt;br /&gt;
This page is intended to be a guide on how Yocto Project conferences (e.g. ELC and ELCE), Developer Days, and Summits are designed and executed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== High Level Calendar ==&lt;br /&gt;
&lt;br /&gt;
* Three months out&lt;br /&gt;
** Set the tentative dates&lt;br /&gt;
** Make arrangements with the conference for booth and DevDay/Summit registration&lt;br /&gt;
** Set up a preliminary budget, get tentative approval&lt;br /&gt;
** Setup flights and hotels&lt;br /&gt;
* Two months out&lt;br /&gt;
** Advertise event&lt;br /&gt;
** Announce the Call for Papers (CFP)&lt;br /&gt;
** Gather/order booth swag and collateral&lt;br /&gt;
** Setup conference page at Yocto home page&lt;br /&gt;
* One month out&lt;br /&gt;
** Announce presenters for DevDay/Summit&lt;br /&gt;
** Insure that conference registration is fully up&lt;br /&gt;
* One week out&lt;br /&gt;
** Confirm that presenter papers are coming together&lt;br /&gt;
** Confirm booth host schedule&lt;br /&gt;
&lt;br /&gt;
== Conference ==&lt;br /&gt;
&lt;br /&gt;
* Conferences are ideal ways to:&lt;br /&gt;
** Have an anchor for the booth, DevDay/Summit&lt;br /&gt;
** Advertise the project&lt;br /&gt;
** Connect with our community&lt;br /&gt;
** Connect between each other&lt;br /&gt;
** Advertise the DevDay/Summit&lt;br /&gt;
** Manage the DevDay/Summit registration and money&lt;br /&gt;
&lt;br /&gt;
We have been working primarily with the Embedded Linux Conference, sponsored by the project&#039;s parent organization The Linux Foundation. We have typically sponsored both a booth and a Yocto Project DevDay/Summit in conjunction with ELC/ELCE, given its high synergy.&lt;br /&gt;
&lt;br /&gt;
=== Physical Conference ===&lt;br /&gt;
&lt;br /&gt;
* Yocto Project must sign up for a booth&lt;br /&gt;
** Typically we join at the Bronze level, which provides a basic booth at a reasonable cost&lt;br /&gt;
** The contract must be negotiated several months ahead&lt;br /&gt;
** There is typically no penalty for later registration, but it could result in a late posting of the DevDay/Summit advertising and registration page, which can potentially affect attendance&lt;br /&gt;
* The Yocto Project booth pop-up&lt;br /&gt;
** Local the booth pop-up (currently with David) &lt;br /&gt;
** The booth travels as normal luggage, about 30-40 pounds&lt;br /&gt;
** The booth takes about 20 minutes to assemble and disassemble&lt;br /&gt;
* Booth posters &lt;br /&gt;
** If possible it is good to bring a collapsible stand, so that posters of the daily schedule of Yocto Project related talks can be advertised, in addition to the DevDay/Summit&lt;br /&gt;
** If no stand is present, then posters hanging in front the the booth pop-up and stand-up displays on the booth itself can be used&lt;br /&gt;
** There is a requirement to display the primary Yocto Project members (e.g. Platinum) at the booth&lt;br /&gt;
* Booth Content&lt;br /&gt;
** There should be handouts on the booth, for example:&lt;br /&gt;
*** Cards&lt;br /&gt;
*** Yocti&lt;br /&gt;
*** Swag (USB battery packs, spinners, pens, T-shirts&lt;br /&gt;
** T-Shirts are great giveaways and great live conference advertisements, but do require cost, transportation, and size distribution considerations&lt;br /&gt;
** Hand outs&lt;br /&gt;
*** It is good to have brochures that provide technical content about the project&lt;br /&gt;
*** We currently have a short form (~ 4 pages, and an older long form ~ pages with testimonials)&lt;br /&gt;
** Display computer&lt;br /&gt;
*** We often have a display running from a laptop or NUC. This can provide live browsing of the Yocto Project home page, documentation, Layer Index, DevDay/Summit home page. Visitors sometimes suggest web pages of their own as part of their questions.&lt;br /&gt;
** Demos&lt;br /&gt;
*** We try to have live demos at the booth, to attract visitors and stimulate conversations&lt;br /&gt;
*** Examples include Software Defined Radio, routers, robots, and once a race car&lt;br /&gt;
** Booth Hours&lt;br /&gt;
*** We usually get about 4 hours the day before the conference floor opens to prepare our booth&lt;br /&gt;
*** We typically need the booth attended 8 hours a day, in particular in between sessions and during lunch&lt;br /&gt;
*** ELC/ELCE typically have a special booth walk evening, where the entire conference is at the booths for 2 to 3 hours  &lt;br /&gt;
** Booth Attendance&lt;br /&gt;
*** It is important to arrange a schedule of booth watchers, so that we look organized and can be available to catch visitors&lt;br /&gt;
*** The booth schedule is typically 2 people per 2 hour slots across the open hours&lt;br /&gt;
*** One of the best part of the conference is that Yocto Project people generally hang around the booth even if they are not actually in the booth, so it is often easy to find an expert if a visitor asks a hard question&lt;br /&gt;
*** When the booth is closed each evening, the loose content must be locked up in the booth, and the key must go to someone whom is guaranteed to open the booth the next morning&lt;br /&gt;
** Booth Interaction&lt;br /&gt;
*** Each booth is given a badge scanner so that we can catch the visitors, This information is very important to the Yocto Project Advocacy Committee&lt;br /&gt;
*** Generally people are pleased to allow you to scan their badges, so no worries&lt;br /&gt;
*** We often offer the swag in exchange for the badge scan, to make this more efficient&lt;br /&gt;
*** There will generally be 20% of the people who come just for the swag, and that is ok&lt;br /&gt;
&lt;br /&gt;
=== Virtual Conference ===&lt;br /&gt;
&lt;br /&gt;
Virtual conferences share many of the same aspects of physical conferences. Here are the differences.&lt;br /&gt;
&lt;br /&gt;
* Booth Setup&lt;br /&gt;
** The conference will set up accounts a month ahead so that the virtual booth can be customized&lt;br /&gt;
** The conference will typically have a walk through the weeks before to insure that the booths are coming together and any questions can be answered&lt;br /&gt;
** Virtual booths are generally very limited (and not just because of the Bronze level), so one make the best that one can&lt;br /&gt;
** The virtual booth will typically require:&lt;br /&gt;
*** A central picture (and/or movie)&lt;br /&gt;
*** Links that are customized to any attached documents or web pages&lt;br /&gt;
*** A banner, good for messages-of-the-day (like relevant talks)&lt;br /&gt;
* Booth swag&lt;br /&gt;
** The booth &amp;quot;posters&amp;quot; will be present either on the virtual booth&#039;s page, or as downloadable documents&lt;br /&gt;
** All of the give away content will be electronic documents, including the brochures&lt;br /&gt;
** While we cannot physically give away swag, there are other possibilities like themed T-shirts that can be ordered directly by the visitors, at perhaps a discount&lt;br /&gt;
* Booth Attendance&lt;br /&gt;
** There is still the need to have the booth coverage managed for the same reason as a physical booth&lt;br /&gt;
** In place of physical interaction with visitors, the conferences usually include some form of live blog between the booth managers and visitors. This interface is alas usually very limited and clumsy, so it is often limited to basic greetings for forwarding people to the right documents and to the DevDay/Summit, and directing visitors to the YP slack channel&lt;br /&gt;
** The booth is still important for the basic reasons of advertising for the project and the DevDay/Summit&lt;br /&gt;
** In the recent virtual summits, we have still received a virtual visitor list and generally what they looked at, which is evidence that the booth is visited more that what the blog would reflect&lt;br /&gt;
* Slack Channel&lt;br /&gt;
** We have found that a separate Slack channel is very effective&lt;br /&gt;
** We usually set up a technical stream and a separate gossip stream (to not overwhelm visitors)&lt;br /&gt;
** That interface is much more flexible and friendly&lt;br /&gt;
** It is also persistent across and after the conference &lt;br /&gt;
* Zoom Channel&lt;br /&gt;
** We have experimented with setting up a separate Zoom channel for direct conversations with visitors, but it was not really used. The slack channel ended up much more useful&lt;br /&gt;
&lt;br /&gt;
== Summit ==&lt;br /&gt;
&lt;br /&gt;
=== Developer Day versus Summit ===&lt;br /&gt;
&lt;br /&gt;
* DevDays&lt;br /&gt;
** Typically a single day, generally for the smaller ELC NA conference&lt;br /&gt;
** The speakers historically were directly invited, though this is moving to a CFP&lt;br /&gt;
** Ideally there are two tracks, the Beginning Class and the Intermediate Class&lt;br /&gt;
* Summits &lt;br /&gt;
** Typically two days, generally for the larger ELC Europe conference&lt;br /&gt;
** The speakers invited via CFP&lt;br /&gt;
** Beginning Track:&lt;br /&gt;
*** Day 1: Beginning Class&lt;br /&gt;
*** Day 2: Hands on Class&lt;br /&gt;
** Intermediate Track:&lt;br /&gt;
*** Day 1: Advanced and Intermediate Presentations&lt;br /&gt;
*** Day 2: Intermediate Presentations&lt;br /&gt;
&lt;br /&gt;
=== Budget and Costs ===&lt;br /&gt;
&lt;br /&gt;
It is important to create a budget early and get approval from the YP treasurer, especially around the high cost items like travel and lodging. All sample costs below are in $USD.&lt;br /&gt;
&lt;br /&gt;
* Conference fees, booth registration&lt;br /&gt;
** Typically a few hundred dollars at the Bronze level&lt;br /&gt;
* DevDay/Summit Attendee Registration&lt;br /&gt;
** This is contracted via the ELC event, $2-$3 per person, 2%-3% credit card transaction fees&lt;br /&gt;
* DevDay/Summit Room Rentals (physical events)&lt;br /&gt;
** Room Rentals are typically via the event organizer and would be part of the contract.&lt;br /&gt;
** We have for some events (e.g. ELCE Prague) rented our own rooms from nearby hotels&lt;br /&gt;
** We have also had member companies sponsor the location (e.g. several ELC Portland events by Mentor Graphics)&lt;br /&gt;
** In recent years we have had to pass on the Beginning Class for physical events, due both the high cost and lack of room availability&lt;br /&gt;
** For virtual events we have used sponsored Zoom accounts, so there is no incremental costs for the additional tracks&lt;br /&gt;
* Travel and Lodging&lt;br /&gt;
** Typically core people have their travel and hotel costs covered&lt;br /&gt;
** Core people include for example the YP Architect, the booth manager (Advocacy lead), the DevDay/Summit manager (Training Lead)&lt;br /&gt;
** These costs depend on the distance traveled&lt;br /&gt;
* Class Accounts&lt;br /&gt;
** These are the virtual server accounts used for the hands-on classes&lt;br /&gt;
** The class accounts generally cost around $30 per student, though we have had the benefit of full or partial in-kind donations in the past&lt;br /&gt;
* DevDay/Summit Call For Papers&lt;br /&gt;
** We have moved to Pretalx to manage the CFPs, at a cost of ~$200 per event&lt;br /&gt;
* DevDay/Summit attendee Registration Fees&lt;br /&gt;
** For physical events it as been in the $200 range, to help cover the conference fees, registration costs, room rentals, and class accounts&lt;br /&gt;
** For virtual events it has been in the $40 to $50 range to cover the class accounts and CFP management&lt;br /&gt;
** We may in the future separate the Hands-on classes as a distinct track and added cost, just to isolate the class account fees&lt;br /&gt;
* Post event speaker gifts&lt;br /&gt;
** We try to set aside a small gift to the presenters as a thank you to their donated time, so that needs to be included in the budget&lt;br /&gt;
&lt;br /&gt;
=== Physical Summit ===&lt;br /&gt;
&lt;br /&gt;
* Initial Organization&lt;br /&gt;
* Budget&lt;br /&gt;
* CFP Process&lt;br /&gt;
* Speaker Management&lt;br /&gt;
* Presentation Types &lt;br /&gt;
** Keynote&lt;br /&gt;
*** We usually set aside the first 15 minutes or so for a joint keynote to all attendees, typically given by the Community Manager or the Advocacy Lead&lt;br /&gt;
*** We also sometimes have the Keynote given separately to the different tracks when it is not feasible to have every join in one space&lt;br /&gt;
** Short Talk&lt;br /&gt;
*** Usually a 30 minute slot, touching on a topic&lt;br /&gt;
** Extended Talk&lt;br /&gt;
*** Usually a 45 minute slot (60 minutes max), allowing a deeper dive&lt;br /&gt;
** Hands On Class&lt;br /&gt;
*** Usually a 90 minute to 2 hour slot, allowing time for interaction and instruction&lt;br /&gt;
** Post Event Hangout&lt;br /&gt;
*** It has been beneficial to set aside a hangout space after the last day, either in the same space if possible (in the room or in Slack), or at a rendezvous near by. These have gone from 30-60 minutes in the room to several hours after the virtual events&lt;br /&gt;
* Daily Schedule&lt;br /&gt;
** Talks and Classes&lt;br /&gt;
** Breaks&lt;br /&gt;
*** We typically have a mid-morning break and a mid-afternoon break&lt;br /&gt;
** Lunch&lt;br /&gt;
*** Lunch is typically one hour, and is usually sponsored by YP or is donated by a member company &lt;br /&gt;
* Class Accounts&lt;br /&gt;
** These are the virtual server accounts used for the hands-on classes&lt;br /&gt;
** They are typically based on a recent Ubuntu release&lt;br /&gt;
** These are created and managed by Michael&lt;br /&gt;
** The class images are typically created by the DeyDay/Summit manager (David), based on the class content&lt;br /&gt;
* Site visits&lt;br /&gt;
* WIFI Considerations&lt;br /&gt;
* Class Reviews&lt;br /&gt;
* Post Event Activities&lt;br /&gt;
&lt;br /&gt;
=== Virtual Summit ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Considerations and Practicalities ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Past Conference Data ==&lt;br /&gt;
&lt;br /&gt;
=== Summer 2021 (Self Sponsored) ===&lt;br /&gt;
&lt;br /&gt;
In progress...&lt;br /&gt;
&lt;br /&gt;
=== Fall 2020 Virtual (ELCE Dublin) ===&lt;br /&gt;
&lt;br /&gt;
* Summit:&lt;br /&gt;
** Day 1:&lt;br /&gt;
*** Beginning Class: ~100&lt;br /&gt;
*** Intermediate Class: ~150&lt;br /&gt;
** Day 2:&lt;br /&gt;
*** Hands On Classes: ~50&lt;br /&gt;
*** Intermediate Class: ~150&lt;br /&gt;
&lt;br /&gt;
=== Summmer 2020 Virtual (ELC Austin) ===&lt;br /&gt;
&lt;br /&gt;
* Conference Presentations YP-related&lt;br /&gt;
** Monday:&lt;br /&gt;
*** LTS: 238 peak attendance, 377 registered&lt;br /&gt;
*** BoF: 157 peak attendance&lt;br /&gt;
*** Slack: 238&lt;br /&gt;
&lt;br /&gt;
* DevDay:&lt;br /&gt;
** Class: Start=173,Peak=181,End=164&lt;br /&gt;
*** Slack:&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Conference_Production&amp;diff=84577</id>
		<title>Yocto Conference Production</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Conference_Production&amp;diff=84577"/>
		<updated>2021-03-22T17:38:03Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: /* Budget and Costs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Producing a Yocto Project Conference&lt;br /&gt;
&lt;br /&gt;
This page is intended to be a guide on how Yocto Project conferences (e.g. ELC and ELCE), Developer Days, and Summits are designed and executed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== High Level Calendar ==&lt;br /&gt;
&lt;br /&gt;
* Three months out&lt;br /&gt;
** Set the tentative dates&lt;br /&gt;
** Make arrangements with the conference for booth and DevDay/Summit registration&lt;br /&gt;
** Set up a preliminary budget, get tentative approval&lt;br /&gt;
** Setup flights and hotels&lt;br /&gt;
* Two months out&lt;br /&gt;
** Advertise event&lt;br /&gt;
** Announce the Call for Papers (CFP)&lt;br /&gt;
** Gather/order booth swag and collateral&lt;br /&gt;
** Setup conference page at Yocto home page&lt;br /&gt;
* One month out&lt;br /&gt;
** Announce presenters for DevDay/Summit&lt;br /&gt;
** Insure that conference registration is fully up&lt;br /&gt;
* One week out&lt;br /&gt;
** Confirm that presenter papers are coming together&lt;br /&gt;
** Confirm booth host schedule&lt;br /&gt;
&lt;br /&gt;
== Conference ==&lt;br /&gt;
&lt;br /&gt;
* Conferences are ideal ways to:&lt;br /&gt;
** Have an anchor for the booth, DevDay/Summit&lt;br /&gt;
** Advertise the project&lt;br /&gt;
** Connect with our community&lt;br /&gt;
** Connect between each other&lt;br /&gt;
** Advertise the DevDay/Summit&lt;br /&gt;
** Manage the DevDay/Summit registration and money&lt;br /&gt;
&lt;br /&gt;
We have been working primarily with the Embedded Linux Conference, sponsored by the project&#039;s parent organization The Linux Foundation. We have typically sponsored both a booth and a Yocto Project DevDay/Summit in conjunction with ELC/ELCE, given its high synergy.&lt;br /&gt;
&lt;br /&gt;
=== Physical Conference ===&lt;br /&gt;
&lt;br /&gt;
* Yocto Project must sign up for a booth&lt;br /&gt;
** Typically we join at the Bronze level, which provides a basic booth at a reasonable cost&lt;br /&gt;
** The contract must be negotiated several months ahead&lt;br /&gt;
** There is typically no penalty for later registration, but it could result in a late posting of the DevDay/Summit advertising and registration page, which can potentially affect attendance&lt;br /&gt;
* The Yocto Project booth pop-up&lt;br /&gt;
** Local the booth pop-up (currently with David) &lt;br /&gt;
** The booth travels as normal luggage, about 30-40 pounds&lt;br /&gt;
** The booth takes about 20 minutes to assemble and disassemble&lt;br /&gt;
* Booth posters &lt;br /&gt;
** If possible it is good to bring a collapsible stand, so that posters of the daily schedule of Yocto Project related talks can be advertised, in addition to the DevDay/Summit&lt;br /&gt;
** If no stand is present, then posters hanging in front the the booth pop-up and stand-up displays on the booth itself can be used&lt;br /&gt;
** There is a requirement to display the primary Yocto Project members (e.g. Platinum) at the booth&lt;br /&gt;
* Booth Content&lt;br /&gt;
** There should be handouts on the booth, for example:&lt;br /&gt;
*** Cards&lt;br /&gt;
*** Yocti&lt;br /&gt;
*** Swag (USB battery packs, spinners, pens, T-shirts&lt;br /&gt;
** T-Shirts are great giveaways and great live conference advertisements, but do require cost, transportation, and size distribution considerations&lt;br /&gt;
** Hand outs&lt;br /&gt;
*** It is good to have brochures that provide technical content about the project&lt;br /&gt;
*** We currently have a short form (~ 4 pages, and an older long form ~ pages with testimonials)&lt;br /&gt;
** Display computer&lt;br /&gt;
*** We often have a display running from a laptop or NUC. This can provide live browsing of the Yocto Project home page, documentation, Layer Index, DevDay/Summit home page. Visitors sometimes suggest web pages of their own as part of their questions.&lt;br /&gt;
** Demos&lt;br /&gt;
*** We try to have live demos at the booth, to attract visitors and stimulate conversations&lt;br /&gt;
*** Examples include Software Defined Radio, routers, robots, and once a race car&lt;br /&gt;
** Booth Hours&lt;br /&gt;
*** We usually get about 4 hours the day before the conference floor opens to prepare our booth&lt;br /&gt;
*** We typically need the booth attended 8 hours a day, in particular in between sessions and during lunch&lt;br /&gt;
*** ELC/ELCE typically have a special booth walk evening, where the entire conference is at the booths for 2 to 3 hours  &lt;br /&gt;
** Booth Attendance&lt;br /&gt;
*** It is important to arrange a schedule of booth watchers, so that we look organized and can be available to catch visitors&lt;br /&gt;
*** The booth schedule is typically 2 people per 2 hour slots across the open hours&lt;br /&gt;
*** One of the best part of the conference is that Yocto Project people generally hang around the booth even if they are not actually in the booth, so it is often easy to find an expert if a visitor asks a hard question&lt;br /&gt;
*** When the booth is closed each evening, the loose content must be locked up in the booth, and the key must go to someone whom is guaranteed to open the booth the next morning&lt;br /&gt;
** Booth Interaction&lt;br /&gt;
*** Each booth is given a badge scanner so that we can catch the visitors, This information is very important to the Yocto Project Advocacy Committee&lt;br /&gt;
*** Generally people are pleased to allow you to scan their badges, so no worries&lt;br /&gt;
*** We often offer the swag in exchange for the badge scan, to make this more efficient&lt;br /&gt;
*** There will generally be 20% of the people who come just for the swag, and that is ok&lt;br /&gt;
&lt;br /&gt;
=== Virtual Conference ===&lt;br /&gt;
&lt;br /&gt;
Virtual conferences share many of the same aspects of physical conferences. Here are the differences.&lt;br /&gt;
&lt;br /&gt;
* Booth Setup&lt;br /&gt;
** The conference will set up accounts a month ahead so that the virtual booth can be customized&lt;br /&gt;
** The conference will typically have a walk through the weeks before to insure that the booths are coming together and any questions can be answered&lt;br /&gt;
** Virtual booths are generally very limited (and not just because of the Bronze level), so one make the best that one can&lt;br /&gt;
** The virtual booth will typically require:&lt;br /&gt;
*** A central picture (and/or movie)&lt;br /&gt;
*** Links that are customized to any attached documents or web pages&lt;br /&gt;
*** A banner, good for messages-of-the-day (like relevant talks)&lt;br /&gt;
* Booth swag&lt;br /&gt;
** The booth &amp;quot;posters&amp;quot; will be present either on the virtual booth&#039;s page, or as downloadable documents&lt;br /&gt;
** All of the give away content will be electronic documents, including the brochures&lt;br /&gt;
** While we cannot physically give away swag, there are other possibilities like themed T-shirts that can be ordered directly by the visitors, at perhaps a discount&lt;br /&gt;
* Booth Attendance&lt;br /&gt;
** There is still the need to have the booth coverage managed for the same reason as a physical booth&lt;br /&gt;
** In place of physical interaction with visitors, the conferences usually include some form of live blog between the booth managers and visitors. This interface is alas usually very limited and clumsy, so it is often limited to basic greetings for forwarding people to the right documents and to the DevDay/Summit, and directing visitors to the YP slack channel&lt;br /&gt;
** The booth is still important for the basic reasons of advertising for the project and the DevDay/Summit&lt;br /&gt;
** In the recent virtual summits, we have still received a virtual visitor list and generally what they looked at, which is evidence that the booth is visited more that what the blog would reflect&lt;br /&gt;
* Slack Channel&lt;br /&gt;
** We have found that a separate Slack channel is very effective&lt;br /&gt;
** We usually set up a technical stream and a separate gossip stream (to not overwhelm visitors)&lt;br /&gt;
** That interface is much more flexible and friendly&lt;br /&gt;
** It is also persistent across and after the conference &lt;br /&gt;
* Zoom Channel&lt;br /&gt;
** We have experimented with setting up a separate Zoom channel for direct conversations with visitors, but it was not really used. The slack channel ended up much more useful&lt;br /&gt;
&lt;br /&gt;
== Summit ==&lt;br /&gt;
&lt;br /&gt;
=== Developer Day versus Summit ===&lt;br /&gt;
&lt;br /&gt;
* DevDays&lt;br /&gt;
** Typically a single day, generally for the smaller ELC NA conference&lt;br /&gt;
** The speakers historically were directly invited, though this is moving to a CFP&lt;br /&gt;
** Ideally there are two tracks, the Beginning Class and the Intermediate Class&lt;br /&gt;
* Summits &lt;br /&gt;
** Typically two days, generally for the larger ELC Europe conference&lt;br /&gt;
** The speakers invited via CFP&lt;br /&gt;
** Beginning Track:&lt;br /&gt;
*** Day 1: Beginning Class&lt;br /&gt;
*** Day 2: Hands on Class&lt;br /&gt;
** Intermediate Track:&lt;br /&gt;
*** Day 1: Advanced and Intermediate Presentations&lt;br /&gt;
*** Day 2: Intermediate Presentations&lt;br /&gt;
&lt;br /&gt;
=== Budget and Costs ===&lt;br /&gt;
&lt;br /&gt;
It is important to create a budget early and get approval from the YP treasurer, especially around the high cost items like travel and lodging. All sample costs below are in $USD.&lt;br /&gt;
&lt;br /&gt;
* Conference fees, booth registration&lt;br /&gt;
** Typically a few hundred dollars at the Bronze level&lt;br /&gt;
* DevDay/Summit Attendee Registration&lt;br /&gt;
** This is contracted via the ELC event, $2-$3 per person, 2%-3% credit card transaction fees&lt;br /&gt;
* DevDay/Summit Room Rentals (physical events)&lt;br /&gt;
** Room Rentals are typically via the event organizer and would be part of the contract.&lt;br /&gt;
** We have for some events (e.g. ELCE Prague) rented our own rooms from nearby hotels&lt;br /&gt;
** In recent years we have had to pass on the Beginning Class for physical events, due both the high cost and lack of room availability&lt;br /&gt;
** For virtual events we have used sponsored Zoom accounts, so there is no incremental costs for the additional tracks&lt;br /&gt;
* Travel and Lodging&lt;br /&gt;
** Typically core people have their travel and hotel costs covered&lt;br /&gt;
** Core people include for example the YP Architect, the booth manager (Advocacy lead), the DevDay/Summit manager (Training Lead)&lt;br /&gt;
** These costs depend on the distance traveled&lt;br /&gt;
* Class Accounts&lt;br /&gt;
** These are the virtual server accounts used for the hands-on classes&lt;br /&gt;
** The class accounts generally cost around $30 per student, though we have had the benefit of full or partial in-kind donations in the past&lt;br /&gt;
* DevDay/Summit Call For Papers&lt;br /&gt;
** We have moved to Pretalx to manager the CFPs, at a cost of ~$200 per event&lt;br /&gt;
* DevDay/Summit attendee Registration Fees&lt;br /&gt;
** For physical events it as been in the $200 range, to help cover the conference fees, registration costs, room rentals, and class accounts&lt;br /&gt;
** For virtual events it has been in the $40 to $50 range to cover the class accounts and CFP management&lt;br /&gt;
** We may in the future separate the Hands-on classes as a distinct track and added cost, just to isolate the class account fees&lt;br /&gt;
* Post event speaker gifts&lt;br /&gt;
** We try to set aside a small gift to the presenters as a thank you to their donated time, so that needs to be included in the budget&lt;br /&gt;
&lt;br /&gt;
=== Physical Summit ===&lt;br /&gt;
&lt;br /&gt;
=== Virtual Summit ===&lt;br /&gt;
&lt;br /&gt;
== Considerations and Practicalities ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Past Conference Data ==&lt;br /&gt;
&lt;br /&gt;
=== Summer 2021 (Self Sponsored) ===&lt;br /&gt;
&lt;br /&gt;
In progress...&lt;br /&gt;
&lt;br /&gt;
=== Fall 2020 Virtual (ELCE Dublin) ===&lt;br /&gt;
&lt;br /&gt;
* Summit:&lt;br /&gt;
** Day 1:&lt;br /&gt;
*** Beginning Class: ~100&lt;br /&gt;
*** Intermediate Class: ~150&lt;br /&gt;
** Day 2:&lt;br /&gt;
*** Hands On Classes: ~50&lt;br /&gt;
*** Intermediate Class: ~150&lt;br /&gt;
&lt;br /&gt;
=== Summmer 2020 Virtual (ELC Austin) ===&lt;br /&gt;
&lt;br /&gt;
* Conference Presentations YP-related&lt;br /&gt;
** Monday:&lt;br /&gt;
*** LTS: 238 peak attendance, 377 registered&lt;br /&gt;
*** BoF: 157 peak attendance&lt;br /&gt;
*** Slack: 238&lt;br /&gt;
&lt;br /&gt;
* DevDay:&lt;br /&gt;
** Class: Start=173,Peak=181,End=164&lt;br /&gt;
*** Slack:&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Conference_Production&amp;diff=84576</id>
		<title>Yocto Conference Production</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Conference_Production&amp;diff=84576"/>
		<updated>2021-03-22T17:14:08Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Producing a Yocto Project Conference&lt;br /&gt;
&lt;br /&gt;
This page is intended to be a guide on how Yocto Project conferences (e.g. ELC and ELCE), Developer Days, and Summits are designed and executed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== High Level Calendar ==&lt;br /&gt;
&lt;br /&gt;
* Three months out&lt;br /&gt;
** Set the tentative dates&lt;br /&gt;
** Make arrangements with the conference for booth and DevDay/Summit registration&lt;br /&gt;
** Set up a preliminary budget, get tentative approval&lt;br /&gt;
** Setup flights and hotels&lt;br /&gt;
* Two months out&lt;br /&gt;
** Advertise event&lt;br /&gt;
** Announce the Call for Papers (CFP)&lt;br /&gt;
** Gather/order booth swag and collateral&lt;br /&gt;
** Setup conference page at Yocto home page&lt;br /&gt;
* One month out&lt;br /&gt;
** Announce presenters for DevDay/Summit&lt;br /&gt;
** Insure that conference registration is fully up&lt;br /&gt;
* One week out&lt;br /&gt;
** Confirm that presenter papers are coming together&lt;br /&gt;
** Confirm booth host schedule&lt;br /&gt;
&lt;br /&gt;
== Conference ==&lt;br /&gt;
&lt;br /&gt;
* Conferences are ideal ways to:&lt;br /&gt;
** Have an anchor for the booth, DevDay/Summit&lt;br /&gt;
** Advertise the project&lt;br /&gt;
** Connect with our community&lt;br /&gt;
** Connect between each other&lt;br /&gt;
** Advertise the DevDay/Summit&lt;br /&gt;
** Manage the DevDay/Summit registration and money&lt;br /&gt;
&lt;br /&gt;
We have been working primarily with the Embedded Linux Conference, sponsored by the project&#039;s parent organization The Linux Foundation. We have typically sponsored both a booth and a Yocto Project DevDay/Summit in conjunction with ELC/ELCE, given its high synergy.&lt;br /&gt;
&lt;br /&gt;
=== Physical Conference ===&lt;br /&gt;
&lt;br /&gt;
* Yocto Project must sign up for a booth&lt;br /&gt;
** Typically we join at the Bronze level, which provides a basic booth at a reasonable cost&lt;br /&gt;
** The contract must be negotiated several months ahead&lt;br /&gt;
** There is typically no penalty for later registration, but it could result in a late posting of the DevDay/Summit advertising and registration page, which can potentially affect attendance&lt;br /&gt;
* The Yocto Project booth pop-up&lt;br /&gt;
** Local the booth pop-up (currently with David) &lt;br /&gt;
** The booth travels as normal luggage, about 30-40 pounds&lt;br /&gt;
** The booth takes about 20 minutes to assemble and disassemble&lt;br /&gt;
* Booth posters &lt;br /&gt;
** If possible it is good to bring a collapsible stand, so that posters of the daily schedule of Yocto Project related talks can be advertised, in addition to the DevDay/Summit&lt;br /&gt;
** If no stand is present, then posters hanging in front the the booth pop-up and stand-up displays on the booth itself can be used&lt;br /&gt;
** There is a requirement to display the primary Yocto Project members (e.g. Platinum) at the booth&lt;br /&gt;
* Booth Content&lt;br /&gt;
** There should be handouts on the booth, for example:&lt;br /&gt;
*** Cards&lt;br /&gt;
*** Yocti&lt;br /&gt;
*** Swag (USB battery packs, spinners, pens, T-shirts&lt;br /&gt;
** T-Shirts are great giveaways and great live conference advertisements, but do require cost, transportation, and size distribution considerations&lt;br /&gt;
** Hand outs&lt;br /&gt;
*** It is good to have brochures that provide technical content about the project&lt;br /&gt;
*** We currently have a short form (~ 4 pages, and an older long form ~ pages with testimonials)&lt;br /&gt;
** Display computer&lt;br /&gt;
*** We often have a display running from a laptop or NUC. This can provide live browsing of the Yocto Project home page, documentation, Layer Index, DevDay/Summit home page. Visitors sometimes suggest web pages of their own as part of their questions.&lt;br /&gt;
** Demos&lt;br /&gt;
*** We try to have live demos at the booth, to attract visitors and stimulate conversations&lt;br /&gt;
*** Examples include Software Defined Radio, routers, robots, and once a race car&lt;br /&gt;
** Booth Hours&lt;br /&gt;
*** We usually get about 4 hours the day before the conference floor opens to prepare our booth&lt;br /&gt;
*** We typically need the booth attended 8 hours a day, in particular in between sessions and during lunch&lt;br /&gt;
*** ELC/ELCE typically have a special booth walk evening, where the entire conference is at the booths for 2 to 3 hours  &lt;br /&gt;
** Booth Attendance&lt;br /&gt;
*** It is important to arrange a schedule of booth watchers, so that we look organized and can be available to catch visitors&lt;br /&gt;
*** The booth schedule is typically 2 people per 2 hour slots across the open hours&lt;br /&gt;
*** One of the best part of the conference is that Yocto Project people generally hang around the booth even if they are not actually in the booth, so it is often easy to find an expert if a visitor asks a hard question&lt;br /&gt;
*** When the booth is closed each evening, the loose content must be locked up in the booth, and the key must go to someone whom is guaranteed to open the booth the next morning&lt;br /&gt;
** Booth Interaction&lt;br /&gt;
*** Each booth is given a badge scanner so that we can catch the visitors, This information is very important to the Yocto Project Advocacy Committee&lt;br /&gt;
*** Generally people are pleased to allow you to scan their badges, so no worries&lt;br /&gt;
*** We often offer the swag in exchange for the badge scan, to make this more efficient&lt;br /&gt;
*** There will generally be 20% of the people who come just for the swag, and that is ok&lt;br /&gt;
&lt;br /&gt;
=== Virtual Conference ===&lt;br /&gt;
&lt;br /&gt;
Virtual conferences share many of the same aspects of physical conferences. Here are the differences.&lt;br /&gt;
&lt;br /&gt;
* Booth Setup&lt;br /&gt;
** The conference will set up accounts a month ahead so that the virtual booth can be customized&lt;br /&gt;
** The conference will typically have a walk through the weeks before to insure that the booths are coming together and any questions can be answered&lt;br /&gt;
** Virtual booths are generally very limited (and not just because of the Bronze level), so one make the best that one can&lt;br /&gt;
** The virtual booth will typically require:&lt;br /&gt;
*** A central picture (and/or movie)&lt;br /&gt;
*** Links that are customized to any attached documents or web pages&lt;br /&gt;
*** A banner, good for messages-of-the-day (like relevant talks)&lt;br /&gt;
* Booth swag&lt;br /&gt;
** The booth &amp;quot;posters&amp;quot; will be present either on the virtual booth&#039;s page, or as downloadable documents&lt;br /&gt;
** All of the give away content will be electronic documents, including the brochures&lt;br /&gt;
** While we cannot physically give away swag, there are other possibilities like themed T-shirts that can be ordered directly by the visitors, at perhaps a discount&lt;br /&gt;
* Booth Attendance&lt;br /&gt;
** There is still the need to have the booth coverage managed for the same reason as a physical booth&lt;br /&gt;
** In place of physical interaction with visitors, the conferences usually include some form of live blog between the booth managers and visitors. This interface is alas usually very limited and clumsy, so it is often limited to basic greetings for forwarding people to the right documents and to the DevDay/Summit, and directing visitors to the YP slack channel&lt;br /&gt;
** The booth is still important for the basic reasons of advertising for the project and the DevDay/Summit&lt;br /&gt;
** In the recent virtual summits, we have still received a virtual visitor list and generally what they looked at, which is evidence that the booth is visited more that what the blog would reflect&lt;br /&gt;
* Slack Channel&lt;br /&gt;
** We have found that a separate Slack channel is very effective&lt;br /&gt;
** We usually set up a technical stream and a separate gossip stream (to not overwhelm visitors)&lt;br /&gt;
** That interface is much more flexible and friendly&lt;br /&gt;
** It is also persistent across and after the conference &lt;br /&gt;
* Zoom Channel&lt;br /&gt;
** We have experimented with setting up a separate Zoom channel for direct conversations with visitors, but it was not really used. The slack channel ended up much more useful&lt;br /&gt;
&lt;br /&gt;
== Summit ==&lt;br /&gt;
&lt;br /&gt;
=== Developer Day versus Summit ===&lt;br /&gt;
&lt;br /&gt;
* DevDays&lt;br /&gt;
** Typically a single day, generally for the smaller ELC NA conference&lt;br /&gt;
** The speakers historically were directly invited, though this is moving to a CFP&lt;br /&gt;
** Ideally there are two tracks, the Beginning Class and the Intermediate Class&lt;br /&gt;
* Summits &lt;br /&gt;
** Typically two days, generally for the larger ELC Europe conference&lt;br /&gt;
** The speakers invited via CFP&lt;br /&gt;
** Beginning Track:&lt;br /&gt;
*** Day 1: Beginning Class&lt;br /&gt;
*** Day 2: Hands on Class&lt;br /&gt;
** Intermediate Track:&lt;br /&gt;
*** Day 1: Advanced and Intermediate Presentations&lt;br /&gt;
*** Day 2: Intermediate Presentations&lt;br /&gt;
&lt;br /&gt;
=== Budget and Costs ===&lt;br /&gt;
&lt;br /&gt;
* Conference fees, booth registration&lt;br /&gt;
** Typically a few hundred dollars at the Bronze level&lt;br /&gt;
* DevDay/Summit Attendee Registration&lt;br /&gt;
** This is contracted via the ELC event, $2-$3 per person, 2%-3% transaction fee&lt;br /&gt;
* DevDay/Summit Room Rentals (physical events)&lt;br /&gt;
** Room Rentals are typically via the event organizer and would be part of the contract.&lt;br /&gt;
** We have for some events (e.g. ELCE Prague) rented our own rooms from nearby hotels&lt;br /&gt;
** In recent years we have had to pass on the Beginning Class for physical events, due both the high cost and lack of room availability&lt;br /&gt;
** For virtual events we have used sponsored Zoom accounts, so there is no incremental costs for the additional tracks&lt;br /&gt;
* Travel&lt;br /&gt;
** Typically core people have their travel and hotel costs covered&lt;br /&gt;
** Core people include for example the YP Architect, the booth manager, the DevDay/Summit manager &lt;br /&gt;
** These costs depend on the distance traveled&lt;br /&gt;
* Class Accounts&lt;br /&gt;
** These are the virtual server accounts used for the hands-on classes&lt;br /&gt;
** They are typically based on a recent Ubuntu release&lt;br /&gt;
** These are created managed by Michael&lt;br /&gt;
** The class images are typically created by the DeyDay/Summit manager (David), based on the class content&lt;br /&gt;
** The class accounts cost around $30 per, though we have had the benefit of this in-kind donations in the past&lt;br /&gt;
* DevDay/Summit Call For Papers&lt;br /&gt;
** We have moved to Pretalx to manager the CFPs, at a cost of ~$200 per event&lt;br /&gt;
* DevDay/Summit attendee Registration Fees&lt;br /&gt;
** For physical events it as been in the $200 range, to help cover the conference fees, registration costs, room rentals, and class accounts&lt;br /&gt;
** For virtual events it has been in the $40 to $50 range to cover the class accounts and CFP management&lt;br /&gt;
** We may in the future separate the Hands-on classes as a distinct track and added cost, just to isolate the class account fees&lt;br /&gt;
* Post event speaker gifts&lt;br /&gt;
** We try to set aside a small gift to the presenters as a thank you to their donated time, so that needs to be included in the budget&lt;br /&gt;
&lt;br /&gt;
=== Physical Summit ===&lt;br /&gt;
&lt;br /&gt;
=== Virtual Summit ===&lt;br /&gt;
&lt;br /&gt;
== Considerations and Practicalities ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Past Conference Data ==&lt;br /&gt;
&lt;br /&gt;
=== Summer 2021 (Self Sponsored) ===&lt;br /&gt;
&lt;br /&gt;
In progress...&lt;br /&gt;
&lt;br /&gt;
=== Fall 2020 Virtual (ELCE Dublin) ===&lt;br /&gt;
&lt;br /&gt;
* Summit:&lt;br /&gt;
** Day 1:&lt;br /&gt;
*** Beginning Class: ~100&lt;br /&gt;
*** Intermediate Class: ~150&lt;br /&gt;
** Day 2:&lt;br /&gt;
*** Hands On Classes: ~50&lt;br /&gt;
*** Intermediate Class: ~150&lt;br /&gt;
&lt;br /&gt;
=== Summmer 2020 Virtual (ELC Austin) ===&lt;br /&gt;
&lt;br /&gt;
* Conference Presentations YP-related&lt;br /&gt;
** Monday:&lt;br /&gt;
*** LTS: 238 peak attendance, 377 registered&lt;br /&gt;
*** BoF: 157 peak attendance&lt;br /&gt;
*** Slack: 238&lt;br /&gt;
&lt;br /&gt;
* DevDay:&lt;br /&gt;
** Class: Start=173,Peak=181,End=164&lt;br /&gt;
*** Slack:&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Conference_Production&amp;diff=84575</id>
		<title>Yocto Conference Production</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Conference_Production&amp;diff=84575"/>
		<updated>2021-03-22T16:05:46Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Producing a Yocto Project Conference&lt;br /&gt;
&lt;br /&gt;
This page is intended to be a guide on how Yocto Project conferences (e.g. ELC and ELCE), Developer Days, and Summits are designed and executed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== High Level Calendar ==&lt;br /&gt;
&lt;br /&gt;
* Three months out&lt;br /&gt;
** Set the tentative dates&lt;br /&gt;
** Make arrangements with the conference for booth and DevDay/Summit registration&lt;br /&gt;
** Set up a preliminary budget, get tentative approval&lt;br /&gt;
** Setup flights and hotels&lt;br /&gt;
* Two months out&lt;br /&gt;
** Advertise event&lt;br /&gt;
** Announce the Call for Papers (CFP)&lt;br /&gt;
** Gather/order booth swag and collateral&lt;br /&gt;
** Setup conference page at Yocto home page&lt;br /&gt;
* One month out&lt;br /&gt;
** Announce presenters for DevDay/Summit&lt;br /&gt;
** Insure that conference registration is fully up&lt;br /&gt;
* One week out&lt;br /&gt;
** Confirm that presenter papers are coming together&lt;br /&gt;
** Confirm booth host schedule&lt;br /&gt;
&lt;br /&gt;
== Conference ==&lt;br /&gt;
&lt;br /&gt;
* Conferences are ideal ways to:&lt;br /&gt;
** Have an anchor for the booth, DevDay/Summit&lt;br /&gt;
** Advertise the project&lt;br /&gt;
** Connect with our community&lt;br /&gt;
** Connect between each other&lt;br /&gt;
** Advertise the DevDay/Summit&lt;br /&gt;
** Manage the DevDay/Summit registration and money&lt;br /&gt;
&lt;br /&gt;
We have been working primarily with the Embedded Linux Conference, sponsored by the project&#039;s parent organization The Linux Foundation. We have typically sponsored both a booth and a Yocto Project DevDay/Summit in conjunction, given its high synergy.&lt;br /&gt;
&lt;br /&gt;
=== Physical Conference ===&lt;br /&gt;
&lt;br /&gt;
* Yocto Project must sign up for a booth&lt;br /&gt;
** Typically we join at the Bronze level, which provides a basic booth at a reasonable cost&lt;br /&gt;
** The contract must be negotiated several months ahead&lt;br /&gt;
** There is typically no penalty for later registration, but it could result in a late posting of the DevDay/Summit advertising and registration page, which can potentially affect attendance&lt;br /&gt;
* The Yocto Project booth pop-up&lt;br /&gt;
** Local the booth pop-up (currently with David) &lt;br /&gt;
** The booth travels as normal luggage, about 30-40 pounds&lt;br /&gt;
** The booth takes about 20 minutes to assemble and disassemble&lt;br /&gt;
* Booth posters &lt;br /&gt;
** If possible it is good to bring a collapsible stand, so that posters of the daily schedule of Yocto Project related talks can be advertised, in addition to the DevDay/Summit&lt;br /&gt;
** If no stand is present, then posters hanging in front the the booth pop-up and stand-up displays on the booth itself can be used&lt;br /&gt;
** There is a requirement to display the primary Yocto Project members (e.g. Platinum) at the booth&lt;br /&gt;
* Booth Content&lt;br /&gt;
** There should be handouts on the booth, for example:&lt;br /&gt;
*** Cards&lt;br /&gt;
*** Yocti&lt;br /&gt;
*** Swag (USB battery packs, spinners, pens, T-shirts&lt;br /&gt;
** T-Shirts are great giveaways and great live conference advertisements, but do require cost, transportation, and size distribution considerations&lt;br /&gt;
** Hand outs&lt;br /&gt;
*** It is good to have brochures that provide technical content about the project&lt;br /&gt;
*** We currently have a short form (~ 4 pages, and an older long form ~ pages with testimonials)&lt;br /&gt;
** Display computer&lt;br /&gt;
*** We often have a display running from a laptop or NUC. This can provide live browsing of the Yocto Project home page, documentation, Layer Index, DevDay/Summit home page. Visitors sometimes suggest web pages of their own as part of their questions.&lt;br /&gt;
** Demos&lt;br /&gt;
*** We try to have live demos at the booth, to attract visitors and stimulate conversations&lt;br /&gt;
*** Examples include Software Defined Radio, routers, robots, and once a race car&lt;br /&gt;
** Booth Hours&lt;br /&gt;
*** We usually get about 4 hours the day before the conference floor opens to prepare our booth&lt;br /&gt;
*** We typically need the booth attended 8 hours a day, in particular in between sessions and during lunch&lt;br /&gt;
*** ELC/ELCE typically have a special booth walk evening, where the entire conference is at the booths for 2 to 3 hours  &lt;br /&gt;
** Booth Attendance&lt;br /&gt;
*** It is important to arrange a schedule of booth watchers, so that we look organized and can be available to catch visitors&lt;br /&gt;
*** The booth schedule is typically 2 people per 2 hour slots across the open hours&lt;br /&gt;
*** One of the best part of the conference is that Yocto Project people generally hang around the booth even if they are not actually in the booth, so it is often easy to find an expert if a visitor asks a hard question&lt;br /&gt;
*** When the booth is closed each evening, the loose content must be locked up in the booth, and the key must go to someone whom is guaranteed to open the booth the next morning&lt;br /&gt;
** Booth Interaction&lt;br /&gt;
*** Each booth is given a badge scanner so that we can catch the visitors, This information is very important to the Yocto Project Advocacy Committee&lt;br /&gt;
*** Generally people are pleased to allow you to scan their badges, so no worries&lt;br /&gt;
*** We often offer the swag in exchange for the badge scan, to make this more efficient&lt;br /&gt;
*** There will generally be 20% of the people who come just for the swag, and that is ok&lt;br /&gt;
&lt;br /&gt;
=== Virtual Conference ===&lt;br /&gt;
&lt;br /&gt;
Virtual conferences share many of the same aspects of physical conferences. Here are the differences.&lt;br /&gt;
&lt;br /&gt;
* Booth Setup&lt;br /&gt;
** The conference will set up accounts a month ahead so that the virtual booth can be customized&lt;br /&gt;
** The conference will typically have a walk through the weeks before to insure that the booths are coming together and any questions can be answered&lt;br /&gt;
** Virtual booths are generally very limited (and not just because of the Bronze level), so one make the best that one can&lt;br /&gt;
** The virtual booth will typically require:&lt;br /&gt;
*** A central picture (and/or movie)&lt;br /&gt;
*** Links that are customized to any attached documents or web pages&lt;br /&gt;
*** A banner, good for messages-of-the-day (like relevant talks)&lt;br /&gt;
* Booth swag&lt;br /&gt;
** The booth &amp;quot;posters&amp;quot; will be present either on the virtual booth&#039;s page, or as downloadable documents&lt;br /&gt;
** All of the give away content will be electronic documents, including the brochures&lt;br /&gt;
** While we cannot physically give away swag, there are other possibilities like themed T-shirts that can be ordered directly by the visitors, at perhaps a discount&lt;br /&gt;
* Booth Attendance&lt;br /&gt;
** There is still the need to have the booth coverage managed for the same reason as a physical booth&lt;br /&gt;
** In place of physical interaction with visitors, the conferences usually include some form of live blog between the booth managers and visitors. This interface is alas usually very limited and clumsy, so it is often limited to basic greetings for forwarding people to the right documents and to the DevDay/Summit, and directing visitors to the YP slack channel&lt;br /&gt;
** The booth is still important for the basic reasons of advertising for the project and the DevDay/Summit&lt;br /&gt;
** In the recent virtual summits, we have still received a virtual visitor list and generally what they looked at, which is evidence that the booth is visited more that what the blog would reflect&lt;br /&gt;
* Slack Channel&lt;br /&gt;
** We have found that a separate Slack channel is very effective&lt;br /&gt;
** We usually set up a technical stream and a separate gossip stream (to not overwhelm visitors)&lt;br /&gt;
** That interface is much more flexible and friendly&lt;br /&gt;
** It is also persistent across and after the conference &lt;br /&gt;
* Zoom Channel&lt;br /&gt;
** We have experimented with setting up a separate Zoom channel for direct conversations with visitors, but it was not really used. The slack channel ended up much more useful&lt;br /&gt;
&lt;br /&gt;
== Summit ==&lt;br /&gt;
&lt;br /&gt;
=== Developer Day versus Summit ===&lt;br /&gt;
&lt;br /&gt;
* DevDays&lt;br /&gt;
** Typically a single day, generally for the smaller ELC NA conference&lt;br /&gt;
** The speakers historically were directly invited, though this is moving to a CFP&lt;br /&gt;
** Ideally there are two tracks, the Beginning Class and the Intermediate Class&lt;br /&gt;
* Summits &lt;br /&gt;
** Typically two days, generally for the larger ELC Europe conference&lt;br /&gt;
** The speakers invited via CFP&lt;br /&gt;
** Beginning Track:&lt;br /&gt;
*** Day 1: Beginning Class&lt;br /&gt;
*** Day 2: Hands on Class&lt;br /&gt;
** Intermediate Track:&lt;br /&gt;
*** Day 1: Advanced and Intermediate Presentations&lt;br /&gt;
*** Day 2: Intermediate Presentations&lt;br /&gt;
&lt;br /&gt;
=== Physical Summit ===&lt;br /&gt;
&lt;br /&gt;
=== Virtual Summit ===&lt;br /&gt;
&lt;br /&gt;
== Considerations and Practicalities ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Past Conference Data ==&lt;br /&gt;
&lt;br /&gt;
=== Summer 2021 (Self Sponsored) ===&lt;br /&gt;
&lt;br /&gt;
In progress...&lt;br /&gt;
&lt;br /&gt;
=== Fall 2020 Virtual (ELCE Dublin) ===&lt;br /&gt;
&lt;br /&gt;
* Summit:&lt;br /&gt;
** Day 1:&lt;br /&gt;
*** Beginning Class: ~100&lt;br /&gt;
*** Intermediate Class: ~150&lt;br /&gt;
** Day 2:&lt;br /&gt;
*** Hands On Classes: ~50&lt;br /&gt;
*** Intermediate Class: ~150&lt;br /&gt;
&lt;br /&gt;
=== Summmer 2020 Virtual (ELC Austin) ===&lt;br /&gt;
&lt;br /&gt;
* Conference Presentations YP-related&lt;br /&gt;
** Monday:&lt;br /&gt;
*** LTS: 238 peak attendance, 377 registered&lt;br /&gt;
*** BoF: 157 peak attendance&lt;br /&gt;
*** Slack: 238&lt;br /&gt;
&lt;br /&gt;
* DevDay:&lt;br /&gt;
** Class: Start=173,Peak=181,End=164&lt;br /&gt;
*** Slack:&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Conference_Production&amp;diff=84574</id>
		<title>Yocto Conference Production</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Conference_Production&amp;diff=84574"/>
		<updated>2021-03-22T10:39:46Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: /* Physical Conference */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Producing a Yocto Project Conference&lt;br /&gt;
&lt;br /&gt;
This page is intended to be a guide on how Yocto Project conferences (e.g. ELC and ELCE), Developer Days, and Summits are designed and executed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== High Level Calendar ==&lt;br /&gt;
&lt;br /&gt;
* Three months out&lt;br /&gt;
** Set the tentative dates&lt;br /&gt;
** Make arrangements with the conference for booth and DevDay/Summit registration&lt;br /&gt;
** Set up a preliminary budget, get tentative approval&lt;br /&gt;
** Setup flights and hotels&lt;br /&gt;
* Two months out&lt;br /&gt;
** Advertise event&lt;br /&gt;
** Announce the Call for Papers (CFP)&lt;br /&gt;
** Gather/order booth swag and collateral&lt;br /&gt;
** Setup conference page at Yocto home page&lt;br /&gt;
* One month out&lt;br /&gt;
** Announce presenters for DevDay/Summit&lt;br /&gt;
** Insure that conference registration is fully up&lt;br /&gt;
* One week out&lt;br /&gt;
** Confirm that presenter papers are coming together&lt;br /&gt;
** Confirm booth host schedule&lt;br /&gt;
&lt;br /&gt;
== Conference ==&lt;br /&gt;
&lt;br /&gt;
* Conferences are ideal ways to:&lt;br /&gt;
** Have an anchor for the booth, DevDay/Summit&lt;br /&gt;
** Advertise the project&lt;br /&gt;
** Connect with our community&lt;br /&gt;
** Connect between each other&lt;br /&gt;
** Advertise the DevDay/Summit&lt;br /&gt;
** Manage the DevDay/Summit registration and money&lt;br /&gt;
&lt;br /&gt;
We have been working primarily with the Embedded Linux Conference, sponsored by the project&#039;s parent organization The Linux Foundation. We have typically sponsored both a booth and a Yocto Project DevDay/Summit in conjunction, given its high synergy.&lt;br /&gt;
&lt;br /&gt;
=== Physical Conference ===&lt;br /&gt;
&lt;br /&gt;
* Yocto Project must sign up for a booth&lt;br /&gt;
** Typically we join at the Bronze level, which provides a basic booth at a reasonable cost&lt;br /&gt;
** The contract must be negotiated several months ahead&lt;br /&gt;
** There is typically no penalty for later registration, but it could result in a late posting of the DevDay/Summit advertising and registration page, which can potentially affect attendance&lt;br /&gt;
* The Yocto Project booth pop-up&lt;br /&gt;
** Local the booth pop-up (currently with David) &lt;br /&gt;
** The booth travels as normal luggage, about 30-40 pounds&lt;br /&gt;
** The booth takes about 20 minutes to assemble and disassemble&lt;br /&gt;
* Booth posters &lt;br /&gt;
** If possible it is good to bring a collapsible stand, so that posters of the daily schedule of Yocto Project related talks can be advertised, in addition to the DevDay/Summit&lt;br /&gt;
** If no stand is present, then posters hanging in front the the booth pop-up and stand-up displays on the booth itself can be used&lt;br /&gt;
** There is a requirement to display the primary Yocto Project members (e.g. Platinum) at the booth&lt;br /&gt;
* Booth Content&lt;br /&gt;
** There should be handouts on the booth, for example:&lt;br /&gt;
*** Cards&lt;br /&gt;
*** Yocti&lt;br /&gt;
*** Swag (USB battery packs, spinners, pens, T-shirts&lt;br /&gt;
** T-Shirts are great giveaways and great live conference advertisements, but do require cost, transportation, and size distribution considerations&lt;br /&gt;
** Hand outs&lt;br /&gt;
*** It is good to have brochures that provide technical content about the project&lt;br /&gt;
*** We currently have a short form (~ 4 pages, and an older long form ~ pages with testimonials)&lt;br /&gt;
** Display computer&lt;br /&gt;
*** We often have a display running from a laptop or NUC. This can provide live browsing of the Yocto Project home page, documentation, Layer Index, DevDay/Summit home page. Visitors sometimes suggest web pages of their own as part of their questions.&lt;br /&gt;
** Demos&lt;br /&gt;
*** We try to have live demos at the booth, to attract visitors and stimulate conversations&lt;br /&gt;
*** Examples include Software Defined Radio, routers, robots, and once a race car&lt;br /&gt;
** Booth Hours&lt;br /&gt;
*** We usually get about 4 hours the day before the conference floor opens to prepare our booth&lt;br /&gt;
*** We typically need the booth attended 8 hours a day, in particular in between sessions and during lunch&lt;br /&gt;
*** ELC/ELCE typically have a special booth walk evening, where the entire conference is at the booths for 2 to 3 hours  &lt;br /&gt;
** Booth Attendance&lt;br /&gt;
*** It is important to arrange a schedule of booth watchers, so that we look organized and can be available to catch visitors&lt;br /&gt;
*** The booth schedule is typically 2 people per 2 hour slots across the open hours&lt;br /&gt;
*** One of the best part of the conference is that Yocto Project people generally hang around the booth even if they are not actually in the booth, so it is often easy to find an expert if a visitor asks a hard question&lt;br /&gt;
*** When the booth is closed each evening, the loose content must be locked up in the booth, and the key must go to someone whom is guaranteed to open the booth the next morning&lt;br /&gt;
** Booth Interaction&lt;br /&gt;
*** Each booth is given a badge scanner so that we can catch the visitors, This information is very important to the Yocto Project Advocacy Committee&lt;br /&gt;
*** Generally people are pleased to allow you to scan their badges, so no worries&lt;br /&gt;
*** We often offer the swag in exchange for the badge scan, to make this more efficient&lt;br /&gt;
*** There will generally be 20% of the people who come just for the swag, and that is ok&lt;br /&gt;
&lt;br /&gt;
=== Virtual Conference ===&lt;br /&gt;
&lt;br /&gt;
Virtual conferences share many of the same aspects of physical conferences. Here are the differences.&lt;br /&gt;
&lt;br /&gt;
* Booth Setup&lt;br /&gt;
** The conference will set up accounts a month ahead so that the virtual booth can be customized&lt;br /&gt;
** The conference will typically have a walk through the weeks before to insure that the booths are coming together and any questions can be answered&lt;br /&gt;
** Virtual booths are generally very limited (and not just because of the Bronze level), so one make the best that one can&lt;br /&gt;
** The virtual booth will typically require:&lt;br /&gt;
*** A central picture (and/or movie)&lt;br /&gt;
*** Links that are customized to any attached documents or web pages&lt;br /&gt;
*** A banner, good for messages-of-the-day (like relevant talks)&lt;br /&gt;
* Booth swag&lt;br /&gt;
** The booth &amp;quot;posters&amp;quot; will be present either on the virtual booth&#039;s page, or as downloadable documents&lt;br /&gt;
** All of the give away content will be electronic documents, including the brochures&lt;br /&gt;
** While we cannot physically give away swag, there are other possibilities like themed T-shirts that can be ordered directly by the visitors, at perhaps a discount&lt;br /&gt;
* Booth Attendance&lt;br /&gt;
** There is still the need to have the booth coverage managed for the same reason as a physical booth&lt;br /&gt;
** In place of physical interaction with visitors, the conferences usually include some form of live blog between the booth managers and visitors. This interface is alas usually very limited and clumsy, so it is often limited to basic greetings for forwarding people to the right documents and to the DevDay/Summit, and directing visitors to the YP slack channel&lt;br /&gt;
** The booth is still important for the basic reasons of advertising for the project and the DevDay/Summit&lt;br /&gt;
** In the recent virtual summits, we have still received a virtual visitor list and generally what they looked at, which is evidence that the booth is visited more that what the blog would reflect&lt;br /&gt;
* Slack Channel&lt;br /&gt;
** We have found that a separate Slack channel is very effective&lt;br /&gt;
** We usually set up a technical stream and a separate gossip stream (to not overwhelm visitors)&lt;br /&gt;
** That interface is much more flexible and friendly&lt;br /&gt;
** It is also persistent across and after the conference &lt;br /&gt;
* Zoom Channel&lt;br /&gt;
** We have experimented with setting up a separate Zoom channel for direct conversations with visitors, but it was not really used. The slack channel ended up much more useful&lt;br /&gt;
&lt;br /&gt;
== Summit ==&lt;br /&gt;
&lt;br /&gt;
=== Developer Day versus Summit ===&lt;br /&gt;
&lt;br /&gt;
* DevDays&lt;br /&gt;
** Typically a single day, generally for the smaller ELC NA conference&lt;br /&gt;
** The speakers historically were directly invited, though this is moving to a CFP&lt;br /&gt;
** Ideally there are two tracks, the Beginning Class and the Intermediate Class&lt;br /&gt;
* Summits &lt;br /&gt;
** Typically two days, generally for the larger ELC Europe conference&lt;br /&gt;
** The speakers invited via CFP&lt;br /&gt;
** Beginning Track:&lt;br /&gt;
*** Day 1: Beginning Class&lt;br /&gt;
*** Day 2: Hands on Class&lt;br /&gt;
** Intermediate Track:&lt;br /&gt;
*** Day 1: Advanced and Intermediate Presentations&lt;br /&gt;
*** Day 2: Intermediate Presentations&lt;br /&gt;
&lt;br /&gt;
=== Physical Summit ===&lt;br /&gt;
&lt;br /&gt;
=== Virtual Summit ===&lt;br /&gt;
&lt;br /&gt;
== FAQ and Practicals ==&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Conference_Production&amp;diff=84573</id>
		<title>Yocto Conference Production</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Conference_Production&amp;diff=84573"/>
		<updated>2021-03-22T10:39:11Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: /* Physical Conference */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Producing a Yocto Project Conference&lt;br /&gt;
&lt;br /&gt;
This page is intended to be a guide on how Yocto Project conferences (e.g. ELC and ELCE), Developer Days, and Summits are designed and executed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== High Level Calendar ==&lt;br /&gt;
&lt;br /&gt;
* Three months out&lt;br /&gt;
** Set the tentative dates&lt;br /&gt;
** Make arrangements with the conference for booth and DevDay/Summit registration&lt;br /&gt;
** Set up a preliminary budget, get tentative approval&lt;br /&gt;
** Setup flights and hotels&lt;br /&gt;
* Two months out&lt;br /&gt;
** Advertise event&lt;br /&gt;
** Announce the Call for Papers (CFP)&lt;br /&gt;
** Gather/order booth swag and collateral&lt;br /&gt;
** Setup conference page at Yocto home page&lt;br /&gt;
* One month out&lt;br /&gt;
** Announce presenters for DevDay/Summit&lt;br /&gt;
** Insure that conference registration is fully up&lt;br /&gt;
* One week out&lt;br /&gt;
** Confirm that presenter papers are coming together&lt;br /&gt;
** Confirm booth host schedule&lt;br /&gt;
&lt;br /&gt;
== Conference ==&lt;br /&gt;
&lt;br /&gt;
* Conferences are ideal ways to:&lt;br /&gt;
** Have an anchor for the booth, DevDay/Summit&lt;br /&gt;
** Advertise the project&lt;br /&gt;
** Connect with our community&lt;br /&gt;
** Connect between each other&lt;br /&gt;
** Advertise the DevDay/Summit&lt;br /&gt;
** Manage the DevDay/Summit registration and money&lt;br /&gt;
&lt;br /&gt;
We have been working primarily with the Embedded Linux Conference, sponsored by the project&#039;s parent organization The Linux Foundation. We have typically sponsored both a booth and a Yocto Project DevDay/Summit in conjunction, given its high synergy.&lt;br /&gt;
&lt;br /&gt;
=== Physical Conference ===&lt;br /&gt;
&lt;br /&gt;
* Yocto Project must sign up for a booth&lt;br /&gt;
** Typically we join at the Bronze level, which provides a basic booth at a reasonable cost&lt;br /&gt;
** The contract must be negotiated several months ahead&lt;br /&gt;
** There is typically no penalty for later registration, but it could result in a late posting of the DevDay/Summit advertising and registration page, which can potentially affect attendance&lt;br /&gt;
* The Yocto Project booth pop-up&lt;br /&gt;
** Local the booth pop-up (currently with David) &lt;br /&gt;
** The booth travels as normal luggage, about 30-40 pounds&lt;br /&gt;
** The booth takes about 20 minutes to assemble and disassemble&lt;br /&gt;
* Booth posters &lt;br /&gt;
** If possible it is good to bring a collapsible stand, so that posters of the daily schedule of Yocto Project related talks can be advertised, in addition to the DevDay/Summit&lt;br /&gt;
** If no stand is present, then posters hanging in front the the booth pop-up and stand-up displays on the booth itself can be used&lt;br /&gt;
** There is a requirement to display the primary Yocto Project members (e.g. Platinum) at the booth&lt;br /&gt;
* Booth Content&lt;br /&gt;
** There should be handouts on the booth, for example:&lt;br /&gt;
*** Cards&lt;br /&gt;
*** Yocti&lt;br /&gt;
*** Swag (USB battery packs, spinners, pens, T-shirts&lt;br /&gt;
** T-Shirts are great giveaways and great live conference advertisements, but do require cost, transportation, and size distribution considerations&lt;br /&gt;
** Hand outs&lt;br /&gt;
*** It is good to have brochures that provide technical content about the project&lt;br /&gt;
*** We currently have a short form (~ 4 pages, and an older long form ~ pages with testimonials)&lt;br /&gt;
** Display computer&lt;br /&gt;
*** We often have a display running from a laptop or NUC. This can provide live browsing of the Yocto Project home page, documentation, Layer Index, DevDay/Summit home page. Visitors sometimes suggest web pages of their own as part of their questions.&lt;br /&gt;
** Demos&lt;br /&gt;
*** We try to have live demos at the booth, to attract visitors and stimulate conversations&lt;br /&gt;
*** Examples include Software Defined Radio, routers, robots, and once a race car&lt;br /&gt;
** Booth Hours&lt;br /&gt;
*** We usually get about 4 hours the day before the conference floor opens to prepare our booth&lt;br /&gt;
*** We typically need the booth attended 8 hours a day, in particular in between sessions and during lunch&lt;br /&gt;
*** ELC/ELCE typically have a special booth walk evening, where the entire conference is at the booths for 2 to 3 hours  &lt;br /&gt;
** Booth Attendance&lt;br /&gt;
*** It is important to arrange a schedule of booth watchers, so that we look organized and can be available to catch visitors&lt;br /&gt;
*** The booth schedule is typically 2 people in 2 hour slots across the open hours&lt;br /&gt;
*** One of the best part of the conference is that Yocto Project people generally hang around the booth even if they are not actually in the booth, so it is often easy to find an expert if a visitor asks a hard question&lt;br /&gt;
*** When the booth is closed each evening, the loose content must be locked up in the booth, and the key must go to someone whom is guaranteed to open the booth the next morning&lt;br /&gt;
** Booth Interaction&lt;br /&gt;
*** Each booth is given a badge scanner so that we can catch the visitors, This information is very important to the Yocto Project Advocacy Committee&lt;br /&gt;
*** Generally people are pleased to allow you to scan their badges, so no worries&lt;br /&gt;
*** We often offer the swag in exchange for the badge scan, to make this more efficient&lt;br /&gt;
*** There will generally be 20% of the people who come just for the swag, and that is ok&lt;br /&gt;
&lt;br /&gt;
=== Virtual Conference ===&lt;br /&gt;
&lt;br /&gt;
Virtual conferences share many of the same aspects of physical conferences. Here are the differences.&lt;br /&gt;
&lt;br /&gt;
* Booth Setup&lt;br /&gt;
** The conference will set up accounts a month ahead so that the virtual booth can be customized&lt;br /&gt;
** The conference will typically have a walk through the weeks before to insure that the booths are coming together and any questions can be answered&lt;br /&gt;
** Virtual booths are generally very limited (and not just because of the Bronze level), so one make the best that one can&lt;br /&gt;
** The virtual booth will typically require:&lt;br /&gt;
*** A central picture (and/or movie)&lt;br /&gt;
*** Links that are customized to any attached documents or web pages&lt;br /&gt;
*** A banner, good for messages-of-the-day (like relevant talks)&lt;br /&gt;
* Booth swag&lt;br /&gt;
** The booth &amp;quot;posters&amp;quot; will be present either on the virtual booth&#039;s page, or as downloadable documents&lt;br /&gt;
** All of the give away content will be electronic documents, including the brochures&lt;br /&gt;
** While we cannot physically give away swag, there are other possibilities like themed T-shirts that can be ordered directly by the visitors, at perhaps a discount&lt;br /&gt;
* Booth Attendance&lt;br /&gt;
** There is still the need to have the booth coverage managed for the same reason as a physical booth&lt;br /&gt;
** In place of physical interaction with visitors, the conferences usually include some form of live blog between the booth managers and visitors. This interface is alas usually very limited and clumsy, so it is often limited to basic greetings for forwarding people to the right documents and to the DevDay/Summit, and directing visitors to the YP slack channel&lt;br /&gt;
** The booth is still important for the basic reasons of advertising for the project and the DevDay/Summit&lt;br /&gt;
** In the recent virtual summits, we have still received a virtual visitor list and generally what they looked at, which is evidence that the booth is visited more that what the blog would reflect&lt;br /&gt;
* Slack Channel&lt;br /&gt;
** We have found that a separate Slack channel is very effective&lt;br /&gt;
** We usually set up a technical stream and a separate gossip stream (to not overwhelm visitors)&lt;br /&gt;
** That interface is much more flexible and friendly&lt;br /&gt;
** It is also persistent across and after the conference &lt;br /&gt;
* Zoom Channel&lt;br /&gt;
** We have experimented with setting up a separate Zoom channel for direct conversations with visitors, but it was not really used. The slack channel ended up much more useful&lt;br /&gt;
&lt;br /&gt;
== Summit ==&lt;br /&gt;
&lt;br /&gt;
=== Developer Day versus Summit ===&lt;br /&gt;
&lt;br /&gt;
* DevDays&lt;br /&gt;
** Typically a single day, generally for the smaller ELC NA conference&lt;br /&gt;
** The speakers historically were directly invited, though this is moving to a CFP&lt;br /&gt;
** Ideally there are two tracks, the Beginning Class and the Intermediate Class&lt;br /&gt;
* Summits &lt;br /&gt;
** Typically two days, generally for the larger ELC Europe conference&lt;br /&gt;
** The speakers invited via CFP&lt;br /&gt;
** Beginning Track:&lt;br /&gt;
*** Day 1: Beginning Class&lt;br /&gt;
*** Day 2: Hands on Class&lt;br /&gt;
** Intermediate Track:&lt;br /&gt;
*** Day 1: Advanced and Intermediate Presentations&lt;br /&gt;
*** Day 2: Intermediate Presentations&lt;br /&gt;
&lt;br /&gt;
=== Physical Summit ===&lt;br /&gt;
&lt;br /&gt;
=== Virtual Summit ===&lt;br /&gt;
&lt;br /&gt;
== FAQ and Practicals ==&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Conference_Production&amp;diff=84572</id>
		<title>Yocto Conference Production</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Conference_Production&amp;diff=84572"/>
		<updated>2021-03-22T10:37:49Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: /* Virtual Conference */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Producing a Yocto Project Conference&lt;br /&gt;
&lt;br /&gt;
This page is intended to be a guide on how Yocto Project conferences (e.g. ELC and ELCE), Developer Days, and Summits are designed and executed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== High Level Calendar ==&lt;br /&gt;
&lt;br /&gt;
* Three months out&lt;br /&gt;
** Set the tentative dates&lt;br /&gt;
** Make arrangements with the conference for booth and DevDay/Summit registration&lt;br /&gt;
** Set up a preliminary budget, get tentative approval&lt;br /&gt;
** Setup flights and hotels&lt;br /&gt;
* Two months out&lt;br /&gt;
** Advertise event&lt;br /&gt;
** Announce the Call for Papers (CFP)&lt;br /&gt;
** Gather/order booth swag and collateral&lt;br /&gt;
** Setup conference page at Yocto home page&lt;br /&gt;
* One month out&lt;br /&gt;
** Announce presenters for DevDay/Summit&lt;br /&gt;
** Insure that conference registration is fully up&lt;br /&gt;
* One week out&lt;br /&gt;
** Confirm that presenter papers are coming together&lt;br /&gt;
** Confirm booth host schedule&lt;br /&gt;
&lt;br /&gt;
== Conference ==&lt;br /&gt;
&lt;br /&gt;
* Conferences are ideal ways to:&lt;br /&gt;
** Have an anchor for the booth, DevDay/Summit&lt;br /&gt;
** Advertise the project&lt;br /&gt;
** Connect with our community&lt;br /&gt;
** Connect between each other&lt;br /&gt;
** Advertise the DevDay/Summit&lt;br /&gt;
** Manage the DevDay/Summit registration and money&lt;br /&gt;
&lt;br /&gt;
We have been working primarily with the Embedded Linux Conference, sponsored by the project&#039;s parent organization The Linux Foundation. We have typically sponsored both a booth and a Yocto Project DevDay/Summit in conjunction, given its high synergy.&lt;br /&gt;
&lt;br /&gt;
=== Physical Conference ===&lt;br /&gt;
&lt;br /&gt;
* Yocto Project must sign up for a booth&lt;br /&gt;
** Typically we join at the Bronze level, which provides a basic booth at a reasonable cost&lt;br /&gt;
** The contract must be negotiated several months ahead&lt;br /&gt;
** There is typically no penalty for later registration, but it could result in a late posting of the DevDay/Summit advertising and registration page, which can potentially affect attendance&lt;br /&gt;
* The Yocto Project booth pop-up&lt;br /&gt;
** Local the booth pop-up (currently with David) &lt;br /&gt;
** The booth travels as normal luggage, about 30-40 pounds&lt;br /&gt;
** The booth takes about 20 minutes to assemble and disassemble&lt;br /&gt;
* Booth posters &lt;br /&gt;
** If possible it is good to bring a collapsible stand, so that posters of the daily schedule of Yocto Project related talks can be advertised, in addition to the DevDay/Summit&lt;br /&gt;
** If no stand is present, then posters hanging in front the the booth pop-up and stand-up displays on the booth itself can be used&lt;br /&gt;
** There is a requirement to display the primary Yocto Project members (e.g. Platinum) at the booth&lt;br /&gt;
* Booth Content&lt;br /&gt;
** There should be handouts on the booth, for example:&lt;br /&gt;
*** Cards&lt;br /&gt;
*** Yocti&lt;br /&gt;
*** Swag (USB battery packs, spinners, pens, T-shirts&lt;br /&gt;
** T-Shirts are great giveaways and great live conference advertisements, but do require cost, transportation, and size distribution considerations&lt;br /&gt;
** Hand outs&lt;br /&gt;
*** It is good to have brochures that provide technical content about the project&lt;br /&gt;
*** We currently have a short form (~ 4 pages, and an older long form ~ pages with testimonials)&lt;br /&gt;
** Display computer&lt;br /&gt;
*** We often have a display running from a laptop of NUC. This can provide live browsing of the Yocto Project home page, documentation, Layer Index, DevDay/Summit home page. Visitors sometimes suggest web pages of their own as part of their questions.&lt;br /&gt;
** Demos&lt;br /&gt;
*** We try to have live demos at the booth, to attract visitors and stimulate conversations&lt;br /&gt;
*** Examples include Software Defined Radio, routers, robots, and once a race car&lt;br /&gt;
** Booth Hours&lt;br /&gt;
*** We usually get about 4 hours the day before the conference floor opens to prepare our booth&lt;br /&gt;
*** We typically need the booth attended 8 hours a day, in particular in between sessions and during lunch&lt;br /&gt;
*** ELC/ELCE typically have a special booth walk evening, where the entire conference is at the booths for 2 to 3 hours  &lt;br /&gt;
** Booth Attendance&lt;br /&gt;
*** It is important to arrange a schedule of booth watchers, so that we look organized and can be available to catch visitors&lt;br /&gt;
*** The booth schedule is typically 2 people in 2 hour slots across the open hours&lt;br /&gt;
*** One of the best part of the conference is that Yocto Project people generally hang around the booth even if they are not actually in the booth, so it is often easy to find an expert if a visitor asks a hard question&lt;br /&gt;
*** When the booth is closed each evening, the loose content must be locked up in the booth, and the key must go to someone whom is guaranteed to open the booth the next morning&lt;br /&gt;
** Booth Interaction&lt;br /&gt;
*** Each booth is given a badge scanner so that we can catch the visitors, This information is very important to the Yocto Project Advocacy Committee&lt;br /&gt;
*** Generally people are pleased to allow you to scan their badges, so no worries&lt;br /&gt;
*** We often offer the swag in exchange for the badge scan, to make this more efficient&lt;br /&gt;
*** There will generally be 20% of the people who come just for the swag, and that is ok&lt;br /&gt;
&lt;br /&gt;
=== Virtual Conference ===&lt;br /&gt;
&lt;br /&gt;
Virtual conferences share many of the same aspects of physical conferences. Here are the differences.&lt;br /&gt;
&lt;br /&gt;
* Booth Setup&lt;br /&gt;
** The conference will set up accounts a month ahead so that the virtual booth can be customized&lt;br /&gt;
** The conference will typically have a walk through the weeks before to insure that the booths are coming together and any questions can be answered&lt;br /&gt;
** Virtual booths are generally very limited (and not just because of the Bronze level), so one make the best that one can&lt;br /&gt;
** The virtual booth will typically require:&lt;br /&gt;
*** A central picture (and/or movie)&lt;br /&gt;
*** Links that are customized to any attached documents or web pages&lt;br /&gt;
*** A banner, good for messages-of-the-day (like relevant talks)&lt;br /&gt;
* Booth swag&lt;br /&gt;
** The booth &amp;quot;posters&amp;quot; will be present either on the virtual booth&#039;s page, or as downloadable documents&lt;br /&gt;
** All of the give away content will be electronic documents, including the brochures&lt;br /&gt;
** While we cannot physically give away swag, there are other possibilities like themed T-shirts that can be ordered directly by the visitors, at perhaps a discount&lt;br /&gt;
* Booth Attendance&lt;br /&gt;
** There is still the need to have the booth coverage managed for the same reason as a physical booth&lt;br /&gt;
** In place of physical interaction with visitors, the conferences usually include some form of live blog between the booth managers and visitors. This interface is alas usually very limited and clumsy, so it is often limited to basic greetings for forwarding people to the right documents and to the DevDay/Summit, and directing visitors to the YP slack channel&lt;br /&gt;
** The booth is still important for the basic reasons of advertising for the project and the DevDay/Summit&lt;br /&gt;
** In the recent virtual summits, we have still received a virtual visitor list and generally what they looked at, which is evidence that the booth is visited more that what the blog would reflect&lt;br /&gt;
* Slack Channel&lt;br /&gt;
** We have found that a separate Slack channel is very effective&lt;br /&gt;
** We usually set up a technical stream and a separate gossip stream (to not overwhelm visitors)&lt;br /&gt;
** That interface is much more flexible and friendly&lt;br /&gt;
** It is also persistent across and after the conference &lt;br /&gt;
* Zoom Channel&lt;br /&gt;
** We have experimented with setting up a separate Zoom channel for direct conversations with visitors, but it was not really used. The slack channel ended up much more useful&lt;br /&gt;
&lt;br /&gt;
== Summit ==&lt;br /&gt;
&lt;br /&gt;
=== Developer Day versus Summit ===&lt;br /&gt;
&lt;br /&gt;
* DevDays&lt;br /&gt;
** Typically a single day, generally for the smaller ELC NA conference&lt;br /&gt;
** The speakers historically were directly invited, though this is moving to a CFP&lt;br /&gt;
** Ideally there are two tracks, the Beginning Class and the Intermediate Class&lt;br /&gt;
* Summits &lt;br /&gt;
** Typically two days, generally for the larger ELC Europe conference&lt;br /&gt;
** The speakers invited via CFP&lt;br /&gt;
** Beginning Track:&lt;br /&gt;
*** Day 1: Beginning Class&lt;br /&gt;
*** Day 2: Hands on Class&lt;br /&gt;
** Intermediate Track:&lt;br /&gt;
*** Day 1: Advanced and Intermediate Presentations&lt;br /&gt;
*** Day 2: Intermediate Presentations&lt;br /&gt;
&lt;br /&gt;
=== Physical Summit ===&lt;br /&gt;
&lt;br /&gt;
=== Virtual Summit ===&lt;br /&gt;
&lt;br /&gt;
== FAQ and Practicals ==&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Conference_Production&amp;diff=84571</id>
		<title>Yocto Conference Production</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Conference_Production&amp;diff=84571"/>
		<updated>2021-03-22T10:35:28Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Producing a Yocto Project Conference&lt;br /&gt;
&lt;br /&gt;
This page is intended to be a guide on how Yocto Project conferences (e.g. ELC and ELCE), Developer Days, and Summits are designed and executed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== High Level Calendar ==&lt;br /&gt;
&lt;br /&gt;
* Three months out&lt;br /&gt;
** Set the tentative dates&lt;br /&gt;
** Make arrangements with the conference for booth and DevDay/Summit registration&lt;br /&gt;
** Set up a preliminary budget, get tentative approval&lt;br /&gt;
** Setup flights and hotels&lt;br /&gt;
* Two months out&lt;br /&gt;
** Advertise event&lt;br /&gt;
** Announce the Call for Papers (CFP)&lt;br /&gt;
** Gather/order booth swag and collateral&lt;br /&gt;
** Setup conference page at Yocto home page&lt;br /&gt;
* One month out&lt;br /&gt;
** Announce presenters for DevDay/Summit&lt;br /&gt;
** Insure that conference registration is fully up&lt;br /&gt;
* One week out&lt;br /&gt;
** Confirm that presenter papers are coming together&lt;br /&gt;
** Confirm booth host schedule&lt;br /&gt;
&lt;br /&gt;
== Conference ==&lt;br /&gt;
&lt;br /&gt;
* Conferences are ideal ways to:&lt;br /&gt;
** Have an anchor for the booth, DevDay/Summit&lt;br /&gt;
** Advertise the project&lt;br /&gt;
** Connect with our community&lt;br /&gt;
** Connect between each other&lt;br /&gt;
** Advertise the DevDay/Summit&lt;br /&gt;
** Manage the DevDay/Summit registration and money&lt;br /&gt;
&lt;br /&gt;
We have been working primarily with the Embedded Linux Conference, sponsored by the project&#039;s parent organization The Linux Foundation. We have typically sponsored both a booth and a Yocto Project DevDay/Summit in conjunction, given its high synergy.&lt;br /&gt;
&lt;br /&gt;
=== Physical Conference ===&lt;br /&gt;
&lt;br /&gt;
* Yocto Project must sign up for a booth&lt;br /&gt;
** Typically we join at the Bronze level, which provides a basic booth at a reasonable cost&lt;br /&gt;
** The contract must be negotiated several months ahead&lt;br /&gt;
** There is typically no penalty for later registration, but it could result in a late posting of the DevDay/Summit advertising and registration page, which can potentially affect attendance&lt;br /&gt;
* The Yocto Project booth pop-up&lt;br /&gt;
** Local the booth pop-up (currently with David) &lt;br /&gt;
** The booth travels as normal luggage, about 30-40 pounds&lt;br /&gt;
** The booth takes about 20 minutes to assemble and disassemble&lt;br /&gt;
* Booth posters &lt;br /&gt;
** If possible it is good to bring a collapsible stand, so that posters of the daily schedule of Yocto Project related talks can be advertised, in addition to the DevDay/Summit&lt;br /&gt;
** If no stand is present, then posters hanging in front the the booth pop-up and stand-up displays on the booth itself can be used&lt;br /&gt;
** There is a requirement to display the primary Yocto Project members (e.g. Platinum) at the booth&lt;br /&gt;
* Booth Content&lt;br /&gt;
** There should be handouts on the booth, for example:&lt;br /&gt;
*** Cards&lt;br /&gt;
*** Yocti&lt;br /&gt;
*** Swag (USB battery packs, spinners, pens, T-shirts&lt;br /&gt;
** T-Shirts are great giveaways and great live conference advertisements, but do require cost, transportation, and size distribution considerations&lt;br /&gt;
** Hand outs&lt;br /&gt;
*** It is good to have brochures that provide technical content about the project&lt;br /&gt;
*** We currently have a short form (~ 4 pages, and an older long form ~ pages with testimonials)&lt;br /&gt;
** Display computer&lt;br /&gt;
*** We often have a display running from a laptop of NUC. This can provide live browsing of the Yocto Project home page, documentation, Layer Index, DevDay/Summit home page. Visitors sometimes suggest web pages of their own as part of their questions.&lt;br /&gt;
** Demos&lt;br /&gt;
*** We try to have live demos at the booth, to attract visitors and stimulate conversations&lt;br /&gt;
*** Examples include Software Defined Radio, routers, robots, and once a race car&lt;br /&gt;
** Booth Hours&lt;br /&gt;
*** We usually get about 4 hours the day before the conference floor opens to prepare our booth&lt;br /&gt;
*** We typically need the booth attended 8 hours a day, in particular in between sessions and during lunch&lt;br /&gt;
*** ELC/ELCE typically have a special booth walk evening, where the entire conference is at the booths for 2 to 3 hours  &lt;br /&gt;
** Booth Attendance&lt;br /&gt;
*** It is important to arrange a schedule of booth watchers, so that we look organized and can be available to catch visitors&lt;br /&gt;
*** The booth schedule is typically 2 people in 2 hour slots across the open hours&lt;br /&gt;
*** One of the best part of the conference is that Yocto Project people generally hang around the booth even if they are not actually in the booth, so it is often easy to find an expert if a visitor asks a hard question&lt;br /&gt;
*** When the booth is closed each evening, the loose content must be locked up in the booth, and the key must go to someone whom is guaranteed to open the booth the next morning&lt;br /&gt;
** Booth Interaction&lt;br /&gt;
*** Each booth is given a badge scanner so that we can catch the visitors, This information is very important to the Yocto Project Advocacy Committee&lt;br /&gt;
*** Generally people are pleased to allow you to scan their badges, so no worries&lt;br /&gt;
*** We often offer the swag in exchange for the badge scan, to make this more efficient&lt;br /&gt;
*** There will generally be 20% of the people who come just for the swag, and that is ok&lt;br /&gt;
&lt;br /&gt;
=== Virtual Conference ===&lt;br /&gt;
&lt;br /&gt;
Virtual conferences share many of the same aspects of physical conferences. Here are the differences.&lt;br /&gt;
&lt;br /&gt;
* Booth Setup&lt;br /&gt;
** The conference will set up accounts a month ahead so that the virtual booth can be customized&lt;br /&gt;
** The conference will typically have a walk through the weeks before to insure that the booths are coming together and any questions can be answered&lt;br /&gt;
** Virtual booths are generally very limited (and not just because of the Bronze level), so one make the best that one can&lt;br /&gt;
** The virtual booth will typically require:&lt;br /&gt;
*** A central picture (and/or movie)&lt;br /&gt;
*** Links that are customized to any attached documents or web pages&lt;br /&gt;
*** A banner, good for messages-of-the-day (like relevant talks)&lt;br /&gt;
* Booth swag&lt;br /&gt;
** The booth &amp;quot;posters&amp;quot; will be present either on the virtual booth&#039;s page, or as downloadable documents&lt;br /&gt;
** All of the give away content will be electronic documents, including the brochures&lt;br /&gt;
** While we cannot physically give away swag, there are other possibilities like themed T-shirts that can be ordered directly by the visitors, at perhaps a discount&lt;br /&gt;
* Booth Attendance&lt;br /&gt;
** There is still the need to have the booth coverage managed for the same reason as a physical booth&lt;br /&gt;
** In place of physical interaction with visitors, the conferences usually include some form of live blog between the booth managers and visitors. This interface is alas usually very limited and clumsy, so it is often limited to basic greetings for forwarding people to the right documents and to the DevDay/Summit, and directing visitors to the YP slack channel&lt;br /&gt;
** The booth is still important for the basic reasons of advertising for the project and the DevDay/Summit&lt;br /&gt;
** In the recent virtual summits, we have still received a virtual visitor list and generally what they looked at, which is evidence that the booth is visited more that what the blog would reflect&lt;br /&gt;
* Slack Channel&lt;br /&gt;
** We have found that a separate Slack channel is very effective&lt;br /&gt;
** That interface is much more flexible and friendly&lt;br /&gt;
** It is also persistent across and after the conference &lt;br /&gt;
* Zoom Channel&lt;br /&gt;
** We have experimented with setting up a separate Zoom channel for direct conversations with visitors, but it was not really used. The slack channel ended up much more useful&lt;br /&gt;
&lt;br /&gt;
== Summit ==&lt;br /&gt;
&lt;br /&gt;
=== Developer Day versus Summit ===&lt;br /&gt;
&lt;br /&gt;
* DevDays&lt;br /&gt;
** Typically a single day, generally for the smaller ELC NA conference&lt;br /&gt;
** The speakers historically were directly invited, though this is moving to a CFP&lt;br /&gt;
** Ideally there are two tracks, the Beginning Class and the Intermediate Class&lt;br /&gt;
* Summits &lt;br /&gt;
** Typically two days, generally for the larger ELC Europe conference&lt;br /&gt;
** The speakers invited via CFP&lt;br /&gt;
** Beginning Track:&lt;br /&gt;
*** Day 1: Beginning Class&lt;br /&gt;
*** Day 2: Hands on Class&lt;br /&gt;
** Intermediate Track:&lt;br /&gt;
*** Day 1: Advanced and Intermediate Presentations&lt;br /&gt;
*** Day 2: Intermediate Presentations&lt;br /&gt;
&lt;br /&gt;
=== Physical Summit ===&lt;br /&gt;
&lt;br /&gt;
=== Virtual Summit ===&lt;br /&gt;
&lt;br /&gt;
== FAQ and Practicals ==&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Conference_Production&amp;diff=84570</id>
		<title>Yocto Conference Production</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Conference_Production&amp;diff=84570"/>
		<updated>2021-03-22T10:25:02Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Producing a Yocto Project Conference&lt;br /&gt;
&lt;br /&gt;
This page is intended to be a guide on how Yocto Project conferences (e.g. ELC and ELCE), Developer Days, and Summits are designed and executed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== High Level Calendar ==&lt;br /&gt;
&lt;br /&gt;
* Three months out&lt;br /&gt;
** Set the tentative dates&lt;br /&gt;
** Make arrangements with the conference for booth and DevDay/Summit registration&lt;br /&gt;
** Set up a preliminary budget, get tentative approval&lt;br /&gt;
** Setup flights and hotels&lt;br /&gt;
* Two months out&lt;br /&gt;
** Advertise event&lt;br /&gt;
** Announce the Call for Papers (CFP)&lt;br /&gt;
** Gather/order booth swag and collateral&lt;br /&gt;
** Setup conference page at Yocto home page&lt;br /&gt;
* One month out&lt;br /&gt;
** Announce presenters for DevDay/Summit&lt;br /&gt;
** Insure that conference registration is fully up&lt;br /&gt;
* One week out&lt;br /&gt;
** Confirm that presenter papers are coming together&lt;br /&gt;
** Confirm booth host schedule&lt;br /&gt;
&lt;br /&gt;
== Conference ==&lt;br /&gt;
&lt;br /&gt;
* Conferences are ideal ways to:&lt;br /&gt;
** Have an anchor for the booth, DevDay/Summit&lt;br /&gt;
** Advertise the project&lt;br /&gt;
** Connect with our community&lt;br /&gt;
** Connect between each other&lt;br /&gt;
** Advertise the DevDay/Summit&lt;br /&gt;
** Manage the DevDay/Summit registration and money&lt;br /&gt;
&lt;br /&gt;
We have been working primarily with the Embedded Linux Conference, sponsored by the project&#039;s parent organization The Linux Foundation. We have typically sponsored both a booth and a Yocto Project DevDay/Summit in conjunction, given its high synergy.&lt;br /&gt;
&lt;br /&gt;
=== Physical Conference ===&lt;br /&gt;
&lt;br /&gt;
* Yocto Project must sign up for a booth&lt;br /&gt;
** Typically we join at the Bronze level, which provides a basic booth at a reasonable cost&lt;br /&gt;
** The contract must be negotiated several months ahead&lt;br /&gt;
** There is typically no penalty for later registration, but it could result in a late posting of the DevDay/Summit advertising and registration page, which can potentially affect attendance&lt;br /&gt;
* The Yocto Project booth pop-up&lt;br /&gt;
** Local the booth pop-up (currently with David) &lt;br /&gt;
** The booth travels as normal luggage, about 30-40 pounds&lt;br /&gt;
** The booth takes about 20 minutes to assemble and disassemble&lt;br /&gt;
* Booth posters &lt;br /&gt;
** If possible it is good to bring a collapsible stand, so that posters of the daily schedule of Yocto Project related talks can be advertised, in addition to the DevDay/Summit&lt;br /&gt;
** If no stand is present, then posters hanging in front the the booth pop-up and stand-up displays on the booth itself can be used&lt;br /&gt;
** There is a requirement to display the primary Yocto Project members (e.g. Platinum) at the booth&lt;br /&gt;
* Booth Content&lt;br /&gt;
** There should be handouts on the booth, for example:&lt;br /&gt;
*** Cards&lt;br /&gt;
*** Yocti&lt;br /&gt;
*** Swag (USB battery packs, spinners, pens, T-shirts&lt;br /&gt;
** T-Shirts are great giveaways and great live conference advertisements, but do require cost, transportation, and size distribution considerations&lt;br /&gt;
** Hand outs&lt;br /&gt;
*** It is good to have brochures that provide technical content about the project&lt;br /&gt;
*** We currently have a short form (~ 4 pages, and an older long form ~ pages with testimonials)&lt;br /&gt;
** Display computer&lt;br /&gt;
*** We often have a display running from a laptop of NUC. This can provide live browsing of the Yocto Project home page, documentation, Layer Index, DevDay/Summit home page. Visitors sometimes suggest web pages of their own as part of their questions.&lt;br /&gt;
** Demos&lt;br /&gt;
*** We try to have live demos at the booth, to attract visitors and stimulate conversations&lt;br /&gt;
*** Examples include Software Defined Radio, routers, robots, and once a race car&lt;br /&gt;
** Booth Hours&lt;br /&gt;
*** We usually get about 4 hours the day before the conference floor opens to prepare our booth&lt;br /&gt;
*** We typically need the booth attended 8 hours a day, in particular in between sessions and during lunch&lt;br /&gt;
*** ELC/ELCE typically have a special booth walk evening, where the entire conference is at the booths for 2 to 3 hours  &lt;br /&gt;
** Booth Attendance&lt;br /&gt;
*** It is important to arrange a schedule of booth watchers, so that we look organized and can be available to catch visitors&lt;br /&gt;
*** The booth schedule is typically 2 people in 2 hour slots across the open hours&lt;br /&gt;
*** One of the best part of the conference is that Yocto Project people generally hang around the booth even if they are not actually in the booth, so it is often easy to find an expert if a visitor asks a hard question&lt;br /&gt;
*** When the booth is closed each evening, the loose content must be locked up in the booth, and the key must go to someone whom is guaranteed to open the booth the next morning&lt;br /&gt;
** Booth Interaction&lt;br /&gt;
*** Each booth is given a badge scanner so that we can catch the visitors, This information is very important to the Yocto Project Advocacy Committee&lt;br /&gt;
*** Generally people are pleased to allow you to scan their badges, so no worries&lt;br /&gt;
*** We often offer the swag in exchange for the badge scan, to make this more efficient&lt;br /&gt;
*** There will generally be 20% of the people who come just for the swag, and that is ok&lt;br /&gt;
&lt;br /&gt;
=== Virtual Conference ===&lt;br /&gt;
&lt;br /&gt;
Virtual conferences share many of the same aspects of physical conferences. Here are the differences.&lt;br /&gt;
&lt;br /&gt;
* Booth Setup&lt;br /&gt;
** The conference will set up accounts a month ahead so that the virtual booth can be customized&lt;br /&gt;
** The conference will typically have a walk through the weeks before to insure that the booths are coming together and any questions can be answered&lt;br /&gt;
** Virtual booths are generally very limited (and not just because of the Bronze level), so one make the best that one can&lt;br /&gt;
** The virtual booth will typically require:&lt;br /&gt;
*** A central picture (and/or movie)&lt;br /&gt;
*** Links that are customized to any attached documents or web pages&lt;br /&gt;
*** A banner, good for messages-of-the-day (like relevant talks)&lt;br /&gt;
* Booth swag&lt;br /&gt;
** The booth &amp;quot;posters&amp;quot; will be present either on the virtual booth&#039;s page, or as downloadable documents&lt;br /&gt;
** All of the give away content will be electronic documents, including the brochures&lt;br /&gt;
** While we cannot physically give away swag, there are other possibilities like themed T-shirts that can be ordered directly by the visitors, at perhaps a discount&lt;br /&gt;
* Booth Attendance&lt;br /&gt;
** There is still the need to have the booth coverage managed for the same reason as a physical booth&lt;br /&gt;
** In place of physical interaction with visitors, the conferences usually include some form of live blog between the booth managers and visitors. This interface is alas usually very limited and clumsy, so it is often limited to basic greetings for forwarding people to the right documents and to the DevDay/Summit, and directing visitors to the YP slack channel&lt;br /&gt;
** The booth is still important for the basic reasons of advertising for the project and the DevDay/Summit&lt;br /&gt;
** In the recent virtual summits, we have still received a virtual visitor list and generally what they looked at, which is evidence that the booth is visited more that what the blog would reflect&lt;br /&gt;
* Slack Channel&lt;br /&gt;
** We have found that a separate Slack channel is very effective&lt;br /&gt;
** That interface is much more flexible and friendly&lt;br /&gt;
** It is also persistent across and after the conference &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Summit ==&lt;br /&gt;
&lt;br /&gt;
=== Developer Day versus Summit ===&lt;br /&gt;
&lt;br /&gt;
=== Physical Summit ===&lt;br /&gt;
&lt;br /&gt;
=== Virtual Summit ===&lt;br /&gt;
&lt;br /&gt;
== FAQ and Practicals ==&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Conference_Production&amp;diff=84569</id>
		<title>Yocto Conference Production</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Conference_Production&amp;diff=84569"/>
		<updated>2021-03-22T10:09:50Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Producing a Yocto Project Conference&lt;br /&gt;
&lt;br /&gt;
This page is intended to be a guide on how Yocto Project conferences (e.g. ELC and ELCE), Developer Days, and Summits are designed and executed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== High Level Calendar ==&lt;br /&gt;
&lt;br /&gt;
* Three months out&lt;br /&gt;
** Set the tentative dates&lt;br /&gt;
** Make arrangements with the conference for booth and DevDay/Summit registration&lt;br /&gt;
** Set up a preliminary budget, get tentative approval&lt;br /&gt;
** Setup flights and hotels&lt;br /&gt;
* Two months out&lt;br /&gt;
** Advertise event&lt;br /&gt;
** Announce the Call for Papers (CFP)&lt;br /&gt;
** Gather/order booth swag and collateral&lt;br /&gt;
** Setup conference page at Yocto home page&lt;br /&gt;
* One month out&lt;br /&gt;
** Announce presenters for DevDay/Summit&lt;br /&gt;
** Insure that conference registration is fully up&lt;br /&gt;
* One week out&lt;br /&gt;
** Confirm that presenter papers are coming together&lt;br /&gt;
** Confirm booth host schedule&lt;br /&gt;
&lt;br /&gt;
== Conference ==&lt;br /&gt;
&lt;br /&gt;
* Conferences are ideal ways to:&lt;br /&gt;
** Have an anchor for the booth, DevDay/Summit&lt;br /&gt;
** Advertise the project&lt;br /&gt;
** Connect with our community&lt;br /&gt;
** Connect between each other&lt;br /&gt;
** Advertise the DevDay/Summit&lt;br /&gt;
** Manage the DevDay/Summit registration and money&lt;br /&gt;
&lt;br /&gt;
We have been working primarily with the Embedded Linux Conference, sponsored by the project&#039;s parent organization The Linux Foundation. We have typically sponsored both a booth and a Yocto Project DevDay/Summit in conjunction, given its high synergy.&lt;br /&gt;
&lt;br /&gt;
=== Physical Conference ===&lt;br /&gt;
&lt;br /&gt;
* Yocto Project must sign up for a booth&lt;br /&gt;
** Typically we join at the Bronze level, which provides a basic booth at a reasonable cost&lt;br /&gt;
** The contract must be negotiated several months ahead&lt;br /&gt;
** There is typically no penalty for later registration, but it could result in a late posting of the DevDay/Summit advertising and registration page, which can potentially affect attendance&lt;br /&gt;
* The Yocto Project booth pop-up&lt;br /&gt;
** Local the booth pop-up (currently with David) &lt;br /&gt;
** The booth travels as normal luggage, about 30-40 pounds&lt;br /&gt;
** The booth takes about 20 minutes to assemble and disassemble&lt;br /&gt;
* Booth posters &lt;br /&gt;
** If possible it is good to bring a collapsible stand, so that posters of the daily schedule of Yocto Project related talks can be advertised, in addition to the DevDay/Summit&lt;br /&gt;
** If no stand is present, then posters hanging in front the the booth pop-up and stand-up displays on the booth itself can be used&lt;br /&gt;
** There is a requirement to display the primary Yocto Project members (e.g. Platinum) at the booth&lt;br /&gt;
* Booth Content&lt;br /&gt;
** There should be handouts on the booth, for example:&lt;br /&gt;
*** Cards&lt;br /&gt;
*** Yocti&lt;br /&gt;
*** Swag (USB battery packs, spinners, pens, T-shirts&lt;br /&gt;
** T-Shirts are great giveaways and great live conference advertisements, but do require cost, transportation, and size distribution considerations&lt;br /&gt;
** Hand outs&lt;br /&gt;
*** It is good to have brochures that provide technical content about the project&lt;br /&gt;
*** We currently have a short form (~ 4 pages, and an older long form ~ pages with testimonials)&lt;br /&gt;
** Display computer&lt;br /&gt;
*** We often have a display running from a laptop of NUC. This can provide live browsing of the Yocto Project home page, documentation, Layer Index, DevDay/Summit home page. Visitors sometimes suggest web pages of their own as part of their questions.&lt;br /&gt;
** Demos&lt;br /&gt;
*** We try to have live demos at the booth, to attract visitors and stimulate conversations&lt;br /&gt;
*** Examples include Software Defined Radio, routers, robots, and once a race car&lt;br /&gt;
** Booth Hours&lt;br /&gt;
*** We usually get about 4 hours the day before the conference floor opens to prepare our booth&lt;br /&gt;
*** We typically need the booth attended 8 hours a day, in particular in between sessions and during lunch&lt;br /&gt;
*** ELC/ELCE typically have a special booth walk evening, where the entire conference is at the booths for 2 to 3 hours  &lt;br /&gt;
** Booth Attendance&lt;br /&gt;
*** It is important to arrange a schedule of booth watchers, so that we look organized and can be available to catch visitors&lt;br /&gt;
*** The booth schedule is typically 2 people in 2 hour slots across the open hours&lt;br /&gt;
*** One of the best part of the conference is that Yocto Project people generally hang around the booth even if they are not actually in the booth, so it is often easy to find an expert if a visitor asks a hard question&lt;br /&gt;
*** When the booth is closed each evening, the loose content must be locked up in the booth, and the key must go to someone whom is guaranteed to open the booth the next morning&lt;br /&gt;
** Booth Interaction&lt;br /&gt;
*** Each booth is given a badge scanner so that we can catch the visitors, This information is very important to the Yocto Project Advocacy Committee&lt;br /&gt;
*** Generally people are pleased to allow you to scan their badges, so no worries&lt;br /&gt;
*** We often offer the swag in exchange for the badge scan, to make this more efficient&lt;br /&gt;
*** There will generally be 20% of the people who come just for the swag, and that is ok&lt;br /&gt;
&lt;br /&gt;
=== Virtual Conference ===&lt;br /&gt;
&lt;br /&gt;
Virtual conferences share many of the same aspects of physical conferences. Here are the differences.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Summit ==&lt;br /&gt;
&lt;br /&gt;
=== Developer Day versus Summit ===&lt;br /&gt;
&lt;br /&gt;
=== Physical Summit ===&lt;br /&gt;
&lt;br /&gt;
=== Virtual Summit ===&lt;br /&gt;
&lt;br /&gt;
== FAQ and Practicals ==&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Conference_Production&amp;diff=84568</id>
		<title>Yocto Conference Production</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Conference_Production&amp;diff=84568"/>
		<updated>2021-03-22T09:57:18Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Producing a Yocto Project Conference&lt;br /&gt;
&lt;br /&gt;
This page is intended to be a guide on how Yocto Project conferences (e.g. ELC and ELCE), Developer Days, and Summits are designed and executed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== High Level Calendar ==&lt;br /&gt;
&lt;br /&gt;
* Three months out&lt;br /&gt;
** Set the tentative dates&lt;br /&gt;
** Make arrangements with the conference for booth and DevDay/Summit registration&lt;br /&gt;
** Set up a preliminary budget, get tentative approval&lt;br /&gt;
** Setup flights and hotels&lt;br /&gt;
* Two months out&lt;br /&gt;
** Advertise event&lt;br /&gt;
** Announce the Call for Papers (CFP)&lt;br /&gt;
** Gather/order booth swag and collateral&lt;br /&gt;
** Setup conference page at Yocto home page&lt;br /&gt;
* One month out&lt;br /&gt;
** Announce presenters for DevDay/Summit&lt;br /&gt;
** Insure that conference registration is fully up&lt;br /&gt;
* One week out&lt;br /&gt;
** Confirm that presenter papers are coming together&lt;br /&gt;
** Confirm booth host schedule&lt;br /&gt;
&lt;br /&gt;
== Conference ==&lt;br /&gt;
&lt;br /&gt;
* Conferences are ideal ways to:&lt;br /&gt;
** Have an anchor for the booth, DevDay/Summit&lt;br /&gt;
** Advertise the project&lt;br /&gt;
** Connect with our community&lt;br /&gt;
** Connect between each other&lt;br /&gt;
** Advertise the DevDay/Summit&lt;br /&gt;
** Manage the DevDay/Summit registration and money&lt;br /&gt;
&lt;br /&gt;
We have been working primarily with the Embedded Linux Conference, sponsored by the project&#039;s parent organization The Linux Foundation. We have typically sponsored both a booth and a Yocto Project DevDay/Summit in conjunction, given its high synergy.&lt;br /&gt;
&lt;br /&gt;
=== Physical Conference ===&lt;br /&gt;
&lt;br /&gt;
* Yocto Project must sign up for a booth&lt;br /&gt;
** Typically we join at the Bronze level, which provides a basic booth at a reasonable cost&lt;br /&gt;
** The contract must be negotiated several months ahead&lt;br /&gt;
** There is typically no penalty for later registration, but it could result in a late posting of the DevDay/Summit advertising and registration page, which can potentially affect attendance&lt;br /&gt;
* The Yocto Project booth pop-up&lt;br /&gt;
** Local the booth pop-up (currently with David) &lt;br /&gt;
** The booth travels as normal luggage, about 30-40 pounds&lt;br /&gt;
** The booth takes about 20 minutes to assemble and disassemble&lt;br /&gt;
* Booth posters &lt;br /&gt;
** If possible it is good to bring a collapsible stand, so that posters of the daily schedule of Yocto Project related talks can be advertised, in addition to the DevDay/Summit&lt;br /&gt;
** If no stand is present, then posters hanging in front the the booth pop-up and stand-up displays on the booth itself can be used&lt;br /&gt;
** There is a requirement to display the primary Yocto Project members (e.g. Platinum) at the booth&lt;br /&gt;
* Booth Content&lt;br /&gt;
** There should be handouts on the booth, for example:&lt;br /&gt;
*** Cards&lt;br /&gt;
*** Yocti&lt;br /&gt;
*** Swag (USB battery packs, spinners, pens, T-shirts&lt;br /&gt;
** T-Shirts are great giveaways and great live conference advertisements, but do require cost, transportation, and size distribution considerations&lt;br /&gt;
** Hand outs&lt;br /&gt;
*** It is good to have brochures that provide technical content about the project&lt;br /&gt;
*** We currently have a short form (~ 4 pages, and an older long form ~ pages with testimonials)&lt;br /&gt;
** Display computer&lt;br /&gt;
*** We often have a display running from a laptop of NUC. This can provide live browsing of the Yocto Project home page, documentation, Layer Index, DevDay/Summit home page. Visitors sometimes suggest web pages of their own as part of their questions.&lt;br /&gt;
** Demos&lt;br /&gt;
*** We try to have live demos at the booth, to attract visitors and stimulate conversations&lt;br /&gt;
*** Examples include Software Defined Radio, routers, robots, and once a race car&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Virtual Conference ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Summit ===&lt;br /&gt;
&lt;br /&gt;
=== Developer Day versus Summit ===&lt;br /&gt;
&lt;br /&gt;
=== Physical Summit ===&lt;br /&gt;
&lt;br /&gt;
=== Virtual Summit ===&lt;br /&gt;
&lt;br /&gt;
== FAQ and Practicals ==&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Conference_Production&amp;diff=84567</id>
		<title>Yocto Conference Production</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Conference_Production&amp;diff=84567"/>
		<updated>2021-03-22T09:48:17Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: Created page with &amp;quot;Producing a Yocto Project Conference  This page is intended to be a guide on how Yocto Project conferences (e.g. ELC and ELCE), Developer Days, and Summits are designed and ex...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Producing a Yocto Project Conference&lt;br /&gt;
&lt;br /&gt;
This page is intended to be a guide on how Yocto Project conferences (e.g. ELC and ELCE), Developer Days, and Summits are designed and executed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== High Level Calendar ==&lt;br /&gt;
&lt;br /&gt;
* Three months out&lt;br /&gt;
** Set the tentative dates&lt;br /&gt;
** Make arrangements with the conference for booth and DevDay/Summit registration&lt;br /&gt;
** Set up a preliminary budget, get tentative approval&lt;br /&gt;
** Setup flights and hotels&lt;br /&gt;
* Two months out&lt;br /&gt;
** Advertise event&lt;br /&gt;
** Announce the Call for Papers (CFP)&lt;br /&gt;
** Gather/order booth swag and collateral&lt;br /&gt;
** Setup conference page at Yocto home page&lt;br /&gt;
* One month out&lt;br /&gt;
** Announce presenters for DevDay/Summit&lt;br /&gt;
** Insure that conference registration is fully up&lt;br /&gt;
* One week out&lt;br /&gt;
** Confirm that presenter papers are coming together&lt;br /&gt;
** Confirm booth host schedule&lt;br /&gt;
&lt;br /&gt;
== Conference ==&lt;br /&gt;
&lt;br /&gt;
* Conferences are ideal ways to:&lt;br /&gt;
** Have an anchor for the booth, DevDay/Summit&lt;br /&gt;
** Advertise the project&lt;br /&gt;
** Connect with our community&lt;br /&gt;
** Connect between each other&lt;br /&gt;
** Advertise the DevDay/Summit&lt;br /&gt;
** Manage the DevDay/Summit registration and money&lt;br /&gt;
&lt;br /&gt;
We have been working primarily with the Embedded Linux Conference, sponsored by the project&#039;s parent organization The Linux Foundation. We have typically sponsored both a booth and a Yocto Project DevDay/Summit in conjunction, given its high synergy.&lt;br /&gt;
&lt;br /&gt;
=== Physical Conference ===&lt;br /&gt;
&lt;br /&gt;
* Yocto Project must sign up for a booth&lt;br /&gt;
** Typically we join at the Bronze level, which provides a basic booth at a reasonable cost&lt;br /&gt;
** The contract must be negotiated several months ahead&lt;br /&gt;
** There is typically no penalty for later registration, but it could result in a late posting of the DevDay/Summit advertising and registration page, which can potentially affect attendance&lt;br /&gt;
* The Yocto Project booth pop-up&lt;br /&gt;
** Local the booth pop-up (currently with David) &lt;br /&gt;
** The booth travels as normal luggage, about 30-40 pounds&lt;br /&gt;
** The booth takes about 20 minutes to assemble and disassemble&lt;br /&gt;
* Booth posters &lt;br /&gt;
** If possible it is good to bring a collapsible stand, so that posters of the daily schedule of Yocto Project related talks can be advertised, in addition to the DevDay/Summit&lt;br /&gt;
** If no stand is present, then posters hanging in front the the booth pop-up and stand-up displays on the booth itself can be used&lt;br /&gt;
** There is a requirement to display the primary Yocto Project members (e.g. Platinum) at the booth&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Virtual Conference ==&lt;br /&gt;
&lt;br /&gt;
== Summit ==&lt;br /&gt;
&lt;br /&gt;
=== Developer Day versus Summit ===&lt;br /&gt;
&lt;br /&gt;
=== Physical Summit ===&lt;br /&gt;
&lt;br /&gt;
=== Virtual Summit ==&lt;br /&gt;
&lt;br /&gt;
== FAQ and Practicals ==&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Contribute_to_SRTool&amp;diff=81522</id>
		<title>Contribute to SRTool</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Contribute_to_SRTool&amp;diff=81522"/>
		<updated>2020-11-24T05:50:45Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: /* Set up the local repository and SRTool instance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:SRTool]]&lt;br /&gt;
This page summarizes the Security Response Tool (SRTool) development process. We hope this will help you start contributing to the project. The SRTool is based on the Yocto Project Toaster codebase (Django,Python,Javascript), so many of the process and debugging techniques apply. &lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
== Published content: General CVE management issues and the SRTool ==&lt;br /&gt;
* The SRTool paper for the Embedded Linux Conference, Edinburg 2018:&lt;br /&gt;
** https://events.linuxfoundation.org/wp-content/uploads/2017/12/Keeping-Up-With-The-Joneses-CVEs-David-Reyna-Wind-River-Systems.pdf�&lt;br /&gt;
* Wind River Blog about CVEs and the SRTool&lt;br /&gt;
** http://blogs.windriver.com/wind_river_blog/2018/11/security-response-management-risk-cost-and-best-practices-in-an-imperfect-world.html�&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Set up the local repository and SRTool instance ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;1) Host requirements&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The SRTool should in principle work on any host that supports Yocto Project. It requires &amp;quot;Python3&amp;quot;, &amp;quot;Django &amp;gt;= 1.11&amp;quot;, and &amp;quot;Sqlite3&amp;quot;. A SQL GUI tool like &#039;sqlitebrowser&#039; is recommended.&lt;br /&gt;
&lt;br /&gt;
The required host package installation instructions are the same as Toaster, and the instructions can be found here: [http://www.yoctoproject.org/docs/latest/toaster-manual/toaster-manual.html#toaster-manual-start Toaster documentation]&lt;br /&gt;
&lt;br /&gt;
It was specifically developed and tested with:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: left;&amp;quot;&lt;br /&gt;
! Item&lt;br /&gt;
! Host 1&lt;br /&gt;
! Host 2&lt;br /&gt;
! Host 3&lt;br /&gt;
|-&lt;br /&gt;
|Host&lt;br /&gt;
|Ubuntu 16.04&lt;br /&gt;
|Ubuntu 16.04&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Python3&lt;br /&gt;
|3.5.2&lt;br /&gt;
|3.5.2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Django&lt;br /&gt;
|1.11 LTS&lt;br /&gt;
|2.2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Sqlite3&lt;br /&gt;
|3.11&lt;br /&gt;
|3.11&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;2) Cloning the SRTool&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;code&amp;gt; $ git clone git://git.yoctoproject.org/srtool &amp;amp;&amp;amp; cd srtool &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the command if your SSH key is registered:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;code&amp;gt; $ git clone ssh://git@push.yoctoproject.org/srtool &amp;amp;&amp;amp; cd srtool &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;3) Starting the SRTool&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Option #1: Restrict to the local browser:&lt;br /&gt;
  &amp;lt;code&amp;gt; $ ./bin/srt start webport=localhost:9000 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Option #2: Enable remote browsers:&lt;br /&gt;
  &amp;lt;code&amp;gt; $ ./bin/srt start webport=0.0.0.0:9000 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;NOTE&amp;lt;/strong&amp;gt;: The first time you run the SRTool, there will be a delay (30 to 60 minutes) as the default CVE repositories (NIST, Mitre, ...) are scanned, scored, and loaded into the database. After that, the updates will be incremental.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;4) Create a superuser&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need to create at least one super user account to promote users to higher permission levels:&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;code&amp;gt; $ ./bin/srt manage createsuperuser&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;5) Open browser to &amp;lt;IPADDR&amp;gt;:9000&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will bring up the SRTool page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;6) Read the &amp;quot;Guided Tour&amp;quot; &amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Click on the &amp;quot;Guided Tour&amp;quot; button on the home page to see the on-line tool and user information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;7) Create your guest account&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Click on the &amp;quot;Login&amp;quot; button in the top bar, select &amp;quot;Request Account&amp;quot;, fill in the information, Click &amp;quot;Sign Up&amp;quot;, and then log in.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;8) Promote your account to Admin level&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the superuser, click &amp;quot;Management &amp;gt; Manage Users&amp;quot;, click the edit icon for your guest account row, change the &amp;quot;Group&amp;quot; to &amp;quot;Admin&amp;quot;, and click &amp;quot;Submit Changes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
You can now log out of the superuser account and into your own account.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sanity Test Bring-up ==&lt;br /&gt;
&lt;br /&gt;
You can use these steps to start a minimal instance of the SRTool to help validate that the host and the code base are working on your system. This will for example set the environment variable &amp;quot;SRTDBG_MINIMAL_DB=1&amp;quot; which will only fetch a few representative records from each data source.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  $ git pull&lt;br /&gt;
  $ # Copy the dev tools to the base directory&lt;br /&gt;
  $ cp bin/dev_tools/* .&lt;br /&gt;
  $ # Source the debug environment&lt;br /&gt;
  $ . ./srt_env.sh debug&lt;br /&gt;
  $ # Start the system from scratch&lt;br /&gt;
  $ ./recreate.sh&lt;br /&gt;
  $ # Run the sanity test&lt;br /&gt;
  $ ./bin/common/srtool_sanity_test.py -i&lt;br /&gt;
  $ &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  $ ./bin/common/srtool_sanity_test.py -i&lt;br /&gt;
  Uname       = #35~16.04.1-Ubuntu SMP Thu Jan 25 10:13:43 UTC 2018 x86_64&lt;br /&gt;
  Django      = (1, 11, 8, &#039;final&#039;, 0)&lt;br /&gt;
  Python3     = Python 3.5.2&lt;br /&gt;
  Sqlite3     = 3.11.0 2016-02-15&lt;br /&gt;
  Server PID  = 10234&lt;br /&gt;
  Server Port = [10234](/opt/srtool/lib/manage.py runserver --noreload 0.0.0.0:9123)&lt;br /&gt;
  CVEs        = 64&lt;br /&gt;
  Users       = 5&lt;br /&gt;
  Data source = 22&lt;br /&gt;
  $ &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To re-start as the full instance, do this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  $ # Source the standard environment&lt;br /&gt;
  $ . ./srt_env.sh&lt;br /&gt;
  $ # Start the system from scratch&lt;br /&gt;
  $ ./recreate.sh&lt;br /&gt;
  $ &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== First Time Bring-up ==&lt;br /&gt;
&lt;br /&gt;
* When you first start, you will have the CVEs from 2015 to 2018&lt;br /&gt;
* You will not have any Vulnerabilities, Investigations, or Defects until you (a) create them, and/or (b) integrate your defect system or other sustaining data.&lt;br /&gt;
* All CVEs will by default get the status &amp;quot;Historical&amp;quot;.&lt;br /&gt;
** The CVEs that were created in the previous 30 days will instead get the status &amp;quot;New&amp;quot;&lt;br /&gt;
** This will allow you to immediately test the CVE triage features&lt;br /&gt;
** The status settings are normally preset by your defect system or other sustaining data&lt;br /&gt;
* You can create a Vulnerability by:&lt;br /&gt;
** Selecting a CVE&lt;br /&gt;
** Click on &amp;quot;Create Vulnerability&amp;quot;&lt;br /&gt;
** Follow the new link to the new Vulnerability&lt;br /&gt;
* You can create an Investigation by:&lt;br /&gt;
** Open a Vulnerability record&lt;br /&gt;
** Click on &amp;quot;Add Product&amp;quot;&lt;br /&gt;
** Select one or more Products, and click &amp;quot;Submit&amp;quot;&lt;br /&gt;
** Observe that the products are added together with new respective Investigations&lt;br /&gt;
** Follow the new link to the new Investigations&lt;br /&gt;
* You can create a Defect by:&lt;br /&gt;
** Open an Investigation record&lt;br /&gt;
** Click on &amp;quot;Create Defect&amp;quot;&lt;br /&gt;
** With the sample defect integration script, a simulated defect will be created and attached to the investigation&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SRTool Primary Goals and Workflows ==&lt;br /&gt;
&lt;br /&gt;
* Goals&lt;br /&gt;
** A common system to track and share security issues, combining community CVE&#039;s&lt;br /&gt;
** A simple yet flexible interface for reporting and exploring the security issues&lt;br /&gt;
** A place to upload and share attachments, including patches, fixes, emails, and documents&lt;br /&gt;
** The ability to generate accurate and up-to-date reports and exports&lt;br /&gt;
** A modular design for easy extension and adoption&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* Primary Workflows&lt;br /&gt;
** Guide and manage the incoming CVE triage process&lt;br /&gt;
** Attach CVEs to specific company products and defects &lt;br /&gt;
** Automated updates from upstream CVEs and internal defect system&lt;br /&gt;
** Ability to generate reports&lt;br /&gt;
** Simple customization for organizations&lt;br /&gt;
** Correlate CVEs with products and release (IN PROGRESS)&lt;br /&gt;
** Correlate CVEs with specific customer builds (IN PROGRESS)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SRTool CVE Lifecycle ==&lt;br /&gt;
&lt;br /&gt;
* CVE are imported&lt;br /&gt;
** New CVEs are imported and triaged from upstream (NIST/MITRE, 1000+/month)&lt;br /&gt;
** Specific CVEs are requested by customers&lt;br /&gt;
* CVEs are managed&lt;br /&gt;
** CVEs are investigated&lt;br /&gt;
** Vulnerable CVEs are assigned to products via defects&lt;br /&gt;
** SRTool manager tracks the progress of open CVEs&lt;br /&gt;
** SRTool manager produces reports as required by customers, field, and management&lt;br /&gt;
* CVEs are resolved&lt;br /&gt;
** CVEs are either fixed or declared not vulnerable&lt;br /&gt;
** Releases are updated with the CVE fixes&lt;br /&gt;
** Resolved CVEs are reported to customers, public website&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Testing the Alternate Sample Organization &#039;ACME&#039; ==&lt;br /&gt;
&lt;br /&gt;
* An example alternate organization (master application) called &amp;quot;acme&amp;quot; is included.&lt;br /&gt;
* This code shows all the ways the SRTool can be easily customized to the needs of your organization&lt;br /&gt;
* To enable it and try it out, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ # Include the quick development tools&lt;br /&gt;
    $ cp bin/dev_tools/* .&lt;br /&gt;
    $ # Reset &#039;acme&#039; as the master app/organization&lt;br /&gt;
    $ ./stop.sh&lt;br /&gt;
    $ ./master_app.sh acme&lt;br /&gt;
    $ ./start.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* When you browse the SRTool pages, will now observe several differences&lt;br /&gt;
** In the top bar the text &amp;quot;[ACME]&amp;quot; will appear in several places. This shows how files like &amp;quot;lib/acme/templates/base.html&amp;quot; can take precedence over the default template files in &amp;quot;lib/srtgui&amp;quot;. &lt;br /&gt;
** In the top left corner the &amp;quot;ACME&amp;quot; logo will appear. This is from &amp;quot;SRTOOL_LOCAL_LOGO&amp;quot; being defined in &amp;quot;datasource.json&amp;quot;.&lt;br /&gt;
** If you click on the ACME logo you will be taken to an ACME hello page. This shows that &amp;quot;lib/acme/urls.py&amp;quot; has extended the URL map, plus how you can implement basic HTML pages in ACME&#039;s &amp;quot;lib/acme/views.py&amp;quot; and &amp;quot;lib/acme/templates/acme_hello.html&amp;quot;.&lt;br /&gt;
** In the ACME hello page, there are links to custom table pages for Products and Defects. This shows how to implement custom Toaster Tables via &amp;quot;lib/acme/urls.py&amp;quot; and &amp;quot;lib/acme/tables.py&amp;quot;&lt;br /&gt;
** In the Products page, when you click &amp;quot;Export&amp;quot; a new report type &amp;quot;ACME Products Table&amp;quot; is appended. This shows how to extend and customize existing or new reports.&lt;br /&gt;
&lt;br /&gt;
* To restore the default &amp;quot;yp&amp;quot; master application, do the following:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $ ./stop.sh&lt;br /&gt;
    $ ./master_app.sh yp&lt;br /&gt;
    $ ./start.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Adapting SRTool to your Organization ==&lt;br /&gt;
&lt;br /&gt;
* You can use the sample alternate organization &amp;quot;acme&amp;quot; as a guide to adapt SRTool to your organization&lt;br /&gt;
* In this example, we will instantiate a new organization called &amp;quot;&amp;lt;strong&amp;gt;yoyodyne&amp;lt;/strong&amp;gt;&amp;quot;&lt;br /&gt;
* You should be able to place all of your local content into these two directories:&lt;br /&gt;
** &amp;lt;strong&amp;gt;&amp;quot;./bin/yoyodyne&amp;quot;&amp;lt;/strong&amp;gt;: this is your master datasource directory&lt;br /&gt;
** &amp;lt;strong&amp;gt;&amp;quot;./lib/yoyodyne&amp;quot;&amp;lt;/strong&amp;gt;: this is your master Django App directory&lt;br /&gt;
* If you find you need to make changes in the core SRTool code, we recommend (in preferential order):&lt;br /&gt;
** See if you can make it a generic feature so that it can become part of the mainline codebase&lt;br /&gt;
** See if you can make an easy hook for the mainline code, so that your custom content can still reside in your directories&lt;br /&gt;
** Talk to us on how to easily have managed custom patches to the mainline code (we do this in Toaster)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;1) Instantiate your Organization&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can create a starting customization of the SRTool for your organization with these simple steps. &lt;br /&gt;
* In this example, we will use the name &amp;quot;yoyo&amp;quot; as a shorthand for a mythical &amp;quot;Yoyodyne Corporation&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  $ cd /path_to/srtool_dir&lt;br /&gt;
  $ copy bin/dev_tools/* .&lt;br /&gt;
  $ ./stop.sh&lt;br /&gt;
  $ ./master_app.sh create yoyo&lt;br /&gt;
  $ ./start.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* This script will perform the following actions:&lt;br /&gt;
** Copy the sample &#039;bin/acme&#039; directory to &#039;bin/yoyo&#039;&lt;br /&gt;
** Copy the sample &#039;lib/acme&#039; directory to &#039;lib/yoyo&#039;&lt;br /&gt;
** Rename the respective Acme/ACME/acme labels and filenames to Yoyo/YOYO/yoyo&lt;br /&gt;
** Set &#039;yoyo&#039; as the new main application&lt;br /&gt;
* You now have access to all the preset custom features described above for the ACME sample organization, now for Yoyodyne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;2) Add your defect system integration&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need to implement a defect integration backend script to scan your defect system and instantiate the CVE defects in SRTool database, and then keep them up to date.&lt;br /&gt;
&lt;br /&gt;
* An example implementation template for Jira is provided here. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  bin/common/srtool_jira_template.py&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* You can use this to guide your integration to Jira or to other defect systems.&lt;br /&gt;
* To see how to extend this template to your organization and yet maintain compatibility with upstream, see this section: [https://wiki.yoctoproject.org/wiki/SRTool_Developer_Page#Extending_and_customizing_common.2Ftemplate_code_files Extending and customizing common/template code files]&lt;br /&gt;
* Please contact the SRTool developers for assistance in your defect system integration effort.&lt;br /&gt;
&lt;br /&gt;
The main features of this example code, in addition to the Jira system access, is:&lt;br /&gt;
&lt;br /&gt;
*  The &amp;quot;--init&amp;quot; command&lt;br /&gt;
** This command that will initialize the SRTool database with your SRT related defects. Specifically, this command can used to bootstrap the SRTool database for your company&#039;s data&lt;br /&gt;
** It will create an &amp;quot;Investigation&amp;quot; for each defect, and attach it to the respective product&lt;br /&gt;
** It will create a &amp;quot;Vulnerability&amp;quot; to wrap the respective &amp;quot;Investigation&amp;quot;&lt;br /&gt;
** If should find the respective CVE record if it exists, and attach that to the created &amp;quot;Vulnerability&amp;quot;&lt;br /&gt;
** If a &amp;quot;Vulnerability&amp;quot; record already exists for the defect&#039;s CVE, then this script should attach the new &amp;quot;Investigation&amp;quot; to that &amp;quot;Vulnerability&amp;quot; record.&lt;br /&gt;
* The &amp;quot;--update&amp;quot; command&lt;br /&gt;
** This will scan your CVE-related defects&lt;br /&gt;
** If the matching defect record in the SRTool database does not exist, then treat it like the &amp;quot;--init&amp;quot; command.&lt;br /&gt;
** It will update the SRTool defect record with the current defect system state&lt;br /&gt;
** If the defect has changed priority (or any other important state information), it will create a &amp;quot;Notification&amp;quot; event to the respective manager so that they can know that they need to act on the change.&lt;br /&gt;
* The example code assumes that the CVE names are available via a text-based search, for example when the respective CVE name is in the defect title or comments. If your system uses a different marker, then you will need to code for that.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== High Level Development Plan ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: left;&amp;quot;&lt;br /&gt;
! Release&lt;br /&gt;
! Features&lt;br /&gt;
! Status/date&lt;br /&gt;
|-&lt;br /&gt;
|0.80&lt;br /&gt;
|Multi-host testing, Django user model, Django 2.x support&lt;br /&gt;
|Released (December 2018)&lt;br /&gt;
|-&lt;br /&gt;
|0.90&lt;br /&gt;
|Mapping of CVE-CPE &amp;gt; Packages &amp;gt; Recipes &amp;gt; Product/Release CPEs, Add Releases to Products, modular report definitions&lt;br /&gt;
|Under development (January 2019)&lt;br /&gt;
|-&lt;br /&gt;
|1.00&lt;br /&gt;
|General Release&lt;br /&gt;
|Under development (February 2019)&lt;br /&gt;
|-&lt;br /&gt;
|1.10&lt;br /&gt;
|Improved CPE/package mapping hueristics, advanced reports&lt;br /&gt;
|Under development (March+ 2019)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== SRTool Bugzilla Page ==&lt;br /&gt;
&lt;br /&gt;
Here is the link to the SRTool Bugzilla Page: [https://bugzilla.yoctoproject.org/buglist.cgi?list_id=609538&amp;amp;bug_status=__all__&amp;amp;query_format=specific&amp;amp;order=relevance%20desc&amp;amp;product=Security%20Response%20Tool SRTool Bugzilla Page]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== SRTool CGIT Page ==&lt;br /&gt;
&lt;br /&gt;
Here is the link to the CGIT Page: [http://git.yoctoproject.org/cgit/cgit.cgi/srtool SRTool CGIT Page]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== SRTool User Page ==&lt;br /&gt;
&lt;br /&gt;
Here is the link to the User&#039;s Documentation page: [https://wiki.yoctoproject.org/wiki/SRTool_User_Page SRTool UserPage]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== SRTool Developer Page ==&lt;br /&gt;
&lt;br /&gt;
Here is the link to the Developer&#039;s page: [https://wiki.yoctoproject.org/wiki/SRTool_Developer_Page SRTool Developer Page]&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=YP_Summit_Europe_2020&amp;diff=78717</id>
		<title>YP Summit Europe 2020</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=YP_Summit_Europe_2020&amp;diff=78717"/>
		<updated>2020-10-08T22:11:03Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: /* Slides */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains slides for the talks in the Yocto Project Virtual Summit at ELCE 2020&lt;br /&gt;
&lt;br /&gt;
Starting at 9:00am, 29-30 October 2020. &lt;br /&gt;
&lt;br /&gt;
YP Summit home page is here: [https://wiki.yoctoproject.org/wiki/Yocto_Project_Summit_2020 https://wiki.yoctoproject.org/wiki/Yocto_Project_Summit_2020] &lt;br /&gt;
&lt;br /&gt;
== Slides ==&lt;br /&gt;
&lt;br /&gt;
* Presenter Slides Thursday October 29&lt;br /&gt;
&lt;br /&gt;
* Presenter/Class Slides Friday October 30&lt;br /&gt;
&lt;br /&gt;
* Class Code&lt;br /&gt;
&lt;br /&gt;
* Slides template &lt;br /&gt;
&lt;br /&gt;
  [https://wiki.yoctoproject.org/wiki/File:Yocto_Project_DevDay_EU2020_Template.pptx Yocto_Project_DevDay_EU2020_Template.pptx]&lt;br /&gt;
  [https://wiki.yoctoproject.org/wiki/File:Yocto_Project_DevDay_EU2020_Template.odp Yocto_Project_DevDay_EU2020_Template.odp]&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=File:Yocto_Project_DevDay_EU2020_Template.odp&amp;diff=78716</id>
		<title>File:Yocto Project DevDay EU2020 Template.odp</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=File:Yocto_Project_DevDay_EU2020_Template.odp&amp;diff=78716"/>
		<updated>2020-10-08T22:09:58Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: Template slide deck for YP Summit Europe 2020 (ODP).&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Template slide deck for YP Summit Europe 2020 (ODP).&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=YP_Summit_Europe_2020&amp;diff=78688</id>
		<title>YP Summit Europe 2020</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=YP_Summit_Europe_2020&amp;diff=78688"/>
		<updated>2020-10-08T16:10:16Z</updated>

		<summary type="html">&lt;p&gt;David Reyna: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains slides for the talks in the Yocto Project Virtual Summit at ELCE 2020&lt;br /&gt;
&lt;br /&gt;
Starting at 9:00am, 29-30 October 2020. &lt;br /&gt;
&lt;br /&gt;
YP Summit home page is here: [https://wiki.yoctoproject.org/wiki/Yocto_Project_Summit_2020 https://wiki.yoctoproject.org/wiki/Yocto_Project_Summit_2020] &lt;br /&gt;
&lt;br /&gt;
== Slides ==&lt;br /&gt;
&lt;br /&gt;
* Presenter Slides Thursday October 29&lt;br /&gt;
&lt;br /&gt;
* Presenter/Class Slides Friday October 30&lt;br /&gt;
&lt;br /&gt;
* Class Code&lt;br /&gt;
&lt;br /&gt;
* Slides template &lt;br /&gt;
&lt;br /&gt;
  [https://wiki.yoctoproject.org/wiki/File:Yocto_Project_DevDay_EU2020_Template.pptx Yocto_Project_DevDay_EU2020_Template.pptx]&lt;/div&gt;</summary>
		<author><name>David Reyna</name></author>
	</entry>
</feed>