<?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=Bill+Randle</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=Bill+Randle"/>
	<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/Special:Contributions/Bill_Randle"/>
	<updated>2026-04-08T18:19:19Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.5</generator>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Maintenance&amp;diff=20257</id>
		<title>AutoBuilder Maintenance</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Maintenance&amp;diff=20257"/>
		<updated>2016-09-17T02:55:46Z</updated>

		<summary type="html">&lt;p&gt;Bill Randle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
An AutoBuilder system consists of a controller and one or more workers. The controller reads configuration files, presents a simple web user interface and sends build step commands to the worker(s). (Note: the terms &amp;quot;worker&amp;quot; and &amp;quot;build slave&amp;quot; both refer to the machine or process performing the actual build, and are used interchangeably.)&lt;br /&gt;
&lt;br /&gt;
When making changes to the AutoBuilder, it is important to remember what the different parts of the system do and which machines need to be restarted after a change (controller or workers).&lt;br /&gt;
&lt;br /&gt;
* The build step configuration files contain a list of build steps to carry out for a particular build artifact or test (e.g., nightly-x86.conf or nightly-oe-selftest.conf). Some build step configuration files trigger other builds - e.g., nightly.conf triggers all the other nightly builds. A build step configuration file can also have user interface components: poky repo and branch, save build artifacts, etc. A build step configuration file also contains a list of workers (or builders) that are able to build this specific config. For example, poky-eclipse-neon requires JDK 1.8, so the list of workers is limited to those with Java 1.8 installed. Or,the list of workers for the nightly-rpm-non-rpm config is limited to those that do not use rpm as the native package manager (e.g., Debian and Ubuntu). The working set of build step config files live in the &#039;&#039;buildstep-config&#039;&#039; directory.&lt;br /&gt;
* The yoctoAB.conf also lives in the &#039;&#039;buildstep-config&#039;&#039; directory and contains a list of build step configurations that should be included in the web pages and their order.&lt;br /&gt;
* The autobuilder.conf contains variables to specify directory paths, the number of parallel makes, the list of QA email addresses, etc. Some of (but not all) of these variables are also passed to the worker(s). What is passed on is determined by the CreateAutoConf build step. The autobuilder.conf file lives in the &#039;&#039;config&#039;&#039; directory.&lt;br /&gt;
* The actual build step implementation files are written in Python and live in the &#039;&#039;lib/python2.7/site-packages/autobuilder&#039;&#039; and &#039;&#039;lib/python2.7/site-packages/autobuilder/buildsteps&#039;&#039; directories. There is typically a one-to-one mapping between the build steps in the build step config files and an Python implementation file. Often, the implementation consists of sending a set of shell commands for the worker to execute.&lt;br /&gt;
* The core buildbot code for the controller lives in &#039;&#039;lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg&#039;&#039;. It rarely needs to be changed unless a major new feature is added.&lt;br /&gt;
* The core buildbot code for the worker lives in &#039;&#039;lib/python2.7/site-packages/buildbot_slave-0.8.8-py2.7.egg&#039;&#039;. It rarely needs to be changed unless a major new feature is added.&lt;br /&gt;
&lt;br /&gt;
The various configuration and build step implementation files are read by the controller once on startup (startup of the controller process, not the machine as a whole) and cached. If any of the files change, the controller must be stopped and restarted:&lt;br /&gt;
: . ./yocto-autobuilder-setup&lt;br /&gt;
: ./yocto-stop-autobuilder controller&lt;br /&gt;
: ./yocto-start-autobuilder controller&lt;br /&gt;
&lt;br /&gt;
Generally, the only time a worker needs to be stopped and restarted is when the underlying buildbot_slave code changes. The procedure is the same as above for the controller, except replace &amp;quot;controller&amp;quot; with &amp;quot;worker&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Note: when making any changes on an AutoBuilder cluster, be sure you are doing it as the pokybuild user. That is, ssh into the remote machine with your normal login account, the run &#039;sudo -iu pokybuild&#039;.&lt;br /&gt;
&lt;br /&gt;
== Example Changes ==&lt;br /&gt;
This section presents a cookbook approach to common tasks often required as part of AutoBuilder updates or maintenance.&lt;br /&gt;
&lt;br /&gt;
=== Build Additional Image for an Existing Configuration ===&lt;br /&gt;
Let&#039;s say a particular build step config had a rule to build core-image-sato and core-image-minimal images:&lt;br /&gt;
: {&#039;BuildImages&#039;: {&#039;images&#039;: &#039;core-image-minimal core-image-sato&#039;}},&lt;br /&gt;
and you want to also build core-image-weston. Simply add the weston image to the list:&lt;br /&gt;
: {&#039;BuildImages&#039;: {&#039;images&#039;: &#039;core-image-minimal core-image-sato core-image-weston&#039;}},&lt;br /&gt;
To include the new image in the sanity tests, just add it to the list:&lt;br /&gt;
: {&#039;RunSanityTests&#039;: {&#039;images&#039;: &#039;core-image-minimal core-image-sato core-image-weston&#039;}},&lt;br /&gt;
After all the changes are made, restart the controller.&lt;br /&gt;
&lt;br /&gt;
=== Add an Additional Machine Configuration ===&lt;br /&gt;
We recently expanded the list of machines that wic images were built for. The original nightly-wic.conf file had rules to build qemux86_64 and genericx86_64 images. To build images for qemux86 and genericx86, new CreateAutoConf, BuildImages and CreateWicImages steps were added. For example:&lt;br /&gt;
: {&#039;CreateAutoConf&#039;:{&#039;machine&#039;:&#039;qemux86&#039;, &#039;atextappend&#039;:&#039;\nIMAGE_FSTYPES += &amp;quot; hddimg&amp;quot;\nMACHINE_FEATURES_append = &amp;quot; efi&amp;quot;\n&#039;}},&lt;br /&gt;
: {&#039;BuildImages&#039;:{&#039;images&#039;:&#039;syslinux syslinux-native parted-native gptfdisk-native dosfstools-native mtools-native&#039;}},&lt;br /&gt;
: {&#039;BuildImages&#039;:{&#039;images&#039;:&#039;core-image-sato&#039;}},&lt;br /&gt;
: {&#039;CreateWicImages&#039;:{&#039;wic_img_type&#039;:&#039;directdisk&#039;, &#039;target_img&#039;:&#039;core-image-sato&#039;}},&lt;br /&gt;
: {&#039;CreateWicImages&#039;:{&#039;wic_img_type&#039;:&#039;directdisk-gpt&#039;, &#039;target_img&#039;:&#039;core-image-sato&#039;}},&lt;br /&gt;
: {&#039;CreateWicImages&#039;:{&#039;wic_img_type&#039;:&#039;mkefidisk&#039;, &#039;target_img&#039;:&#039;core-image-sato&#039;}},&lt;br /&gt;
Normally, the extra &#039;atextappend&#039; entry is not required for CreateAutoConf, but in this case it is needed for the efi image type creation. When you add new machine configurations, don&#039;t forget to add the new machine type to the list of artifacts to publish in the PublishArtifacts step.&lt;br /&gt;
&lt;br /&gt;
=== Add a New Build Config ===&lt;br /&gt;
To add a new build to the collection of build products, create a new config file and copy to the buildset-config directory, update nightly.conf and yoctoAB.conf and restart the controller. For example, eclipse-plugin-neon was recently added to the build list. Since there are other eclipse plugins, it was easiest to copy an existing config file (i.e., eclipse-plugin-mars.conf) and change the names from &amp;quot;mars&amp;quot; to neon&amp;quot;. The list of &amp;quot;builders&amp;quot; was changed to include only those workers with native Java 1.8 support. The yoctoAB.conf file (in the &#039;&#039;buildset-config&#039;&#039; directory) was updated to add eclipse-plugin-neon to the list, and in this case, since eclipse-poky-kepler was being deprecated, it was removed from the list. In the nightly.conf file, eclipse-plugin-neon was added to the list of repos and to the TriggeredBuild list and eclipse-poky-kepler was removed.&lt;br /&gt;
&lt;br /&gt;
=== Remove a Build Config ===&lt;br /&gt;
Removing an existing build config is like following the Add instructions in reverse. Find the entry in the yoctoAB.conf and remove it; look for the entry in nightly.conf, and remove it if present; and finally, remove the conf file itself. Restart the controller.&lt;br /&gt;
&lt;br /&gt;
=== Pass a New Variable to the Workers ===&lt;br /&gt;
As mentioned above, only a subset of the variables in autobuilder.conf are actually passed down to the worker. To include a new variable in the list, first add it to autobuilder.conf (e.g., MY_NEW_VAR = &amp;quot;somevalue&amp;quot;). This makes it visible to the controller. Next edit the CreateAutoConf.py build step implementation file. In the start() function, add the new variable with a construct like:&lt;br /&gt;
: if os.environ.get(&#039;MY_NEW_VAR&#039;) is not None:&lt;br /&gt;
:: fout = fout + &#039;MY_NEW_VAR = &amp;quot;&#039; + os.environ.get(&#039;MY_NEW_VAR&#039;) + &#039;&amp;quot;&#039;&lt;br /&gt;
Restart the controller.&lt;br /&gt;
&lt;br /&gt;
=== Update the List of QA Email Recipients ===&lt;br /&gt;
To change the list of people receiving the QA notification emails, edit the autobuilder.conf file and change the contents of the QA_MAIL_CC variable. Restart the controller.&lt;br /&gt;
&lt;br /&gt;
=== Add a New User Control ===&lt;br /&gt;
When starting a build via the web page, you are presented with one or more controls to pass information to the controller. Most every build set config includes text boxes for the poky repo and branch selections. Other configs, like nightly.conf have quite a few controls to select if this is a release build, if QA emails should be sent, git repos and branches for other layers or repositories (e.g., meta-intel, oecore, bitbake, etc.). The user controls can be extended to allow additional selections. For example, let&#039;s say you want to add a new selection box with values of &amp;quot;True&amp;quot; and &amp;quot;False&amp;quot;. The control will be named &amp;quot;mycontrol&amp;quot;.&lt;br /&gt;
: Add a new entry to the &amp;quot;props&amp;quot; section of nightly.conf for the new control:&lt;br /&gt;
:: {&#039;mycontrol&#039;:{&#039;prop_type&#039;:&#039;ChoiceStringParameter&#039;,&lt;br /&gt;
::    &#039;choices&#039;: [&#039;False&#039;, &#039;True&#039;],&lt;br /&gt;
::    &#039;name&#039;: &#039;mycontrol&#039;,&lt;br /&gt;
::    label&#039;:&#039;&amp;amp;lt;hr&amp;amp;gt;&amp;amp;lt;h3&amp;amp;gt; Should mycontrol be included as part of the image creation?:&amp;amp;lt;/h3&amp;amp;gt;&#039;}},&lt;br /&gt;
: Ensure that the new property gets copied to the properties for any triggered builds by including it in the list of TriggerBuilds entries section of the buildset config:&lt;br /&gt;
:: {&#039;TriggerBuilds&#039;: {&#039;copy_properties&#039;: [&#039;custom_mycontrol&#039;],&lt;br /&gt;
: Get the value of the new custom control in build step implementation file optionally include it in the objects property list. In the class&#039;s start() function, include code snippet like this:&lt;br /&gt;
:: try:&lt;br /&gt;
::: self.control = self.getProperty(&#039;custom_mycontrol&#039;)&lt;br /&gt;
:: except:&lt;br /&gt;
::: self.control = False&lt;br /&gt;
Note that the &amp;quot;custom_&amp;quot; name prefix is required, as parts of the buildbot code reply on it.&lt;br /&gt;
&lt;br /&gt;
If you want this new control to appear on the individual build config web pages, add it to the list of &amp;quot;props&amp;quot; entries (if present) or add a new prop array entry. E.g.:&lt;br /&gt;
: props: [{&#039;mycontrol&#039;:{&#039;prop_type&#039;:&#039;ChoiceStringParameter&#039;,&lt;br /&gt;
:    &#039;choices&#039;: [&#039;False&#039;, &#039;True&#039;],&lt;br /&gt;
:    &#039;name&#039;: &#039;mycontrol&#039;,&lt;br /&gt;
:    label&#039;:&#039;&amp;amp;lt;hr&amp;amp;gt;&amp;amp;lt;h3&amp;amp;gt; Should mycontrol be included as part of the image creation?:&amp;amp;lt;/h3&amp;amp;gt;&#039;}}]&lt;br /&gt;
&lt;br /&gt;
== Configuration Management ==&lt;br /&gt;
Any changes to the AutoBuilder code base should follow proper configuration management guidelines per the Yocto Project. Changes should first be made and tested on a local AutoBuilder instance (physical machine or VM), or during off hours on a staging or development AutoBuilder. After verification, patches should be posted to the mailing list for review&amp;lt;small&amp;gt;[1]&amp;lt;/small&amp;gt; and pushed to the master yoctoautobuilder repo, then merged into the running instance on the production AutoBuilders. The Yocto Project hosts two AutoBuilder git repos: yocto-autobuilder and yocto-autobuilder-production. The former is the standard public repository which includes example configuration files. The later represents the actual running configuration of the Linux Foundation public AutoBuilders.&lt;br /&gt;
&lt;br /&gt;
A typical workflow uses a copy of the yocto-autobuilder repo on a developer&#039;s computer.&lt;br /&gt;
* A developer makes changes and tests them on a local AutoBuilder instance.&lt;br /&gt;
** By convention, changes to build set config files are made to the instances in the &#039;&#039;buildset-config.controller&#039;&#039; directory, then later copied to the running instance in the &#039;&#039;buildset-config&#039;&#039; directory.&lt;br /&gt;
** For files in the &#039;&#039;buildset-config.controller&#039;&#039; directory, ensure the &amp;quot;builders&amp;quot; list has only &#039;example-worker&#039;.&lt;br /&gt;
** When copied to the running instance, be sure to update the list of builders for the cluster, if appropriate.&lt;br /&gt;
* When satisfied, commit the changes to the local repo.&lt;br /&gt;
* A patch set is generated and posted to the Yocto Project mailing list &amp;lt;yocto@yoctoproject.org&amp;gt;.&lt;br /&gt;
* Once the patch is reviewed, approved and pushed to the master branch of yocto-autobuilder, the production AutoBuilders can be updated:&lt;br /&gt;
** When the AutoBuilder is idle, stop the controller&lt;br /&gt;
** Ensure you are on the master branch, then do a &#039;git pull&#039; to grab the updates&lt;br /&gt;
** Switch to the yoctoio branch and do a &#039;git merge master&#039; to bring in the updates&lt;br /&gt;
** Make any additional installation specific changes and commit them&lt;br /&gt;
** Push the updated yoctoio branch to the production instance (&#039;git push prod yoctoio&#039; &amp;lt;small&amp;gt;[2]&amp;lt;/small&amp;gt;).&lt;br /&gt;
** Start the controller.&lt;br /&gt;
* If the change affected the buildbot_slave code, the login into each worker and restart it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
# Patches for the AutoBuilder should be sent to yocto@yoctoproject.org with &amp;quot;[yocto-autobuilder]&amp;quot; in the Subject line. Please CC: pidge@toganlabs.com and joshua.g.lock@linux.intel.com&lt;br /&gt;
# The original public AutoBuilder does not use the yoctio branch or the production repo to keep local changes under revision control. Instead, local changes are untracked.&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [[The_Yocto_Autobuilder |AutoBuilder Main Page]]&lt;br /&gt;
* [[AutoBuilder Cluster Setup]]&lt;/div&gt;</summary>
		<author><name>Bill Randle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Cluster_Setup&amp;diff=20116</id>
		<title>AutoBuilder Cluster Setup</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Cluster_Setup&amp;diff=20116"/>
		<updated>2016-09-03T03:10:45Z</updated>

		<summary type="html">&lt;p&gt;Bill Randle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;While the instructions below are targeted at setting up a new AutoBuilder cluster, they are equally valid for an single machine with combined controller and worker, except you probably won&#039;t use a NAS for storage. The controller portion requires only 2 GB of local disk space; the worker requires 2+ TB to hold all the build temp files and git repos. If build artifacts and a local sstate mirror are included, additional worker space is required.&lt;br /&gt;
&lt;br /&gt;
==As root==&lt;br /&gt;
* Install base OS with minimal target&lt;br /&gt;
* Install the requirements from http://www.yoctoproject.org/docs/current/yocto-project-qs/yocto-project-qs.html&lt;br /&gt;
** (Note: if you plan to build the poky-eclipse-neon plugin, openjdk-headless 1.8 is required.)&lt;br /&gt;
* If you plan to run the sanity tests (which is typical for an AB), the following additional packages need to be installed:&lt;br /&gt;
** GitPython for Python2 and Python3&lt;br /&gt;
** xsltproc&lt;br /&gt;
** gnupg&lt;br /&gt;
** vncserver (whichever one is provided by the distro is fine)&lt;br /&gt;
* Add pokybuild user (uid=6000, or for older clusters 1006)&lt;br /&gt;
* Add pokybuild user to &amp;quot;users&amp;quot; group (gid 100) (if &amp;quot;users&amp;quot; group does not exist, create it)&lt;br /&gt;
* Following the instructions from https://wiki.yoctoproject.org/wiki/How_to_enable_KVM_for_Poky_qemu, give /dev/kvm permissions to the pokybuild user.&lt;br /&gt;
* If a &amp;quot;kvm&amp;quot; group does not exist, add it to /etc/group and ensure /dev/kvm gid is set to &amp;quot;kvm&amp;quot; and is mode 660. Add pokybuild user to the &amp;quot;kvm&amp;quot; group.&lt;br /&gt;
* git clone --single-branch https://git.yoctoproject.org/git/poky /root/poky  (in /root for historical reasons, should change in the future)&lt;br /&gt;
* Install https://downloads.yoctoproject.org/releases/yocto/yocto-{latest_release}/toolchain/x86_64/poky-glibc-x86_64-core-image-sato-core2-64-toolchain-{relver}.sh to /opt/poky.&lt;br /&gt;
* Add startup scripts to create tap devs and start vncserver, in /etc/rc.local, /etc/init.d/boot.local, or as systemd unit files, which should perform the following:&lt;br /&gt;
** cd /root/poky/scripts/; ./runqemu-gen-tapdevs 6000 100 32 /opt/poky/sysroots/x86_64-pokysdk-linux/&lt;br /&gt;
** /bin/su - pokybuild -c &amp;quot;/usr/bin/vncserver&amp;quot;&lt;br /&gt;
* Disable or edit firewall rules to allow all connections to the tap devices. This allows sanity tests to connect to booted images.&lt;br /&gt;
* Install nfs-utils or nfs-common, add Domain to /etc/idmapd.conf, fstab entry, mount NAS under /srv/autobuilder.&lt;br /&gt;
&lt;br /&gt;
==As pokybuild==&lt;br /&gt;
&lt;br /&gt;
* Set up buildset-config, either:&lt;br /&gt;
** Add ssh key to clone production yocto-autobuilder&lt;br /&gt;
** git clone https://git.yoctoproject.org/git/yocto-autobuilder &amp;amp;&amp;amp; cd yocto-autobuilder &amp;amp;&amp;amp; git remote add prod git@git.yoctoproject.org:yocto-autobuilder-production &amp;amp;&amp;amp; git fetch prod &amp;amp;&amp;amp; git checkout -b yoctoio prod/yoctoio&lt;br /&gt;
* or:&lt;br /&gt;
** edit one of the several examples included in repo e.g. cp -r buildset-config.controller buildset-config&lt;br /&gt;
&lt;br /&gt;
* update config/autobuilder.conf and yocto-worker/buildbot.tac&lt;br /&gt;
* Start the worker&lt;br /&gt;
** touch ~/yocto-autobuilder/.setupdone&lt;br /&gt;
** . yocto-autobuilder-setup &lt;br /&gt;
** ./yocto-start-autobuilder worker&lt;/div&gt;</summary>
		<author><name>Bill Randle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Maintenance&amp;diff=20089</id>
		<title>AutoBuilder Maintenance</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Maintenance&amp;diff=20089"/>
		<updated>2016-08-29T14:36:18Z</updated>

		<summary type="html">&lt;p&gt;Bill Randle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
An AutoBuilder system consists of a controller and one or more workers. The controller reads configuration files, presents a simple web user interface and sends build step commands to the worker(s). (Note: the terms &amp;quot;worker&amp;quot; and &amp;quot;build slave&amp;quot; both refer to the machine or process performing the actual build, and are used interchangeably.)&lt;br /&gt;
&lt;br /&gt;
When making changes to the AutoBuilder, it is important to remember what the different parts of the system do and which machines need to be restarted after a change (controller or workers).&lt;br /&gt;
&lt;br /&gt;
* The build step configuration files contain a list of build steps to carry out for a particular build artifact or test (e.g., nightly-x86.conf or nightly-oe-selftest.conf). Some build step configuration files trigger other builds - e.g., nightly.conf triggers all the other nightly builds. A build step configuration file can also have user interface components: poky repo and branch, save build artifacts, etc. A build step configuration file also contains a list of workers (or builders) that are able to build this specific config. For example, poky-eclipse-neon requires JDK 1.8, so the list of workers is limited to those with Java 1.8 installed. Or,the list of workers for the nightly-rpm-non-rpm config is limited to those that do not use rpm as the native package manager (e.g., Debian and Ubuntu). The working set of build step config files live in the &#039;&#039;buildstep-config&#039;&#039; directory.&lt;br /&gt;
* The yoctoAB.conf also lives in the &#039;&#039;buildstep-config&#039;&#039; directory and contains a list of build step configurations that should be included in the web pages and their order.&lt;br /&gt;
* The autobuilder.conf contains variables to specify directory paths, the number of parallel makes, the list of QA email addresses, etc. Some of (but not all) of these variables are also passed to the worker(s). What is passed on is determined by the CreateAutoConf build step. The autobuilder.conf file lives in the &#039;&#039;config&#039;&#039; directory.&lt;br /&gt;
* The actual build step implementation files are written in Python and live in the &#039;&#039;lib/python2.7/site-packages/autobuilder&#039;&#039; and &#039;&#039;lib/python2.7/site-packages/autobuilder/buildsteps&#039;&#039; directories. There is typically a one-to-one mapping between the build steps in the build step config files and an Python implementation file. Often, the implementation consists of sending a set of shell commands for the worker to execute.&lt;br /&gt;
* The core buildbot code for the controller lives in &#039;&#039;lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg&#039;&#039;. It rarely needs to be changed unless a major new feature is added.&lt;br /&gt;
* The core buildbot code for the worker lives in &#039;&#039;lib/python2.7/site-packages/buildbot_slave-0.8.8-py2.7.egg&#039;&#039;. It rarely needs to be changed unless a major new feature is added.&lt;br /&gt;
&lt;br /&gt;
The various configuration and build step implementation files are read by the controller once on startup (startup of the controller process, not the machine as a whole) and cached. If any of the files change, the controller must be stopped and restarted:&lt;br /&gt;
: . ./yocto-autobuilder-setup&lt;br /&gt;
: ./yocto-stop-autobuilder controller&lt;br /&gt;
: ./yocto-start-autobuilder controller&lt;br /&gt;
&lt;br /&gt;
Generally, the only time a worker needs to be stopped and restarted is when the underlying buildbot_slave code changes. The procedure is the same as above for the controller, except replace &amp;quot;controller&amp;quot; with &amp;quot;worker&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Note: when making any changes on an AutoBuilder cluster, be sure you are doing it as the pokybuild user. That is, ssh into the remote machine with your normal login account, the run &#039;sudo -iu pokybuild&#039;.&lt;br /&gt;
&lt;br /&gt;
== Example Changes ==&lt;br /&gt;
This section presents a cookbook approach to common tasks often required as part of AutoBuilder updates or maintenance.&lt;br /&gt;
&lt;br /&gt;
=== Build Additional Image for an Existing Configuration ===&lt;br /&gt;
Let&#039;s say a particular build step config had a rule to build core-image-sato and core-image-minimal images:&lt;br /&gt;
: {&#039;BuildImages&#039;: {&#039;images&#039;: &#039;core-image-minimal core-image-sato&#039;}},&lt;br /&gt;
and you want to also build core-image-weston. Simply add the weston image to the list:&lt;br /&gt;
: {&#039;BuildImages&#039;: {&#039;images&#039;: &#039;core-image-minimal core-image-sato core-image-weston&#039;}},&lt;br /&gt;
To include the new image in the sanity tests, just add it to the list:&lt;br /&gt;
: {&#039;RunSanityTests&#039;: {&#039;images&#039;: &#039;core-image-minimal core-image-sato core-image-weston&#039;}},&lt;br /&gt;
After all the changes are made, restart the controller.&lt;br /&gt;
&lt;br /&gt;
=== Add an Additional Machine Configuration ===&lt;br /&gt;
We recently expanded the list of machines that wic images were built for. The original nightly-wic.conf file had rules to build qemux86_64 and genericx86_64 images. To build images for qemux86 and genericx86, new CreateAutoConf, BuildImages and CreateWicImages steps were added. For example:&lt;br /&gt;
: {&#039;CreateAutoConf&#039;:{&#039;machine&#039;:&#039;qemux86&#039;, &#039;atextappend&#039;:&#039;\nIMAGE_FSTYPES += &amp;quot; hddimg&amp;quot;\nMACHINE_FEATURES_append = &amp;quot; efi&amp;quot;\n&#039;}},&lt;br /&gt;
: {&#039;BuildImages&#039;:{&#039;images&#039;:&#039;syslinux syslinux-native parted-native gptfdisk-native dosfstools-native mtools-native&#039;}},&lt;br /&gt;
: {&#039;BuildImages&#039;:{&#039;images&#039;:&#039;core-image-sato&#039;}},&lt;br /&gt;
: {&#039;CreateWicImages&#039;:{&#039;wic_img_type&#039;:&#039;directdisk&#039;, &#039;target_img&#039;:&#039;core-image-sato&#039;}},&lt;br /&gt;
: {&#039;CreateWicImages&#039;:{&#039;wic_img_type&#039;:&#039;directdisk-gpt&#039;, &#039;target_img&#039;:&#039;core-image-sato&#039;}},&lt;br /&gt;
: {&#039;CreateWicImages&#039;:{&#039;wic_img_type&#039;:&#039;mkefidisk&#039;, &#039;target_img&#039;:&#039;core-image-sato&#039;}},&lt;br /&gt;
Normally, the extra &#039;atextappend&#039; entry is not required for CreateAutoConf, but in this case it is needed for the efi image type creation. When you add new machine configurations, don&#039;t forget to add the new machine type to the list of artifacts to publish in the PublishArtifacts step.&lt;br /&gt;
&lt;br /&gt;
=== Add a New Build Config ===&lt;br /&gt;
To add a new build to the collection of build products, create a new config file and copy to the buildset-config directory, update nightly.conf and yoctoAB.conf and restart the controller. For example, eclipse-plugin-neon was recently added to the build list. Since there are other eclipse plugins, it was easiest to copy an existing config file (i.e., eclipse-plugin-mars.conf) and change the names from &amp;quot;mars&amp;quot; to neon&amp;quot;. The list of &amp;quot;builders&amp;quot; was changed to include only those workers with native Java 1.8 support. The yoctoAB.conf file (in the &#039;&#039;buildset-config&#039;&#039; directory) was updated to add eclipse-plugin-neon to the list, and in this case, since eclipse-poky-kepler was being deprecated, it was removed from the list. In the nightly.conf file, eclipse-plugin-neon was added to the lis tof repos and to the TriggeredBuild list and eclipse-poky-kepler was removed.&lt;br /&gt;
&lt;br /&gt;
=== Pass a New Variable to the Workers ===&lt;br /&gt;
As mentioned above, only a subset of the variables in autobuilder.conf are actually passed down to the worker. To include a new variable in the list, first add it to autobuilder.conf (e.g., MY_NEW_VAR = &amp;quot;somevalue&amp;quot;). This makes it visible to the controller. Next edit the CreateAutoConf.py build step implementation file. In the start() function, add the new variable with a construct like:&lt;br /&gt;
: if os.environ.get(&#039;MY_NEW_VAR&#039;) is not None:&lt;br /&gt;
:: fout = fout + &#039;MY_NEW_VAR = &amp;quot;&#039; + os.environ.get(&#039;MY_NEW_VAR&#039;) + &#039;&amp;quot;&#039;&lt;br /&gt;
Restart the controller.&lt;br /&gt;
&lt;br /&gt;
=== Update the List of QA Email Recipients ===&lt;br /&gt;
To change the list of people receiving the QA notification emails, edit the autobuilder.conf file and change the contents of the QA_MAIL_CC variable. Restart the controller.&lt;br /&gt;
&lt;br /&gt;
=== Add a New User Control ===&lt;br /&gt;
When starting a build via the web page, you are presented with one or more controls to pass information to the controller. Most every build set config includes text boxes for the poky repo and branch selections. Other configs, like nightly.conf have quite a few controls to select if this is a release build, if QA emails should be sent, git repos and branches for other layers or repositories (e.g., meta-intel, oecore, bitbake, etc.). The user controls can be extended to allow additional selections. For example, let&#039;s say you want to add a new selection box with values of &amp;quot;True&amp;quot; and &amp;quot;False&amp;quot;. The control will be named &amp;quot;mycontrol&amp;quot;.&lt;br /&gt;
: Add a new entry to the &amp;quot;props&amp;quot; section of nightly.conf for the new control:&lt;br /&gt;
:: {&#039;mycontrol&#039;:{&#039;prop_type&#039;:&#039;ChoiceStringParameter&#039;,&lt;br /&gt;
::    &#039;choices&#039;: [&#039;False&#039;, &#039;True&#039;],&lt;br /&gt;
::    &#039;name&#039;: &#039;mycontrol&#039;,&lt;br /&gt;
::    label&#039;:&#039;&amp;amp;lt;hr&amp;amp;gt;&amp;amp;lt;h3&amp;amp;gt; Should mycontrol be included as part of the image creation?:&amp;amp;lt;/h3&amp;amp;gt;&#039;}},&lt;br /&gt;
: Ensure that the new property gets copied to the properties for any triggered builds by including it in the list of TriggerBuilds entries section of the buildset config:&lt;br /&gt;
:: {&#039;TriggerBuilds&#039;: {&#039;copy_properties&#039;: [&#039;custom_mycontrol&#039;],&lt;br /&gt;
: Get the value of the new custom control in build step implementation file optionally include it in the objects property list. In the class&#039;s start() function, include code snippet like this:&lt;br /&gt;
:: try:&lt;br /&gt;
::: self.control = self.getProperty(&#039;custom_mycontrol&#039;)&lt;br /&gt;
:: except:&lt;br /&gt;
::: self.control = False&lt;br /&gt;
Note that the &amp;quot;custom_&amp;quot; name prefix is required, as parts of the buildbot code reply on it.&lt;br /&gt;
&lt;br /&gt;
If you want this new control to appear on the individual build config web pages, add it to the list of &amp;quot;props&amp;quot; entries (if present) or add a new prop array entry. E.g.:&lt;br /&gt;
: props: [{&#039;mycontrol&#039;:{&#039;prop_type&#039;:&#039;ChoiceStringParameter&#039;,&lt;br /&gt;
:    &#039;choices&#039;: [&#039;False&#039;, &#039;True&#039;],&lt;br /&gt;
:    &#039;name&#039;: &#039;mycontrol&#039;,&lt;br /&gt;
:    label&#039;:&#039;&amp;amp;lt;hr&amp;amp;gt;&amp;amp;lt;h3&amp;amp;gt; Should mycontrol be included as part of the image creation?:&amp;amp;lt;/h3&amp;amp;gt;&#039;}}]&lt;br /&gt;
&lt;br /&gt;
== Configuration Management ==&lt;br /&gt;
Any changes to the AutoBuilder code base should follow proper configuration management guidelines per the Yocto Project. Changes should first be made and tested on a local AutoBuilder instance (physical machine or VM), or during off hours on a staging or development AutoBuilder. After verification, patches should be posted to the mailing list for review&amp;lt;small&amp;gt;[1]&amp;lt;/small&amp;gt; and pushed to the master yoctoautobuilder repo, then merged into the running instance on the production AutoBuilders. The Yocto Project hosts two AutoBuilder git repos: yocto-autobuilder and yocto-autobuilder-production. The former is the standard public repository which includes example configuration files. The later represents the actual running configuration of the Linux Foundation public AutoBuilders.&lt;br /&gt;
&lt;br /&gt;
A typical workflow uses a copy of the yocto-autobuilder repo on a developer&#039;s computer.&lt;br /&gt;
* A developer makes changes and tests them on a local AutoBuilder instance.&lt;br /&gt;
** By convention, changes to build set config files are made to the instances in the &#039;&#039;buildset-config.controller&#039;&#039; directory, then later copied to the running instance in the &#039;&#039;buildset-config&#039;&#039; directory.&lt;br /&gt;
** For files in the &#039;&#039;buildset-config.controller&#039;&#039; directory, ensure the &amp;quot;builders&amp;quot; list has only &#039;example-worker&#039;.&lt;br /&gt;
** When copied to the running instance, be sure to update the list of builders for the cluster, if appropriate.&lt;br /&gt;
* When satisfied, commit the changes to the local repo.&lt;br /&gt;
* A patch set is generated and posted to the Yocto Project mailing list &amp;lt;yocto@yoctoproject.org&amp;gt;.&lt;br /&gt;
* Once the patch is reviewed, approved and pushed to the master branch of yocto-autobuilder, the production AutoBuilders can be updated:&lt;br /&gt;
** When the AutoBuilder is idle, stop the controller&lt;br /&gt;
** Ensure you are on the master branch, then do a &#039;git pull&#039; to grab the updates&lt;br /&gt;
** Switch to the yoctoio branch and do a &#039;git merge master&#039; to bring in the updates&lt;br /&gt;
** Make any additional installation specific changes and commit them&lt;br /&gt;
** Push the updated yoctoio branch to the production instance (&#039;git push prod yoctoio&#039; &amp;lt;small&amp;gt;[2]&amp;lt;/small&amp;gt;).&lt;br /&gt;
** Start the controller.&lt;br /&gt;
* If the change affected the buildbot_slave code, the login into each worker and restart it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
# Patches for the AutoBuilder should be sent to yocto@yoctoproject.org with &amp;quot;[yocto-autobuilder]&amp;quot; in the Subject line. Please CC: pidge@toganlabs.com and joshua.g.lock@linux.intel.com&lt;br /&gt;
# The original public AutoBuilder does not use the yoctio branch or the production repo to keep local changes under revision control. Instead, local changes are untracked.&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [[The_Yocto_Autobuilder |AutoBuilder Main Page]]&lt;br /&gt;
* [[AutoBuilder Cluster Setup]]&lt;/div&gt;</summary>
		<author><name>Bill Randle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Cluster_Setup&amp;diff=20087</id>
		<title>AutoBuilder Cluster Setup</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Cluster_Setup&amp;diff=20087"/>
		<updated>2016-08-27T14:41:51Z</updated>

		<summary type="html">&lt;p&gt;Bill Randle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;While the instructions below are targeted at setting up a new AutoBuilder cluster, they are equally valid for an single machine with combined controller and worker, except you probably won&#039;t use a NAS for storage. The controller portion requires only 2 GB of local disk space; the worker requires 2+ TB to hold all the build temp files and git repos. If build artifacts and a local sstate mirror are included, additional worker space is required.&lt;br /&gt;
&lt;br /&gt;
==As root==&lt;br /&gt;
* Install base OS with minimal target&lt;br /&gt;
* Install the requirements from http://www.yoctoproject.org/docs/current/yocto-project-qs/yocto-project-qs.html&lt;br /&gt;
** (Note: if you plan to build the poky-eclipse-neon plugin, openjdk-headless 1.8 is required.)&lt;br /&gt;
* If you plan to run the sanity tests (which is typical for an AB), the following additional packages need to be installed:&lt;br /&gt;
** GitPython for Python2 and Python3&lt;br /&gt;
** xsltproc &lt;br /&gt;
** vncserver (whichever one is provided by the distro is fine)&lt;br /&gt;
* Add pokybuild user (uid=6000, or for older clusters 1006)&lt;br /&gt;
* Add pokybuild user to &amp;quot;users&amp;quot; group (gid 100) (if &amp;quot;users&amp;quot; group does not exist, create it)&lt;br /&gt;
* Following the instructions from https://wiki.yoctoproject.org/wiki/How_to_enable_KVM_for_Poky_qemu, give /dev/kvm permissions to the pokybuild user.&lt;br /&gt;
* If a &amp;quot;kvm&amp;quot; group does not exist, add it to /etc/group and ensure /dev/kvm gid is set to &amp;quot;kvm&amp;quot; and is mode 660. Add pokybuild user to the &amp;quot;kvm&amp;quot; group.&lt;br /&gt;
* git clone --single-branch https://git.yoctoproject.org/git/poky /root/poky  (in /root for historical reasons, should change in the future)&lt;br /&gt;
* Install https://downloads.yoctoproject.org/releases/yocto/yocto-{latest_release}/toolchain/x86_64/poky-glibc-x86_64-core-image-sato-core2-64-toolchain-{relver}.sh to /opt/poky.&lt;br /&gt;
* Add startup scripts to create tap devs and start vncserver, in /etc/rc.local, /etc/init.d/boot.local, or as systemd unit files, which should perform the following:&lt;br /&gt;
** cd /root/poky/scripts/; ./runqemu-gen-tapdevs 6000 100 32 /opt/poky/sysroots/x86_64-pokysdk-linux/&lt;br /&gt;
** /bin/su - pokybuild -c &amp;quot;/usr/bin/vncserver&amp;quot;&lt;br /&gt;
* Disable or edit firewall rules to allow all connections to the tap devices. This allows sanity tests to connect to booted images.&lt;br /&gt;
* Install nfs-utils or nfs-common, add Domain to /etc/idmapd.conf, fstab entry, mount NAS under /srv/autobuilder.&lt;br /&gt;
&lt;br /&gt;
==As pokybuild==&lt;br /&gt;
&lt;br /&gt;
* Set up buildset-config, either:&lt;br /&gt;
** Add ssh key to clone production yocto-autobuilder&lt;br /&gt;
** git clone https://git.yoctoproject.org/git/yocto-autobuilder &amp;amp;&amp;amp; cd yocto-autobuilder &amp;amp;&amp;amp; git remote add prod git@git.yoctoproject.org:yocto-autobuilder-production &amp;amp;&amp;amp; git fetch prod &amp;amp;&amp;amp; git checkout -b yoctoio prod/yoctoio&lt;br /&gt;
* or:&lt;br /&gt;
** edit one of the several examples included in repo e.g. cp -r buildset-config.controller buildset-config&lt;br /&gt;
&lt;br /&gt;
* update config/autobuilder.conf and yocto-worker/buildbot.tac&lt;br /&gt;
* Start the worker&lt;br /&gt;
** touch ~/yocto-autobuilder/.setupdone&lt;br /&gt;
** . yocto-autobuilder-setup &lt;br /&gt;
** ./yocto-start-autobuilder worker&lt;/div&gt;</summary>
		<author><name>Bill Randle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder&amp;diff=20086</id>
		<title>AutoBuilder</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder&amp;diff=20086"/>
		<updated>2016-08-27T14:36:45Z</updated>

		<summary type="html">&lt;p&gt;Bill Randle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are some useful links for AutoBuilder&lt;br /&gt;
&lt;br /&gt;
* Nightly build output: http://autobuilder.pokylinux.org/pub/nightly/&lt;br /&gt;
&lt;br /&gt;
==AutoBuilder Automated Testing==&lt;br /&gt;
&lt;br /&gt;
The AutoBuilder is able to execute automated testing too when the proper configuration is added. The AutoBuilder basically relies on what the Yocto Project exposes as automated test tools and it doesn&#039;t include support for directly executing tests. The AutoBuilder has been used for test execution(runtime, selftests) in the Yocto Project long before it was chosen as the automated test framework over LAVA. Instructions on how to add tests to the AutoBuilder [[AutoBuilder/Adding Automated Tests|can be seen here]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==AutoBuilder Cluster Setup==&lt;br /&gt;
&lt;br /&gt;
Rough steps of setting up a new cluster by hand can be found at [[AutoBuilder Cluster Setup]].&lt;/div&gt;</summary>
		<author><name>Bill Randle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=The_Yocto_Autobuilder&amp;diff=20085</id>
		<title>The Yocto Autobuilder</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=The_Yocto_Autobuilder&amp;diff=20085"/>
		<updated>2016-08-27T14:35:22Z</updated>

		<summary type="html">&lt;p&gt;Bill Randle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== The Yocto AutoBuilder ==&lt;br /&gt;
&lt;br /&gt;
The Yocto AutobBuilder is a buildbot based autobuilder implementation that can be used to build out and test custom distros utilizing OE-Core (either bare or through the poky repository)&lt;br /&gt;
&lt;br /&gt;
The source code can be downloaded from [[git://git.yoctoproject.org/yocto-autobuilder]]. For details on the design and configuration of the AutoBuilder, refer to the &#039;&#039;&#039;&#039;&#039;YoctoAutobuilderDevelopersDocument.html&#039;&#039;&#039;&#039;&#039; document in the &#039;&#039;docs&#039;&#039; directory of the yocto-autobuilder git repo.&lt;br /&gt;
&lt;br /&gt;
The yocto-autobuilder maintainer is Elizabeth Flanagan. All patches to the yocto-autobuilder should be sent to yocto@yoctoproject.org with &amp;quot;[yocto-autobuilder]&amp;quot; in the Subject line. Please CC: pidge@toganlabs.com and joshua.g.lock@linux.intel.com.&lt;br /&gt;
&lt;br /&gt;
If you have access to our production autobuilder, please read the documentation on [https://wiki.yoctoproject.org/wiki/How_to_start_a_build_on_the_Autobuilder how to kick off builds.]&lt;br /&gt;
&lt;br /&gt;
=== Resources ===&lt;br /&gt;
&lt;br /&gt;
* [[Accessing Autobuilders]]&lt;br /&gt;
* [[AutoBuilder Maintenance]]&lt;br /&gt;
* [[AutoBuilder Cluster Setup]]&lt;br /&gt;
* [[How_to_start_a_build_on_the_Autobuilder |How to Start a Build on the AutoBuilder]]&lt;br /&gt;
* [[Frequently Asked Yocto Autobuilder Questions]]&lt;/div&gt;</summary>
		<author><name>Bill Randle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=AccessingAutobuilders&amp;diff=20084</id>
		<title>AccessingAutobuilders</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=AccessingAutobuilders&amp;diff=20084"/>
		<updated>2016-08-27T14:33:49Z</updated>

		<summary type="html">&lt;p&gt;Bill Randle: Bill Randle moved page AccessingAutobuilders to Accessing Autobuilders: add a space in the title&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Accessing Autobuilders]]&lt;/div&gt;</summary>
		<author><name>Bill Randle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Accessing_Autobuilders&amp;diff=20083</id>
		<title>Accessing Autobuilders</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Accessing_Autobuilders&amp;diff=20083"/>
		<updated>2016-08-27T14:33:48Z</updated>

		<summary type="html">&lt;p&gt;Bill Randle: Bill Randle moved page AccessingAutobuilders to Accessing Autobuilders: add a space in the title&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Connecting to Autobuilders==&lt;br /&gt;
We use an ssh jumphost called access.yoctoproject.org to connect to the autobuilders. Jumphosts enhance security by removing the threat of hijacked ssh-agents and limiting the services running on Internet exposed hosts.&lt;br /&gt;
&lt;br /&gt;
===Generate keys===&lt;br /&gt;
In order to access any of the autobuilders your ssh public keys must first be installed. The preferred way to generate a key is type RSA with 2048 bits or greater. Please put your e-mail, the date of generation, and the host the key lives on in the comment. Please set a passphrase even if it&#039;s a simple one! Ideally your private key will never leave the host it is generated on - so if you have multiple machines please generate multiple keys. E-mail your &#039;&#039;&#039;public&#039;&#039;&#039; key named id_rsa.pub to hostmaster@yoctoproject.org. Keep id_rsa(the private key) super safe. Please never share it with anyone or copy it onto the Internet. Don&#039;t e-mail it to yourself either.&lt;br /&gt;
&lt;br /&gt;
  ssh-keygen -b 4096 -t rsa -C &amp;quot;your.email@company.com_2012-05-30_localhostname&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Substitute your own e-mail and your computer&#039;s hostname in the command above. Setting these helps with troubleshooting in the future.&lt;br /&gt;
&lt;br /&gt;
===Configure ssh===&lt;br /&gt;
Edit ~/.ssh/config and add:&lt;br /&gt;
&lt;br /&gt;
 Host access.yoctoproject.org&lt;br /&gt;
    # Make sure your username matches your account on the autobuilder&lt;br /&gt;
    User [username]&lt;br /&gt;
    # Give the full path to the proper public key&lt;br /&gt;
    IdentityFile /home/[username]/.ssh/id_rsa&lt;br /&gt;
    # If your network requires you to use a SOCKS proxy enable it here&lt;br /&gt;
    # ProxyCommand nc -X5 -x [proxyserver.address.company.com:1080] %h %p&lt;br /&gt;
    # If your system uses &#039;ncat&#039;, rather than &#039;netcat&#039;, use these options to enable a SOCKS proxy&lt;br /&gt;
    # ProxyCommand nc --proxy-type socks5 --proxy [proxyserver.address.company.com:1080] %h %p&lt;br /&gt;
    &lt;br /&gt;
 # We use an internal DNS server with the fake TLD .yp for ease of use&lt;br /&gt;
 Host *.yp *.osl.yoctoproject.org&lt;br /&gt;
    # This proxy command actually does the of running ssh through ssh&lt;br /&gt;
    ProxyCommand ssh access.yoctoproject.org exec nc %h %p 2&amp;gt; /dev/null&lt;br /&gt;
    # Correct username and key repeated from above.&lt;br /&gt;
    User [username]&lt;br /&gt;
    IdentityFile /home/username/.ssh/id_rsa&lt;br /&gt;
    # We don&#039;t need strict checking on the private network.&lt;br /&gt;
    StrictHostKeyChecking no&lt;br /&gt;
    # Don&#039;t bother saving hostkeys we don&#039;t check&lt;br /&gt;
    UserKnownHostsFile /dev/null&lt;br /&gt;
&lt;br /&gt;
===Verify Fingerprints===&lt;br /&gt;
Now actually ssh to access.yoctoproject.org and verify that the fingerprint you receive matches a fingerprint below.&lt;br /&gt;
&lt;br /&gt;
 access.yoctoproject.org ECDSA 45:57:d2:e5:c9:93:40:a3:32:f4:a3:29:0b:1e:99:57&lt;br /&gt;
 or                       RSA  15:90:e2:85:98:db:f6:75:55:3d:fb:fa:22:a7:06:44&lt;br /&gt;
 or                ECDSA SHA256:xVq5zKfo7s2HCZmZOj/r39A8dRenI+YEfIBIv53LSTs&lt;br /&gt;
&lt;br /&gt;
===Connect!===&lt;br /&gt;
Now that you&#039;ve added access.yoctoproject.org to your known hosts you don&#039;t need to worry about fingerprints anymore. Time to connect to a builder. Run:&lt;br /&gt;
  ssh ab01.yp&lt;br /&gt;
&lt;br /&gt;
If all worked correctly you are now logged into autobuilder01. &lt;br /&gt;
&lt;br /&gt;
===Need to work on the build scripts?===&lt;br /&gt;
If you are on the SWAT team you can access pokybuild using this sudo command:&lt;br /&gt;
  sudo -iu pokybuild&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
keywords: ssh access auto builder accessing autobuilders&lt;/div&gt;</summary>
		<author><name>Bill Randle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=The_Yocto_Autobuilder&amp;diff=20070</id>
		<title>The Yocto Autobuilder</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=The_Yocto_Autobuilder&amp;diff=20070"/>
		<updated>2016-08-26T16:30:12Z</updated>

		<summary type="html">&lt;p&gt;Bill Randle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== The Yocto AutoBuilder ==&lt;br /&gt;
&lt;br /&gt;
The Yocto AutobBuilder is a buildbot based autobuilder implementation that can be used to build out and test custom distros utilizing OE-Core (either bare or through the poky repository)&lt;br /&gt;
&lt;br /&gt;
The source code can be downloaded from [[git://git.yoctoproject.org/yocto-autobuilder]]. For details on the design and configuration of the AutoBuilder, refer to the &#039;&#039;&#039;&#039;&#039;YoctoAutobuilderDevelopersDocument.html&#039;&#039;&#039;&#039;&#039; document in the &#039;&#039;docs&#039;&#039; directory of the yocto-autobuilder git repo.&lt;br /&gt;
&lt;br /&gt;
The yocto-autobuilder maintainer is Elizabeth Flanagan. All patches to the yocto-autobuilder should be sent to yocto@yoctoproject.org with &amp;quot;[yocto-autobuilder]&amp;quot; in the Subject line. Please CC: pidge@toganlabs.com and joshua.g.lock@linux.intel.com.&lt;br /&gt;
&lt;br /&gt;
If you have access to our production autobuilder, please read the documentation on [https://wiki.yoctoproject.org/wiki/How_to_start_a_build_on_the_Autobuilder how to kick off builds.]&lt;br /&gt;
&lt;br /&gt;
=== Resources ===&lt;br /&gt;
&lt;br /&gt;
* [[AutoBuilder Maintenance]]&lt;br /&gt;
* [[AutoBuilder Cluster Setup]]&lt;br /&gt;
* [[How_to_start_a_build_on_the_Autobuilder |How to Start a Build on the AutoBuilder]]&lt;br /&gt;
* [[Frequently Asked Yocto Autobuilder Questions]]&lt;/div&gt;</summary>
		<author><name>Bill Randle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Maintenance&amp;diff=20069</id>
		<title>AutoBuilder Maintenance</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Maintenance&amp;diff=20069"/>
		<updated>2016-08-26T16:28:43Z</updated>

		<summary type="html">&lt;p&gt;Bill Randle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
An AutoBuilder system consists of a controller and one or more workers. The controller reads configuration files, presents a simple web user interface and sends build step commands to the worker(s). (Note: the terms &amp;quot;worker&amp;quot; and &amp;quot;build slave&amp;quot; both refer to the machine or process performing the actual build, and are used interchangeably.)&lt;br /&gt;
&lt;br /&gt;
When making changes to the AutoBuilder, it is important to remember what the different parts of the system do and which machines need to be restarted after a change (controller or workers).&lt;br /&gt;
&lt;br /&gt;
* The build step configuration files contain a list of build steps to carry out for a particular build artifact or test (e.g., nightly-x86.conf or nightly-oe-selftest.conf). Some build step configuration files trigger other builds - e.g., nightly.conf triggers all the other nightly builds. A build step configuration file can also have user interface components: poky repo and branch, save build artifacts, etc. A build step configuration file also contains a list of workers (or builders) that are able to build this specific config. For example, poky-eclipse-neon requires JDK 1.8, so the list of workers is limited to those with Java 1.8 installed. Or,the list of workers for the nightly-rpm-non-rpm config is limited to those that do not use rpm as the native package manager (e.g., Debian and Ubuntu). The working set of build step config files live in the &#039;&#039;buildstep-config&#039;&#039; directory.&lt;br /&gt;
* The yoctoAB.conf also lives in the &#039;&#039;buildstep-config&#039;&#039; directory and contains a list of build step configurations that should be included in the web pages and their order.&lt;br /&gt;
* The autobuilder.conf contains variables to specify directory paths, the number of parallel makes, the list of QA email addresses, etc. Some of (but not all) of these variables are also passed to the worker(s). What is passed on is determined by the CreateAutoConf build step. The autobuilder.conf file lives in the &#039;&#039;config&#039;&#039; directory.&lt;br /&gt;
* The actual build step implementation files are written in Python and live in the &#039;&#039;lib/python2.7/site-packages/autobuilder&#039;&#039; and &#039;&#039;lib/python2.7/site-packages/autobuilder/buildsteps&#039;&#039; directories. There is typically a one-to-one mapping between the build steps in the build step config files and an Python implementation file. Often, the implementation consists of sending a set of shell commands for the worker to execute.&lt;br /&gt;
* The core buildbot code for the controller lives in &#039;&#039;lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg&#039;&#039;. It rarely needs to be changed unless a major new feature is added.&lt;br /&gt;
* The core buildbot code for the worker lives in &#039;&#039;lib/python2.7/site-packages/buildbot_slave-0.8.8-py2.7.egg&#039;&#039;. It rarely needs to be changed unless a major new feature is added.&lt;br /&gt;
&lt;br /&gt;
The various configuration and build step implementation files are read by the controller once on startup (startup of the controller process, not the machine as a whole) and cached. If any of the files change, the controller must be stopped and restarted:&lt;br /&gt;
: . ./yocto-autobuilder-setup&lt;br /&gt;
: ./yocto-stop-autobuilder controller&lt;br /&gt;
: ./yocto-start-autobuilder controller&lt;br /&gt;
&lt;br /&gt;
Generally, the only time a worked needs to be stopped and restarted is when the underlying buildbot_slave code changes. The procedure is the same as above for the controller, except replace &amp;quot;controller&amp;quot; with &amp;quot;worker&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Example Changes ==&lt;br /&gt;
This section presents a cookbook approach to common tasks often required as part of AutoBuilder updates or maintenance.&lt;br /&gt;
&lt;br /&gt;
=== Build Additional Image for an Existing Configuration ===&lt;br /&gt;
Let&#039;s say a particular build step config had a rule to build core-image-sato and core-image-minimal images:&lt;br /&gt;
: {&#039;BuildImages&#039;: {&#039;images&#039;: &#039;core-image-minimal core-image-sato&#039;}},&lt;br /&gt;
and you want to also build core-image-weston. Simply add the weston image to the list:&lt;br /&gt;
: {&#039;BuildImages&#039;: {&#039;images&#039;: &#039;core-image-minimal core-image-sato core-image-weston&#039;}},&lt;br /&gt;
To include the new image in the sanity tests, just add it to the list:&lt;br /&gt;
: {&#039;RunSanityTests&#039;: {&#039;images&#039;: &#039;core-image-minimal core-image-sato core-image-weston&#039;}},&lt;br /&gt;
After all the changes are made, restart the controller.&lt;br /&gt;
&lt;br /&gt;
=== Add an Additional Machine Configuration ===&lt;br /&gt;
We recently expanded the list of machines that wic images were built for. The original nightly-wic.conf file had rules to build qemux86_64 and genericx86_64 images. To build images for qemux86 and genericx86, new CreateAutoConf, BuildImages and CreateWicImages steps were added. For example:&lt;br /&gt;
: {&#039;CreateAutoConf&#039;:{&#039;machine&#039;:&#039;qemux86&#039;, &#039;atextappend&#039;:&#039;\nIMAGE_FSTYPES += &amp;quot; hddimg&amp;quot;\nMACHINE_FEATURES_append = &amp;quot; efi&amp;quot;\n&#039;}},&lt;br /&gt;
: {&#039;BuildImages&#039;:{&#039;images&#039;:&#039;syslinux syslinux-native parted-native gptfdisk-native dosfstools-native mtools-native&#039;}},&lt;br /&gt;
: {&#039;BuildImages&#039;:{&#039;images&#039;:&#039;core-image-sato&#039;}},&lt;br /&gt;
: {&#039;CreateWicImages&#039;:{&#039;wic_img_type&#039;:&#039;directdisk&#039;, &#039;target_img&#039;:&#039;core-image-sato&#039;}},&lt;br /&gt;
: {&#039;CreateWicImages&#039;:{&#039;wic_img_type&#039;:&#039;directdisk-gpt&#039;, &#039;target_img&#039;:&#039;core-image-sato&#039;}},&lt;br /&gt;
: {&#039;CreateWicImages&#039;:{&#039;wic_img_type&#039;:&#039;mkefidisk&#039;, &#039;target_img&#039;:&#039;core-image-sato&#039;}},&lt;br /&gt;
Normally, the extra &#039;atextappend&#039; entry is not required for CreateAutoConf, but in this case it is needed for the efi image type creation. When you add new machine configurations, don&#039;t forget to add the new machine type to the list of artifacts to publish in the PublishArtifacts step.&lt;br /&gt;
&lt;br /&gt;
=== Add a New Build Config ===&lt;br /&gt;
To add a new build to the collection of build products, create a new config file and copy to the buildset-config directory, update nightly.conf and yoctoAB.conf and restart the controller. For example, eclipse-plugin-neon was recently added to the build list. Since there are other eclipse plugins, it was easiest to copy an existing config file (i.e., eclipse-plugin-mars.conf) and change the names from &amp;quot;mars&amp;quot; to neon&amp;quot;. The list of &amp;quot;builders&amp;quot; was changed to include only those workers with native Java 1.8 support. The yoctoAB.conf file (in the &#039;&#039;buildset-config&#039;&#039; directory) was updated to add eclipse-plugin-neon to the list, and in this case, since eclipse-poky-kepler was being deprecated, it was removed from the list. In the nightly.conf file, eclipse-plugin-neon was added to the lis tof repos and to the TriggeredBuild list and eclipse-poky-kepler was removed.&lt;br /&gt;
&lt;br /&gt;
=== Pass a New Variable to the Workers ===&lt;br /&gt;
As mentioned above, only a subset of the variables in autobuilder.conf are actually passed down to the worker. To include a new variable in the list, first add it to autobuilder.conf (e.g., MY_NEW_VAR = &amp;quot;somevalue&amp;quot;). This makes it visible to the controller. Next edit the CreateAutoConf.py build step implementation file. In the start() function, add the new variable with a construct like:&lt;br /&gt;
: if os.environ.get(&#039;MY_NEW_VAR&#039;) is not None:&lt;br /&gt;
:: fout = fout + &#039;MY_NEW_VAR = &amp;quot;&#039; + os.environ.get(&#039;MY_NEW_VAR&#039;) + &#039;&amp;quot;&#039;&lt;br /&gt;
Restart the controller.&lt;br /&gt;
&lt;br /&gt;
=== Update the List of QA Email Recipients ===&lt;br /&gt;
To change the list of people receiving the QA notification emails, edit the autobuilder.conf file and change the contents of the QA_MAIL_CC variable. Restart the controller.&lt;br /&gt;
&lt;br /&gt;
=== Add a New User Control ===&lt;br /&gt;
When starting a build via the web page, you are presented with one or more controls to pass information to the controller. Most every build set config includes text boxes for the poky repo and branch selections. Other configs, like nightly.conf have quite a few controls to select if this is a release build, if QA emails should be sent, git repos and branches for other layers or repositories (e.g., meta-intel, oecore, bitbake, etc.). The user controls can be extended to allow additional selections. For example, let&#039;s say you want to add a new selection box with values of &amp;quot;True&amp;quot; and &amp;quot;False&amp;quot;. The control will be named &amp;quot;mycontrol&amp;quot;.&lt;br /&gt;
: Add a new entry to the &amp;quot;props&amp;quot; section of nightly.conf for the new control:&lt;br /&gt;
:: {&#039;mycontrol&#039;:{&#039;prop_type&#039;:&#039;ChoiceStringParameter&#039;,&lt;br /&gt;
::    &#039;choices&#039;: [&#039;False&#039;, &#039;True&#039;],&lt;br /&gt;
::    &#039;name&#039;: &#039;mycontrol&#039;,&lt;br /&gt;
::    label&#039;:&#039;&amp;amp;lt;hr&amp;amp;gt;&amp;amp;lt;h3&amp;amp;gt; Should mycontrol be included as part of the image creation?:&amp;amp;lt;/h3&amp;amp;gt;&#039;}},&lt;br /&gt;
: Ensure that the new property gets copied to the properties for any triggered builds by including it in the list of TriggerBuilds entries section of the buildset config:&lt;br /&gt;
:: {&#039;TriggerBuilds&#039;: {&#039;copy_properties&#039;: [&#039;custom_mycontrol&#039;],&lt;br /&gt;
: Get the value of the new custom control in build step implementation file optionally include it in the objects property list. In the class&#039;s start() function, include code snippet like this:&lt;br /&gt;
:: try:&lt;br /&gt;
::: self.control = self.getProperty(&#039;custom_mycontrol&#039;)&lt;br /&gt;
:: except:&lt;br /&gt;
::: self.control = False&lt;br /&gt;
Note that the &amp;quot;custom_&amp;quot; name prefix is required, as parts of the buildbot code reply on it.&lt;br /&gt;
&lt;br /&gt;
If you want this new control to appear on the individual build config web pages, add it to the list of &amp;quot;props&amp;quot; entries (if present) or add a new prop array entry. E.g.:&lt;br /&gt;
: props: [{&#039;mycontrol&#039;:{&#039;prop_type&#039;:&#039;ChoiceStringParameter&#039;,&lt;br /&gt;
:    &#039;choices&#039;: [&#039;False&#039;, &#039;True&#039;],&lt;br /&gt;
:    &#039;name&#039;: &#039;mycontrol&#039;,&lt;br /&gt;
:    label&#039;:&#039;&amp;amp;lt;hr&amp;amp;gt;&amp;amp;lt;h3&amp;amp;gt; Should mycontrol be included as part of the image creation?:&amp;amp;lt;/h3&amp;amp;gt;&#039;}}]&lt;br /&gt;
&lt;br /&gt;
== Configuration Management ==&lt;br /&gt;
Any changes to the AutoBuilder code base should follow proper configuration management guidelines per the Yocto Project. Changes should first be made and tested on a local AutoBuilder instance (physical machine or VM), or during off hours on a staging or development AutoBuilder. After verification, patches should be posted to the mailing list for review&amp;lt;small&amp;gt;[1]&amp;lt;/small&amp;gt; and pushed to the master yoctoautobuilder repo, then merged into the running instance on the production AutoBuilders. The Yocto Project hosts two AutoBuilder git repos: yocto-autobuilder and yocto-autobuilder-production. The former is the standard public repository which includes example configuration files. The later represents the actual running configuration of the Linux Foundation public AutoBuilders.&lt;br /&gt;
&lt;br /&gt;
A typical workflow uses a copy of the yocto-autobuilder repo on a developer&#039;s computer.&lt;br /&gt;
* A developer makes changes and tests them on a local AutoBuilder instance.&lt;br /&gt;
** By convention, changes to build set config files are made to the instances in the &#039;&#039;buildset-config.controller&#039;&#039; directory, then later copied to the running instance in the &#039;&#039;buildset-config&#039;&#039; directory.&lt;br /&gt;
** For files in the &#039;&#039;buildset-config.controller&#039;&#039; directory, ensure the &amp;quot;builders&amp;quot; list has only &#039;example-worker&#039;.&lt;br /&gt;
** When copied to the running instance, be sure to update the list of builders for the cluster, if appropriate.&lt;br /&gt;
* When satisfied, commit the changes to the local repo.&lt;br /&gt;
* A patch set is generated and posted to the Yocto Project mailing list &amp;lt;yocto@yoctoproject.org&amp;gt;.&lt;br /&gt;
* Once the patch is reviewed, approved and pushed to the master branch of yocto-autobuilder, the production AutoBuilders can be updated:&lt;br /&gt;
** When the AutoBuilder is idle, stop the controller&lt;br /&gt;
** Ensure you are on the master branch, then do a &#039;git pull&#039; to grab the updates&lt;br /&gt;
** Switch to the yoctoio branch and do a &#039;git merge master&#039; to bring in the updates&lt;br /&gt;
** Make any additional installation specific changes and commit them&lt;br /&gt;
** Push the updated yoctoio branch to the production instance (&#039;git push prod yoctoio&#039; &amp;lt;small&amp;gt;[2]&amp;lt;/small&amp;gt;).&lt;br /&gt;
** Start the controller.&lt;br /&gt;
* If the change affected the buildbot_slave code, the login into each worker and restart it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
# Patches for the AutoBuilder should be sent to yocto@yoctoproject.org with &amp;quot;[yocto-autobuilder]&amp;quot; in the Subject line. Please CC: pidge@toganlabs.com and joshua.g.lock@linux.intel.com&lt;br /&gt;
# The original public AutoBuilder does not use the yoctio branch or the production repo to keep local changes under revision control. Instead, local changes are untracked.&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [[The_Yocto_Autobuilder |AutoBuilder Main Page]]&lt;br /&gt;
* [[AutoBuilder Cluster Setup]]&lt;/div&gt;</summary>
		<author><name>Bill Randle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilderClusterSetup&amp;diff=20068</id>
		<title>AutoBuilderClusterSetup</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilderClusterSetup&amp;diff=20068"/>
		<updated>2016-08-26T16:27:42Z</updated>

		<summary type="html">&lt;p&gt;Bill Randle: Bill Randle moved page AutoBuilderClusterSetup to AutoBuilder Cluster Setup: make title more readable&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[AutoBuilder Cluster Setup]]&lt;/div&gt;</summary>
		<author><name>Bill Randle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Cluster_Setup&amp;diff=20067</id>
		<title>AutoBuilder Cluster Setup</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Cluster_Setup&amp;diff=20067"/>
		<updated>2016-08-26T16:27:42Z</updated>

		<summary type="html">&lt;p&gt;Bill Randle: Bill Randle moved page AutoBuilderClusterSetup to AutoBuilder Cluster Setup: make title more readable&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;While the instructions below are targeted at setting up a new AutoBuilder cluster, they are equally valid for an single machine with combined controller and worker, except you probably won&#039;t use a NAS for storage. The controller portion requires only 2 GB of local disk space; the worker requires 2+ TB to hold all the build temp files and git repos. If build artifacts and a local sstate mirror are included, additional worker space is required.&lt;br /&gt;
&lt;br /&gt;
==As root==&lt;br /&gt;
* Install base OS with minimal target&lt;br /&gt;
* Install the requirements from http://www.yoctoproject.org/docs/current/yocto-project-qs/yocto-project-qs.html&lt;br /&gt;
** (Note: if you plan to build the poky-eclipse-neon plugin, openjdk-headless 1.8 is required.)&lt;br /&gt;
* If you plan to run the sanity tests (which is typical for an AB), the following additional packages need to be installed:&lt;br /&gt;
** GitPython for Python2 and Python3&lt;br /&gt;
** xsltproc &lt;br /&gt;
** vncserver (whichever one is provided by the distro is fine)&lt;br /&gt;
* Add pokybuild user (uid=6000, or for older clusters 1006)&lt;br /&gt;
* Add pokybuild user to &amp;quot;users&amp;quot; group (gid 100) (if &amp;quot;users&amp;quot; group does not exist, create it)&lt;br /&gt;
* Following the instructions from https://wiki.yoctoproject.org/wiki/How_to_enable_KVM_for_Poky_qemu, give /dev/kvm permissions to the pokybuild user.&lt;br /&gt;
* If a &amp;quot;kvm&amp;quot; group does not exist, add it to /etc/group and ensure /dev/kvm gid is set to &amp;quot;kvm&amp;quot; and is mode 660. Add pokybuild user to the &amp;quot;kvm&amp;quot; group.&lt;br /&gt;
* git clone --single-branch http://git.yoctoproject.org/git/poky /root/poky  (in /root for historical reasons, should change in the future)&lt;br /&gt;
* Install http://downloads.yoctoproject.org/releases/yocto/yocto-{latest_release}/toolchain/x86_64/poky-glibc-x86_64-core-image-sato-core2-64-toolchain-{relver}.sh to /opt/poky.&lt;br /&gt;
* Add startup scripts to create tap devs and start vncserver, in /etc/rc.local, /etc/init.d/boot.local, or as systemd unit files, which should perform the following:&lt;br /&gt;
** cd /root/poky/scripts/; ./runqemu-gen-tapdevs 6000 100 32 /opt/poky/sysroots/x86_64-pokysdk-linux/&lt;br /&gt;
** /bin/su - pokybuild -c &amp;quot;/usr/bin/vncserver&amp;quot;&lt;br /&gt;
* Disable or edit firewall rules to allow all connections to the tap devices. This allows sanity tests to connect to booted images.&lt;br /&gt;
* Install nfs-utils or nfs-common, add Domain to /etc/idmapd.conf, fstab entry, mount NAS under /srv/autobuilder.&lt;br /&gt;
&lt;br /&gt;
==As pokybuild==&lt;br /&gt;
&lt;br /&gt;
* Set up buildset-config, either:&lt;br /&gt;
** Add ssh key to clone production yocto-autobuilder&lt;br /&gt;
** git clone http://git.yoctoproject.org/git/yocto-autobuilder &amp;amp;&amp;amp; cd yocto-autobuilder &amp;amp;&amp;amp; git remote add prod git@git.yoctoproject.org:yocto-autobuilder-production &amp;amp;&amp;amp; git fetch prod &amp;amp;&amp;amp; git checkout -b yoctoio prod/yoctoio&lt;br /&gt;
* or:&lt;br /&gt;
** edit one of the several examples included in repo e.g. cp -r buildset-config.controller buildset-config&lt;br /&gt;
&lt;br /&gt;
* update config/autobuilder.conf and yocto-worker/buildbot.tac&lt;br /&gt;
* Start the worker&lt;br /&gt;
** touch ~/yocto-autobuilder/.setupdone&lt;br /&gt;
** . yocto-autobuilder-setup &lt;br /&gt;
** ./yocto-start-autobuilder worker&lt;/div&gt;</summary>
		<author><name>Bill Randle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Maintenance&amp;diff=20062</id>
		<title>AutoBuilder Maintenance</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Maintenance&amp;diff=20062"/>
		<updated>2016-08-26T15:40:56Z</updated>

		<summary type="html">&lt;p&gt;Bill Randle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
An AutoBuilder system consists of a controller and one or more workers. The controller reads configuration files, presents a simple web user interface and sends build step commands to the worker(s). (Note: the terms &amp;quot;worker&amp;quot; and &amp;quot;build slave&amp;quot; both refer to the machine or process performing the actual build, and are used interchangeably.)&lt;br /&gt;
&lt;br /&gt;
When making changes to the AutoBuilder, it is important to remember what the different parts of the system do and which machines need to be restarted after a change (controller or workers).&lt;br /&gt;
&lt;br /&gt;
* The build step configuration files contain a list of build steps to carry out for a particular build artifact or test (e.g., nightly-x86.conf or nightly-oe-selftest.conf). Some build step configuration files trigger other builds - e.g., nightly.conf triggers all the other nightly builds. A build step configuration file can also have user interface components: poky repo and branch, save build artifacts, etc. A build step configuration file also contains a list of workers (or builders) that are able to build this specific config. For example, poky-eclipse-neon requires JDK 1.8, so the list of workers is limited to those with Java 1.8 installed. Or,the list of workers for the nightly-rpm-non-rpm config is limited to those that do not use rpm as the native package manager (e.g., Debian and Ubuntu). The working set of build step config files live in the &#039;&#039;buildstep-config&#039;&#039; directory.&lt;br /&gt;
* The yoctoAB.conf also lives in the &#039;&#039;buildstep-config&#039;&#039; directory and contains a list of build step configurations that should be included in the web pages and their order.&lt;br /&gt;
* The autobuilder.conf contains variables to specify directory paths, the number of parallel makes, the list of QA email addresses, etc. Some of (but not all) of these variables are also passed to the worker(s). What is passed on is determined by the CreateAutoConf build step. The autobuilder.conf file lives in the &#039;&#039;config&#039;&#039; directory.&lt;br /&gt;
* The actual build step implementation files are written in Python and live in the &#039;&#039;lib/python2.7/site-packages/autobuilder&#039;&#039; and &#039;&#039;lib/python2.7/site-packages/autobuilder/buildsteps&#039;&#039; directories. There is typically a one-to-one mapping between the build steps in the build step config files and an Python implementation file. Often, the implementation consists of sending a set of shell commands for the worker to execute.&lt;br /&gt;
* The core buildbot code for the controller lives in &#039;&#039;lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg&#039;&#039;. It rarely needs to be changed unless a major new feature is added.&lt;br /&gt;
* The core buildbot code for the worker lives in &#039;&#039;lib/python2.7/site-packages/buildbot_slave-0.8.8-py2.7.egg&#039;&#039;. It rarely needs to be changed unless a major new feature is added.&lt;br /&gt;
&lt;br /&gt;
The various configuration and build step implementation files are read by the controller once on startup (startup of the controller process, not the machine as a whole) and cached. If any of the files change, the controller must be stopped and restarted:&lt;br /&gt;
: . ./yocto-autobuilder-setup&lt;br /&gt;
: ./yocto-stop-autobuilder controller&lt;br /&gt;
: ./yocto-start-autobuilder controller&lt;br /&gt;
&lt;br /&gt;
Generally, the only time a worked needs to be stopped and restarted is when the underlying buildbot_slave code changes. The procedure is the same as above for the controller, except replace &amp;quot;controller&amp;quot; with &amp;quot;worker&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Example Changes ==&lt;br /&gt;
This section presents a cookbook approach to common tasks often required as part of AutoBuilder updates or maintenance.&lt;br /&gt;
&lt;br /&gt;
=== Build Additional Image for an Existing Configuration ===&lt;br /&gt;
Let&#039;s say a particular build step config had a rule to build core-image-sato and core-image-minimal images:&lt;br /&gt;
: {&#039;BuildImages&#039;: {&#039;images&#039;: &#039;core-image-minimal core-image-sato&#039;}},&lt;br /&gt;
and you want to also build core-image-weston. Simply add the weston image to the list:&lt;br /&gt;
: {&#039;BuildImages&#039;: {&#039;images&#039;: &#039;core-image-minimal core-image-sato core-image-weston&#039;}},&lt;br /&gt;
To include the new image in the sanity tests, just add it to the list:&lt;br /&gt;
: {&#039;RunSanityTests&#039;: {&#039;images&#039;: &#039;core-image-minimal core-image-sato core-image-weston&#039;}},&lt;br /&gt;
After all the changes are made, restart the controller.&lt;br /&gt;
&lt;br /&gt;
=== Add an Additional Machine Configuration ===&lt;br /&gt;
We recently expanded the list of machines that wic images were built for. The original nightly-wic.conf file had rules to build qemux86_64 and genericx86_64 images. To build images for qemux86 and genericx86, new CreateAutoConf, BuildImages and CreateWicImages steps were added. For example:&lt;br /&gt;
: {&#039;CreateAutoConf&#039;:{&#039;machine&#039;:&#039;qemux86&#039;, &#039;atextappend&#039;:&#039;\nIMAGE_FSTYPES += &amp;quot; hddimg&amp;quot;\nMACHINE_FEATURES_append = &amp;quot; efi&amp;quot;\n&#039;}},&lt;br /&gt;
: {&#039;BuildImages&#039;:{&#039;images&#039;:&#039;syslinux syslinux-native parted-native gptfdisk-native dosfstools-native mtools-native&#039;}},&lt;br /&gt;
: {&#039;BuildImages&#039;:{&#039;images&#039;:&#039;core-image-sato&#039;}},&lt;br /&gt;
: {&#039;CreateWicImages&#039;:{&#039;wic_img_type&#039;:&#039;directdisk&#039;, &#039;target_img&#039;:&#039;core-image-sato&#039;}},&lt;br /&gt;
: {&#039;CreateWicImages&#039;:{&#039;wic_img_type&#039;:&#039;directdisk-gpt&#039;, &#039;target_img&#039;:&#039;core-image-sato&#039;}},&lt;br /&gt;
: {&#039;CreateWicImages&#039;:{&#039;wic_img_type&#039;:&#039;mkefidisk&#039;, &#039;target_img&#039;:&#039;core-image-sato&#039;}},&lt;br /&gt;
Normally, the extra &#039;atextappend&#039; entry is not required for CreateAutoConf, but in this case it is needed for the efi image type creation. When you add new machine configurations, don&#039;t forget to add the new machine type to the list of artifacts to publish in the PublishArtifacts step.&lt;br /&gt;
&lt;br /&gt;
=== Add a New Build Config ===&lt;br /&gt;
To add a new build to the collection of build products, create a new config file and copy to the buildset-config directory, update nightly.conf and yoctoAB.conf and restart the controller. For example, eclipse-plugin-neon was recently added to the build list. Since there are other eclipse plugins, it was easiest to copy an existing config file (i.e., eclipse-plugin-mars.conf) and change the names from &amp;quot;mars&amp;quot; to neon&amp;quot;. The list of &amp;quot;builders&amp;quot; was changed to include only those workers with native Java 1.8 support. The yoctoAB.conf file (in the &#039;&#039;buildset-config&#039;&#039; directory) was updated to add eclipse-plugin-neon to the list, and in this case, since eclipse-poky-kepler was being deprecated, it was removed from the list. In the nightly.conf file, eclipse-plugin-neon was added to the lis tof repos and to the TriggeredBuild list and eclipse-poky-kepler was removed.&lt;br /&gt;
&lt;br /&gt;
=== Pass a New Variable to the Workers ===&lt;br /&gt;
As mentioned above, only a subset of the variables in autobuilder.conf are actually passed down to the worker. To include a new variable in the list, first add it to autobuilder.conf (e.g., MY_NEW_VAR = &amp;quot;somevalue&amp;quot;). This makes it visible to the controller. Next edit the CreateAutoConf.py build step implementation file. In the start() function, add the new variable with a construct like:&lt;br /&gt;
: if os.environ.get(&#039;MY_NEW_VAR&#039;) is not None:&lt;br /&gt;
:: fout = fout + &#039;MY_NEW_VAR = &amp;quot;&#039; + os.environ.get(&#039;MY_NEW_VAR&#039;) + &#039;&amp;quot;&#039;&lt;br /&gt;
Restart the controller.&lt;br /&gt;
&lt;br /&gt;
=== Update the List of QA Email Recipients ===&lt;br /&gt;
To change the list of people receiving the QA notification emails, edit the autobuilder.conf file and change the contents of the QA_MAIL_CC variable. Restart the controller.&lt;br /&gt;
&lt;br /&gt;
=== Add a New User Control ===&lt;br /&gt;
When starting a build via the web page, you are presented with one or more controls to pass information to the controller. Most every build set config includes text boxes for the poky repo and branch selections. Other configs, like nightly.conf have quite a few controls to select if this is a release build, if QA emails should be sent, git repos and branches for other layers or repositories (e.g., meta-intel, oecore, bitbake, etc.). The user controls can be extended to allow additional selections. For example, let&#039;s say you want to add a new selection box with values of &amp;quot;True&amp;quot; and &amp;quot;False&amp;quot;. The control will be named &amp;quot;mycontrol&amp;quot;.&lt;br /&gt;
: Add a new entry to the &amp;quot;props&amp;quot; section of nightly.conf for the new control:&lt;br /&gt;
:: {&#039;mycontrol&#039;:{&#039;prop_type&#039;:&#039;ChoiceStringParameter&#039;,&lt;br /&gt;
::    &#039;choices&#039;: [&#039;False&#039;, &#039;True&#039;],&lt;br /&gt;
::    &#039;name&#039;: &#039;mycontrol&#039;,&lt;br /&gt;
::    label&#039;:&#039;&amp;amp;lt;hr&amp;amp;gt;&amp;amp;lt;h3&amp;amp;gt; Should mycontrol be included as part of the image creation?:&amp;amp;lt;/h3&amp;amp;gt;&#039;}},&lt;br /&gt;
: Ensure that the new property gets copied to the properties for any triggered builds by including it in the list of TriggerBuilds entries section of the buildset config:&lt;br /&gt;
:: {&#039;TriggerBuilds&#039;: {&#039;copy_properties&#039;: [&#039;custom_mycontrol&#039;],&lt;br /&gt;
: Get the value of the new custom control in build step implementation file optionally include it in the objects property list. In the class&#039;s start() function, include code snippet like this:&lt;br /&gt;
:: try:&lt;br /&gt;
::: self.control = self.getProperty(&#039;custom_mycontrol&#039;)&lt;br /&gt;
:: except:&lt;br /&gt;
::: self.control = False&lt;br /&gt;
Note that the &amp;quot;custom_&amp;quot; name prefix is required, as parts of the buildbot code reply on it.&lt;br /&gt;
&lt;br /&gt;
If you want this new control to appear on the individual build config web pages, add it to the list of &amp;quot;props&amp;quot; entries (if present) or add a new prop array entry. E.g.:&lt;br /&gt;
: props: [{&#039;mycontrol&#039;:{&#039;prop_type&#039;:&#039;ChoiceStringParameter&#039;,&lt;br /&gt;
:    &#039;choices&#039;: [&#039;False&#039;, &#039;True&#039;],&lt;br /&gt;
:    &#039;name&#039;: &#039;mycontrol&#039;,&lt;br /&gt;
:    label&#039;:&#039;&amp;amp;lt;hr&amp;amp;gt;&amp;amp;lt;h3&amp;amp;gt; Should mycontrol be included as part of the image creation?:&amp;amp;lt;/h3&amp;amp;gt;&#039;}}]&lt;br /&gt;
&lt;br /&gt;
== Configuration Management ==&lt;br /&gt;
Any changes to the AutoBuilder code base should follow proper configuration management guidelines per the Yocto Project. Changes should first be made and tested on a local AutoBuilder instance (physical machine or VM), or during off hours on a staging or development AutoBuilder. After verification, patches should be posted to the mailing list for review&amp;lt;small&amp;gt;[1]&amp;lt;/small&amp;gt; and pushed to the master yoctoautobuilder repo, then merged into the running instance on the production AutoBuilders. The Yocto Project hosts two AutoBuilder git repos: yocto-autobuilder and yocto-autobuilder-production. The former is the standard public repository which includes example configuration files. The later represents the actual running configuration of the Linux Foundation public AutoBuilders.&lt;br /&gt;
&lt;br /&gt;
A typical workflow uses a copy of the yocto-autobuilder repo on a developer&#039;s computer.&lt;br /&gt;
* A developer makes changes and tests them on a local AutoBuilder instance.&lt;br /&gt;
** By convention, changes to build set config files are made to the instances in the &#039;&#039;buildset-config.controller&#039;&#039; directory, then later copied to the running instance in the &#039;&#039;buildset-config&#039;&#039; directory.&lt;br /&gt;
** For files in the &#039;&#039;buildset-config.controller&#039;&#039; directory, ensure the &amp;quot;builders&amp;quot; list has only &#039;example-worker&#039;.&lt;br /&gt;
** When copied to the running instance, be sure to update the list of builders for the cluster, if appropriate.&lt;br /&gt;
* When satisfied, commit the changes to the local repo.&lt;br /&gt;
* A patch set is generated and posted to the Yocto Project mailing list &amp;lt;yocto@yoctoproject.org&amp;gt;.&lt;br /&gt;
* Once the patch is reviewed, approved and pushed to the master branch of yocto-autobuilder, the production AutoBuilders can be updated:&lt;br /&gt;
** When the AutoBuilder is idle, stop the controller&lt;br /&gt;
** Ensure you are on the master branch, then do a &#039;git pull&#039; to grab the updates&lt;br /&gt;
** Switch to the yoctoio branch and do a &#039;git merge master&#039; to bring in the updates&lt;br /&gt;
** Make any additional installation specific changes and commit them&lt;br /&gt;
** Push the updated yoctoio branch to the production instance (&#039;git push prod yoctoio&#039; &amp;lt;small&amp;gt;[2]&amp;lt;/small&amp;gt;).&lt;br /&gt;
** Start the controller.&lt;br /&gt;
* If the change affected the buildbot_slave code, the login into each worker and restart it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
# Patches for the AutoBuilder should be sent to yocto@yoctoproject.org with &amp;quot;[yocto-autobuilder]&amp;quot; in the Subject line. Please CC: pidge@toganlabs.com and joshua.g.lock@linux.intel.com&lt;br /&gt;
# The original public AutoBuilder does not use the yoctio branch or the production repo to keep local changes under revision control. Instead, local changes are untracked.&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [[The_Yocto_Autobuilder |AutoBuilder Main Page]]&lt;br /&gt;
* [[AutoBuilderClusterSetup |AutoBuilder Setup]]&lt;/div&gt;</summary>
		<author><name>Bill Randle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Maintenance&amp;diff=20061</id>
		<title>AutoBuilder Maintenance</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Maintenance&amp;diff=20061"/>
		<updated>2016-08-26T15:40:29Z</updated>

		<summary type="html">&lt;p&gt;Bill Randle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
An AutoBuilder system consists of a controller and one or more workers. The controller reads configuration files, presents a simple web user interface and sends build step commands to the worker(s). (Note: the terms &amp;quot;worker&amp;quot; and &amp;quot;build slave&amp;quot; both refer to the machine or process performing the actual build, and are used interchangeably.)&lt;br /&gt;
&lt;br /&gt;
When making changes to the AutoBuilder, it is important to remember what the different parts of the system do and which machines need to be restarted after a change (controller or workers).&lt;br /&gt;
&lt;br /&gt;
* The build step configuration files contain a list of build steps to carry out for a particular build artifact or test (e.g., nightly-x86.conf or nightly-oe-selftest.conf). Some build step configuration files trigger other builds - e.g., nightly.conf triggers all the other nightly builds. A build step configuration file can also have user interface components: poky repo and branch, save build artifacts, etc. A build step configuration file also contains a list of workers (or builders) that are able to build this specific config. For example, poky-eclipse-neon requires JDK 1.8, so the list of workers is limited to those with Java 1.8 installed. Or,the list of workers for the nightly-rpm-non-rpm config is limited to those that do not use rpm as the native package manager (e.g., Debian and Ubuntu). The working set of build step config files live in the &#039;&#039;buildstep-config&#039;&#039; directory.&lt;br /&gt;
* The yoctoAB.conf also lives in the &#039;&#039;buildstep-config&#039;&#039; directory and contains a list of build step configurations that should be included in the web pages and their order.&lt;br /&gt;
* The autobuilder.conf contains variables to specify directory paths, the number of parallel makes, the list of QA email addresses, etc. Some of (but not all) of these variables are also passed to the worker(s). What is passed on is determined by the CreateAutoConf build step. The autobulider.conf file lives in the &#039;&#039;config&#039;&#039; directory.&lt;br /&gt;
* The actual build step implementation files are written in Python and live in the &#039;&#039;lib/python2.7/site-packages/autobuilder&#039;&#039; and &#039;&#039;lib/python2.7/site-packages/autobuilder/buildsteps&#039;&#039; directories. There is typically a one-to-one mapping between the build steps in the build step config files and an Python implementation file. Often, the implementation consists of sending a set of shell commands for the worker to execute.&lt;br /&gt;
* The core buildbot code for the controller lives in &#039;&#039;lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg&#039;&#039;. It rarely needs to be changed unless a major new feature is added.&lt;br /&gt;
* The core buildbot code for the worker lives in &#039;&#039;lib/python2.7/site-packages/buildbot_slave-0.8.8-py2.7.egg&#039;&#039;. It rarely needs to be changed unless a major new feature is added.&lt;br /&gt;
&lt;br /&gt;
The various configuration and build step implementation files are read by the controller once on startup (startup of the controller process, not the machine as a whole) and cached. If any of the files change, the controller must be stopped and restarted:&lt;br /&gt;
: . ./yocto-autobuilder-setup&lt;br /&gt;
: ./yocto-stop-autobuilder controller&lt;br /&gt;
: ./yocto-start-autobuilder controller&lt;br /&gt;
&lt;br /&gt;
Generally, the only time a worked needs to be stopped and restarted is when the underlying buildbot_slave code changes. The procedure is the same as above for the controller, except replace &amp;quot;controller&amp;quot; with &amp;quot;worker&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Example Changes ==&lt;br /&gt;
This section presents a cookbook approach to common tasks often required as part of AutoBuilder updates or maintenance.&lt;br /&gt;
&lt;br /&gt;
=== Build Additional Image for an Existing Configuration ===&lt;br /&gt;
Let&#039;s say a particular build step config had a rule to build core-image-sato and core-image-minimal images:&lt;br /&gt;
: {&#039;BuildImages&#039;: {&#039;images&#039;: &#039;core-image-minimal core-image-sato&#039;}},&lt;br /&gt;
and you want to also build core-image-weston. Simply add the weston image to the list:&lt;br /&gt;
: {&#039;BuildImages&#039;: {&#039;images&#039;: &#039;core-image-minimal core-image-sato core-image-weston&#039;}},&lt;br /&gt;
To include the new image in the sanity tests, just add it to the list:&lt;br /&gt;
: {&#039;RunSanityTests&#039;: {&#039;images&#039;: &#039;core-image-minimal core-image-sato core-image-weston&#039;}},&lt;br /&gt;
After all the changes are made, restart the controller.&lt;br /&gt;
&lt;br /&gt;
=== Add an Additional Machine Configuration ===&lt;br /&gt;
We recently expanded the list of machines that wic images were built for. The original nightly-wic.conf file had rules to build qemux86_64 and genericx86_64 images. To build images for qemux86 and genericx86, new CreateAutoConf, BuildImages and CreateWicImages steps were added. For example:&lt;br /&gt;
: {&#039;CreateAutoConf&#039;:{&#039;machine&#039;:&#039;qemux86&#039;, &#039;atextappend&#039;:&#039;\nIMAGE_FSTYPES += &amp;quot; hddimg&amp;quot;\nMACHINE_FEATURES_append = &amp;quot; efi&amp;quot;\n&#039;}},&lt;br /&gt;
: {&#039;BuildImages&#039;:{&#039;images&#039;:&#039;syslinux syslinux-native parted-native gptfdisk-native dosfstools-native mtools-native&#039;}},&lt;br /&gt;
: {&#039;BuildImages&#039;:{&#039;images&#039;:&#039;core-image-sato&#039;}},&lt;br /&gt;
: {&#039;CreateWicImages&#039;:{&#039;wic_img_type&#039;:&#039;directdisk&#039;, &#039;target_img&#039;:&#039;core-image-sato&#039;}},&lt;br /&gt;
: {&#039;CreateWicImages&#039;:{&#039;wic_img_type&#039;:&#039;directdisk-gpt&#039;, &#039;target_img&#039;:&#039;core-image-sato&#039;}},&lt;br /&gt;
: {&#039;CreateWicImages&#039;:{&#039;wic_img_type&#039;:&#039;mkefidisk&#039;, &#039;target_img&#039;:&#039;core-image-sato&#039;}},&lt;br /&gt;
Normally, the extra &#039;atextappend&#039; entry is not required for CreateAutoConf, but in this case it is needed for the efi image type creation. When you add new machine configurations, don&#039;t forget to add the new machine type to the list of artifacts to publish in the PublishArtifacts step.&lt;br /&gt;
&lt;br /&gt;
=== Add a New Build Config ===&lt;br /&gt;
To add a new build to the collection of build products, create a new config file and copy to the buildset-config directory, update nightly.conf and yoctoAB.conf and restart the controller. For example, eclipse-plugin-neon was recently added to the build list. Since there are other eclipse plugins, it was easiest to copy an existing config file (i.e., eclipse-plugin-mars.conf) and change the names from &amp;quot;mars&amp;quot; to neon&amp;quot;. The list of &amp;quot;builders&amp;quot; was changed to include only those workers with native Java 1.8 support. The yoctoAB.conf file (in the &#039;&#039;buildset-config&#039;&#039; directory) was updated to add eclipse-plugin-neon to the list, and in this case, since eclipse-poky-kepler was being deprecated, it was removed from the list. In the nightly.conf file, eclipse-plugin-neon was added to the lis tof repos and to the TriggeredBuild list and eclipse-poky-kepler was removed.&lt;br /&gt;
&lt;br /&gt;
=== Pass a New Variable to the Workers ===&lt;br /&gt;
As mentioned above, only a subset of the variables in autobuilder.conf are actually passed down to the worker. To include a new variable in the list, first add it to autobuilder.conf (e.g., MY_NEW_VAR = &amp;quot;somevalue&amp;quot;). This makes it visible to the controller. Next edit the CreateAutoConf.py build step implementation file. In the start() function, add the new variable with a construct like:&lt;br /&gt;
: if os.environ.get(&#039;MY_NEW_VAR&#039;) is not None:&lt;br /&gt;
:: fout = fout + &#039;MY_NEW_VAR = &amp;quot;&#039; + os.environ.get(&#039;MY_NEW_VAR&#039;) + &#039;&amp;quot;&#039;&lt;br /&gt;
Restart the controller.&lt;br /&gt;
&lt;br /&gt;
=== Update the List of QA Email Recipients ===&lt;br /&gt;
To change the list of people receiving the QA notification emails, edit the autobuilder.conf file and change the contents of the QA_MAIL_CC variable. Restart the controller.&lt;br /&gt;
&lt;br /&gt;
=== Add a New User Control ===&lt;br /&gt;
When starting a build via the web page, you are presented with one or more controls to pass information to the controller. Most every build set config includes text boxes for the poky repo and branch selections. Other configs, like nightly.conf have quite a few controls to select if this is a release build, if QA emails should be sent, git repos and branches for other layers or repositories (e.g., meta-intel, oecore, bitbake, etc.). The user controls can be extended to allow additional selections. For example, let&#039;s say you want to add a new selection box with values of &amp;quot;True&amp;quot; and &amp;quot;False&amp;quot;. The control will be named &amp;quot;mycontrol&amp;quot;.&lt;br /&gt;
: Add a new entry to the &amp;quot;props&amp;quot; section of nightly.conf for the new control:&lt;br /&gt;
:: {&#039;mycontrol&#039;:{&#039;prop_type&#039;:&#039;ChoiceStringParameter&#039;,&lt;br /&gt;
::    &#039;choices&#039;: [&#039;False&#039;, &#039;True&#039;],&lt;br /&gt;
::    &#039;name&#039;: &#039;mycontrol&#039;,&lt;br /&gt;
::    label&#039;:&#039;&amp;amp;lt;hr&amp;amp;gt;&amp;amp;lt;h3&amp;amp;gt; Should mycontrol be included as part of the image creation?:&amp;amp;lt;/h3&amp;amp;gt;&#039;}},&lt;br /&gt;
: Ensure that the new property gets copied to the properties for any triggered builds by including it in the list of TriggerBuilds entries section of the buildset config:&lt;br /&gt;
:: {&#039;TriggerBuilds&#039;: {&#039;copy_properties&#039;: [&#039;custom_mycontrol&#039;],&lt;br /&gt;
: Get the value of the new custom control in build step implementation file optionally include it in the objects property list. In the class&#039;s start() function, include code snippet like this:&lt;br /&gt;
:: try:&lt;br /&gt;
::: self.control = self.getProperty(&#039;custom_mycontrol&#039;)&lt;br /&gt;
:: except:&lt;br /&gt;
::: self.control = False&lt;br /&gt;
Note that the &amp;quot;custom_&amp;quot; name prefix is required, as parts of the buildbot code reply on it.&lt;br /&gt;
&lt;br /&gt;
If you want this new control to appear on the individual build config web pages, add it to the list of &amp;quot;props&amp;quot; entries (if present) or add a new prop array entry. E.g.:&lt;br /&gt;
: props: [{&#039;mycontrol&#039;:{&#039;prop_type&#039;:&#039;ChoiceStringParameter&#039;,&lt;br /&gt;
:    &#039;choices&#039;: [&#039;False&#039;, &#039;True&#039;],&lt;br /&gt;
:    &#039;name&#039;: &#039;mycontrol&#039;,&lt;br /&gt;
:    label&#039;:&#039;&amp;amp;lt;hr&amp;amp;gt;&amp;amp;lt;h3&amp;amp;gt; Should mycontrol be included as part of the image creation?:&amp;amp;lt;/h3&amp;amp;gt;&#039;}}]&lt;br /&gt;
&lt;br /&gt;
== Configuration Management ==&lt;br /&gt;
Any changes to the AutoBuilder code base should follow proper configuration management guidelines per the Yocto Project. Changes should first be made and tested on a local AutoBuilder instance (physical machine or VM), or during off hours on a staging or development AutoBuilder. After verification, patches should be posted to the mailing list for review&amp;lt;small&amp;gt;[1]&amp;lt;/small&amp;gt; and pushed to the master yoctoautobuilder repo, then merged into the running instance on the production AutoBuilders. The Yocto Project hosts two AutoBuilder git repos: yocto-autobuilder and yocto-autobuilder-production. The former is the standard public repository which includes example configuration files. The later represents the actual running configuration of the Linux Foundation public AutoBuilders.&lt;br /&gt;
&lt;br /&gt;
A typical workflow uses a copy of the yocto-autobuilder repo on a developer&#039;s computer.&lt;br /&gt;
* A developer makes changes and tests them on a local AutoBuilder instance.&lt;br /&gt;
** By convention, changes to build set config files are made to the instances in the &#039;&#039;buildset-config.controller&#039;&#039; directory, then later copied to the running instance in the &#039;&#039;buildset-config&#039;&#039; directory.&lt;br /&gt;
** For files in the &#039;&#039;buildset-config.controller&#039;&#039; directory, ensure the &amp;quot;builders&amp;quot; list has only &#039;example-worker&#039;.&lt;br /&gt;
** When copied to the running instance, be sure to update the list of builders for the cluster, if appropriate.&lt;br /&gt;
* When satisfied, commit the changes to the local repo.&lt;br /&gt;
* A patch set is generated and posted to the Yocto Project mailing list &amp;lt;yocto@yoctoproject.org&amp;gt;.&lt;br /&gt;
* Once the patch is reviewed, approved and pushed to the master branch of yocto-autobuilder, the production AutoBuilders can be updated:&lt;br /&gt;
** When the AutoBuilder is idle, stop the controller&lt;br /&gt;
** Ensure you are on the master branch, then do a &#039;git pull&#039; to grab the updates&lt;br /&gt;
** Switch to the yoctoio branch and do a &#039;git merge master&#039; to bring in the updates&lt;br /&gt;
** Make any additional installation specific changes and commit them&lt;br /&gt;
** Push the updated yoctoio branch to the production instance (&#039;git push prod yoctoio&#039; &amp;lt;small&amp;gt;[2]&amp;lt;/small&amp;gt;).&lt;br /&gt;
** Start the controller.&lt;br /&gt;
* If the change affected the buildbot_slave code, the login into each worker and restart it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
# Patches for the AutoBuilder should be sent to yocto@yoctoproject.org with &amp;quot;[yocto-autobuilder]&amp;quot; in the Subject line. Please CC: pidge@toganlabs.com and joshua.g.lock@linux.intel.com&lt;br /&gt;
# The original public AutoBuilder does not use the yoctio branch or the production repo to keep local changes under revision control. Instead, local changes are untracked.&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [[The_Yocto_Autobuilder |AutoBuilder Main Page]]&lt;br /&gt;
* [[AutoBuilderClusterSetup |AutoBuilder Setup]]&lt;/div&gt;</summary>
		<author><name>Bill Randle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=The_Yocto_Autobuilder&amp;diff=20048</id>
		<title>The Yocto Autobuilder</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=The_Yocto_Autobuilder&amp;diff=20048"/>
		<updated>2016-08-26T01:55:28Z</updated>

		<summary type="html">&lt;p&gt;Bill Randle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== The Yocto AutoBuilder ==&lt;br /&gt;
&lt;br /&gt;
The Yocto AutobBuilder is a buildbot based autobuilder implementation that can be used to build out and test custom distros utilizing OE-Core (either bare or through the poky repository)&lt;br /&gt;
&lt;br /&gt;
The source code can be downloaded from [[git://git.yoctoproject.org/yocto-autobuilder]]. For details on the design and configuration of the AutoBuilder, refer to the &#039;&#039;&#039;&#039;&#039;YoctoAutobuilderDevelopersDocument.html&#039;&#039;&#039;&#039;&#039; document in the &#039;&#039;docs&#039;&#039; directory of the yocto-autobuilder git repo.&lt;br /&gt;
&lt;br /&gt;
The yocto-autobuilder maintainer is Elizabeth Flanagan. All patches to the yocto-autobuilder should be sent to yocto@yoctoproject.org with &amp;quot;[yocto-autobuilder]&amp;quot; in the Subject line. Please CC: pidge@toganlabs.com and joshua.g.lock@linux.intel.com.&lt;br /&gt;
&lt;br /&gt;
If you have access to our production autobuilder, please read the documentation on [https://wiki.yoctoproject.org/wiki/How_to_start_a_build_on_the_Autobuilder how to kick off builds.]&lt;br /&gt;
&lt;br /&gt;
=== Resources ===&lt;br /&gt;
&lt;br /&gt;
* [[AutoBuilder Maintenance]]&lt;br /&gt;
* [https://wiki.yoctoproject.org/wiki/AutoBuilderClusterSetup AutoBuilder Setup]&lt;br /&gt;
* [https://wiki.yoctoproject.org/wiki/How_to_start_a_build_on_the_Autobuilder How to Start a Build on the AutoBuilder]&lt;br /&gt;
* [[Frequently Asked Yocto Autobuilder Questions]]&lt;/div&gt;</summary>
		<author><name>Bill Randle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=The_Yocto_Autobuilder&amp;diff=20047</id>
		<title>The Yocto Autobuilder</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=The_Yocto_Autobuilder&amp;diff=20047"/>
		<updated>2016-08-26T01:54:48Z</updated>

		<summary type="html">&lt;p&gt;Bill Randle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== The Yocto AutoBuilder ==&lt;br /&gt;
&lt;br /&gt;
The Yocto AutobBuilder is a buildbot based autobuilder implementation that can be used to build out and test custom distros utilizing OE-Core (either bare or through the poky repository)&lt;br /&gt;
&lt;br /&gt;
The source code can be downloaded from [[git://git.yoctoproject.org/yocto-autobuilder]]. For details on the design and configuration of the AutoBuilder, refer to the &#039;&#039;&#039;&#039;YoctoAutobuilderDevelopersDocument.html&#039;&#039;&#039;&#039; document in the &#039;&#039;docs&#039;&#039; directory of the yocto-autobuilder git repo.&lt;br /&gt;
&lt;br /&gt;
The yocto-autobuilder maintainer is Elizabeth Flanagan. All patches to the yocto-autobuilder should be sent to yocto@yoctoproject.org with &amp;quot;[yocto-autobuilder]&amp;quot; in the Subject line. Please CC: pidge@toganlabs.com and joshua.g.lock@linux.intel.com.&lt;br /&gt;
&lt;br /&gt;
If you have access to our production autobuilder, please read the documentation on [https://wiki.yoctoproject.org/wiki/How_to_start_a_build_on_the_Autobuilder how to kick off builds.]&lt;br /&gt;
&lt;br /&gt;
=== Resources ===&lt;br /&gt;
&lt;br /&gt;
* [[AutoBuilder Maintenance]]&lt;br /&gt;
* [https://wiki.yoctoproject.org/wiki/AutoBuilderClusterSetup AutoBuilder Setup]&lt;br /&gt;
* [https://wiki.yoctoproject.org/wiki/How_to_start_a_build_on_the_Autobuilder How to Start a Build on the AutoBuilder]&lt;br /&gt;
* [[Frequently Asked Yocto Autobuilder Questions]]&lt;/div&gt;</summary>
		<author><name>Bill Randle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Maintenance&amp;diff=20046</id>
		<title>AutoBuilder Maintenance</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Maintenance&amp;diff=20046"/>
		<updated>2016-08-26T01:47:02Z</updated>

		<summary type="html">&lt;p&gt;Bill Randle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Overview ===&lt;br /&gt;
An AutoBuilder system consists of a controller and one or more workers. The controller reads configuration files, presents a simple web user interface and sends build step commands to the worker(s). (Note: the terms &amp;quot;worker&amp;quot; and &amp;quot;build slave&amp;quot; both refer to the machine or process performing the actual build, and are used interchangeably.)&lt;br /&gt;
&lt;br /&gt;
When making changes to the AutoBuilder, it is important to remember what the different parts of the system do and which machines need to be restarted after a change (controller or workers).&lt;br /&gt;
&lt;br /&gt;
* The build step configuration files contain a list of build steps to carry out for a particular build artifact or test (e.g., nightly-x86.conf or nightly-oe-selftest.conf). Some build step configuration files trigger other builds - e.g., nightly.conf triggers all the other nightly builds. A build step configuration file can also have user interface components: poky repo and branch, save build artifacts, etc. A build step configuration file also contains a list of workers (or builders) that are able to build this specific config. For example, poky-eclipse-neon requires JDK 1.8, so the list of workers is limited to those with Java 1.8 installed. Or,the list of workers for the nightly-rpm-non-rpm config is limited to those that do not use rpm as the native package manager (e.g., Debian and Ubuntu). The working set of biuld step config files live in the &#039;&#039;buildstep-config&#039;&#039; directory.&lt;br /&gt;
* The autobuilder.conf contains variables to specify directory paths, the number of parallel makes, the list of QA email addresses, etc. Some of (but not all) of these variables are also passed to the worker(s). What is passed on is determined by the CreateAutoConf build step. The autobulider.conf file lives in the &#039;&#039;config&#039;&#039; directory.&lt;br /&gt;
* The actual build step implementation files are written in Python and live in the &#039;&#039;lib/python2.7/site-packages/autobuilder&#039;&#039; and &#039;&#039;lib/python2.7/site-packages/autobuilder/buildsteps&#039;&#039; directories. There is typically a one-to-one mapping between the build steps in the biuld step config files and an Python implementation file. Often, the implementation consists of sending a set of shell commands for the worker to execute.&lt;br /&gt;
* The core buildbot code for the controller lives in &#039;&#039;lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg&#039;&#039;. It rarely needs to be changed unless a major new feature is added.&lt;br /&gt;
* The core buildbot code for the worker lives in &#039;&#039;lib/python2.7/site-packages/buildbot_slave-0.8.8-py2.7.egg&#039;&#039;. It rarely needs to be changed unless a major new feature is added.&lt;br /&gt;
&lt;br /&gt;
The various configuration and build step implementation files are read by the controller once on startup (startup of the controller process, not the machine as a whole) and cached. If any of the files change, the controller must be stopped and restarted:&lt;br /&gt;
: . ./yocto-autobuilder-setup&lt;br /&gt;
: ./yocto-stop-autobuilder controller&lt;br /&gt;
: ./yocto-start-autobuilder controller&lt;br /&gt;
&lt;br /&gt;
Generally, the only time a worked needs to be stopped and restarted is when the underlying bitbot_slave code changes. The procedure is the same as above for the controller, except replace &amp;quot;controller&amp;quot; with &amp;quot;worker&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Example Changes ===&lt;br /&gt;
==== Build Additional Image for an Existing Configuration ====&lt;br /&gt;
Let&#039;s say a particular build step config had a rule to build core-image-sato and core-image-minimal images:&lt;br /&gt;
: {&#039;BuildImages&#039;: {&#039;images&#039;: &#039;-c populate_sdk_ext core-image-minimal core-image-sato&#039;}},&lt;br /&gt;
and you want to also build core-image-weston. Simply add the weston image to the list:&lt;br /&gt;
: {&#039;BuildImages&#039;: {&#039;images&#039;: &#039;core-image-minimal core-image-sato core-image-weston&#039;}},&lt;br /&gt;
To include the new image in the sanity tests, just add it to the list:&lt;br /&gt;
: {&#039;RunSanityTests&#039;: {&#039;images&#039;: &#039;core-image-minimal core-image-sato core-image-weston&#039;}},&lt;br /&gt;
After all the changes are made, restart the controller. &lt;br /&gt;
==== Add an Additional Machine Configuration ====&lt;br /&gt;
We recently expanded the list of machines that wic images were built for. The original nightly-wic.conf file had rules to build qemux86_64 and genericx86_64 images. To build images for qemux86 and genericx86, add new CreateAutoConf, BuildImages and CreateWicImages steps. For example:&lt;br /&gt;
: {&#039;CreateAutoConf&#039;:{&#039;machine&#039;:&#039;qemux86&#039;, &#039;atextappend&#039;:&#039;\nIMAGE_FSTYPES += &amp;quot; hddimg&amp;quot;\nMACHINE_FEATURES_append = &amp;quot; efi&amp;quot;\n&#039;}},&lt;br /&gt;
: {&#039;BuildImages&#039;:{&#039;images&#039;:&#039;syslinux syslinux-native parted-native gptfdisk-native dosfstools-native mtools-native&#039;}},&lt;br /&gt;
: {&#039;BuildImages&#039;:{&#039;images&#039;:&#039;core-image-sato&#039;}},&lt;br /&gt;
: {&#039;CreateWicImages&#039;:{&#039;wic_img_type&#039;:&#039;directdisk&#039;, &#039;target_img&#039;:&#039;core-image-sato&#039;}},&lt;br /&gt;
: {&#039;CreateWicImages&#039;:{&#039;wic_img_type&#039;:&#039;directdisk-gpt&#039;, &#039;target_img&#039;:&#039;core-image-sato&#039;}},&lt;br /&gt;
: {&#039;CreateWicImages&#039;:{&#039;wic_img_type&#039;:&#039;mkefidisk&#039;, &#039;target_img&#039;:&#039;core-image-sato&#039;}},&lt;br /&gt;
Normally, the extra &#039;atextappend&#039; entry is not required for CreateAutoConf, but in this case it is needed for the efi image type creation. When you add new machine configurations, don&#039;t forget to add the new machine type to the list of artifacts to publish in the PublishArtifacts step.&lt;br /&gt;
==== Add a New Build Config ====&lt;br /&gt;
To add a new build to the collection of build products, create a new config file and copy to the buildset-config directory, update nightly.conf and yoctoAB.conf and restart the controller. For example, eclipse-plugin-neon was recently added to the build list. Since there are other eclipse plugins, it was easiest to copy an existing config file (i.e., eclipse-plugin-mars.conf) and change the names from &amp;quot;mars&amp;quot; to neon&amp;quot;. The list of &amp;quot;builders&amp;quot; was changed to include only those workers with native Java 1.8 support. The yoctoAB.conf file (in the &#039;&#039;buildset-config&#039;&#039; directory) was updated to add eclipse-plugin-neon to the list, and in this case, since eclipse-poky-kepler was being deprecated, it was removed from the list. In the nightly.conf file, eclipse-plugin-neon was added to the lis tof repos and to the TriggeredBuild list and eclipse-poky-kepler was removed.&lt;br /&gt;
==== Pass a New Variable to the Workers ====&lt;br /&gt;
As mentioned above, only a subset of the variables in autobuilder.conf are actually passed down to the worker. To include a new variable in the list, first add it to autobuilder.conf (e.g., MY_NEW_VAR = &amp;quot;somevalue&amp;quot;). This makes it visible to the controller. Next edit the CreateAutoConf.py build step implementation file. In the start() function, add the new variable with a construct like:&lt;br /&gt;
: if os.environ.get(&#039;MY_NEW_VAR&#039;) is not None:&lt;br /&gt;
:: fout = fout + &#039;MY_NEW_VAR = &amp;quot;&#039; + os.environ.get(&#039;MY_NEW_VAR&#039;) + &#039;&amp;quot;&#039;&lt;br /&gt;
Restart the controller.&lt;br /&gt;
==== Update the List of QA Email Recipients ====&lt;br /&gt;
To change the list of people receiving the QA notification emails, edit the autobuilder.conf file and change the contents of the QA_MAIL_CC variable. Restart the controller.&lt;br /&gt;
==== Add a New User Control ====&lt;br /&gt;
When starting a build via the web page, you are presented with one or more controls to pass information to the controller. Most every build set config includes text boxes for the poky repo and branch selections. Other configs, like nightly.conf have quite a few controls to select if this is a release build, if QA emails should be sent, git repos and branches for other layers or repositories (e.g., meta-intel, oecore, bitbake, etc.). The user controls can be extended to allow additional selections. For example, let&#039;s say you want to add a new selection box with values of &amp;quot;True&amp;quot; and &amp;quot;False&amp;quot;. The control will be named &amp;quot;mycontrol&amp;quot;.&lt;br /&gt;
: Add a new entry to the &amp;quot;props&amp;quot; section of nightly.conf for the new control:&lt;br /&gt;
:: {&#039;mycontrol&#039;:{&#039;prop_type&#039;:&#039;ChoiceStringParameter&#039;,&lt;br /&gt;
::    &#039;choices&#039;: [&#039;False&#039;, &#039;True&#039;],&lt;br /&gt;
::    &#039;name&#039;: &#039;mycontrol&#039;,&lt;br /&gt;
::    label&#039;:&#039;&amp;amp;lt;hr&amp;amp;gt;&amp;amp;lt;h3&amp;amp;gt; Should mycontrol be included as part of the image creation?:&amp;amp;lt;/h3&amp;amp;gt;&#039;}},&lt;br /&gt;
: Ensure that the new property gets copied to the properties for any triggered builds by including it in the list of TriggeredBuilds entries:&lt;br /&gt;
:: {&#039;TriggerBuilds&#039;: {&#039;copy_properties&#039;: [&#039;custom_mycontrol&#039;],&lt;br /&gt;
: Get the value of the new custom control in build step implementation file optionally include it in the objects property list. In the class&#039;s start() function, include code snippet like this:&lt;br /&gt;
:: try:&lt;br /&gt;
::: self.control = self.getProperty(&#039;custom_mycontrol&#039;)&lt;br /&gt;
:: except:&lt;br /&gt;
::: self.control = False&lt;br /&gt;
Note that the &amp;quot;custom_&amp;quot; name prefix is required, as parts of the buildbot code reply on it.&lt;br /&gt;
&lt;br /&gt;
If you want this new control to appear on the individual build config web pages, add it to the list of &amp;quot;props&amp;quot; entries (if present) or add a new prop array entry. E.g.:&lt;br /&gt;
: props: [{&#039;mycontrol&#039;:{&#039;prop_type&#039;:&#039;ChoiceStringParameter&#039;,&lt;br /&gt;
:    &#039;choices&#039;: [&#039;False&#039;, &#039;True&#039;],&lt;br /&gt;
:    &#039;name&#039;: &#039;mycontrol&#039;,&lt;br /&gt;
:    label&#039;:&#039;&amp;amp;lt;hr&amp;amp;gt;&amp;amp;lt;h3&amp;amp;gt; Should mycontrol be included as part of the image creation?:&amp;amp;lt;/h3&amp;amp;gt;&#039;}}]&lt;br /&gt;
=== Configuration Management ===&lt;br /&gt;
Any changes to the AutoBuilder code base should follow proper configuration management guidelines per the Yocto Project. Changes should first be made and tested on a local AutoBuilder instance (physical machine or VM), or during off hours on a staging or development AutoBuilder. After verification, patches should be posted to the mailing list for review and push to the master yoctoautobuilder repo, then merged into the running instance on the production AutoBuilders. The Yocto Project hosts two AutoBuilder git repos: yocto-autobuilder and yocto-autobuilder-production. The former is the standard public repository which includes example configuration files. The later represents the actual running configuration of the Linux Foundation public AutoBuilders.&lt;br /&gt;
&lt;br /&gt;
A typical workflow uses a copy of the yocto-autobuilder repo on a developer&#039;s computer.&lt;br /&gt;
* A developer makes changes and tests them on a local AutoBuilder instance.&lt;br /&gt;
** By convention, changes to build set config files are made to the instances in the &#039;&#039;buildset-config.controller&#039;&#039; directory, then later copied to the running instance in the &#039;&#039;buildset-config&#039;&#039; directory.&lt;br /&gt;
** For files in the &#039;&#039;buildset-config.controller&#039;&#039; directory, ensure the &amp;quot;builders&amp;quot; list has only &#039;example-worker&#039;.&lt;br /&gt;
** When copied to the running instance, be sure to update the list of builders for the cluster, if appropriate.&lt;br /&gt;
* When satisfied, commit the changes to the local repo.&lt;br /&gt;
* A patch set is generated and posted to the mailing list.&lt;br /&gt;
* Once the patch is reviewed, approved and pushed to the master branch of yocto-autobuilder, the production AutoBuilders can be updated:&lt;br /&gt;
** When the AutoBuilder is idle, stop the controller&lt;br /&gt;
** Ensure you are on the master branch, then do a &#039;git pull&#039; to grab the updates&lt;br /&gt;
** Switch to the yoctoio branch and do a &#039;git merge master&#039; to bring in the updates&lt;br /&gt;
** Make any additional installation specific changes and commit them&lt;br /&gt;
** Push the updated yoctoio branch to the production instance (&#039;git push prod yoctoio&#039; &amp;lt;small&amp;gt;[1]&amp;lt;/small&amp;gt;).&lt;br /&gt;
* Restart the controller.&lt;br /&gt;
* If the change affected the buildbot_slave code, the login into each worker and restart it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;1. The original public AutoBuilder does not use the yoctio branch or the production repo to keep local changes under revision control. Instead, local changes are untracked.&amp;lt;/small&amp;gt;&lt;br /&gt;
=== Resources ===&lt;br /&gt;
* [[The_Yocto_Autobuilder |AutoBuilder Main Page]]&lt;br /&gt;
* [[AutoBuilderClusterSetup |AutoBuilder Setup]]&lt;/div&gt;</summary>
		<author><name>Bill Randle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Maintenance&amp;diff=20045</id>
		<title>AutoBuilder Maintenance</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Maintenance&amp;diff=20045"/>
		<updated>2016-08-26T01:45:09Z</updated>

		<summary type="html">&lt;p&gt;Bill Randle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Overview ===&lt;br /&gt;
An AutoBuilder system consists of a controller and one or more workers. The controller reads configuration files, presents a simple web user interface and sends build step commands to the worker(s). (Note: the terms &amp;quot;worker&amp;quot; and &amp;quot;build slave&amp;quot; both refer to the machine or process performing the actual build, and are used interchangeably.)&lt;br /&gt;
&lt;br /&gt;
When making changes to the AutoBuilder, it is important to remember what the different parts of the system do and which machines need to be restarted after a change (controller or workers).&lt;br /&gt;
&lt;br /&gt;
* The build step configuration files contain a list of build steps to carry out for a particular build artifact or test (e.g., nightly-x86.conf or nightly-oe-selftest.conf). Some build step configuration files trigger other builds - e.g., nightly.conf triggers all the other nightly builds. A build step configuration file can also have user interface components: poky repo and branch, save build artifacts, etc. A build step configuration file also contains a list of workers (or builders) that are able to build this specific config. For example, poky-eclipse-neon requires JDK 1.8, so the list of workers is limited to those with Java 1.8 installed. Or,the list of workers for the nightly-rpm-non-rpm config is limited to those that do not use rpm as the native package manager (e.g., Debian and Ubuntu). The working set of biuld step config files live in the &#039;&#039;buildstep-config&#039;&#039; directory.&lt;br /&gt;
* The autobuilder.conf contains variables to specify directory paths, the number of parallel makes, the list of QA email addresses, etc. Some of (but not all) of these variables are also passed to the worker(s). What is passed on is determined by the CreateAutoConf build step. The autobulider.conf file lives in the &#039;&#039;config&#039;&#039; directory.&lt;br /&gt;
* The actual build step implementation files are written in Python and live in the &#039;&#039;lib/python2.7/site-packages/autobuilder&#039;&#039; and &#039;&#039;lib/python2.7/site-packages/autobuilder/buildsteps&#039;&#039; directories. There is typically a one-to-one mapping between the build steps in the biuld step config files and an Python implementation file. Often, the implementation consists of sending a set of shell commands for the worker to execute.&lt;br /&gt;
* The core buildbot code for the controller lives in &#039;&#039;lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg&#039;&#039;. It rarely needs to be changed unless a major new feature is added.&lt;br /&gt;
* The core buildbot code for the worker lives in &#039;&#039;lib/python2.7/site-packages/buildbot_slave-0.8.8-py2.7.egg&#039;&#039;. It rarely needs to be changed unless a major new feature is added.&lt;br /&gt;
&lt;br /&gt;
The various configuration and build step implementation files are read by the controller once on startup (startup of the controller process, not the machine as a whole) and cached. If any of the files change, the controller must be stopped and restarted:&lt;br /&gt;
: . ./yocto-autobuilder-setup&lt;br /&gt;
: ./yocto-stop-autobuilder controller&lt;br /&gt;
: ./yocto-start-autobuilder controller&lt;br /&gt;
&lt;br /&gt;
Generally, the only time a worked needs to be stopped and restarted is when the underlying bitbot_slave code changes. The procedure is the same as above for the controller, except replace &amp;quot;controller&amp;quot; with &amp;quot;worker&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Example Changes ===&lt;br /&gt;
==== Build Additional Image for an Existing Configuration ====&lt;br /&gt;
Let&#039;s say a particular build step config had a rule to build core-image-sato and core-image-minimal images:&lt;br /&gt;
: {&#039;BuildImages&#039;: {&#039;images&#039;: &#039;-c populate_sdk_ext core-image-minimal core-image-sato&#039;}},&lt;br /&gt;
and you want to also build core-image-weston. Simply add the weston image to the list:&lt;br /&gt;
: {&#039;BuildImages&#039;: {&#039;images&#039;: &#039;core-image-minimal core-image-sato core-image-weston&#039;}},&lt;br /&gt;
To include the new image in the sanity tests, just add it to the list:&lt;br /&gt;
: {&#039;RunSanityTests&#039;: {&#039;images&#039;: &#039;core-image-minimal core-image-sato core-image-weston&#039;}},&lt;br /&gt;
After all the changes are made, restart the controller. &lt;br /&gt;
==== Add an Additional Machine Configuration ====&lt;br /&gt;
We recently expanded the list of machines that wic images were built for. The original nightly-wic.conf file had rules to build qemux86_64 and genericx86_64 images. To build images for qemux86 and genericx86, add new CreateAutoConf, BuildImages and CreateWicImages steps. For example:&lt;br /&gt;
: {&#039;CreateAutoConf&#039;:{&#039;machine&#039;:&#039;qemux86&#039;, &#039;atextappend&#039;:&#039;\nIMAGE_FSTYPES += &amp;quot; hddimg&amp;quot;\nMACHINE_FEATURES_append = &amp;quot; efi&amp;quot;\n&#039;}},&lt;br /&gt;
: {&#039;BuildImages&#039;:{&#039;images&#039;:&#039;syslinux syslinux-native parted-native gptfdisk-native dosfstools-native mtools-native&#039;}},&lt;br /&gt;
: {&#039;BuildImages&#039;:{&#039;images&#039;:&#039;core-image-sato&#039;}},&lt;br /&gt;
: {&#039;CreateWicImages&#039;:{&#039;wic_img_type&#039;:&#039;directdisk&#039;, &#039;target_img&#039;:&#039;core-image-sato&#039;}},&lt;br /&gt;
: {&#039;CreateWicImages&#039;:{&#039;wic_img_type&#039;:&#039;directdisk-gpt&#039;, &#039;target_img&#039;:&#039;core-image-sato&#039;}},&lt;br /&gt;
: {&#039;CreateWicImages&#039;:{&#039;wic_img_type&#039;:&#039;mkefidisk&#039;, &#039;target_img&#039;:&#039;core-image-sato&#039;}},&lt;br /&gt;
Normally, the extra &#039;atextappend&#039; entry is not required for CreateAutoConf, but in this case it is needed for the efi image type creation. When you add new machine configurations, don&#039;t forget to add the new machine type to the list of artifacts to publish in the PublishArtifacts step.&lt;br /&gt;
==== Add a New Build Config ====&lt;br /&gt;
To add a new build to the collection of build products, create a new config file and copy to the buildset-config directory, update nightly.conf and yoctoAB.conf and restart the controller. For example, eclipse-plugin-neon was recently added to the build list. Since there are other eclipse plugins, it was easiest to copy an existing config file (i.e., eclipse-plugin-mars.conf) and change the names from &amp;quot;mars&amp;quot; to neon&amp;quot;. The list of &amp;quot;builders&amp;quot; was changed to include only those workers with native Java 1.8 support. The yoctoAB.conf file (in the &#039;&#039;buildset-config&#039;&#039; directory) was updated to add eclipse-plugin-neon to the list, and in this case, since eclipse-poky-kepler was being deprecated, it was removed from the list. In the nightly.conf file, eclipse-plugin-neon was added to the lis tof repos and to the TriggeredBuild list and eclipse-poky-kepler was removed.&lt;br /&gt;
==== Pass a New Variable to the Workers ====&lt;br /&gt;
As mentioned above, only a subset of the variables in autobuilder.conf are actually passed down to the worker. To include a new variable in the list, first add it to autobuilder.conf (e.g., MY_NEW_VAR = &amp;quot;somevalue&amp;quot;). This makes it visible to the controller. Next edit the CreateAutoConf.py build step implementation file. In the start() function, add the new variable with a construct like:&lt;br /&gt;
: if os.environ.get(&#039;MY_NEW_VAR&#039;) is not None:&lt;br /&gt;
:: fout = fout + &#039;MY_NEW_VAR = &amp;quot;&#039; + os.environ.get(&#039;MY_NEW_VAR&#039;) + &#039;&amp;quot;&#039;&lt;br /&gt;
Restart the controller.&lt;br /&gt;
==== Update the List of QA Email Recipients ====&lt;br /&gt;
To change the list of people receiving the QA notification emails, edit the autobuilder.conf file and change the contents of the QA_MAIL_CC variable. Restart the controller.&lt;br /&gt;
==== Add a New User Control ====&lt;br /&gt;
When starting a build via the web page, you are presented with one or more controls to pass information to the controller. Most every build set config includes text boxes for the poky repo and branch selections. Other configs, like nightly.conf have quite a few controls to select if this is a release build, if QA emails should be sent, git repos and branches for other layers or repositories (e.g., meta-intel, oecore, bitbake, etc.). The user controls can be extended to allow additional selections. For example, let&#039;s say you want to add a new selection box with values of &amp;quot;True&amp;quot; and &amp;quot;False&amp;quot;. The control will be named &amp;quot;mycontrol&amp;quot;.&lt;br /&gt;
: Add a new entry to the &amp;quot;props&amp;quot; section of nightly.conf for the new control:&lt;br /&gt;
:: {&#039;mycontrol&#039;:{&#039;prop_type&#039;:&#039;ChoiceStringParameter&#039;,&lt;br /&gt;
::    &#039;choices&#039;: [&#039;False&#039;, &#039;True&#039;],&lt;br /&gt;
::    &#039;name&#039;: &#039;mycontrol&#039;,&lt;br /&gt;
::    label&#039;:&#039;&amp;amp;lt;hr&amp;amp;gt;&amp;amp;lt;h3&amp;amp;gt; Should mycontrol be included as part of the image creation?:&amp;amp;lt;/h3&amp;amp;gt;&#039;}},&lt;br /&gt;
: Ensure that the new property gets copied to the properties for any triggered builds by including it in the list of TriggeredBuilds entries:&lt;br /&gt;
:: {&#039;TriggerBuilds&#039;: {&#039;copy_properties&#039;: [&#039;custom_mycontrol&#039;],&lt;br /&gt;
: Get the value of the new custom control in build step implementation file optionally include it in the objects property list. In the class&#039;s start() function, include code snippet like this:&lt;br /&gt;
:: try:&lt;br /&gt;
::: self.control = self.getProperty(&#039;custom_mycontrol&#039;)&lt;br /&gt;
:: except:&lt;br /&gt;
::: self.control = False&lt;br /&gt;
Note that the &amp;quot;custom_&amp;quot; name prefix is required, as parts of the buildbot code reply on it.&lt;br /&gt;
&lt;br /&gt;
If you want this new control to appear on the individual build config web pages, add it to the list of &amp;quot;props&amp;quot; entries (if present) or add a new prop array entry. E.g.:&lt;br /&gt;
: props: [{&#039;mycontrol&#039;:{&#039;prop_type&#039;:&#039;ChoiceStringParameter&#039;,&lt;br /&gt;
:    &#039;choices&#039;: [&#039;False&#039;, &#039;True&#039;],&lt;br /&gt;
:    &#039;name&#039;: &#039;mycontrol&#039;,&lt;br /&gt;
:    label&#039;:&#039;&amp;amp;lt;hr&amp;amp;gt;&amp;amp;lt;h3&amp;amp;gt; Should mycontrol be included as part of the image creation?:&amp;amp;lt;/h3&amp;amp;gt;&#039;}}]&lt;br /&gt;
=== Configuration Management ===&lt;br /&gt;
Any changes to the AutoBuilder code base should follow proper configuration management guidelines per the Yocto Project. Changes should first be made and tested on a local AutoBuilder instance (physical machine or VM), or during off hours on a staging or development AutoBuilder. After verification, patches should be posted to the mailing list for review and push to the master yoctoautobuilder repo, then merged into the running instance on the production AutoBuilders. The Yocto Project hosts two AutoBuilder git repos: yocto-autobuilder and yocto-autobuilder-production. The former is the standard public repository which includes example configuration files. The later represents the actual running configuration of the Linux Foundation public AutoBuilders.&lt;br /&gt;
&lt;br /&gt;
A typical workflow uses a copy of the yocto-autobuilder repo on a developer&#039;s computer.&lt;br /&gt;
* A developer makes changes and tests them on a local AutoBuilder instance.&lt;br /&gt;
** By convention, changes to build set config files are made to the instances in the &#039;&#039;buildset-config.controller&#039;&#039; directory, then later copied to the running instance in the &#039;&#039;buildset-config&#039;&#039; directory.&lt;br /&gt;
** For files in the &#039;&#039;buildset-config.controller&#039;&#039; directory, ensure the &amp;quot;builders&amp;quot; list has only &#039;example-worker&#039;.&lt;br /&gt;
** When copied to the running instance, be sure to update the list of builders for the cluster, if appropriate.&lt;br /&gt;
* When satisfied, commit the changes to the local repo.&lt;br /&gt;
* A patch set is generated and posted to the mailing list.&lt;br /&gt;
* Once the patch is reviewed, approved and pushed to the master branch of yocto-autobuilder, the production AutoBuilders can be updated:&lt;br /&gt;
** When the AutoBuilder is idle, stop the controller&lt;br /&gt;
** Ensure you are on the master branch, then do a &#039;git pull&#039; to grab the updates&lt;br /&gt;
** Switch to the yoctoio branch and do a &#039;git merge master&#039; to bring in the updates&lt;br /&gt;
** Make any additional installation specific changes and commit them&lt;br /&gt;
** Push the updated yoctoio branch to the production instance (&#039;git push prod yoctoio&#039; &amp;lt;small&amp;gt;[1]&amp;lt;/small&amp;gt;).&lt;br /&gt;
* Restart the controller.&lt;br /&gt;
* If the change affected the buildbot_slave code, the login into each worker and restart it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;1. The original public AutoBuilder does not use the yoctio branch or the production repo to keep local changes under revision control. Instead, local changes are untracked.&amp;lt;/small&amp;gt;&lt;br /&gt;
=== Resources ===&lt;br /&gt;
&lt;br /&gt;
* [[AutoBuilder Maintenance]]&lt;br /&gt;
* [[AutoBuilderClusterSetup |AutoBuilder Setup]]&lt;/div&gt;</summary>
		<author><name>Bill Randle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Maintenance&amp;diff=20044</id>
		<title>AutoBuilder Maintenance</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Maintenance&amp;diff=20044"/>
		<updated>2016-08-26T01:42:59Z</updated>

		<summary type="html">&lt;p&gt;Bill Randle: Created page with &amp;quot;=== Overview === An AutoBuilder system consists of a controller and one or more workers. The controller reads configuration files, presents a simple web user interface and sen...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Overview ===&lt;br /&gt;
An AutoBuilder system consists of a controller and one or more workers. The controller reads configuration files, presents a simple web user interface and sends build step commands to the worker(s). (Note: the terms &amp;quot;worker&amp;quot; and &amp;quot;build slave&amp;quot; both refer to the machine or process performing the actual build, and are used interchangeably.)&lt;br /&gt;
&lt;br /&gt;
When making changes to the AutoBuilder, it is important to remember what the different parts of the system do and which machines need to be restarted after a change (controller or workers).&lt;br /&gt;
&lt;br /&gt;
* The build step configuration files contain a list of build steps to carry out for a particular build artifact or test (e.g., nightly-x86.conf or nightly-oe-selftest.conf). Some build step configuration files trigger other builds - e.g., nightly.conf triggers all the other nightly builds. A build step configuration file can also have user interface components: poky repo and branch, save build artifacts, etc. A build step configuration file also contains a list of workers (or builders) that are able to build this specific config. For example, poky-eclipse-neon requires JDK 1.8, so the list of workers is limited to those with Java 1.8 installed. Or,the list of workers for the nightly-rpm-non-rpm config is limited to those that do not use rpm as the native package manager (e.g., Debian and Ubuntu). The working set of biuld step config files live in the &#039;&#039;buildstep-config&#039;&#039; directory.&lt;br /&gt;
* The autobuilder.conf contains variables to specify directory paths, the number of parallel makes, the list of QA email addresses, etc. Some of (but not all) of these variables are also passed to the worker(s). What is passed on is determined by the CreateAutoConf build step. The autobulider.conf file lives in the &#039;&#039;config&#039;&#039; directory.&lt;br /&gt;
* The actual build step implementation files are written in Python and live in the &#039;&#039;lib/python2.7/site-packages/autobuilder&#039;&#039; and &#039;&#039;lib/python2.7/site-packages/autobuilder/buildsteps&#039;&#039; directories. There is typically a one-to-one mapping between the build steps in the biuld step config files and an Python implementation file. Often, the implementation consists of sending a set of shell commands for the worker to execute.&lt;br /&gt;
* The core buildbot code for the controller lives in &#039;&#039;lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg&#039;&#039;. It rarely needs to be changed unless a major new feature is added.&lt;br /&gt;
* The core buildbot code for the worker lives in &#039;&#039;lib/python2.7/site-packages/buildbot_slave-0.8.8-py2.7.egg&#039;&#039;. It rarely needs to be changed unless a major new feature is added.&lt;br /&gt;
&lt;br /&gt;
The various configuration and build step implementation files are read by the controller once on startup (startup of the controller process, not the machine as a whole) and cached. If any of the files change, the controller must be stopped and restarted:&lt;br /&gt;
: . ./yocto-autobuilder-setup&lt;br /&gt;
: ./yocto-stop-autobuilder controller&lt;br /&gt;
: ./yocto-start-autobuilder controller&lt;br /&gt;
&lt;br /&gt;
Generally, the only time a worked needs to be stopped and restarted is when the underlying bitbot_slave code changes. The procedure is the same as above for the controller, except replace &amp;quot;controller&amp;quot; with &amp;quot;worker&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Example Changes ===&lt;br /&gt;
==== Build Additional Image for an Existing Configuration ====&lt;br /&gt;
Let&#039;s say a particular build step config had a rule to build core-image-sato and core-image-minimal images:&lt;br /&gt;
: {&#039;BuildImages&#039;: {&#039;images&#039;: &#039;-c populate_sdk_ext core-image-minimal core-image-sato&#039;}},&lt;br /&gt;
and you want to also build core-image-weston. Simply add the weston image to the list:&lt;br /&gt;
: {&#039;BuildImages&#039;: {&#039;images&#039;: &#039;core-image-minimal core-image-sato core-image-weston&#039;}},&lt;br /&gt;
To include the new image in the sanity tests, just add it to the list:&lt;br /&gt;
: {&#039;RunSanityTests&#039;: {&#039;images&#039;: &#039;core-image-minimal core-image-sato core-image-weston&#039;}},&lt;br /&gt;
After all the changes are made, restart the controller. &lt;br /&gt;
==== Add an Additional Machine Configuration ====&lt;br /&gt;
We recently expanded the list of machines that wic images were built for. The original nightly-wic.conf file had rules to build qemux86_64 and genericx86_64 images. To build images for qemux86 and genericx86, add new CreateAutoConf, BuildImages and CreateWicImages steps. For example:&lt;br /&gt;
: {&#039;CreateAutoConf&#039;:{&#039;machine&#039;:&#039;qemux86&#039;, &#039;atextappend&#039;:&#039;\nIMAGE_FSTYPES += &amp;quot; hddimg&amp;quot;\nMACHINE_FEATURES_append = &amp;quot; efi&amp;quot;\n&#039;}},&lt;br /&gt;
: {&#039;BuildImages&#039;:{&#039;images&#039;:&#039;syslinux syslinux-native parted-native gptfdisk-native dosfstools-native mtools-native&#039;}},&lt;br /&gt;
: {&#039;BuildImages&#039;:{&#039;images&#039;:&#039;core-image-sato&#039;}},&lt;br /&gt;
: {&#039;CreateWicImages&#039;:{&#039;wic_img_type&#039;:&#039;directdisk&#039;, &#039;target_img&#039;:&#039;core-image-sato&#039;}},&lt;br /&gt;
: {&#039;CreateWicImages&#039;:{&#039;wic_img_type&#039;:&#039;directdisk-gpt&#039;, &#039;target_img&#039;:&#039;core-image-sato&#039;}},&lt;br /&gt;
: {&#039;CreateWicImages&#039;:{&#039;wic_img_type&#039;:&#039;mkefidisk&#039;, &#039;target_img&#039;:&#039;core-image-sato&#039;}},&lt;br /&gt;
Normally, the extra &#039;atextappend&#039; entry is not required for CreateAutoConf, but in this case it is needed for the efi image type creation. When you add new machine configurations, don&#039;t forget to add the new machine type to the list of artifacts to publish in the PublishArtifacts step.&lt;br /&gt;
==== Add a New Build Config ====&lt;br /&gt;
To add a new build to the collection of build products, create a new config file and copy to the buildset-config directory, update nightly.conf and yoctoAB.conf and restart the controller. For example, eclipse-plugin-neon was recently added to the build list. Since there are other eclipse plugins, it was easiest to copy an existing config file (i.e., eclipse-plugin-mars.conf) and change the names from &amp;quot;mars&amp;quot; to neon&amp;quot;. The list of &amp;quot;builders&amp;quot; was changed to include only those workers with native Java 1.8 support. The yoctoAB.conf file (in the &#039;&#039;buildset-config&#039;&#039; directory) was updated to add eclipse-plugin-neon to the list, and in this case, since eclipse-poky-kepler was being deprecated, it was removed from the list. In the nightly.conf file, eclipse-plugin-neon was added to the lis tof repos and to the TriggeredBuild list and eclipse-poky-kepler was removed.&lt;br /&gt;
==== Pass a New Variable to the Workers ====&lt;br /&gt;
As mentioned above, only a subset of the variables in autobuilder.conf are actually passed down to the worker. To include a new variable in the list, first add it to autobuilder.conf (e.g., MY_NEW_VAR = &amp;quot;somevalue&amp;quot;). This makes it visible to the controller. Next edit the CreateAutoConf.py build step implementation file. In the start() function, add the new variable with a construct like:&lt;br /&gt;
: if os.environ.get(&#039;MY_NEW_VAR&#039;) is not None:&lt;br /&gt;
:: fout = fout + &#039;MY_NEW_VAR = &amp;quot;&#039; + os.environ.get(&#039;MY_NEW_VAR&#039;) + &#039;&amp;quot;&#039;&lt;br /&gt;
Restart the controller.&lt;br /&gt;
==== Update the List of QA Email Recipients ====&lt;br /&gt;
To change the list of people receiving the QA notification emails, edit the autobuilder.conf file and change the contents of the QA_MAIL_CC variable. Restart the controller.&lt;br /&gt;
==== Add a New User Control ====&lt;br /&gt;
When starting a build via the web page, you are presented with one or more controls to pass information to the controller. Most every build set config includes text boxes for the poky repo and branch selections. Other configs, like nightly.conf have quite a few controls to select if this is a release build, if QA emails should be sent, git repos and branches for other layers or repositories (e.g., meta-intel, oecore, bitbake, etc.). The user controls can be extended to allow additional selections. For example, let&#039;s say you want to add a new selection box with values of &amp;quot;True&amp;quot; and &amp;quot;False&amp;quot;. The control will be named &amp;quot;mycontrol&amp;quot;.&lt;br /&gt;
: Add a new entry to the &amp;quot;props&amp;quot; section of nightly.conf for the new control:&lt;br /&gt;
:: {&#039;mycontrol&#039;:{&#039;prop_type&#039;:&#039;ChoiceStringParameter&#039;,&lt;br /&gt;
::    &#039;choices&#039;: [&#039;False&#039;, &#039;True&#039;],&lt;br /&gt;
::    &#039;name&#039;: &#039;mycontrol&#039;,&lt;br /&gt;
::    label&#039;:&#039;&amp;amp;lt;hr&amp;amp;gt;&amp;amp;lt;h3&amp;amp;gt; Should mycontrol be included as part of the image creation?:&amp;amp;lt;/h3&amp;amp;gt;&#039;}},&lt;br /&gt;
: Ensure that the new property gets copied to the properties for any triggered builds by including it in the list of TriggeredBuilds entries:&lt;br /&gt;
:: {&#039;TriggerBuilds&#039;: {&#039;copy_properties&#039;: [&#039;custom_mycontrol&#039;],&lt;br /&gt;
: Get the value of the new custom control in build step implementation file optionally include it in the objects property list. In the class&#039;s start() function, include code snippet like this:&lt;br /&gt;
:: try:&lt;br /&gt;
::: self.control = self.getProperty(&#039;custom_mycontrol&#039;)&lt;br /&gt;
:: except:&lt;br /&gt;
::: self.control = False&lt;br /&gt;
Note that the &amp;quot;custom_&amp;quot; name prefix is required, as parts of the buildbot code reply on it.&lt;br /&gt;
&lt;br /&gt;
If you want this new control to appear on the individual build config web pages, add it to the list of &amp;quot;props&amp;quot; entries (if present) or add a new prop array entry. E.g.:&lt;br /&gt;
: props: [{&#039;mycontrol&#039;:{&#039;prop_type&#039;:&#039;ChoiceStringParameter&#039;,&lt;br /&gt;
:    &#039;choices&#039;: [&#039;False&#039;, &#039;True&#039;],&lt;br /&gt;
:    &#039;name&#039;: &#039;mycontrol&#039;,&lt;br /&gt;
:    label&#039;:&#039;&amp;amp;lt;hr&amp;amp;gt;&amp;amp;lt;h3&amp;amp;gt; Should mycontrol be included as part of the image creation?:&amp;amp;lt;/h3&amp;amp;gt;&#039;}}]&lt;br /&gt;
=== Configuration Management ===&lt;br /&gt;
Any changes to the AutoBuilder code base should follow proper configuration management guidelines per the Yocto Project. Changes should first be made and tested on a local AutoBuilder instance (physical machine or VM), or during off hours on a staging or development AutoBuilder. After verification, patches should be posted to the mailing list for review and push to the master yoctoautobuilder repo, then merged into the running instance on the production AutoBuilders. The Yocto Project hosts two AutoBuilder git repos: yocto-autobuilder and yocto-autobuilder-production. The former is the standard public repository which includes example configuration files. The later represents the actual running configuration of the Linux Foundation public AutoBuilders.&lt;br /&gt;
&lt;br /&gt;
A typical workflow uses a copy of the yocto-autobuilder repo on a developer&#039;s computer.&lt;br /&gt;
* A developer makes changes and tests them on a local AutoBuilder instance.&lt;br /&gt;
** By convention, changes to build set config files are made to the instances in the &#039;&#039;buildset-config.controller&#039;&#039; directory, then later copied to the running instance in the &#039;&#039;buildset-config&#039;&#039; directory.&lt;br /&gt;
** For files in the &#039;&#039;buildset-config.controller&#039;&#039; directory, ensure the &amp;quot;builders&amp;quot; list has only &#039;example-worker&#039;.&lt;br /&gt;
** When copied to the running instance, be sure to update the list of builders for the cluster, if appropriate.&lt;br /&gt;
* When satisfied, commit the changes to the local repo.&lt;br /&gt;
* A patch set is generated and posted to the mailing list.&lt;br /&gt;
* Once the patch is reviewed, approved and pushed to the master branch of yocto-autobuilder, the production AutoBuilders can be updated:&lt;br /&gt;
** When the AutoBuilder is idle, stop the controller&lt;br /&gt;
** Ensure you are on the master branch, then do a &#039;git pull&#039; to grab the updates&lt;br /&gt;
** Switch to the yoctoio branch and do a &#039;git merge master&#039; to bring in the updates&lt;br /&gt;
** Make any additional installation specific changes and commit them&lt;br /&gt;
** Push the updated yoctoio branch to the production instance (&#039;git push prod yoctoio&#039; &amp;lt;small&amp;gt;[1]&amp;lt;/small&amp;gt;).&lt;br /&gt;
* Restart the controller.&lt;br /&gt;
* If the change affected the buildbot_slave code, the login into each worker and restart it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;1. The original public AutoBuilder does not use the yoctio branch or the production repo to keep local changes under revision control. Instead, local changes are untracked.&amp;lt;/small&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bill Randle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=The_Yocto_Autobuilder&amp;diff=20043</id>
		<title>The Yocto Autobuilder</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=The_Yocto_Autobuilder&amp;diff=20043"/>
		<updated>2016-08-25T22:15:03Z</updated>

		<summary type="html">&lt;p&gt;Bill Randle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== The Yocto AutoBuilder ==&lt;br /&gt;
&lt;br /&gt;
The Yocto AutobBuilder is a buildbot based autobuilder implementation that can be used to build out and test custom distros utilizing OE-Core (either bare or through the poky repository)&lt;br /&gt;
&lt;br /&gt;
The source code can be downloaded from [[git://git.yoctoproject.org/yocto-autobuilder]]. For details on the design and configuration of the AutoBuilder, refer to the YoctoAutobuilderDevelopersDocument.html document in the &#039;&#039;docs&#039;&#039; directory of the yocto-autobuilder git repo.&lt;br /&gt;
&lt;br /&gt;
The yocto-autobuilder maintainer is Elizabeth Flanagan. All patches to the yocto-autobuilder should be sent to yocto@yoctoproject.org with &amp;quot;[yocto-autobuilder]&amp;quot; in the Subject line. Please CC: pidge@toganlabs.com and joshua.g.lock@linux.intel.com.&lt;br /&gt;
&lt;br /&gt;
If you have access to our production autobuilder, please read the documentation on [https://wiki.yoctoproject.org/wiki/How_to_start_a_build_on_the_Autobuilder how to kick off builds.]&lt;br /&gt;
&lt;br /&gt;
=== Resources ===&lt;br /&gt;
&lt;br /&gt;
* [[AutoBuilder Maintenance]]&lt;br /&gt;
* [https://wiki.yoctoproject.org/wiki/AutoBuilderClusterSetup AutoBuilder Setup]&lt;br /&gt;
* [https://wiki.yoctoproject.org/wiki/How_to_start_a_build_on_the_Autobuilder How to Start a Build on the AutoBuilder]&lt;br /&gt;
* [[Frequently Asked Yocto Autobuilder Questions]]&lt;/div&gt;</summary>
		<author><name>Bill Randle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=The_Yocto_Autobuilder&amp;diff=20042</id>
		<title>The Yocto Autobuilder</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=The_Yocto_Autobuilder&amp;diff=20042"/>
		<updated>2016-08-25T21:51:42Z</updated>

		<summary type="html">&lt;p&gt;Bill Randle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== The Yocto Autobuilder ==&lt;br /&gt;
&lt;br /&gt;
The Yocto Autobuilder is a buildbot based autobuilder implementation that can be used to build out and test custom distros utilizing OE-Core (either bare or through the poky repository)&lt;br /&gt;
&lt;br /&gt;
The source code can be downloaded from [[git://git.yoctoproject.org/yocto-autobuilder]]&lt;br /&gt;
&lt;br /&gt;
The yocto-autobuilder maintainer is Elizabeth Flanagan. All patches to the yocto-autobuilder should be sent to yocto@yoctoproject.org with &amp;quot;[yocto-autobuilder]&amp;quot; in the Subject line. Please CC: pidge@toganlabs.com and joshua.g.lock@linux.intel.com.&lt;br /&gt;
&lt;br /&gt;
If you have access to our production autobuilder, please read the documentation on [https://wiki.yoctoproject.org/wiki/How_to_start_a_build_on_the_Autobuilder how to kick off builds.]&lt;br /&gt;
&lt;br /&gt;
=== Resources ===&lt;br /&gt;
&lt;br /&gt;
* [[AutoBuilderClusterSetup]]&lt;br /&gt;
* [[How_to_start_a_build_on_the_Autobuilder]]&lt;br /&gt;
* [[Frequently Asked Yocto Autobuilder Questions]]&lt;/div&gt;</summary>
		<author><name>Bill Randle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Cluster_Setup&amp;diff=20040</id>
		<title>AutoBuilder Cluster Setup</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Cluster_Setup&amp;diff=20040"/>
		<updated>2016-08-25T21:34:18Z</updated>

		<summary type="html">&lt;p&gt;Bill Randle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;While the instructions below are targeted at setting up a new AutoBuilder cluster, they are equally valid for an single machine with combined controller and worker, except you probably won&#039;t use a NAS for storage. The controller portion requires only 2 GB of local disk space; the worker requires 2+ TB to hold all the build temp files and git repos. If build artifacts and a local sstate mirror are included, additional worker space is required.&lt;br /&gt;
&lt;br /&gt;
==As root==&lt;br /&gt;
* Install base OS with minimal target&lt;br /&gt;
* Install the requirements from http://www.yoctoproject.org/docs/current/yocto-project-qs/yocto-project-qs.html&lt;br /&gt;
** (Note: if you plan to build the poky-eclipse-neon plugin, openjdk-headless 1.8 is required.)&lt;br /&gt;
* If you plan to run the sanity tests (which is typical for an AB), the following additional packages need to be installed:&lt;br /&gt;
** GitPython for Python2 and Python3&lt;br /&gt;
** xsltproc &lt;br /&gt;
** vncserver (whichever one is provided by the distro is fine)&lt;br /&gt;
* Add pokybuild user (uid=6000, or for older clusters 1006)&lt;br /&gt;
* Add pokybuild user to &amp;quot;users&amp;quot; group (gid 100) (if &amp;quot;users&amp;quot; group does not exist, create it)&lt;br /&gt;
* Following the instructions from https://wiki.yoctoproject.org/wiki/How_to_enable_KVM_for_Poky_qemu, give /dev/kvm permissions to the pokybuild user.&lt;br /&gt;
* If a &amp;quot;kvm&amp;quot; group does not exist, add it to /etc/group and ensure /dev/kvm gid is set to &amp;quot;kvm&amp;quot; and is mode 660. Add pokybuild user to the &amp;quot;kvm&amp;quot; group.&lt;br /&gt;
* git clone --single-branch http://git.yoctoproject.org/git/poky /root/poky  (in /root for historical reasons, should change in the future)&lt;br /&gt;
* Install http://downloads.yoctoproject.org/releases/yocto/yocto-{latest_release}/toolchain/x86_64/poky-glibc-x86_64-core-image-sato-core2-64-toolchain-{relver}.sh to /opt/poky.&lt;br /&gt;
* Add startup scripts to create tap devs and start vncserver, in /etc/rc.local, /etc/init.d/boot.local, or as systemd unit files, which should perform the following:&lt;br /&gt;
** cd /root/poky/scripts/; ./runqemu-gen-tapdevs 6000 100 32 /opt/poky/sysroots/x86_64-pokysdk-linux/&lt;br /&gt;
** /bin/su - pokybuild -c &amp;quot;/usr/bin/vncserver&amp;quot;&lt;br /&gt;
* Disable or edit firewall rules to allow all connections to the tap devices. This allows sanity tests to connect to booted images.&lt;br /&gt;
* Install nfs-utils or nfs-common, add Domain to /etc/idmapd.conf, fstab entry, mount NAS under /srv/autobuilder.&lt;br /&gt;
&lt;br /&gt;
==As pokybuild==&lt;br /&gt;
&lt;br /&gt;
* Set up buildset-config, either:&lt;br /&gt;
** Add ssh key to clone production yocto-autobuilder&lt;br /&gt;
** git clone http://git.yoctoproject.org/git/yocto-autobuilder &amp;amp;&amp;amp; cd yocto-autobuilder &amp;amp;&amp;amp; git remote add prod git@git.yoctoproject.org:yocto-autobuilder-production &amp;amp;&amp;amp; git fetch prod &amp;amp;&amp;amp; git checkout -b yoctoio prod/yoctoio&lt;br /&gt;
* or:&lt;br /&gt;
** edit one of the several examples included in repo e.g. cp -r buildset-config.controller buildset-config&lt;br /&gt;
&lt;br /&gt;
* update config/autobuilder.conf and yocto-worker/buildbot.tac&lt;br /&gt;
* Start the worker&lt;br /&gt;
** touch ~/yocto-autobuilder/.setupdone&lt;br /&gt;
** . yocto-autobuilder-setup &lt;br /&gt;
** ./yocto-start-autobuilder worker&lt;/div&gt;</summary>
		<author><name>Bill Randle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Cluster_Setup&amp;diff=20039</id>
		<title>AutoBuilder Cluster Setup</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Cluster_Setup&amp;diff=20039"/>
		<updated>2016-08-25T21:33:21Z</updated>

		<summary type="html">&lt;p&gt;Bill Randle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;AutoBuilder Cluster Setup&lt;br /&gt;
&lt;br /&gt;
While the instructions below are targeted at setting up a new AutoBuilder cluster, they are equally valid for an single machine with combined controller and worker, except you probably won&#039;t use a NAS for storage. The controller portion requires only 2 GB of local disk space; the worker requires 2+ TB to hold all the build temp files and git repos. If build artifacts and a local sstate mirror are included, additional worker space is required.&lt;br /&gt;
&lt;br /&gt;
==As root==&lt;br /&gt;
* Install base OS with minimal target&lt;br /&gt;
* Install the requirements from http://www.yoctoproject.org/docs/current/yocto-project-qs/yocto-project-qs.html&lt;br /&gt;
** (Note: if you plan to build the poky-eclipse-neon plugin, openjdk-headless 1.8 is required.)&lt;br /&gt;
* If you plan to run the sanity tests (which is typical for an AB), the following additional packages need to be installed:&lt;br /&gt;
** GitPython for Python2 and Python3&lt;br /&gt;
** xsltproc &lt;br /&gt;
** vncserver (whichever one is provided by the distro is fine)&lt;br /&gt;
* Add pokybuild user (uid=6000, or for older clusters 1006)&lt;br /&gt;
* Add pokybuild user to &amp;quot;users&amp;quot; group (gid 100) (if &amp;quot;users&amp;quot; group does not exist, create it)&lt;br /&gt;
* Following the instructions from https://wiki.yoctoproject.org/wiki/How_to_enable_KVM_for_Poky_qemu, give /dev/kvm permissions to the pokybuild user.&lt;br /&gt;
* If a &amp;quot;kvm&amp;quot; group does not exist, add it to /etc/group and ensure /dev/kvm gid is set to &amp;quot;kvm&amp;quot; and is mode 660. Add pokybuild user to the &amp;quot;kvm&amp;quot; group.&lt;br /&gt;
* git clone --single-branch http://git.yoctoproject.org/git/poky /root/poky  (in /root for historical reasons, should change in the future)&lt;br /&gt;
* Install http://downloads.yoctoproject.org/releases/yocto/yocto-{latest_release}/toolchain/x86_64/poky-glibc-x86_64-core-image-sato-core2-64-toolchain-{relver}.sh to /opt/poky.&lt;br /&gt;
* Add startup scripts to create tap devs and start vncserver, in /etc/rc.local, /etc/init.d/boot.local, or as systemd unit files, which should perform the following:&lt;br /&gt;
** cd /root/poky/scripts/; ./runqemu-gen-tapdevs 6000 100 32 /opt/poky/sysroots/x86_64-pokysdk-linux/&lt;br /&gt;
** /bin/su - pokybuild -c &amp;quot;/usr/bin/vncserver&amp;quot;&lt;br /&gt;
* Disable or edit firewall rules to allow all connections to the tap devices. This allows sanity tests to connect to booted images.&lt;br /&gt;
* Install nfs-utils or nfs-common, add Domain to /etc/idmapd.conf, fstab entry, mount NAS under /srv/autobuilder.&lt;br /&gt;
&lt;br /&gt;
==As pokybuild==&lt;br /&gt;
&lt;br /&gt;
* Set up buildset-config, either:&lt;br /&gt;
** Add ssh key to clone production yocto-autobuilder&lt;br /&gt;
** git clone http://git.yoctoproject.org/git/yocto-autobuilder &amp;amp;&amp;amp; cd yocto-autobuilder &amp;amp;&amp;amp; git remote add prod git@git.yoctoproject.org:yocto-autobuilder-production &amp;amp;&amp;amp; git fetch prod &amp;amp;&amp;amp; git checkout -b yoctoio prod/yoctoio&lt;br /&gt;
* or:&lt;br /&gt;
** edit one of the several examples included in repo e.g. cp -r buildset-config.controller buildset-config&lt;br /&gt;
&lt;br /&gt;
* update config/autobuilder.conf and yocto-worker/buildbot.tac&lt;br /&gt;
* Start the worker&lt;br /&gt;
** touch ~/yocto-autobuilder/.setupdone&lt;br /&gt;
** . yocto-autobuilder-setup &lt;br /&gt;
** ./yocto-start-autobuilder worker&lt;/div&gt;</summary>
		<author><name>Bill Randle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=The_Yocto_Autobuilder&amp;diff=19927</id>
		<title>The Yocto Autobuilder</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=The_Yocto_Autobuilder&amp;diff=19927"/>
		<updated>2016-08-19T19:40:26Z</updated>

		<summary type="html">&lt;p&gt;Bill Randle: /* The Yocto Autobuilder */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== The Yocto Autobuilder ==&lt;br /&gt;
&lt;br /&gt;
The Yocto Autobuilder is a buildbot based autobuilder implementation that can be used to build out custom distros utilizing OE-Core (either bare or through the poky repository)&lt;br /&gt;
&lt;br /&gt;
The source code can be downloaded from [[git://git.yoctoproject.org/yocto-autobuilder]]&lt;br /&gt;
&lt;br /&gt;
The yocto-autobuilder maintainer is Elizabeth Flanagan. All patches to the yocto-autobuilder should be sent to yocto@yoctoproject.org with &amp;quot;[yocto-autobuilder]&amp;quot; in the Subject line. Please CC: pidge@toganlabs.com and joshua.g.lock@linux.intel.com.&lt;br /&gt;
&lt;br /&gt;
If you have access to our production autobuilder, please read the documentation on [https://wiki.yoctoproject.org/wiki/How_to_start_a_build_on_the_Autobuilder how to kick off builds.]&lt;/div&gt;</summary>
		<author><name>Bill Randle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Cluster_Setup&amp;diff=19926</id>
		<title>AutoBuilder Cluster Setup</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Cluster_Setup&amp;diff=19926"/>
		<updated>2016-08-19T19:32:32Z</updated>

		<summary type="html">&lt;p&gt;Bill Randle: /* As root */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;autobuilder cluster setup&lt;br /&gt;
&lt;br /&gt;
==As root==&lt;br /&gt;
* Install base OS with minimal target&lt;br /&gt;
* Add pokybuild user (uid=6000, or for older clusters 1006)&lt;br /&gt;
* Add pokybuild user to &amp;quot;users&amp;quot; group (gid 100) (if &amp;quot;users&amp;quot; group does not exist, create it)&lt;br /&gt;
* Following the instructions from https://wiki.yoctoproject.org/wiki/How_to_enable_KVM_for_Poky_qemu, give /dev/kvm permissions to the pokybuild user&lt;br /&gt;
* If a &amp;quot;kvm&amp;quot; group does not exist, add it to /etc/group and ensure /dev/kvm gid is set to &amp;quot;kvm&amp;quot; and is mode 660. Add pokybuild user to group &amp;quot;kvm&amp;quot; group&lt;br /&gt;
* Install the requirements from http://www.yoctoproject.org/docs/current/yocto-project-qs/yocto-project-qs.html&lt;br /&gt;
* git clone --single-branch http://git.yoctoproject.org/git/poky /root/poky  (in /root for historical reasons, should change in the future)&lt;br /&gt;
* Install http://downloads.yoctoproject.org/releases/yocto/yocto-{latest release}/toolchain/x86_64/poky-glibc-x86_64-core-image-sato-core2-64-toolchain-{relver}.sh to /opt/poky&lt;br /&gt;
* Add startup scripts to create tap devs and start vncserver, in /etc/rc.local, /etc/init.d/boot.local, or as systemd unit files, should perform the following&lt;br /&gt;
** cd /root/poky/scripts/; ./runqemu-gen-tapdevs 6000 100 32 /opt/poky/sysroots/x86_64-pokysdk-linux/&lt;br /&gt;
** /bin/su - pokybuild -c &amp;quot;/usr/bin/vncserver&amp;quot;&lt;br /&gt;
* Disable or edit firewall rules to allow all connections to the tap devices. This allows sanity tests to connect to booted images.&lt;br /&gt;
* Install nfs-utils or nfs-common, add Domain to /etc/idmapd.conf, fstab entry, mount NAS&lt;br /&gt;
&lt;br /&gt;
==As pokybuild==&lt;br /&gt;
&lt;br /&gt;
* Set up buildset-config, either:&lt;br /&gt;
** Add ssh key to clone production yocto-autobuilder&lt;br /&gt;
** git clone http://git.yoctoproject.org/git/yocto-autobuilder &amp;amp;&amp;amp; cd yocto-autobuilder &amp;amp;&amp;amp; git remote add prod git@git.yoctoproject.org:yocto-autobuilder-production &amp;amp;&amp;amp; git fetch prod &amp;amp;&amp;amp; git checkout -b yoctoio prod/yoctoio&lt;br /&gt;
* or:&lt;br /&gt;
** edit one of the several examples included in repo e.g. cp -r buildset-config.controller buildset-config&lt;br /&gt;
&lt;br /&gt;
* update config/autobuilder.conf and yocto-worker/buildbot.tac&lt;br /&gt;
* Start the worker&lt;br /&gt;
** touch ~/yocto-autobuilder/.setupdone&lt;br /&gt;
** . yocto-autobuilder-setup &lt;br /&gt;
** ./yocto-start-autobuilder worker&lt;/div&gt;</summary>
		<author><name>Bill Randle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Cluster_Setup&amp;diff=19925</id>
		<title>AutoBuilder Cluster Setup</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Cluster_Setup&amp;diff=19925"/>
		<updated>2016-08-19T19:30:53Z</updated>

		<summary type="html">&lt;p&gt;Bill Randle: /* As root */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;autobuilder cluster setup&lt;br /&gt;
&lt;br /&gt;
==As root==&lt;br /&gt;
* Install base OS with minimal target&lt;br /&gt;
* Add pokybuild user (uid=6000, or for older clusters 1006)&lt;br /&gt;
* Add pokybuild user to &amp;quot;users&amp;quot; group (gid 100) (if &amp;quot;users&amp;quot; group does not exist, create it)&lt;br /&gt;
* Following the instructions for [https://wiki.yoctoproject.org/wiki/How_to_enable_KVM_for_Poky_qemu], give /dev/kvm permissions to the pokybuild user&lt;br /&gt;
* If a &amp;quot;kvm&amp;quot; group does not exist, add it to /etc/group and ensure /dev/kvm gid is set to &amp;quot;kvm&amp;quot; and is mode 660. Add pokybuild user to group &amp;quot;kvm&amp;quot; group&lt;br /&gt;
* Install the requirements from http://www.yoctoproject.org/docs/current/yocto-project-qs/yocto-project-qs.html&lt;br /&gt;
* git clone --single-branch http://git.yoctoproject.org/git/poky /root/poky  (in /root for historical reasons, should change in the future)&lt;br /&gt;
* Install http://downloads.yoctoproject.org/releases/yocto/yocto-{latest release}/toolchain/x86_64/poky-glibc-x86_64-core-image-sato-core2-64-toolchain-{relver}.sh to /opt/poky&lt;br /&gt;
* Add startup scripts to create tap devs and start vncserver, in /etc/rc.local, /etc/init.d/boot.local, or as systemd unit files, should perform the following&lt;br /&gt;
** cd /root/poky/scripts/; ./runqemu-gen-tapdevs 6000 100 32 /opt/poky/sysroots/x86_64-pokysdk-linux/&lt;br /&gt;
** /bin/su - pokybuild -c &amp;quot;/usr/bin/vncserver&amp;quot;&lt;br /&gt;
* Disable or edit firewall rules to allow all connections to the tap devices. This allows sanity tests to connect to booted images.&lt;br /&gt;
* Install nfs-utils or nfs-common, add Domain to /etc/idmapd.conf, fstab entry, mount NAS&lt;br /&gt;
&lt;br /&gt;
==As pokybuild==&lt;br /&gt;
&lt;br /&gt;
* Set up buildset-config, either:&lt;br /&gt;
** Add ssh key to clone production yocto-autobuilder&lt;br /&gt;
** git clone http://git.yoctoproject.org/git/yocto-autobuilder &amp;amp;&amp;amp; cd yocto-autobuilder &amp;amp;&amp;amp; git remote add prod git@git.yoctoproject.org:yocto-autobuilder-production &amp;amp;&amp;amp; git fetch prod &amp;amp;&amp;amp; git checkout -b yoctoio prod/yoctoio&lt;br /&gt;
* or:&lt;br /&gt;
** edit one of the several examples included in repo e.g. cp -r buildset-config.controller buildset-config&lt;br /&gt;
&lt;br /&gt;
* update config/autobuilder.conf and yocto-worker/buildbot.tac&lt;br /&gt;
* Start the worker&lt;br /&gt;
** touch ~/yocto-autobuilder/.setupdone&lt;br /&gt;
** . yocto-autobuilder-setup &lt;br /&gt;
** ./yocto-start-autobuilder worker&lt;/div&gt;</summary>
		<author><name>Bill Randle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=How_to_enable_KVM_for_Poky_qemu&amp;diff=19924</id>
		<title>How to enable KVM for Poky qemu</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=How_to_enable_KVM_for_Poky_qemu&amp;diff=19924"/>
		<updated>2016-08-19T19:24:13Z</updated>

		<summary type="html">&lt;p&gt;Bill Randle: /* Change the kvm dev ownership for non-root user */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= enable KVM for poky qemu =&lt;br /&gt;
== KVM introduction ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;KVM&#039;&#039; (for Kernel-based Virtual Machine) is a full virtualization solution for Linux on x86 hardware containing virtualization extensions (Intel VT or AMD-V). It consists of a loadable kernel module, &#039;&#039;&#039;kvm.ko&#039;&#039;&#039;, that provides the core virtualization infrastructure and a processor specific module, &#039;&#039;&#039;kvm-intel.ko&#039;&#039;&#039; or kvm-amd.ko. KVM also requires a modified QEMU although work is underway to get the required changes upstream.&lt;br /&gt;
&lt;br /&gt;
Compared with native qemu, a pure emulator, KVM has better performance based on virtualization as most of guest instruction can be executed directly on the host processor.&lt;br /&gt;
&lt;br /&gt;
== detect VT support ==&lt;br /&gt;
You need make sure your x86 processor support VT before using KVM.&lt;br /&gt;
&lt;br /&gt;
With a recent enough Linux kernel, run the command:&lt;br /&gt;
&lt;br /&gt;
 $ egrep &#039;^flags.*(vmx|svm)&#039; /proc/cpuinfo&lt;br /&gt;
&lt;br /&gt;
If something shows up, you have VT. You can also check the processor model name (in `/proc/cpuinfo`) in the vendor&#039;s web site.&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
&lt;br /&gt;
* You&#039;ll never see (vmx|svm) in /proc/cpuinfo if you&#039;re currently running in in a dom0 or domU. The Xen hypervisor suppresses these flags in order to prevent hijacking.&lt;br /&gt;
&lt;br /&gt;
* Some manufacturers disable VT in the machine&#039;s BIOS, in such a way that it cannot be re-enabled.&lt;br /&gt;
&lt;br /&gt;
* `/proc/cpuinfo` only shows virtualization capabilities starting with Linux 2.6.15 (Intel) and Linux 2.6.16 (AMD). Use the `uname -r` command to query your kernel version.&lt;br /&gt;
&lt;br /&gt;
In case of doubt, contact your hardware vendor.&lt;br /&gt;
&lt;br /&gt;
== get the KVM module ==&lt;br /&gt;
&lt;br /&gt;
The quick &amp;amp; easy way for this is just using it from your distribution. As of now, all major community and enterprise distributions contain kvm kernel modules; these are either installed by default or require installing a kvm package. For someone looking for stability, these are the best choice. No effort is needed to build or install the modules, support is provided by the distribution, and the distribution/module combination is well tested.&lt;br /&gt;
&lt;br /&gt;
In other cases, you need refer [http://www.linux-kvm.org/page/Getting_the_kvm_kernel_modules getting kvm modules].&lt;br /&gt;
&lt;br /&gt;
After getting the modules, you can install them into kernel by&lt;br /&gt;
&lt;br /&gt;
 $ sudo modprobe kvm-intel&lt;br /&gt;
&lt;br /&gt;
== make KVM aware QEMU ==&lt;br /&gt;
Upstream QEMU has already supported KVM, and I have already checked in one patch to enable it. So you get a KVM capable qemu after poky build.&lt;br /&gt;
&lt;br /&gt;
== Change the kvm dev ownership for non-root user ==&lt;br /&gt;
qemu is started as non-root user in poky, but &#039;&#039;/dev/kvm&#039;&#039; from some distribution remains root:root that only allow root to use KVM. To work around this, we need create a new group named &#039;&#039;&#039;kvm&#039;&#039;&#039;, and make both &#039;&#039;/dev/kvm&#039;&#039; and the non-root user belongs to it.&lt;br /&gt;
&lt;br /&gt;
 sudo addgroup --system kvm&lt;br /&gt;
 sudo adduser $USER kvm&lt;br /&gt;
 sudo chown root:kvm /dev/kvm&lt;br /&gt;
 sudo chmod 0660 /dev/kvm&lt;br /&gt;
&lt;br /&gt;
The output of &amp;quot;ls -l /dev/kvm&amp;quot; should be like this:&lt;br /&gt;
 crw-rw----+ 1 root kvm 10, 232 2010-07-02 09:27 /dev/kvm&lt;br /&gt;
&lt;br /&gt;
On a system that runs udev, you will probably need to add the following line somewhere in your udev configuration so it will automatically give the right group to the newly created device (i-e for ubuntu add a line to /etc/udev/rules.d/40-permissions.rules).&lt;br /&gt;
&lt;br /&gt;
 KERNEL==&amp;quot;kvm&amp;quot;, GROUP=&amp;quot;kvm&amp;quot;, MODE=&amp;quot;0660&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note&lt;br /&gt;
* You need log out then log in the non-root user to take the effect&lt;br /&gt;
* Some distributions have already made this, so that we can skip this step&lt;br /&gt;
&lt;br /&gt;
== running qemu with KVM enabled ==&lt;br /&gt;
just append &amp;quot;kvm&amp;quot; parameter to the &#039;&#039;runqemu&#039;&#039; like this&lt;br /&gt;
&lt;br /&gt;
 $ runqemu qemux86 kvm&lt;/div&gt;</summary>
		<author><name>Bill Randle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Cluster_Setup&amp;diff=19903</id>
		<title>AutoBuilder Cluster Setup</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Cluster_Setup&amp;diff=19903"/>
		<updated>2016-08-17T16:39:59Z</updated>

		<summary type="html">&lt;p&gt;Bill Randle: /* As root */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;autobuilder cluster setup&lt;br /&gt;
&lt;br /&gt;
==As root==&lt;br /&gt;
* Install base OS with minimal target&lt;br /&gt;
* Add pokybuild user (uid=6000, or for older clusters 1006)&lt;br /&gt;
* Add pokybuild user to &amp;quot;users&amp;quot; group (gid 100) [if &amp;quot;users&amp;quot; group does not exist, create it]&lt;br /&gt;
* If a &amp;quot;kvm&amp;quot; group does not exist, add it to /etc/group and ensure /dev/kvm gid is set to &amp;quot;kvm&amp;quot; and is mode 660. Add pokybuild user to group &amp;quot;kvm&amp;quot; group&lt;br /&gt;
* Install the requirements from http://www.yoctoproject.org/docs/current/yocto-project-qs/yocto-project-qs.html&lt;br /&gt;
* git clone --single-branch http://git.yoctoproject.org/git/poky /root/poky  (in /root for historical reasons, should change in the future)&lt;br /&gt;
* Install http://downloads.yoctoproject.org/releases/yocto/yocto-{latest release}/toolchain/x86_64/poky-glibc-x86_64-core-image-sato-core2-64-toolchain-{relver}.sh to /opt/poky&lt;br /&gt;
* Add startup scripts to create tap devs and start vncserver, in /etc/rc.local, /etc/init.d/boot.local, or as systemd unit files, should perform the following&lt;br /&gt;
** cd /root/poky/scripts/; ./runqemu-gen-tapdevs 6000 100 32 /opt/poky/sysroots/x86_64-pokysdk-linux/&lt;br /&gt;
** /bin/su - pokybuild -c &amp;quot;/usr/bin/vncserver&amp;quot;&lt;br /&gt;
* Disable or edit firewall rules to allow all connections to the tap devices. This allows sanity tests to connect to booted images.&lt;br /&gt;
* Install nfs-utils or nfs-common, add Domain to /etc/idmapd.conf, fstab entry, mount NAS&lt;br /&gt;
&lt;br /&gt;
==As pokybuild==&lt;br /&gt;
&lt;br /&gt;
* Set up buildset-config, either:&lt;br /&gt;
** Add ssh key to clone production yocto-autobuilder&lt;br /&gt;
** git clone http://git.yoctoproject.org/git/yocto-autobuilder &amp;amp;&amp;amp; cd yocto-autobuilder &amp;amp;&amp;amp; git remote add prod git@git.yoctoproject.org:yocto-autobuilder-production &amp;amp;&amp;amp; git fetch prod &amp;amp;&amp;amp; git checkout -b yoctoio prod/yoctoio&lt;br /&gt;
* or:&lt;br /&gt;
** edit one of the several examples included in repo e.g. cp -r buildset-config.controller buildset-config&lt;br /&gt;
&lt;br /&gt;
* update config/autobuilder.conf and yocto-worker/buildbot.tac&lt;br /&gt;
* Start the worker&lt;br /&gt;
** touch ~/yocto-autobuilder/.setupdone&lt;br /&gt;
** . yocto-autobuilder-setup &lt;br /&gt;
** ./yocto-start-autobuilder worker&lt;/div&gt;</summary>
		<author><name>Bill Randle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Cluster_Setup&amp;diff=19900</id>
		<title>AutoBuilder Cluster Setup</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Cluster_Setup&amp;diff=19900"/>
		<updated>2016-08-16T22:19:59Z</updated>

		<summary type="html">&lt;p&gt;Bill Randle: /* As root */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;autobuilder cluster setup&lt;br /&gt;
&lt;br /&gt;
==As root==&lt;br /&gt;
* Install base OS with minimal target&lt;br /&gt;
* Add pokybuild user (uid=6000, or for older clusters 1006)&lt;br /&gt;
* Add pokybuild user to &amp;quot;users&amp;quot; group (gid 100) [if &amp;quot;users&amp;quot; group does not exist, create it]&lt;br /&gt;
* Add pokybuild user to &amp;quot;kvm&amp;quot; group&lt;br /&gt;
* Install the requirements from http://www.yoctoproject.org/docs/current/yocto-project-qs/yocto-project-qs.html&lt;br /&gt;
* git clone --single-branch http://git.yoctoproject.org/git/poky /root/poky  (in /root for historical reasons, should change in the future)&lt;br /&gt;
* Install http://downloads.yoctoproject.org/releases/yocto/yocto-{latest release}/toolchain/x86_64/poky-glibc-x86_64-core-image-sato-core2-64-toolchain-{relver}.sh to /opt/poky&lt;br /&gt;
* Add startup scripts to create tap devs and start vncserver, in /etc/rc.local, /etc/init.d/boot.local, or as systemd unit files, should perform the following&lt;br /&gt;
** cd /root/poky/scripts/; ./runqemu-gen-tapdevs 6000 100 32 /opt/poky/sysroots/x86_64-pokysdk-linux/&lt;br /&gt;
** /bin/su - pokybuild -c &amp;quot;/usr/bin/vncserver&amp;quot;&lt;br /&gt;
* Disable or edit firewall rules to allow all connections to the tap devices. This allows sanity tests to connect to booted images.&lt;br /&gt;
* Install nfs-utils or nfs-common, add Domain to /etc/idmapd.conf, fstab entry, mount NAS&lt;br /&gt;
&lt;br /&gt;
==As pokybuild==&lt;br /&gt;
&lt;br /&gt;
* Set up buildset-config, either:&lt;br /&gt;
** Add ssh key to clone production yocto-autobuilder&lt;br /&gt;
** git clone http://git.yoctoproject.org/git/yocto-autobuilder &amp;amp;&amp;amp; cd yocto-autobuilder &amp;amp;&amp;amp; git remote add prod git@git.yoctoproject.org:yocto-autobuilder-production &amp;amp;&amp;amp; git fetch prod &amp;amp;&amp;amp; git checkout -b yoctoio prod/yoctoio&lt;br /&gt;
* or:&lt;br /&gt;
** edit one of the several examples included in repo e.g. cp -r buildset-config.controller buildset-config&lt;br /&gt;
&lt;br /&gt;
* update config/autobuilder.conf and yocto-worker/buildbot.tac&lt;br /&gt;
* Start the worker&lt;br /&gt;
** touch ~/yocto-autobuilder/.setupdone&lt;br /&gt;
** . yocto-autobuilder-setup &lt;br /&gt;
** ./yocto-start-autobuilder worker&lt;/div&gt;</summary>
		<author><name>Bill Randle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Cluster_Setup&amp;diff=19734</id>
		<title>AutoBuilder Cluster Setup</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Cluster_Setup&amp;diff=19734"/>
		<updated>2016-08-03T17:50:38Z</updated>

		<summary type="html">&lt;p&gt;Bill Randle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==As root==&lt;br /&gt;
* Install base OS with minimal target&lt;br /&gt;
* Add pokybuild user (uid=6000, or for older clusters 1006)&lt;br /&gt;
* Add pokybuild user to &amp;quot;users&amp;quot; group (gid 100) [if &amp;quot;users&amp;quot; group does not exist, create it]&lt;br /&gt;
* Install the requirements from http://www.yoctoproject.org/docs/current/yocto-project-qs/yocto-project-qs.html&lt;br /&gt;
* git clone --single-branch http://git.yoctoproject.org/git/poky /root/poky  (in /root for historical reasons, should change in the future)&lt;br /&gt;
* Install http://downloads.yoctoproject.org/releases/yocto/yocto-{latest release}/toolchain/x86_64/poky-glibc-x86_64-core-image-sato-core2-64-toolchain-{relver}.sh to /opt/poky&lt;br /&gt;
* Add startup scripts to create tap devs and start vncserver, in /etc/rc.local or as systemd unit files, should perform the following&lt;br /&gt;
** cd /root/poky/scripts/; ./runqemu-gen-tapdevs 6000 100 32 /opt/poky/sysroots/x86_64-pokysdk-linux/&lt;br /&gt;
** /bin/su - pokybuild -c &amp;quot;/usr/bin/vncserver&amp;quot;&lt;br /&gt;
* Disable or edit firewall rules to allow all connections to the tap devices. This allows sanity tests to connect to booted images.&lt;br /&gt;
* Install nfs-utils or nfs-common, add Domain to /etc/idmapd.conf, fstab entry, mount NAS&lt;br /&gt;
&lt;br /&gt;
==As pokybuild==&lt;br /&gt;
&lt;br /&gt;
* Set up buildset-config, either:&lt;br /&gt;
** Add ssh key to clone production yocto-autobuilder&lt;br /&gt;
** git clone http://git.yoctoproject.org/git/yocto-autobuilder &amp;amp;&amp;amp; cd yocto-autobuilder &amp;amp;&amp;amp; git remote add prod git@git.yoctoproject.org:yocto-autobuilder-production &amp;amp;&amp;amp; git fetch prod &amp;amp;&amp;amp; git checkout -b yoctoio prod/yoctoio&lt;br /&gt;
* or:&lt;br /&gt;
** edit one of the several examples included in repo e.g. cp -r buildset-config.controller buildset-config&lt;br /&gt;
&lt;br /&gt;
* update config/autobuilder.conf and yocto-worker/buildbot.tac&lt;br /&gt;
* Start the worker&lt;br /&gt;
** touch ~/yocto-autobuilder/.setupdone&lt;br /&gt;
** . yocto-autobuilder-setup &lt;br /&gt;
** ./yocto-start-autobuilder worker&lt;/div&gt;</summary>
		<author><name>Bill Randle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Cluster_Setup&amp;diff=19733</id>
		<title>AutoBuilder Cluster Setup</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Cluster_Setup&amp;diff=19733"/>
		<updated>2016-08-03T17:36:24Z</updated>

		<summary type="html">&lt;p&gt;Bill Randle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==As root==&lt;br /&gt;
* Install base OS with minimal target&lt;br /&gt;
* Add pokybuild user (uid=6000, or for older clusters 1006)&lt;br /&gt;
* Add pokybuild user to &amp;quot;users&amp;quot; group (gid 100) [if &amp;quot;users&amp;quot; group does not exist, create it]&lt;br /&gt;
* Install the requirements from http://www.yoctoproject.org/docs/current/yocto-project-qs/yocto-project-qs.html&lt;br /&gt;
* git clone --single-branch http://git.yoctoproject.org/git/poky /root/poky  (in /root for historical reasons, should change in the future)&lt;br /&gt;
* Install http://downloads.yoctoproject.org/releases/yocto/yocto-{latest release}/toolchain/x86_64/poky-glibc-x86_64-core-image-sato-core2-64-toolchain-{relver}.sh to /opt/poky&lt;br /&gt;
* Add startup scripts to create tap devs and start vncserver, in /etc/rc.local or as systemd unit files, should perform the following&lt;br /&gt;
** cd /root/poky/scripts/; ./runqemu-gen-tapdevs 6000 100 32 /opt/poky/sysroots/x86_64-pokysdk-linux/&lt;br /&gt;
** /bin/su - pokybuild -c &amp;quot;/usr/bin/vncserver&amp;quot;&lt;br /&gt;
* Disable or edit firewall rules to allow all connections to the tap devices. This allows sanity tests to connect to booted images.&lt;br /&gt;
* Install nfs-utils or nfs-common, add Domain to /etc/idmapd.conf, fstab entry, mount NAS&lt;br /&gt;
&lt;br /&gt;
==As pokybuild==&lt;br /&gt;
&lt;br /&gt;
* Set up buildset-config, either:&lt;br /&gt;
** Add ssh key to clone production yocto-autobuilder&lt;br /&gt;
** git clone http://git.yoctoproject.org/git/yocto-autobuilder &amp;amp;&amp;amp; cd yocto-autobuilder &amp;amp;&amp;amp; git remote add prod git@git.yoctoproject.org:yocto-autobuilder-production &amp;amp;&amp;amp; git fetch prod &amp;amp;&amp;amp; git checkout -b yoctoio prod/yoctoio&lt;br /&gt;
** edit one of the several examples included in repo e.g. cp -r buildset-config.controller buildset-config&lt;br /&gt;
* update config/autobuilder.conf and yocto-worker/buildbot.tac&lt;br /&gt;
* Start the worker&lt;br /&gt;
** touch ~/yocto-autobuilder/.setupdone&lt;br /&gt;
** . yocto-autobuilder-setup &lt;br /&gt;
** ./yocto-start-autobuilder worker&lt;/div&gt;</summary>
		<author><name>Bill Randle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Cluster_Setup&amp;diff=19732</id>
		<title>AutoBuilder Cluster Setup</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Cluster_Setup&amp;diff=19732"/>
		<updated>2016-08-03T17:22:37Z</updated>

		<summary type="html">&lt;p&gt;Bill Randle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==As root==&lt;br /&gt;
* Install base OS with minimal target&lt;br /&gt;
* Add pokybuild user (uid=6000, or for older clusters 1006)&lt;br /&gt;
* Add pokybuild user to &amp;quot;users&amp;quot; group (gid 100) [if &amp;quot;users&amp;quot; group does not exist, create it]&lt;br /&gt;
* Install the requirements from http://www.yoctoproject.org/docs/current/yocto-project-qs/yocto-project-qs.html&lt;br /&gt;
* git clone --single-branch http://git.yoctoproject.org/git/poky /root/poky  (in /root for historical reasons, should change in the future)&lt;br /&gt;
* Install http://downloads.yoctoproject.org/releases/yocto/yocto-{latest release}/toolchain/x86_64/poky-glibc-x86_64-core-image-sato-core2-64-toolchain-{relver}.sh to /opt/poky&lt;br /&gt;
* Add startup scripts to create tap devs and start vncserver, in /etc/rc.local or as systemd unit files, should perform the following&lt;br /&gt;
** cd /root/poky/scripts/; ./runqemu-gen-tapdevs 6000 100 32 /opt/poky/sysroots/x86_64-pokysdk-linux/&lt;br /&gt;
** /bin/su - pokybuild -c &amp;quot;/usr/bin/vncserver&amp;quot;&lt;br /&gt;
* Disable or edit firewall rules to allow all connections to the tap devices. This allows sanity tests to connect to booted images.&lt;br /&gt;
* Install nfs-utils or nfs-common, add Domain to /etc/idmapd.conf, fstab entry, mount NAS&lt;br /&gt;
&lt;br /&gt;
==As pokybuild==&lt;br /&gt;
&lt;br /&gt;
* Set up buildset-config, either:&lt;br /&gt;
** Add ssh key to clone production yocto-autobuilder&lt;br /&gt;
** git clone http://git.yoctoproject.org/git/yocto-autobuilder &amp;amp;&amp;amp; cd yocto-autobuilder &amp;amp;&amp;amp; git remote add prod git@git.yoctoproject.org:yocto-autobuilder-production &amp;amp;&amp;amp; git fetch &amp;amp;&amp;amp; git checkout -b yoctoio prod/yoctoio&lt;br /&gt;
** edit one of the several examples included in repo e.g. cp -r buildset-config.controller buildset-config&lt;br /&gt;
* update config/autobuilder.conf and yocto-worker/buildbot.tac&lt;br /&gt;
* Start the worker&lt;br /&gt;
** touch ~/yocto-autobuilder/.setupdone&lt;br /&gt;
** . yocto-autobuilder-setup &lt;br /&gt;
** ./yocto-start-autobuilder worker&lt;/div&gt;</summary>
		<author><name>Bill Randle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Cluster_Setup&amp;diff=19682</id>
		<title>AutoBuilder Cluster Setup</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=AutoBuilder_Cluster_Setup&amp;diff=19682"/>
		<updated>2016-08-02T15:53:28Z</updated>

		<summary type="html">&lt;p&gt;Bill Randle: add note to includ epokybuild user in users group&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==As root==&lt;br /&gt;
* Install base OS with minimal target&lt;br /&gt;
* Add pokybuild user (uid=6000, or for older clusters 1006)&lt;br /&gt;
* Add pokybuild user to &amp;quot;users&amp;quot; group (gid 100) [if &amp;quot;users&amp;quot; group does not exist, create it]&lt;br /&gt;
* Install the requirements from http://www.yoctoproject.org/docs/current/yocto-project-qs/yocto-project-qs.html&lt;br /&gt;
* git clone --single-branch http://git.yoctoproject.org/git/poky /root/poky  (in /root for historical reasons, should change in the future)&lt;br /&gt;
* Install http://downloads.yoctoproject.org/releases/yocto/yocto-{latest release}/toolchain/x86_64/poky-glibc-x86_64-core-image-sato-core2-64-toolchain-{relver}.sh to /opt/poky&lt;br /&gt;
* Add startup scripts to create tap devs and start vncserver, in /etc/rc.local or as systemd unit files, should perform the following&lt;br /&gt;
** cd /root/poky/scripts/; ./runqemu-gen-tapdevs 6000 100 32 /opt/poky/sysroots/x86_64-pokysdk-linux/&lt;br /&gt;
** /bin/su - pokybuild -c &amp;quot;/usr/bin/vncserver&amp;quot;&lt;br /&gt;
* Disable or edit firewall rules to allow all connections to the tap devices. This allows sanity tests to connect to booted images.&lt;br /&gt;
* Install nfs-utils or nfs-common, add Domain to /etc/idmapd.conf, fstab entry, mount NAS&lt;br /&gt;
&lt;br /&gt;
==As pokybuild==&lt;br /&gt;
&lt;br /&gt;
* Set up buildset-config, either:&lt;br /&gt;
** edit one of the several examples included in repo e.g. cp -r buildset-config.controller buildset-config&lt;br /&gt;
** Add ssh key to clone production yocto-autobuilder&lt;br /&gt;
*** git clone http://git.yoctoproject.org/git/yocto-autobuilder &amp;amp;&amp;amp; cd yocto-autobuilder &amp;amp;&amp;amp; git remote add prod git@git.yoctoproject.org:yocto-autobuilder-production &amp;amp;&amp;amp; git checkout -b yoctoio prod/yoctoio&lt;br /&gt;
* update config/autobuilder.conf and yocto-worker/buildbot.tac&lt;br /&gt;
* Start the worker&lt;br /&gt;
** touch ~/yocto-autobuilder/.setupdone&lt;br /&gt;
** . yocto-autobuilder-setup &lt;br /&gt;
** ./yocto-start-autobuilder worker&lt;/div&gt;</summary>
		<author><name>Bill Randle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Accessing_Autobuilders&amp;diff=18636</id>
		<title>Accessing Autobuilders</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Accessing_Autobuilders&amp;diff=18636"/>
		<updated>2016-05-19T23:46:37Z</updated>

		<summary type="html">&lt;p&gt;Bill Randle: show example for &amp;#039;ncat&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Connecting to Autobuilders==&lt;br /&gt;
We use an ssh jumphost called access.yoctoproject.org to connect to the autobuilders. Jumphosts enhance security by removing the threat of hijacked ssh-agents and limiting the services running on Internet exposed hosts.&lt;br /&gt;
&lt;br /&gt;
===Generate keys===&lt;br /&gt;
In order to access any of the autobuilders your ssh public keys must first be installed. The preferred way to generate a key is type RSA with 2048 bits or greater. Please put your e-mail, the date of generation, and the host the key lives on in the comment. Please set a passphrase even if it&#039;s a simple one! Ideally your private key will never leave the host it is generated on - so if you have multiple machines please generate multiple keys. E-mail your &#039;&#039;&#039;public&#039;&#039;&#039; key named id_rsa.pub to hostmaster@yoctoproject.org. Keep id_rsa(the private key) super safe. Please never share it with anyone or copy it onto the Internet. Don&#039;t e-mail it to yourself either.&lt;br /&gt;
&lt;br /&gt;
  ssh-keygen -b 4096 -t rsa -C &amp;quot;your.email@company.com_2012-05-30_localhostname&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Substitute your own e-mail and your computer&#039;s hostname in the command above. Setting these helps with troubleshooting in the future.&lt;br /&gt;
&lt;br /&gt;
===Configure ssh===&lt;br /&gt;
Edit ~/.ssh/config and add:&lt;br /&gt;
&lt;br /&gt;
 Host access.yoctoproject.org&lt;br /&gt;
    # Make sure your username matches your account on the autobuilder&lt;br /&gt;
    User [username]&lt;br /&gt;
    # Give the full path to the proper public key&lt;br /&gt;
    IdentityFile /home/[username]/.ssh/id_rsa&lt;br /&gt;
    # If your network requires you to use a SOCKS proxy enable it here&lt;br /&gt;
    # ProxyCommand nc -X5 -x [proxyserver.address.company.com:1080] %h %p&lt;br /&gt;
    # If your system uses &#039;ncat&#039;, rather than &#039;netcat&#039;, use these options to enable a SOCKS proxy&lt;br /&gt;
    # ProxyCommand nc --proxy-type socks5 --proxy [proxyserver.address.company.com:1080] %h %p&lt;br /&gt;
    &lt;br /&gt;
 # We use an internal DNS server with the fake TLD .yp for ease of use&lt;br /&gt;
 Host *.yp *.osl.yoctoproject.org&lt;br /&gt;
    # This proxy command actually does the of running ssh through ssh&lt;br /&gt;
    ProxyCommand ssh access.yoctoproject.org exec nc %h %p 2&amp;gt; /dev/null&lt;br /&gt;
    # Correct username and key repeated from above.&lt;br /&gt;
    User [username]&lt;br /&gt;
    IdentityFile /home/username/.ssh/id_rsa&lt;br /&gt;
    # We don&#039;t need strict checking on the private network.&lt;br /&gt;
    StrictHostKeyChecking no&lt;br /&gt;
    # Don&#039;t bother saving hostkeys we don&#039;t check&lt;br /&gt;
    UserKnownHostsFile /dev/null&lt;br /&gt;
&lt;br /&gt;
===Verify Fingerprints===&lt;br /&gt;
Now actually ssh to access.yoctoproject.org and verify that the fingerprint you receive matches a fingerprint below.&lt;br /&gt;
&lt;br /&gt;
 access.yoctoproject.org ECDSA 45:57:d2:e5:c9:93:40:a3:32:f4:a3:29:0b:1e:99:57&lt;br /&gt;
 or                       RSA  15:90:e2:85:98:db:f6:75:55:3d:fb:fa:22:a7:06:44&lt;br /&gt;
 or                ECDSA SHA256:xVq5zKfo7s2HCZmZOj/r39A8dRenI+YEfIBIv53LSTs&lt;br /&gt;
&lt;br /&gt;
===Connect!===&lt;br /&gt;
Now that you&#039;ve added access.yoctoproject.org to your known hosts you don&#039;t need to worry about fingerprints anymore. Time to connect to a builder. Run:&lt;br /&gt;
  ssh ab01.yp&lt;br /&gt;
&lt;br /&gt;
If all worked correctly you are now logged into autobuilder01. &lt;br /&gt;
&lt;br /&gt;
===Need to work on the build scripts?===&lt;br /&gt;
If you are on the SWAT team you can access pokybuild using this sudo command:&lt;br /&gt;
  sudo -iu pokybuild&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
keywords: ssh access auto builder accessing autobuilders&lt;/div&gt;</summary>
		<author><name>Bill Randle</name></author>
	</entry>
</feed>