<?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=Mark+Hatle</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=Mark+Hatle"/>
	<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/Special:Contributions/Mark_Hatle"/>
	<updated>2026-04-10T06:55:24Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.5</generator>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=User:Mhatle&amp;diff=86655</id>
		<title>User:Mhatle</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=User:Mhatle&amp;diff=86655"/>
		<updated>2025-07-14T17:36:27Z</updated>

		<summary type="html">&lt;p&gt;Mark Hatle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Name: Mark Hatle&lt;br /&gt;
&lt;br /&gt;
email: mark.hatle at amd dot com&lt;br /&gt;
&lt;br /&gt;
freenode IRC: fray&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Currently handling pseudo change requests.&lt;br /&gt;
&lt;br /&gt;
Working on RISC-V base architecture (tune) definitions and related.&lt;br /&gt;
&lt;br /&gt;
Maintainer of meta-xilinx and meta-xilinx-tools.&lt;/div&gt;</summary>
		<author><name>Mark Hatle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Binary_Distro_Prototype&amp;diff=86282</id>
		<title>Binary Distro Prototype</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Binary_Distro_Prototype&amp;diff=86282"/>
		<updated>2024-03-26T16:37:27Z</updated>

		<summary type="html">&lt;p&gt;Mark Hatle: /* Process and policy for proposing adding new layers to the binary distro test artefacts process */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Scope of a Yocto Binary Distribution Prototype ==&lt;br /&gt;
&lt;br /&gt;
The Yocto Project has received funding for developing the processes and tooling for enabling binary distributions (see the [https://web.archive.org/web/20230620145823/https://www.yoctoproject.org/community/yocto-project-engineering-request-for-quotation/ Engineering Request for Quotation]). As part of that, the project would need some form of prototype test binary distro to develop and test this. The main goal of this would be to develop the tools, and documentation needed to build a binary distribution and allow application and system developers to progress through a hierarchy of different uses of the resulting environment:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Beginner&#039;&#039;&#039; use case: begin by fetching a binary image, ready to boot on a target machine. Extend the system by installing extra applications through package feeds.&lt;br /&gt;
* &#039;&#039;&#039;Intermediate&#039;&#039;&#039; use case: tweak and rebuild existing packages, compile new applications and modify images by using an eSDK and other binary artifacts.&lt;br /&gt;
* &#039;&#039;&#039;Advanced&#039;&#039;&#039; use case: completely reorganize and optimize the system for a specific target, switching to building from source&lt;br /&gt;
&lt;br /&gt;
The first step in this effort is to define the scope of the prototype we will develop. We are looking for feedback and comments about issues we may not have considered.&lt;br /&gt;
&lt;br /&gt;
Bear in mind that a prototype has to be limited in scope. However, the developed tools, procedures and documentation will open a pathway for the Yocto Project and OpenEmbedded community to experiment with more architectures, features, recipes and images.&lt;br /&gt;
&lt;br /&gt;
Also bear in mind that the effort is not planning to adopt, replace or repeat any existing distributions such as [[wikipedia:Ångström_distribution|Ångström]] or [https://www.yoedistro.org/ Yoe].&lt;br /&gt;
&lt;br /&gt;
Notes from discussions:&lt;br /&gt;
* Alex Kanavin suggests as &amp;quot;Intermediate&amp;quot; step to use the [https://patchwork.yoctoproject.org/project/oe-core/patch/20231107105844.712846-1-alex@linutronix.de/ build bundles] that he submitted. However, this is closer to the &amp;quot;Advanced&amp;quot; use case as this already uses BitBake and OE/Yocto ([https://lists.openembedded.org/g/openembedded-architecture/message/1850 discussion]).&lt;br /&gt;
&lt;br /&gt;
=== Target architectures and machines ===&lt;br /&gt;
&lt;br /&gt;
The first prototype would only target the below architectures:&lt;br /&gt;
* &amp;quot;x86-64&amp;quot; architecture through the [https://git.yoctoproject.org/poky/tree/meta/conf/machine/qemux86-64.conf qemux86-64] machine.&lt;br /&gt;
* &amp;quot;arm64&amp;quot; architecture through the [https://git.yoctoproject.org/poky/tree/meta/conf/machine/qemuarm64.conf qemuarm64] machine.&lt;br /&gt;
&lt;br /&gt;
Testing would happen through QEMU system emulation. The emulated architectures will be sufficient to test the outputs of this effort, but the developed tooling and documentation should allow the community to experiment with other target architectures and machines.&lt;br /&gt;
&lt;br /&gt;
=== Target tunes ===&lt;br /&gt;
&lt;br /&gt;
The binary images and other artifacts should be generated with the default tunes of the [https://git.yoctoproject.org/poky/tree/meta/conf/machine/qemux86-64.conf qemux86-64] and  [https://git.yoctoproject.org/poky/tree/meta/conf/machine/qemuarm64.conf qemuarm64] machines.&lt;br /&gt;
&lt;br /&gt;
See [https://docs.yoctoproject.org/ref-manual/variables.html#term-DEFAULTTUNE DEFAULTTUNE] for details.&lt;br /&gt;
&lt;br /&gt;
=== Distribution, Init Manager, C library ===&lt;br /&gt;
&lt;br /&gt;
Images and package feeds will be generated for the [https://git.yoctoproject.org/poky/tree/meta-poky/conf/distro/poky-altcfg.conf poky-altcfg] distribution, using the systemd init manager.&lt;br /&gt;
&lt;br /&gt;
Choosing systemd makes the binary reference distribution as generic as possible, enabling the widest set of features, and being more familiar to more users. Of course, switching to other init managers and more restricted features will be possible by later compiling the system from source (advanced use case).&lt;br /&gt;
&lt;br /&gt;
This also implies the choice of the GNU C library (glibc). Selecting glibc also makes sense to enable the widest possible selection of packages, and some packages have limited or no support for the Musl C library. That&#039;s typically the case of systemd, which upstream only supports glibc.&lt;br /&gt;
&lt;br /&gt;
Last but not least, people who want to use the Musl C library probably do that to optimize the size of their system, which is a use case not well adapted to using ready-made binary images. &lt;br /&gt;
Such an advanced use case will be addressed by re-compiling from source, after testing initial prototypes with the binary image based on glibc.&lt;br /&gt;
&lt;br /&gt;
=== Binary images ===&lt;br /&gt;
&lt;br /&gt;
The prototype will provide as a reference, for each targeted architecture:&lt;br /&gt;
* The root filesystem binary image, generated by building the &amp;lt;code&amp;gt;core-image-full-cmdline&amp;lt;/code&amp;gt; target.&lt;br /&gt;
* An image containing on-target development tools (e.g compiler, debugger)&lt;br /&gt;
* The corresponding SD card images to be booted through QEMU. Other boot methods will be possible, but will be outside of the scope of the reference distribution.&lt;br /&gt;
&lt;br /&gt;
=== Package feeds ===&lt;br /&gt;
&lt;br /&gt;
For each targeted architecture, several package feeds will be available to allow for bugfix or security updates or to extend the image with additional packages:&lt;br /&gt;
* Architecture independent feed&lt;br /&gt;
* Architecture dependent feed&lt;br /&gt;
* Machine dependent feed&lt;br /&gt;
See [https://docs.yoctoproject.org/dev-manual/packages.html#using-runtime-package-management Using Runtime Package Management] for details.&lt;br /&gt;
&lt;br /&gt;
The feeds for the first prototype will contain all the packages which are supported by the [https://git.yoctoproject.org/poky/tree/meta-poky/conf/distro/poky-altcfg.conf poky-altcfg] distribution as produced by the &amp;lt;code&amp;gt;bitbake world&amp;lt;/code&amp;gt; command for the set of layers supplied by Poky.&lt;br /&gt;
&lt;br /&gt;
=== Available reference package formats ===&lt;br /&gt;
&lt;br /&gt;
To keep the first prototype simple, we will only release images and package feeds based on the &amp;quot;ipk&amp;quot; format supported by [[wikipedia:opkg|opkg]] package manager.&lt;br /&gt;
&lt;br /&gt;
Of course, the OpenEmbedded build system also supports the [[wikipedia:Deb_(file_format)|deb]] and [[wikipedia:RPM_Package_Manager|rpm]] package formats, so users will be able to generate their own images and feeds based on these other formats.&lt;br /&gt;
&lt;br /&gt;
Another reason for not providing &amp;quot;deb&amp;quot; and &amp;quot;rpm&amp;quot; packages is that we do not want inexperienced users to expect to be able to grab and use such packages produced for regular Linux distributions (Debian, Fedora, etc.). Being built with different C library versions and toolchains, the corresponding binaries are most likely to be broken anyway.&lt;br /&gt;
&lt;br /&gt;
=== Available reference binary artifacts and deliverables ===&lt;br /&gt;
&lt;br /&gt;
The first prototype will make the below binary artifacts publicly available:&lt;br /&gt;
* Root filesystem images (as specified above)&lt;br /&gt;
* Binary package feeds (as specified above)&lt;br /&gt;
* [https://docs.yoctoproject.org/ref-manual/variables.html#term-PR PR] database, so that people can manage updates to packages, by importing the database in a local PR server.&lt;br /&gt;
* Prebuilt object data (&amp;quot;Shared State cache) through a public server (see [https://docs.yoctoproject.org/ref-manual/variables.html#term-SSTATE_MIRRORS SSTATE_MIRRORS]), to reuse binary output already built by the Yocto Project autobuilders, to reduce the compile time of additional packages.&lt;br /&gt;
* Hash Equivalence data through a public server (see [https://docs.yoctoproject.org/bitbake/2.4/bitbake-user-manual/bitbake-user-manual-ref-variables.html#term-BB_HASHSERVE_UPSTREAM BB_HASHSERVE_UPSTREAM]), to increase the reusability of prebuilt objects.&lt;br /&gt;
&lt;br /&gt;
Share State and Hash Equivalence data would be only useful to &amp;quot;Intermediate&amp;quot; and &amp;quot;Advanced&amp;quot; use cases, to rebuild parts or the whole system from source.&lt;br /&gt;
&lt;br /&gt;
Such artifacts will be served through a Content Delivery Network (CDN), to make sure that they can be downloaded fast enough from any location in the world, in a way that remains much faster than re-compiling such artifacts from sources.&lt;br /&gt;
&lt;br /&gt;
Those binaries should also be released along with:&lt;br /&gt;
* Sources corresponding to the software used to build the image, as produced by the [https://docs.yoctoproject.org/ref-manual/classes.html#ref-classes-archiver archiver] class. Unlike standard GNU/Linux distributions, we won&#039;t ship source package feeds (such as SRPMs)&amp;lt;ref&amp;gt;Only Source RPMs are supported by the [https://docs.yoctoproject.org/ref-manual/classes.html#ref-classes-archiver archiver] class. To obtain them, you need to set &amp;lt;code&amp;gt;INHERIT += &amp;quot;archiver&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;PACKAGE_CLASSES = &amp;quot;package_rpm&amp;quot;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;ARCHIVER_MODE[srpm] = &amp;quot;1&amp;quot;&amp;lt;/code&amp;gt;. The generation of source &amp;lt;code&amp;gt;deb&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ipk&amp;lt;/code&amp;gt; packages is currently not supported.&amp;lt;/ref&amp;gt;.&amp;lt;ref&amp;gt;The &amp;lt;code&amp;gt;-src&amp;lt;/code&amp;gt; packages which recipes can produce are only meant for debugging together with &amp;lt;code&amp;gt;-dbg&amp;lt;/code&amp;gt; packages. See [https://docs.yoctoproject.org/dev/ref-manual/variables.html#term-PACKAGE_DEBUG_SPLIT_STYLE PACKAGE_DEBUG_SPLIT_STYLE].&amp;lt;/ref&amp;gt;&lt;br /&gt;
* SPDX output for the initial image&lt;br /&gt;
* The build system and layer sources. A good fit would be Alex Kanavin&#039;s [https://patchwork.yoctoproject.org/project/oe-core/patch/20231107105844.712846-1-alex@linutronix.de/ build bundles].&lt;br /&gt;
&lt;br /&gt;
=== Defining policies and processes ===&lt;br /&gt;
&lt;br /&gt;
This reference binary distribution prototype will also drive the documentation of policies and process to address future work such as:&lt;br /&gt;
* What criteria should a new CPU architecture or platform tuning meet to be added / tested?&lt;br /&gt;
* What criteria should other layers meet to be tested, in addition to being already tested by the Autobuilder? Should these criteria only apply to specific recipes or to the entire layers containing them?&lt;br /&gt;
&lt;br /&gt;
See the [[#Policies and Processes | Policies and Processes]].&lt;br /&gt;
&lt;br /&gt;
=== Testing plans ===&lt;br /&gt;
&lt;br /&gt;
Here are the tests we plan to implement:&lt;br /&gt;
* Producing and testing binary images through the autobuilder&lt;br /&gt;
* Making nightly builds available to testers&lt;br /&gt;
* Testing that package updates apply successfully:&lt;br /&gt;
** Within the current stable branch (nanbield): from one release update to the next, and from the latest release update to the tip of the branch&lt;br /&gt;
** Between release branches: from the latest update to our latest LTS (kirkstone), to the latest update to the current stable release (nanbield).&lt;br /&gt;
* Testing that it&#039;s also possible to build and deploy packages from the meta-openembedded and meta-virtualization layers, as a way to assess the relevance of our policies and process for additional layers or recipes. This would also be a way to demonstrate the ability to build container images, which would be a great way to ship binary distributions.&lt;br /&gt;
&lt;br /&gt;
Here are other tests that would be worth implementing:&lt;br /&gt;
* Check that package upgrades don&#039;t cause configuration file changes to be lost. See [https://lore.kernel.org/openembedded-core/0e38566f-a1f9-4ebb-8492-2c50945eeeb4@gmail.com/T/#t this discussion].&lt;br /&gt;
* Check that the latest package upgrades successfully apply to any previous release, at least on the same branch. For example, upgrading directly from release x.y.n-2 to x.y may not work without going through x.y.n-1 as an intermediate. This could happen if a package has a really broken post-install script in n-2, which damage is repaired in n-1. Should n repair it too in case n-1 is skipped?&lt;br /&gt;
&lt;br /&gt;
We will work with recipe maintainers to publish fixes for update issues that testing will find in recipes. Each issue will be reported in Bugzilla.&lt;br /&gt;
&lt;br /&gt;
=== Open questions ===&lt;br /&gt;
&lt;br /&gt;
* Issues with Yocto Project being pedantic in its use of arch strings such as &amp;quot;intel-x86-64&amp;quot; instead of &amp;quot;x86-64&amp;quot;. This conflicts with typical use in the greater Linux and &amp;quot;binary&amp;quot; community, which may not recognize the &amp;quot;extended&amp;quot; arch strings. Examples: [https://github.com/openSUSE/libsolv/blob/master/src/poolarch.c#L23 libresolv] and [https://github.com/rpm5/libhif/blob/f9b798cadb6821f9cffd5c0331578b3f7c19d699/libdnf/dnf-context.c#L52 libdnf] (reported by Mark Asselstine).&lt;br /&gt;
&lt;br /&gt;
== Policies and Processes ==&lt;br /&gt;
&lt;br /&gt;
Open questions:&lt;br /&gt;
  * When do we run updates? What does process look like?&lt;br /&gt;
&lt;br /&gt;
=== Criteria for adding and testing a new CPU architecture or platform tuning ===&lt;br /&gt;
&lt;br /&gt;
* Only tunes in Openembedded-Core should be supported.&lt;br /&gt;
&lt;br /&gt;
=== Process and policy for proposing adding new layers to the binary distro test artifacts process ===&lt;br /&gt;
&lt;br /&gt;
* Layers must be [https://docs.yoctoproject.org/current/dev-manual/layers.html#making-sure-your-layer-is-compatible-with-yocto-project Yocto Project Compatible]&lt;br /&gt;
* In addition, layers must be well written and be targetting project best practices like reproducibility, no network access outside fetching so mirroring and licensing auditing works and not skipping QA tests without good reason.&lt;br /&gt;
* Any dependency layers would already have to be included in the testing already or make a separate application for addition first.&lt;br /&gt;
* The layer being added must be suitably generic with a clear need/usage of the components provided by the layer in the ecosystem&lt;br /&gt;
* The layer maintainer must have a commitment to keeping recipe upgrades functional&lt;br /&gt;
* The proposal must make it clear which recipes within the layer are being proposed to be built&lt;br /&gt;
* Proposals would be made to the Yocto Project TSC covering the above topics&lt;br /&gt;
&lt;br /&gt;
=== Process and policy for proposing addition of a new MACHINE target ===&lt;br /&gt;
&lt;br /&gt;
* Layers to build the machine need to be [https://docs.yoctoproject.org/current/dev-manual/layers.html#making-sure-your-layer-is-compatible-with-yocto-project Yocto Project Compatible]&lt;br /&gt;
* Layers need to be buildable on the project autobuilder&lt;br /&gt;
* Needs to be Yocto Project membership sponsorship of the machine due to the project resource usage&lt;br /&gt;
* Needs to be a commitment to testing the images for the platform for releases and upgrades&lt;br /&gt;
* Proposals would be made to the Yocto Project TSC covering the above topics&lt;br /&gt;
&lt;br /&gt;
=== Process and policy for proposing addition of new recipe to the build ===&lt;br /&gt;
&lt;br /&gt;
* This process assumes the layer is already present but the recipe is not currently included in the test matrix&lt;br /&gt;
* The recipe would need to have demonstrated the ability to pass on target installation and upgrade&lt;br /&gt;
* Proposals would be made to the Yocto Project TSC covering the above topics&lt;br /&gt;
* The software needs to have a good maintenance track record including reasonable CVE response&lt;br /&gt;
* Note: The TSC is aiming to appoint a maintainer to take the lead on resolving binary distro testing issues and handling recipe addition requests.&lt;br /&gt;
&lt;br /&gt;
=== TSC Criteria for change evaluation ===&lt;br /&gt;
&lt;br /&gt;
* Does the project have resources (human and compute for build/test/QA/bugfixing) to support the change?&lt;br /&gt;
* Is the change widely useful to a significant portion of the user base?&lt;br /&gt;
* Does the change enhance the project&#039;s test matrix?&lt;br /&gt;
* Does the change significantly improve developer productivity?&lt;br /&gt;
&lt;br /&gt;
== Achievements ==&lt;br /&gt;
&lt;br /&gt;
=== Fixed bugs ===&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.yoctoproject.org/show_bug.cgi?id=15292 Bug 15292 - systemd-compat-units: error at package post-install time]&lt;br /&gt;
&lt;br /&gt;
=== Yocto Project Documentation improvements ===&lt;br /&gt;
&lt;br /&gt;
* [https://lore.kernel.org/yocto-docs/20231206155427.279612-1-michael.opdenacker@bootlin.com/T/#t Fixes and updates to the Test Environment Manual]&lt;br /&gt;
&lt;br /&gt;
== Missing features ==&lt;br /&gt;
&lt;br /&gt;
Not implemented yet:&lt;br /&gt;
* Ability to update the system SPDX description after installing extra packages or package updates. The current way SPDX is generated doesn&#039;t allow to generate &amp;lt;code&amp;gt;-spdx&amp;lt;/code&amp;gt; packages, which would have made this possible ([https://lists.openembedded.org/g/openembedded-architecture/message/1855 discussion]).&lt;br /&gt;
&lt;br /&gt;
== Out of scope ==&lt;br /&gt;
&lt;br /&gt;
Features outside of the scope of this effort, but definitely worth keeping track of for future efforts, or for people already maintaining binary distributions.&lt;br /&gt;
* Binary distribution installer: not absolutely necessary but users may expect one. For example the [https://www.yoedistro.org/ Yoe] distro offers one, and so does [https://www.raspberrypi.com/news/raspberry-pi-imager-imaging-utility/ Raspberry Pi].&lt;br /&gt;
&lt;br /&gt;
== Footnotes and references ==&lt;/div&gt;</summary>
		<author><name>Mark Hatle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Binary_Distro_Prototype&amp;diff=86279</id>
		<title>Binary Distro Prototype</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Binary_Distro_Prototype&amp;diff=86279"/>
		<updated>2024-03-26T16:31:19Z</updated>

		<summary type="html">&lt;p&gt;Mark Hatle: /* Process and policy for proposing adding new layers to the bibary distro test artefacts process */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Scope of a Yocto Binary Distribution Prototype ==&lt;br /&gt;
&lt;br /&gt;
The Yocto Project has received funding for developing the processes and tooling for enabling binary distributions (see the [https://web.archive.org/web/20230620145823/https://www.yoctoproject.org/community/yocto-project-engineering-request-for-quotation/ Engineering Request for Quotation]). As part of that, the project would need some form of prototype test binary distro to develop and test this. The main goal of this would be to develop the tools, and documentation needed to build a binary distribution and allow application and system developers to progress through a hierarchy of different uses of the resulting environment:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Beginner&#039;&#039;&#039; use case: begin by fetching a binary image, ready to boot on a target machine. Extend the system by installing extra applications through package feeds.&lt;br /&gt;
* &#039;&#039;&#039;Intermediate&#039;&#039;&#039; use case: tweak and rebuild existing packages, compile new applications and modify images by using an eSDK and other binary artifacts.&lt;br /&gt;
* &#039;&#039;&#039;Advanced&#039;&#039;&#039; use case: completely reorganize and optimize the system for a specific target, switching to building from source&lt;br /&gt;
&lt;br /&gt;
The first step in this effort is to define the scope of the prototype we will develop. We are looking for feedback and comments about issues we may not have considered.&lt;br /&gt;
&lt;br /&gt;
Bear in mind that a prototype has to be limited in scope. However, the developed tools, procedures and documentation will open a pathway for the Yocto Project and OpenEmbedded community to experiment with more architectures, features, recipes and images.&lt;br /&gt;
&lt;br /&gt;
Also bear in mind that the effort is not planning to adopt, replace or repeat any existing distributions such as [[wikipedia:Ångström_distribution|Ångström]] or [https://www.yoedistro.org/ Yoe].&lt;br /&gt;
&lt;br /&gt;
Notes from discussions:&lt;br /&gt;
* Alex Kanavin suggests as &amp;quot;Intermediate&amp;quot; step to use the [https://patchwork.yoctoproject.org/project/oe-core/patch/20231107105844.712846-1-alex@linutronix.de/ build bundles] that he submitted. However, this is closer to the &amp;quot;Advanced&amp;quot; use case as this already uses BitBake and OE/Yocto ([https://lists.openembedded.org/g/openembedded-architecture/message/1850 discussion]).&lt;br /&gt;
&lt;br /&gt;
=== Target architectures and machines ===&lt;br /&gt;
&lt;br /&gt;
The first prototype would only target the below architectures:&lt;br /&gt;
* &amp;quot;x86-64&amp;quot; architecture through the [https://git.yoctoproject.org/poky/tree/meta/conf/machine/qemux86-64.conf qemux86-64] machine.&lt;br /&gt;
* &amp;quot;arm64&amp;quot; architecture through the [https://git.yoctoproject.org/poky/tree/meta/conf/machine/qemuarm64.conf qemuarm64] machine.&lt;br /&gt;
&lt;br /&gt;
Testing would happen through QEMU system emulation. The emulated architectures will be sufficient to test the outputs of this effort, but the developed tooling and documentation should allow the community to experiment with other target architectures and machines.&lt;br /&gt;
&lt;br /&gt;
=== Target tunes ===&lt;br /&gt;
&lt;br /&gt;
The binary images and other artifacts should be generated with the default tunes of the [https://git.yoctoproject.org/poky/tree/meta/conf/machine/qemux86-64.conf qemux86-64] and  [https://git.yoctoproject.org/poky/tree/meta/conf/machine/qemuarm64.conf qemuarm64] machines.&lt;br /&gt;
&lt;br /&gt;
See [https://docs.yoctoproject.org/ref-manual/variables.html#term-DEFAULTTUNE DEFAULTTUNE] for details.&lt;br /&gt;
&lt;br /&gt;
=== Distribution, Init Manager, C library ===&lt;br /&gt;
&lt;br /&gt;
Images and package feeds will be generated for the [https://git.yoctoproject.org/poky/tree/meta-poky/conf/distro/poky-altcfg.conf poky-altcfg] distribution, using the systemd init manager.&lt;br /&gt;
&lt;br /&gt;
Choosing systemd makes the binary reference distribution as generic as possible, enabling the widest set of features, and being more familiar to more users. Of course, switching to other init managers and more restricted features will be possible by later compiling the system from source (advanced use case).&lt;br /&gt;
&lt;br /&gt;
This also implies the choice of the GNU C library (glibc). Selecting glibc also makes sense to enable the widest possible selection of packages, and some packages have limited or no support for the Musl C library. That&#039;s typically the case of systemd, which upstream only supports glibc.&lt;br /&gt;
&lt;br /&gt;
Last but not least, people who want to use the Musl C library probably do that to optimize the size of their system, which is a use case not well adapted to using ready-made binary images. &lt;br /&gt;
Such an advanced use case will be addressed by re-compiling from source, after testing initial prototypes with the binary image based on glibc.&lt;br /&gt;
&lt;br /&gt;
=== Binary images ===&lt;br /&gt;
&lt;br /&gt;
The prototype will provide as a reference, for each targeted architecture:&lt;br /&gt;
* The root filesystem binary image, generated by building the &amp;lt;code&amp;gt;core-image-full-cmdline&amp;lt;/code&amp;gt; target.&lt;br /&gt;
* An image containing on-target development tools (e.g compiler, debugger)&lt;br /&gt;
* The corresponding SD card images to be booted through QEMU. Other boot methods will be possible, but will be outside of the scope of the reference distribution.&lt;br /&gt;
&lt;br /&gt;
=== Package feeds ===&lt;br /&gt;
&lt;br /&gt;
For each targeted architecture, several package feeds will be available to allow for bugfix or security updates or to extend the image with additional packages:&lt;br /&gt;
* Architecture independent feed&lt;br /&gt;
* Architecture dependent feed&lt;br /&gt;
* Machine dependent feed&lt;br /&gt;
See [https://docs.yoctoproject.org/dev-manual/packages.html#using-runtime-package-management Using Runtime Package Management] for details.&lt;br /&gt;
&lt;br /&gt;
The feeds for the first prototype will contain all the packages which are supported by the [https://git.yoctoproject.org/poky/tree/meta-poky/conf/distro/poky-altcfg.conf poky-altcfg] distribution as produced by the &amp;lt;code&amp;gt;bitbake world&amp;lt;/code&amp;gt; command for the set of layers supplied by Poky.&lt;br /&gt;
&lt;br /&gt;
=== Available reference package formats ===&lt;br /&gt;
&lt;br /&gt;
To keep the first prototype simple, we will only release images and package feeds based on the &amp;quot;ipk&amp;quot; format supported by [[wikipedia:opkg|opkg]] package manager.&lt;br /&gt;
&lt;br /&gt;
Of course, the OpenEmbedded build system also supports the [[wikipedia:Deb_(file_format)|deb]] and [[wikipedia:RPM_Package_Manager|rpm]] package formats, so users will be able to generate their own images and feeds based on these other formats.&lt;br /&gt;
&lt;br /&gt;
Another reason for not providing &amp;quot;deb&amp;quot; and &amp;quot;rpm&amp;quot; packages is that we do not want inexperienced users to expect to be able to grab and use such packages produced for regular Linux distributions (Debian, Fedora, etc.). Being built with different C library versions and toolchains, the corresponding binaries are most likely to be broken anyway.&lt;br /&gt;
&lt;br /&gt;
=== Available reference binary artifacts and deliverables ===&lt;br /&gt;
&lt;br /&gt;
The first prototype will make the below binary artifacts publicly available:&lt;br /&gt;
* Root filesystem images (as specified above)&lt;br /&gt;
* Binary package feeds (as specified above)&lt;br /&gt;
* [https://docs.yoctoproject.org/ref-manual/variables.html#term-PR PR] database, so that people can manage updates to packages, by importing the database in a local PR server.&lt;br /&gt;
* Prebuilt object data (&amp;quot;Shared State cache) through a public server (see [https://docs.yoctoproject.org/ref-manual/variables.html#term-SSTATE_MIRRORS SSTATE_MIRRORS]), to reuse binary output already built by the Yocto Project autobuilders, to reduce the compile time of additional packages.&lt;br /&gt;
* Hash Equivalence data through a public server (see [https://docs.yoctoproject.org/bitbake/2.4/bitbake-user-manual/bitbake-user-manual-ref-variables.html#term-BB_HASHSERVE_UPSTREAM BB_HASHSERVE_UPSTREAM]), to increase the reusability of prebuilt objects.&lt;br /&gt;
&lt;br /&gt;
Share State and Hash Equivalence data would be only useful to &amp;quot;Intermediate&amp;quot; and &amp;quot;Advanced&amp;quot; use cases, to rebuild parts or the whole system from source.&lt;br /&gt;
&lt;br /&gt;
Such artifacts will be served through a Content Delivery Network (CDN), to make sure that they can be downloaded fast enough from any location in the world, in a way that remains much faster than re-compiling such artifacts from sources.&lt;br /&gt;
&lt;br /&gt;
Those binaries should also be released along with:&lt;br /&gt;
* Sources corresponding to the software used to build the image, as produced by the [https://docs.yoctoproject.org/ref-manual/classes.html#ref-classes-archiver archiver] class. Unlike standard GNU/Linux distributions, we won&#039;t ship source package feeds (such as SRPMs)&amp;lt;ref&amp;gt;Only Source RPMs are supported by the [https://docs.yoctoproject.org/ref-manual/classes.html#ref-classes-archiver archiver] class. To obtain them, you need to set &amp;lt;code&amp;gt;INHERIT += &amp;quot;archiver&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;PACKAGE_CLASSES = &amp;quot;package_rpm&amp;quot;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;ARCHIVER_MODE[srpm] = &amp;quot;1&amp;quot;&amp;lt;/code&amp;gt;. The generation of source &amp;lt;code&amp;gt;deb&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ipk&amp;lt;/code&amp;gt; packages is currently not supported.&amp;lt;/ref&amp;gt;.&amp;lt;ref&amp;gt;The &amp;lt;code&amp;gt;-src&amp;lt;/code&amp;gt; packages which recipes can produce are only meant for debugging together with &amp;lt;code&amp;gt;-dbg&amp;lt;/code&amp;gt; packages. See [https://docs.yoctoproject.org/dev/ref-manual/variables.html#term-PACKAGE_DEBUG_SPLIT_STYLE PACKAGE_DEBUG_SPLIT_STYLE].&amp;lt;/ref&amp;gt;&lt;br /&gt;
* SPDX output for the initial image&lt;br /&gt;
* The build system and layer sources. A good fit would be Alex Kanavin&#039;s [https://patchwork.yoctoproject.org/project/oe-core/patch/20231107105844.712846-1-alex@linutronix.de/ build bundles].&lt;br /&gt;
&lt;br /&gt;
=== Defining policies and processes ===&lt;br /&gt;
&lt;br /&gt;
This reference binary distribution prototype will also drive the documentation of policies and process to address future work such as:&lt;br /&gt;
* What criteria should a new CPU architecture or platform tuning meet to be added / tested?&lt;br /&gt;
* What criteria should other layers meet to be tested, in addition to being already tested by the Autobuilder? Should these criteria only apply to specific recipes or to the entire layers containing them?&lt;br /&gt;
&lt;br /&gt;
See the [[#Policies and Processes | Policies and Processes]].&lt;br /&gt;
&lt;br /&gt;
=== Testing plans ===&lt;br /&gt;
&lt;br /&gt;
Here are the tests we plan to implement:&lt;br /&gt;
* Producing and testing binary images through the autobuilder&lt;br /&gt;
* Making nightly builds available to testers&lt;br /&gt;
* Testing that package updates apply successfully:&lt;br /&gt;
** Within the current stable branch (nanbield): from one release update to the next, and from the latest release update to the tip of the branch&lt;br /&gt;
** Between release branches: from the latest update to our latest LTS (kirkstone), to the latest update to the current stable release (nanbield).&lt;br /&gt;
* Testing that it&#039;s also possible to build and deploy packages from the meta-openembedded and meta-virtualization layers, as a way to assess the relevance of our policies and process for additional layers or recipes. This would also be a way to demonstrate the ability to build container images, which would be a great way to ship binary distributions.&lt;br /&gt;
&lt;br /&gt;
Here are other tests that would be worth implementing:&lt;br /&gt;
* Check that package upgrades don&#039;t cause configuration file changes to be lost. See [https://lore.kernel.org/openembedded-core/0e38566f-a1f9-4ebb-8492-2c50945eeeb4@gmail.com/T/#t this discussion].&lt;br /&gt;
* Check that the latest package upgrades successfully apply to any previous release, at least on the same branch. For example, upgrading directly from release x.y.n-2 to x.y may not work without going through x.y.n-1 as an intermediate. This could happen if a package has a really broken post-install script in n-2, which damage is repaired in n-1. Should n repair it too in case n-1 is skipped?&lt;br /&gt;
&lt;br /&gt;
We will work with recipe maintainers to publish fixes for update issues that testing will find in recipes. Each issue will be reported in Bugzilla.&lt;br /&gt;
&lt;br /&gt;
=== Open questions ===&lt;br /&gt;
&lt;br /&gt;
* Issues with Yocto Project being pedantic in its use of arch strings such as &amp;quot;intel-x86-64&amp;quot; instead of &amp;quot;x86-64&amp;quot;. This conflicts with typical use in the greater Linux and &amp;quot;binary&amp;quot; community, which may not recognize the &amp;quot;extended&amp;quot; arch strings. Examples: [https://github.com/openSUSE/libsolv/blob/master/src/poolarch.c#L23 libresolv] and [https://github.com/rpm5/libhif/blob/f9b798cadb6821f9cffd5c0331578b3f7c19d699/libdnf/dnf-context.c#L52 libdnf] (reported by Mark Asselstine).&lt;br /&gt;
&lt;br /&gt;
== Policies and Processes ==&lt;br /&gt;
&lt;br /&gt;
=== Criteria for adding and testing a new CPU architecture or platform tuning ===&lt;br /&gt;
&lt;br /&gt;
* Only tunes in Openembedded-Core should be supported.&lt;br /&gt;
&lt;br /&gt;
=== Process and policy for proposing adding new layers to the binary distro test artefacts process ===&lt;br /&gt;
&lt;br /&gt;
* Layers must be [https://docs.yoctoproject.org/current/dev-manual/layers.html#making-sure-your-layer-is-compatible-with-yocto-project Yocto Project Compatible]&lt;br /&gt;
* In addition, layers must be well written and be targetting project best practices like reproducibility, no network access outside fetching so mirroring and licensing auditing works and not skipping QA tests without good reason.&lt;br /&gt;
* Any dependency layers would already have to be included in the testing already or make a separate application for addition first.&lt;br /&gt;
* The layer being added must be suitably generic with a clear need/usage of the components provided by the layer in the ecosystem&lt;br /&gt;
* The layer maintainer must have a commitment to keeping recipe upgrades functional&lt;br /&gt;
* The proposal must make it clear which recipes within the layer are being proposed to be built&lt;br /&gt;
* Proposals would be made to the Yocto Project TSC covering the above topics&lt;br /&gt;
&lt;br /&gt;
=== Process and policy for proposing addition of a new MACHINE target ===&lt;br /&gt;
&lt;br /&gt;
* Layers to build the machine need to be [https://docs.yoctoproject.org/current/dev-manual/layers.html#making-sure-your-layer-is-compatible-with-yocto-project Yocto Project Compatible]&lt;br /&gt;
* Layers need to be buildable on the project autobuilder&lt;br /&gt;
* Needs to be Yocto Project membership sponsorship of the machine due to the project resource usage&lt;br /&gt;
* Needs to be a commitment to testing the images for the platform for releases and upgrades&lt;br /&gt;
* Proposals would be made to the Yocto Project TSC covering the above topics&lt;br /&gt;
&lt;br /&gt;
=== Process and policy for proposing addition of new recipe to the build ===&lt;br /&gt;
&lt;br /&gt;
* This process assumes the layer is already present but the recipe is not currently included in the test matrix&lt;br /&gt;
* The recipe would need to have demonstrated the ability to pass on target installation and upgrade&lt;br /&gt;
* Proposals would be made to the Yocto Project TSC covering the above topics&lt;br /&gt;
* The software needs to have a good maintenance track record including reasonable CVE response&lt;br /&gt;
* Note: The TSC is aiming to appoint a maintainer to take the lead on resolving binary distro testing issues and handling recipe addition requests.&lt;br /&gt;
&lt;br /&gt;
== Achievements ==&lt;br /&gt;
&lt;br /&gt;
=== Fixed bugs ===&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.yoctoproject.org/show_bug.cgi?id=15292 Bug 15292 - systemd-compat-units: error at package post-install time]&lt;br /&gt;
&lt;br /&gt;
=== Yocto Project Documentation improvements ===&lt;br /&gt;
&lt;br /&gt;
* [https://lore.kernel.org/yocto-docs/20231206155427.279612-1-michael.opdenacker@bootlin.com/T/#t Fixes and updates to the Test Environment Manual]&lt;br /&gt;
&lt;br /&gt;
== Missing features ==&lt;br /&gt;
&lt;br /&gt;
Not implemented yet:&lt;br /&gt;
* Ability to update the system SPDX description after installing extra packages or package updates. The current way SPDX is generated doesn&#039;t allow to generate &amp;lt;code&amp;gt;-spdx&amp;lt;/code&amp;gt; packages, which would have made this possible ([https://lists.openembedded.org/g/openembedded-architecture/message/1855 discussion]).&lt;br /&gt;
&lt;br /&gt;
== Out of scope ==&lt;br /&gt;
&lt;br /&gt;
Features outside of the scope of this effort, but definitely worth keeping track of for future efforts, or for people already maintaining binary distributions.&lt;br /&gt;
* Binary distribution installer: not absolutely necessary but users may expect one. For example the [https://www.yoedistro.org/ Yoe] distro offers one, and so does [https://www.raspberrypi.com/news/raspberry-pi-imager-imaging-utility/ Raspberry Pi].&lt;br /&gt;
&lt;br /&gt;
== Footnotes and references ==&lt;/div&gt;</summary>
		<author><name>Mark Hatle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Binary_Distro_Process&amp;diff=65960</id>
		<title>Binary Distro Process</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Binary_Distro_Process&amp;diff=65960"/>
		<updated>2019-12-20T16:57:50Z</updated>

		<summary type="html">&lt;p&gt;Mark Hatle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Using the Yocto Project to define and build a binary distribution is possible, but to be useful and maintainable requires careful considerations for the configuration of the configuration, build process, and test procedures.  This document will cover the general process, some of the recommended configurations and suggest where to insert your test procedures into the process.&lt;br /&gt;
&lt;br /&gt;
This page covers the high level architecture, along with various requirements that need to be considered to create a successful binary distribution.  The actual implementation of this architecture and requirements is left to future documents.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;High Level Architecture&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A binary distribution begins with creating a process that allows you to do consistent, deterministic builds.  This process becomes cyclical over the life of the product.  The general procedure involves: Setup the build (new configuration or restoration of the prior build configuration and artifacts), performing the build, verifying the results of the build, storing the artifacts for the next iteration, and publishing the artifacts for the end user to use.&lt;br /&gt;
&lt;br /&gt;
[[File:Binary_Workflow.JPG]]&lt;br /&gt;
&lt;br /&gt;
Everything starts with an overall system configuration.  The following items will need to be captured as part of the Configs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description of Process&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Layer Setup &amp;amp; Configuration&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Layer Setup&lt;br /&gt;
** URLs&lt;br /&gt;
** Commit IDs&lt;br /&gt;
* Configuration&lt;br /&gt;
** bblayers.conf&lt;br /&gt;
** local.conf&lt;br /&gt;
   USER_CLASSES += &amp;quot;reproducible_build&amp;quot;&lt;br /&gt;
   USER_CLASSES += &amp;quot;packagefeed-stability&amp;quot;&lt;br /&gt;
   USER_CLASSES += &amp;quot;buildhistory&amp;quot;&lt;br /&gt;
   DEFAULTTUNE = &amp;quot;&amp;lt;common tune&amp;gt;&amp;quot;&lt;br /&gt;
   DISTRO = &amp;quot;...&amp;quot;&lt;br /&gt;
   PACKAGE_CLASSES = &amp;quot;package_rpm&amp;quot;&lt;br /&gt;
   EXTRA_IMAGE_FEATURES – REMOVE debug-tweaks!&lt;br /&gt;
   BB_HASHSERVER = &amp;quot;auto&amp;quot;&lt;br /&gt;
   BB_SIGNATURE_HANDLER = &amp;quot;OEEquivHash&amp;quot;&lt;br /&gt;
   PRSERV_HOST = &amp;quot;localhost:0&amp;quot;&lt;br /&gt;
   INHERIT += &amp;quot;archiver&amp;quot;&lt;br /&gt;
   ARCHIVER_MODE[src] = &amp;quot;original&amp;quot;&lt;br /&gt;
   ARCHIVER_MODE[recipe] = &amp;quot;1&amp;quot;&lt;br /&gt;
   ARCHIVER_MODE[dumpdata] = &amp;quot;1&amp;quot;&lt;br /&gt;
   ARCHIVER_MODE[srpm] = &amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Build Project&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to get a consistent set of updated packages over the life of binary distribution, it is necessary to define which recipe targets will be built.  These should be defined and captured as part of the overall build configuration.  Each defined recipe target should be carefully considered, as it will be very difficult to remove a recipe target over the life of the binary distribution.&lt;br /&gt;
&lt;br /&gt;
The targets may include individual package recipes, packagegroup recipes, image recipes or even world builds.  It is recommended that packagegroups, and images are the usual defined targets.  If you are expecting to use world builds, it may be necessary to add specific recipe blacklists to remove packages that should not be part of the binary distribution.&lt;br /&gt;
&lt;br /&gt;
Removal of targets will result in binary packages that are stagnant, as there is no reasonable way to remove packages, as a distribution, once it has been made available to an user system.  There are ways to deprecate and replace installed software during an upgrade but these should only be used if specifically needed and will require extensive usage testing to ensure that they do not create any runtime / software upgrade issues.  These tests will need to be repeated for all future releases as well, possibly complicating testing.&lt;br /&gt;
&lt;br /&gt;
The results of the build will be a series of artifacts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Artifacts&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following artifacts will be generated and stored as part of the build:&lt;br /&gt;
&lt;br /&gt;
* Configuration&lt;br /&gt;
** Layer URLs/Commit IDs (or copies of)&lt;br /&gt;
** project configuration files (local.conf/bblayers.conf)&lt;br /&gt;
** List of target recipes for the build&lt;br /&gt;
*** This may be captured in various logs&lt;br /&gt;
* Log(s)&lt;br /&gt;
** Console Logs&lt;br /&gt;
** Individual Build Logs&lt;br /&gt;
** buildhistory&lt;br /&gt;
* Sources&lt;br /&gt;
** Downloads&lt;br /&gt;
** ARCHIVER output&lt;br /&gt;
* Sstate&lt;br /&gt;
** prserver database&lt;br /&gt;
** sstate-cache&lt;br /&gt;
** hash equivalency database&lt;br /&gt;
* Package Repository&lt;br /&gt;
** Repository Configuration&lt;br /&gt;
** RPM Packages &lt;br /&gt;
* images&lt;br /&gt;
* eSDK / SDK&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Test&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A test pass is then executed.  The first step should be an inspection of the logs (including build history) to verify the output is as expected.  Next a series of tests will need to verify that the image(s) boot, RPM packages can be installed, upgrades from the first and last releases work properly, etc.  Over time this test suite will need to be expanded to deal with issues found along the way. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Fix&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the case of a test failure, a fix for the failure will need to be created and committed.  Failed artifacts will be discarded (not released) as part of this.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Release&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the case of a test pass, assuming it has been decided to release, the artifacts are published.  Note, prior artifacts should never be removed from the publishing location.  Some artifacts, like build history may be determined to be internal only, but generally everything can be released.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Restore Last Released Artifacts&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Once a new build is determined to be needed, layers are updated, last released artifacts are restored and a new build is performed repeating the process.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;EOL&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Product End-Of-Life is declared and no further updates are released.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following requirements were identified as being needed for a binary distribution.  Note, a specific distribution may not require all of these items, but they should all be considered as part of this development.&lt;br /&gt;
&lt;br /&gt;
Stage 1 requirements:&lt;br /&gt;
&lt;br /&gt;
* Prebuilt/bootable image for each board&lt;br /&gt;
* A repeatable process to generate a binary package feeds&lt;br /&gt;
** Process documentation&lt;br /&gt;
*** Each step of the process, as implemented, should be documented to ensure it can be reproduced in the future&lt;br /&gt;
*** Initial configuration, target recipes, and specific commands should be included in this documentation&lt;br /&gt;
** Process shall be worked on in conjunction with the community&lt;br /&gt;
** Process shall allow updated packages to be built and released in addition to prior builds&lt;br /&gt;
* A mechanism to capture the source to binary build information so a user can transition from binary distribution to source distribution&lt;br /&gt;
** local.conf&lt;br /&gt;
** prserver&lt;br /&gt;
*** Must be configurable to NOT clash with the prserver values for the official feed&lt;br /&gt;
** sstate-cache&lt;br /&gt;
*** hash equivalency&lt;br /&gt;
** documentation&lt;br /&gt;
*** how to transition to custom builds&lt;br /&gt;
**** eSDK, full bitbake&lt;br /&gt;
*** how to publish custom components (feeds)&lt;br /&gt;
* Should use Yocto Project helper classes&lt;br /&gt;
** reproducible_build&lt;br /&gt;
** packagefeed-stability (may not be required with hash equivalency)&lt;br /&gt;
* Must be secure!&lt;br /&gt;
** The default image must not have predefined passwords!&lt;br /&gt;
*** Passwords, ssh keys, etc should not be predefined&lt;br /&gt;
*** A &#039;first boot&#039; mechanism to generate device specific information is needed&lt;br /&gt;
**** Host keys&lt;br /&gt;
**** root and/or user passwords&lt;br /&gt;
** All services (within reason) should be disabled by default&lt;br /&gt;
*** initial attack surface should be as small as reasonable&lt;br /&gt;
* Package feeds must be generic (reusable), and only &#039;specific&#039; when necessary (machine)&lt;br /&gt;
** Generic architecture feeds&lt;br /&gt;
*** x86_64&lt;br /&gt;
*** armv7 hard-float&lt;br /&gt;
*** armv8 -- aarch64&lt;br /&gt;
*** etc&lt;br /&gt;
** SOC_FAMILY specific feeds (as necessary)&lt;br /&gt;
*** device drivers and other soc family items for groups of boards&lt;br /&gt;
** MACHINE (board) specific feeds&lt;br /&gt;
*** machine specific packages&lt;br /&gt;
** Supports one or more custom feeds (as configured and enabled by the device admin)&lt;br /&gt;
* Package Feeds must be cumulative, permitting a user to revert to a specific version&lt;br /&gt;
* Downloadable image or other mechanism to quickly boot, without needing an SDK&lt;br /&gt;
** Must be preconfigured to use the package feeds (where applicable)&lt;br /&gt;
*** System upgrade should be able to be an automated process (cronjob)&lt;br /&gt;
*** Manual updates must be supported&lt;br /&gt;
* PSIRT / Security Response process&lt;br /&gt;
** Define and document product lifespan (EOL)&lt;br /&gt;
** CVE Monitoring&lt;br /&gt;
*** Product a report of public known issues, issues under investigation, and issues that have been fixed&lt;br /&gt;
*** SLA (Service Level Agreements) defined for security fix/release to binary feed&lt;br /&gt;
*** Method for outside people to notify us of security issues (may not  be CVE)&lt;br /&gt;
*** On-going kernel upgrades to deal with kernel defects&lt;br /&gt;
**** May be Yocto Project, LTS or &#039;master&#039; kernels&lt;br /&gt;
* Test strategy for validating binary packages&lt;br /&gt;
** Buildhistory used to allow architects/leads to verify components before release&lt;br /&gt;
** API / ABI comparison tooling to verify system is unlikely to break due to a change&lt;br /&gt;
*** http://github.com/lvc/abi-dumper&lt;br /&gt;
*** http://github.com/lvc/abi-compliance-checker&lt;br /&gt;
** Package upgrade testing&lt;br /&gt;
*** First release to current version(s)&lt;br /&gt;
*** Last release to current version(s)&lt;br /&gt;
*** Random intermediate release to current version(s)&lt;br /&gt;
*** Should execute ptest and oe qa tests and/or other automated tests after upgrading&lt;br /&gt;
**** Goal is as good or better then prior test pass&lt;br /&gt;
&lt;br /&gt;
Stage 2 requirements:&lt;br /&gt;
&lt;br /&gt;
* Cryptographic signed sstate-cache&lt;br /&gt;
** Sstate-cache objects are signed and verified prior to usage&lt;br /&gt;
* Cryptographic Signed packages and package feeds&lt;br /&gt;
** Package manager must validate signatures before installing&lt;br /&gt;
** User must be able to add their own signature to extend the package feeds&lt;br /&gt;
* Increase available packages to new components&lt;br /&gt;
&lt;br /&gt;
Possible future work, based on user feedback:&lt;br /&gt;
&lt;br /&gt;
* Desktop environment&lt;br /&gt;
** XFCE&lt;br /&gt;
** KDE&lt;br /&gt;
** Gnome&lt;br /&gt;
* Ability to migrate an image from one board to another&lt;br /&gt;
** Reconfigure feeds&lt;br /&gt;
** Load new boot image&lt;br /&gt;
** Swap to a new board&lt;br /&gt;
* Web interfaces to install packages and get a device package manifest&lt;br /&gt;
** May also involve remote device management&lt;br /&gt;
* Package feed viewer&lt;br /&gt;
** Something like rpmfind to view and inspect package info&lt;br /&gt;
* Increase available packages to new components&lt;/div&gt;</summary>
		<author><name>Mark Hatle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Binary_Distro_Process&amp;diff=65915</id>
		<title>Binary Distro Process</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Binary_Distro_Process&amp;diff=65915"/>
		<updated>2019-12-19T20:33:57Z</updated>

		<summary type="html">&lt;p&gt;Mark Hatle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Using the Yocto Project to define and build a binary distribution is possible, but to be useful and maintainable requires careful considerations for the configuration of the configuration, build process, and test procedures.  This document will cover the general process, some of the recommended configurations and suggest where to insert your test procedures into the process.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;High Level Architecture&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A binary distribution begins with creating a process that allows you to do consistent, deterministic builds.  This process becomes cyclical over the life of the product.  The general procedure involves: Setup the build (new configuration or restoration of the prior build configuration and artifacts), performing the build, verifying the results of the build, storing the artifacts for the next iteration, and publishing the artifacts for the end user to use.&lt;br /&gt;
&lt;br /&gt;
[[File:Binary_Workflow.JPG]]&lt;br /&gt;
&lt;br /&gt;
Everything starts with an overall system configuration.  The following items will need to be captured as part of the Configs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description of Process&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Layer Setup &amp;amp; Configuration&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Layer Setup&lt;br /&gt;
** URLs&lt;br /&gt;
** Commit IDs&lt;br /&gt;
* Configuration&lt;br /&gt;
** bblayers.conf&lt;br /&gt;
** local.conf&lt;br /&gt;
   USER_CLASSES += &amp;quot;reproducible_build&amp;quot;&lt;br /&gt;
   USER_CLASSES += &amp;quot;packagefeed-stability&amp;quot;&lt;br /&gt;
   USER_CLASSES += &amp;quot;buildhistory&amp;quot;&lt;br /&gt;
   DEFAULTTUNE = &amp;quot;&amp;lt;common tune&amp;gt;&amp;quot;&lt;br /&gt;
   DISTRO = &amp;quot;...&amp;quot;&lt;br /&gt;
   PACKAGE_CLASSES = &amp;quot;package_rpm&amp;quot;&lt;br /&gt;
   EXTRA_IMAGE_FEATURES – REMOVE debug-tweaks!&lt;br /&gt;
   BB_HASHSERVER = &amp;quot;auto&amp;quot;&lt;br /&gt;
   BB_SIGNATURE_HANDLER = &amp;quot;OEEquivHash&amp;quot;&lt;br /&gt;
   PRSERV_HOST = &amp;quot;localhost:0&amp;quot;&lt;br /&gt;
   INHERIT += &amp;quot;archiver&amp;quot;&lt;br /&gt;
   ARCHIVER_MODE[src] = &amp;quot;original&amp;quot;&lt;br /&gt;
   ARCHIVER_MODE[recipe] = &amp;quot;1&amp;quot;&lt;br /&gt;
   ARCHIVER_MODE[dumpdata] = &amp;quot;1&amp;quot;&lt;br /&gt;
   ARCHIVER_MODE[srpm] = &amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Build Project&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to get a consistent set of updated packages over the life of binary distribution, it is necessary to define which recipe targets will be built.  These should be defined and captured as part of the overall build configuration.  Each defined recipe target should be carefully considered, as it will be very difficult to remove a recipe target over the life of the binary distribution.&lt;br /&gt;
&lt;br /&gt;
The targets may include individual package recipes, packagegroup recipes, image recipes or even world builds.  It is recommended that packagegroups, and images are the usual defined targets.  If you are expecting to use world builds, it may be necessary to add specific recipe blacklists to remove packages that should not be part of the binary distribution.&lt;br /&gt;
&lt;br /&gt;
Removal of targets will result in binary packages that are stagnant, as there is no reasonable way to remove packages, as a distribution, once it has been made available to an user system.  There are ways to deprecate and replace installed software during an upgrade but these should only be used if specifically needed and will require extensive usage testing to ensure that they do not create any runtime / software upgrade issues.  These tests will need to be repeated for all future releases as well, possibly complicating testing.&lt;br /&gt;
&lt;br /&gt;
The results of the build will be a series of artifacts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Artifacts&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following artifacts will be generated and stored as part of the build:&lt;br /&gt;
&lt;br /&gt;
* Configuration&lt;br /&gt;
** Layer URLs/Commit IDs (or copies of)&lt;br /&gt;
** project configuration files (local.conf/bblayers.conf)&lt;br /&gt;
** List of target recipes for the build&lt;br /&gt;
*** This may be captured in various logs&lt;br /&gt;
* Log(s)&lt;br /&gt;
** Console Logs&lt;br /&gt;
** Individual Build Logs&lt;br /&gt;
** buildhistory&lt;br /&gt;
* Sources&lt;br /&gt;
** Downloads&lt;br /&gt;
** ARCHIVER output&lt;br /&gt;
* Sstate&lt;br /&gt;
** prserver database&lt;br /&gt;
** sstate-cache&lt;br /&gt;
** hash equivalency database&lt;br /&gt;
* Package Repository&lt;br /&gt;
** Repository Configuration&lt;br /&gt;
** RPM Packages &lt;br /&gt;
* images&lt;br /&gt;
* eSDK / SDK&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Test&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A test pass is then executed.  The first step should be an inspection of the logs (including build history) to verify the output is as expected.  Next a series of tests will need to verify that the image(s) boot, RPM packages can be installed, upgrades from the first and last releases work properly, etc.  Over time this test suite will need to be expanded to deal with issues found along the way. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Fix&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the case of a test failure, a fix for the failure will need to be created and committed.  Failed artifacts will be discarded (not released) as part of this.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Release&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the case of a test pass, assuming it has been decided to release, the artifacts are published.  Note, prior artifacts should never be removed from the publishing location.  Some artifacts, like build history may be determined to be internal only, but generally everything can be released.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Restore Last Released Artifacts&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Once a new build is determined to be needed, layers are updated, last released artifacts are restored and a new build is performed repeating the process.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;EOL&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Product End-Of-Life is declared and no further updates are released.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following requirements were identified as being needed for a binary distribution.  Note, a specific distribution may not require all of these items, but they should all be considered as part of this development.&lt;br /&gt;
&lt;br /&gt;
Stage 1 requirements:&lt;br /&gt;
&lt;br /&gt;
* Prebuilt/bootable image for each board&lt;br /&gt;
* A repeatable process to generate a binary package feeds&lt;br /&gt;
** Process documentation&lt;br /&gt;
*** Each step of the process, as implemented, should be documented to ensure it can be reproduced in the future&lt;br /&gt;
*** Initial configuration, target recipes, and specific commands should be included in this documentation&lt;br /&gt;
** Process shall be worked on in conjunction with the community&lt;br /&gt;
** Process shall allow updated packages to be built and released in addition to prior builds&lt;br /&gt;
* A mechanism to capture the source to binary build information so a user can transition from binary distribution to source distribution&lt;br /&gt;
** local.conf&lt;br /&gt;
** prserver&lt;br /&gt;
*** Must be configurable to NOT clash with the prserver values for the official feed&lt;br /&gt;
** sstate-cache&lt;br /&gt;
*** hash equivalency&lt;br /&gt;
** documentation&lt;br /&gt;
*** how to transition to custom builds&lt;br /&gt;
**** eSDK, full bitbake&lt;br /&gt;
*** how to puyblish custom components (feeds)&lt;br /&gt;
* Should use Yocto Project helper classes&lt;br /&gt;
** reproducible_build&lt;br /&gt;
** packagefeed-stability (may not be required with hash equivalency)&lt;br /&gt;
* Must be secure!&lt;br /&gt;
** The default image must not have predefined passwords!&lt;br /&gt;
*** Passwords, ssh keys, etc should not be predefined&lt;br /&gt;
*** A &#039;first boot&#039; mechanism to generate device specific information is needed&lt;br /&gt;
**** Host keys&lt;br /&gt;
**** root and/or user passwords&lt;br /&gt;
** All services (within reason) should be disabled by default&lt;br /&gt;
*** initial attack surface should be as small as reasonable&lt;br /&gt;
* Package feeds must be generic (reusable), and only &#039;specific&#039; when necessary (machine)&lt;br /&gt;
** Generic architecture feeds&lt;br /&gt;
*** x86_64&lt;br /&gt;
*** armv7 hard-float&lt;br /&gt;
*** armv8 -- aarch64&lt;br /&gt;
*** etc&lt;br /&gt;
** SOC_FAMILY specific feeds (as necessary)&lt;br /&gt;
*** device drivers and other soc family items for groups of boards&lt;br /&gt;
** MACHINE (board) specific feeds&lt;br /&gt;
*** machine specific packages&lt;br /&gt;
** Supports one or more custom feeds (as configured and enabled by the device admin)&lt;br /&gt;
* Package Feeds must be cumulative, permitting a user to revert to a specific version&lt;br /&gt;
* Downloadable image or other mechanism to quickly boot, without needing an SDK&lt;br /&gt;
** Must be preconfigured to use the package feeds (where applicable)&lt;br /&gt;
*** System upgrade should be able to be an automated process (cronjob)&lt;br /&gt;
*** Manual updates must be supported&lt;br /&gt;
* PSIRT / Security Response process&lt;br /&gt;
** Define and document product lifespan (EOL)&lt;br /&gt;
** CVE Monitoring&lt;br /&gt;
*** Product a report of public known issues, issues under investigation, and issues that have been fixed&lt;br /&gt;
*** SLA (Service Level Agreements) defined for security fix/release to binary feed&lt;br /&gt;
*** Method for outside people to notify us of security issues (may not  be CVE)&lt;br /&gt;
*** On-going kernel upgrades to deal with kernel defects&lt;br /&gt;
**** May be Yocto Project, LTS or &#039;master&#039; kernels&lt;br /&gt;
* Test strategy for validating binary packages&lt;br /&gt;
** Buildhistory used to allow architects/leads to verify components before release&lt;br /&gt;
** API / ABI comparison tooling to verify system is unlikely to break due to a change&lt;br /&gt;
*** http://github.com/lvc/abi-dumper&lt;br /&gt;
*** http://github.com/lvc/abi-compliance-checker&lt;br /&gt;
** Package upgrade testing&lt;br /&gt;
*** First release to current version(s)&lt;br /&gt;
*** Last release to current version(s)&lt;br /&gt;
*** Random intermediate release to current version(s)&lt;br /&gt;
*** Should execute ptest and oe qa tests and/or other automated tests after upgrading&lt;br /&gt;
**** Goal is as good or better then prior test pass&lt;br /&gt;
&lt;br /&gt;
Stage 2 requirements:&lt;br /&gt;
&lt;br /&gt;
* Cryptographic signed sstate-cache&lt;br /&gt;
** Sstate-cache objects are signed and verified prior to usage&lt;br /&gt;
* Cryptographic Signed packages and package feeds&lt;br /&gt;
** Package manager must validate signatures before installing&lt;br /&gt;
** User must be able to add their own signature to extend the package feeds&lt;br /&gt;
* Increase available packages to new components&lt;br /&gt;
&lt;br /&gt;
Possible future work, based on user feedback:&lt;br /&gt;
&lt;br /&gt;
* Desktop environment&lt;br /&gt;
** XFCE&lt;br /&gt;
** KDE&lt;br /&gt;
** Gnome&lt;br /&gt;
* Ability to migrate an image from one board to another&lt;br /&gt;
** Reconfigure feeds&lt;br /&gt;
** Load new boot image&lt;br /&gt;
** Swap to a new board&lt;br /&gt;
* Web interfaces to install packages and get a device package manifest&lt;br /&gt;
** May also involve remote device management&lt;br /&gt;
* Package feed viewer&lt;br /&gt;
** Something like rpmfind to view and inspect package info&lt;br /&gt;
* Increase available packages to new components&lt;/div&gt;</summary>
		<author><name>Mark Hatle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Binary_Distro_Process&amp;diff=65881</id>
		<title>Binary Distro Process</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Binary_Distro_Process&amp;diff=65881"/>
		<updated>2019-12-18T15:45:50Z</updated>

		<summary type="html">&lt;p&gt;Mark Hatle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Using the Yocto Project to define and build a binary distribution is possible, but to be useful and maintainable requires careful considerations for the configuration of the configuration, build process, and test procedures.  This document will cover the general process, some of the recommended configurations and suggest where to insert your test procedures into the process.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;High Level Architecture&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A binary distribution begins with creating a process that allows you to do consistent, deterministic builds.  This process becomes cyclical over the life of the product.  The general procedure involves: Setup the build (new configuration or restoration of the prior build configuration and artifacts), performing the build, verifying the results of the build, storing the artifacts for the next iteration, and publishing the artifacts for the end user to use.&lt;br /&gt;
&lt;br /&gt;
[[File:Binary_Workflow.JPG]]&lt;br /&gt;
Everything starts with an overall system configuration.  The following items will need to be captured as part of the Configs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description of Process&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Layer Setup &amp;amp; Configuration&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Layer Setup&lt;br /&gt;
** URLs&lt;br /&gt;
** Commit IDs&lt;br /&gt;
* Configuration&lt;br /&gt;
** bblayers.conf&lt;br /&gt;
** local.conf&lt;br /&gt;
   USER_CLASSES += &amp;quot;reproducible_build&amp;quot;&lt;br /&gt;
   USER_CLASSES += &amp;quot;packagefeed-stability&amp;quot;&lt;br /&gt;
   USER_CLASSES += &amp;quot;buildhistory&amp;quot;&lt;br /&gt;
   DEFAULTTUNE = &amp;quot;&amp;lt;common tune&amp;gt;&amp;quot;&lt;br /&gt;
   DISTRO = &amp;quot;...&amp;quot;&lt;br /&gt;
   PACKAGE_CLASSES = &amp;quot;package_rpm&amp;quot;&lt;br /&gt;
   EXTRA_IMAGE_FEATURES – REMOVE debug-tweaks!&lt;br /&gt;
   BB_HASHSERVER = &amp;quot;auto&amp;quot;&lt;br /&gt;
   BB_SIGNATURE_HANDLER = &amp;quot;OEEquivHash&amp;quot;&lt;br /&gt;
   PRSERV_HOST = &amp;quot;localhost:0&amp;quot;&lt;br /&gt;
   INHERIT += &amp;quot;archiver&amp;quot;&lt;br /&gt;
   ARCHIVER_MODE[src] = &amp;quot;original&amp;quot;&lt;br /&gt;
   ARCHIVER_MODE[recipe] = &amp;quot;1&amp;quot;&lt;br /&gt;
   ARCHIVER_MODE[dumpdata] = &amp;quot;1&amp;quot;&lt;br /&gt;
   ARCHIVER_MODE[srpm] = &amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Build Project&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to get a consistent set of updated packages over the life of binary distribution, it is necessary to define which recipe targets will be built.  These should be defined and captured as part of the overall build configuration.  Each defined recipe target should be carefully considered, as it will be very difficult to remove a recipe target over the life of the binary distribution.&lt;br /&gt;
&lt;br /&gt;
The targets may include individual package recipes, packagegroup recipes, image recipes or even world builds.  It is recommended that packagegroups, and images are the usual defined targets.  If you are expecting to use world builds, it may be necessary to add specific recipe blacklists to remove packages that should not be part of the binary distribution.&lt;br /&gt;
&lt;br /&gt;
Removal of targets will result in binary packages that are stagnant, as there is no reasonable way to remove packages, as a distribution, once it has been made available to an user system.  There are ways to deprecate and replace installed software during an upgrade but these should only be used if specifically needed and will require extensive usage testing to ensure that they do not create any runtime / software upgrade issues.  These tests will need to be repeated for all future releases as well, possibly complicating testing.&lt;br /&gt;
&lt;br /&gt;
The results of the build will be a series of artifacts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Artifacts&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following artifacts will be generated and stored as part of the build:&lt;br /&gt;
&lt;br /&gt;
* Configuration&lt;br /&gt;
** Layer URLs/Commit IDs (or copies of)&lt;br /&gt;
** project configuration files (local.conf/bblayers.conf)&lt;br /&gt;
** List of target recipes for the build&lt;br /&gt;
*** This may be captured in various logs&lt;br /&gt;
* Log(s)&lt;br /&gt;
** Console Logs&lt;br /&gt;
** Individual Build Logs&lt;br /&gt;
** buildhistory&lt;br /&gt;
* Sources&lt;br /&gt;
** Downloads&lt;br /&gt;
** ARCHIVER output&lt;br /&gt;
* Sstate&lt;br /&gt;
** prserver database&lt;br /&gt;
** sstate-cache&lt;br /&gt;
** hash equivalency database&lt;br /&gt;
* Package Repository&lt;br /&gt;
** Repository Configuration&lt;br /&gt;
** RPM Packages &lt;br /&gt;
* images&lt;br /&gt;
* eSDK / SDK&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Test&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A test pass is then executed.  The first step should be an inspection of the logs (including build history) to verify the output is as expected.  Next a series of tests will need to verify that the image(s) boot, RPM packages can be installed, upgrades from the first and last releases work properly, etc.  Over time this test suite will need to be expanded to deal with issues found along the way. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Fix&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the case of a test failure, a fix for the failure will need to be created and committed.  Failed artifacts will be discarded (not released) as part of this.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Release&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the case of a test pass, assuming it has been decided to release, the artifacts are published.  Note, prior artifacts should never be removed from the publishing location.  Some artifacts, like build history may be determined to be internal only, but generally everything can be released.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Restore Last Released Artifacts&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Once a new build is determined to be needed, layers are updated, last released artifacts are restored and a new build is performed repeating the process.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;EOL&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Product End-Of-Life is declared and no further updates are released.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following requirements were identified as being needed for a binary distribution.  Note, a specific distribution may not require all of these items, but they should all be considered as part of this development.&lt;br /&gt;
&lt;br /&gt;
Stage 1 requirements:&lt;br /&gt;
&lt;br /&gt;
* Prebuilt/bootable image for each board&lt;br /&gt;
* A repeatable process to generate a binary package feeds&lt;br /&gt;
** Process documentation&lt;br /&gt;
*** Each step of the process, as implemented, should be documented to ensure it can be reproduced in the future&lt;br /&gt;
*** Initial configuration, target recipes, and specific commands should be included in this documentation&lt;br /&gt;
** Process shall be worked on in conjunction with the community&lt;br /&gt;
** Process shall allow updated packages to be built and released in addition to prior builds&lt;br /&gt;
* A mechanism to capture the source to binary build information so a user can transition from binary distribution to source distribution&lt;br /&gt;
** local.conf&lt;br /&gt;
** prserver&lt;br /&gt;
*** Must be configurable to NOT clash with the prserver values for the official feed&lt;br /&gt;
** sstate-cache&lt;br /&gt;
*** hash equivalency&lt;br /&gt;
** documentation&lt;br /&gt;
*** how to transition to custom builds&lt;br /&gt;
**** eSDK, full bitbake&lt;br /&gt;
*** how to puyblish custom components (feeds)&lt;br /&gt;
* Should use Yocto Project helper classes&lt;br /&gt;
** reproducible_build&lt;br /&gt;
** packagefeed-stability (may not be required with hash equivalency)&lt;br /&gt;
* Must be secure!&lt;br /&gt;
** The default image must not have predefined passwords!&lt;br /&gt;
*** Passwords, ssh keys, etc should not be predefined&lt;br /&gt;
*** A &#039;first boot&#039; mechanism to generate device specific information is needed&lt;br /&gt;
**** Host keys&lt;br /&gt;
**** root and/or user passwords&lt;br /&gt;
** All services (within reason) should be disabled by default&lt;br /&gt;
*** initial attack surface should be as small as reasonable&lt;br /&gt;
* Package feeds must be generic (reusable), and only &#039;specific&#039; when necessary (machine)&lt;br /&gt;
** Generic architecture feeds&lt;br /&gt;
*** x86_64&lt;br /&gt;
*** armv7 hard-float&lt;br /&gt;
*** armv8 -- aarch64&lt;br /&gt;
*** etc&lt;br /&gt;
** SOC_FAMILY specific feeds (as necessary)&lt;br /&gt;
*** device drivers and other soc family items for groups of boards&lt;br /&gt;
** MACHINE (board) specific feeds&lt;br /&gt;
*** machine specific packages&lt;br /&gt;
** Supports one or more custom feeds (as configured and enabled by the device admin)&lt;br /&gt;
* Package Feeds must be cumulative, permitting a user to revert to a specific version&lt;br /&gt;
* Downloadable image or other mechanism to quickly boot, without needing an SDK&lt;br /&gt;
** Must be preconfigured to use the package feeds (where applicable)&lt;br /&gt;
*** System upgrade should be able to be an automated process (cronjob)&lt;br /&gt;
*** Manual updates must be supported&lt;br /&gt;
* PSIRT / Security Response process&lt;br /&gt;
** Define and document product lifespan (EOL)&lt;br /&gt;
** CVE Monitoring&lt;br /&gt;
*** Product a report of public known issues, issues under investigation, and issues that have been fixed&lt;br /&gt;
*** SLA (Service Level Agreements) defined for security fix/release to binary feed&lt;br /&gt;
*** Method for outside people to notify us of security issues (may not  be CVE)&lt;br /&gt;
*** On-going kernel upgrades to deal with kernel defects&lt;br /&gt;
**** May be Yocto Project, LTS or &#039;master&#039; kernels&lt;br /&gt;
* Test strategy for validating binary packages&lt;br /&gt;
** Buildhistory used to allow architects/leads to verify components before release&lt;br /&gt;
** API / ABI comparison tooling to verify system is unlikely to break due to a change&lt;br /&gt;
*** http://github.com/lvc/abi-dumper&lt;br /&gt;
*** http://github.com/lvc/abi-compliance-checker&lt;br /&gt;
** Package upgrade testing&lt;br /&gt;
*** First release to current version(s)&lt;br /&gt;
*** Last release to current version(s)&lt;br /&gt;
*** Random intermediate release to current version(s)&lt;br /&gt;
*** Should execute ptest and oe qa tests and/or other automated tests after upgrading&lt;br /&gt;
**** Goal is as good or better then prior test pass&lt;br /&gt;
&lt;br /&gt;
Stage 2 requirements:&lt;br /&gt;
&lt;br /&gt;
* Cryptographic signed sstate-cache&lt;br /&gt;
** Sstate-cache objects are signed and verified prior to usage&lt;br /&gt;
* Cryptographic Signed packages and package feeds&lt;br /&gt;
** Package manager must validate signatures before installing&lt;br /&gt;
** User must be able to add their own signature to extend the package feeds&lt;br /&gt;
* Increase available packages to new components&lt;br /&gt;
&lt;br /&gt;
Possible future work, based on user feedback:&lt;br /&gt;
&lt;br /&gt;
* Desktop environment&lt;br /&gt;
** XFCE&lt;br /&gt;
** KDE&lt;br /&gt;
** Gnome&lt;br /&gt;
* Ability to migrate an image from one board to another&lt;br /&gt;
** Reconfigure feeds&lt;br /&gt;
** Load new boot image&lt;br /&gt;
** Swap to a new board&lt;br /&gt;
* Web interfaces to install packages and get a device package manifest&lt;br /&gt;
** May also involve remote device management&lt;br /&gt;
* Package feed viewer&lt;br /&gt;
** Something like rpmfind to view and inspect package info&lt;br /&gt;
* Increase available packages to new components&lt;/div&gt;</summary>
		<author><name>Mark Hatle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Binary_Distro_Process&amp;diff=65880</id>
		<title>Binary Distro Process</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Binary_Distro_Process&amp;diff=65880"/>
		<updated>2019-12-18T15:30:11Z</updated>

		<summary type="html">&lt;p&gt;Mark Hatle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Using the Yocto Project to define and build a binary distribution is possible, but to be useful and maintainable requires careful considerations for the configuration of the configuration, build process, and test procedures.  This document will cover the general process, some of the recommended configurations and suggest where to insert your test procedures into the process.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;High Level Architecture&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A binary distribution begins with creating a process that allows you to do consistent, deterministic builds.  This process becomes cyclical over the life of the product.  The general procedure involves: Setup the build (new configuration or restoration of the prior build configuration and artifacts), performing the build, verifying the results of the build, storing the artifacts for the next iteration, and publishing the artifacts for the end user to use.&lt;br /&gt;
&lt;br /&gt;
[[File:Binary_Workflow.JPG]]&lt;br /&gt;
Everything starts with an overall system configuration.  The following items will need to be captured as part of the Configs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description of Process&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Layer Setup &amp;amp; Configuration&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Layer Setup&lt;br /&gt;
** URLs&lt;br /&gt;
** Commit IDs&lt;br /&gt;
* Configuration&lt;br /&gt;
** bblayers.conf&lt;br /&gt;
** local.conf&lt;br /&gt;
   USER_CLASSES += &amp;quot;reproducible_build&amp;quot;&lt;br /&gt;
   USER_CLASSES += &amp;quot;packagefeed-stability&amp;quot;&lt;br /&gt;
   USER_CLASSES += &amp;quot;buildhistory&amp;quot;&lt;br /&gt;
   DEFAULTTUNE = &amp;quot;&amp;lt;common tune&amp;gt;&amp;quot;&lt;br /&gt;
   DISTRO = &amp;quot;...&amp;quot;&lt;br /&gt;
   PACKAGE_CLASSES = &amp;quot;package_rpm&amp;quot;&lt;br /&gt;
   EXTRA_IMAGE_FEATURES – REMOVE debug-tweaks!&lt;br /&gt;
   BB_HASHSERVER = &amp;quot;auto&amp;quot;&lt;br /&gt;
   BB_SIGNATURE_HANDLER = &amp;quot;OEEquivHash&amp;quot;&lt;br /&gt;
   PRSERV_HOST = &amp;quot;localhost:0&amp;quot;&lt;br /&gt;
   INHERIT += &amp;quot;archiver&amp;quot;&lt;br /&gt;
   ARCHIVER_MODE[src] = &amp;quot;original&amp;quot;&lt;br /&gt;
   ARCHIVER_MODE[recipe] = &amp;quot;1&amp;quot;&lt;br /&gt;
   ARCHIVER_MODE[dumpdata] = &amp;quot;1&amp;quot;&lt;br /&gt;
   ARCHIVER_MODE[srpm] = &amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Build Project&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The project is built using a standard process/target.  Depending on the purposes of the binary distribution, it may require one or more recipe targets or even a world build.&lt;br /&gt;
&lt;br /&gt;
The results of the build will be a series of artifacts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Artifacts&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following artifacts will be generated and stored as part of the build:&lt;br /&gt;
&lt;br /&gt;
* Configuration&lt;br /&gt;
** Layer URLs/Commit IDs (or copies of)&lt;br /&gt;
** project configuration files (local.conf/bblayers.conf)&lt;br /&gt;
* Log(s)&lt;br /&gt;
** Console Logs&lt;br /&gt;
** Individual Build Logs&lt;br /&gt;
** buildhistory&lt;br /&gt;
* Sources&lt;br /&gt;
** Downloads&lt;br /&gt;
** ARCHIVER output&lt;br /&gt;
* Sstate&lt;br /&gt;
** prserver database&lt;br /&gt;
** sstate-cache&lt;br /&gt;
** hash equivalency database&lt;br /&gt;
* Package Repository&lt;br /&gt;
** Repository Configuration&lt;br /&gt;
** RPM Packages &lt;br /&gt;
* images&lt;br /&gt;
* eSDK / SDK&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Test&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A test pass is then executed.  The first step should be an inspection of the logs (including build history) to verify the output is as expected.  Next a series of tests will need to verify that the image(s) boot, RPM packages can be installed, upgrades from the first and last releases work properly, etc.  Over time this test suite will need to be expanded to deal with issues found along the way. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Fix&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the case of a test failure, a fix for the failure will need to be created and committed.  Failed artifacts will be discarded (not released) as part of this.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Release&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the case of a test pass, assuming it has been decided to release, the artifacts are published.  Note, prior artifacts should never be removed from the publishing location.  Some artifacts, like build history may be determined to be internal only, but generally everything can be released.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Restore Last Released Artifacts&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Once a new build is determined to be needed, layers are updated, last released artifacts are restored and a new build is performed repeating the process.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;EOL&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Product End-Of-Life is declared and no further updates are released.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following requirements were identified as being needed for a binary distribution.  Note, a specific distribution may not require all of these items, but they should all be considered as part of this development.&lt;br /&gt;
&lt;br /&gt;
Stage 1 requirements:&lt;br /&gt;
&lt;br /&gt;
* Prebuilt/bootable image for each board&lt;br /&gt;
* A repeatable process to generate a binary package feeds&lt;br /&gt;
** Process shall be worked on in conjunction with the community&lt;br /&gt;
** Process shall allow updated packages to be built and released in addition to prior builds&lt;br /&gt;
* A mechanism to capture the source to binary build information so a user can transition from binary distribution to source distribution&lt;br /&gt;
** local.conf&lt;br /&gt;
** prserver&lt;br /&gt;
*** Must be configurable to NOT clash with the prserver values for the official feed&lt;br /&gt;
** sstate-cache&lt;br /&gt;
*** hash equivalency&lt;br /&gt;
** documentation&lt;br /&gt;
*** how to transition to custom builds&lt;br /&gt;
**** eSDK, full bitbake&lt;br /&gt;
*** how to puyblish custom components (feeds)&lt;br /&gt;
* Should use Yocto Project helper classes&lt;br /&gt;
** reproducible_build&lt;br /&gt;
** packagefeed-stability (may not be required with hash equivalency)&lt;br /&gt;
* Must be secure!&lt;br /&gt;
** The default image must not have predefined passwords!&lt;br /&gt;
*** Passwords, ssh keys, etc should not be predefined&lt;br /&gt;
*** A &#039;first boot&#039; mechanism to generate device specific information is needed&lt;br /&gt;
**** Host keys&lt;br /&gt;
**** root and/or user passwords&lt;br /&gt;
** All services (within reason) should be disabled by default&lt;br /&gt;
*** initial attack surface should be as small as reasonable&lt;br /&gt;
* Package feeds must be generic (reusable), and only &#039;specific&#039; when necessary (machine)&lt;br /&gt;
** Generic architecture feeds&lt;br /&gt;
*** x86_64&lt;br /&gt;
*** armv7 hard-float&lt;br /&gt;
*** armv8 -- aarch64&lt;br /&gt;
*** etc&lt;br /&gt;
** SOC_FAMILY specific feeds (as necessary)&lt;br /&gt;
*** device drivers and other soc family items for groups of boards&lt;br /&gt;
** MACHINE (board) specific feeds&lt;br /&gt;
*** machine specific packages&lt;br /&gt;
** Supports one or more custom feeds (as configured and enabled by the device admin)&lt;br /&gt;
* Package Feeds must be cumulative, permitting a user to revert to a specific version&lt;br /&gt;
* Downloadable image or other mechanism to quickly boot, without needing an SDK&lt;br /&gt;
** Must be preconfigured to use the package feeds (where applicable)&lt;br /&gt;
*** System upgrade should be able to be an automated process (cronjob)&lt;br /&gt;
*** Manual updates must be supported&lt;br /&gt;
* PSIRT / Security Response process&lt;br /&gt;
** Define and document product lifespan (EOL)&lt;br /&gt;
** CVE Monitoring&lt;br /&gt;
*** Product a report of public known issues, issues under investigation, and issues that have been fixed&lt;br /&gt;
*** SLA (Service Level Agreements) defined for security fix/release to binary feed&lt;br /&gt;
*** Method for outside people to notify us of security issues (may not  be CVE)&lt;br /&gt;
*** On-going kernel upgrades to deal with kernel defects&lt;br /&gt;
**** May be Yocto Project, LTS or &#039;master&#039; kernels&lt;br /&gt;
* Test strategy for validating binary packages&lt;br /&gt;
** Buildhistory used to allow architects/leads to verify components before release&lt;br /&gt;
** API / ABI comparison tooling to verify system is unlikely to break due to a change&lt;br /&gt;
*** http://github.com/lvc/abi-dumper&lt;br /&gt;
*** http://github.com/lvc/abi-compliance-checker&lt;br /&gt;
** Package upgrade testing&lt;br /&gt;
*** First release to current version(s)&lt;br /&gt;
*** Last release to current version(s)&lt;br /&gt;
*** Random intermediate release to current version(s)&lt;br /&gt;
*** Should execute ptest and oe qa tests and/or other automated tests after upgrading&lt;br /&gt;
**** Goal is as good or better then prior test pass&lt;br /&gt;
&lt;br /&gt;
Stage 2 requirements:&lt;br /&gt;
&lt;br /&gt;
* Cryptographic signed sstate-cache&lt;br /&gt;
** Sstate-cache objects are signed and verified prior to usage&lt;br /&gt;
* Cryptographic Signed packages and package feeds&lt;br /&gt;
** Package manager must validate signatures before installing&lt;br /&gt;
** User must be able to add their own signature to extend the package feeds&lt;br /&gt;
* Increase available packages to new components&lt;br /&gt;
&lt;br /&gt;
Possible future work, based on user feedback:&lt;br /&gt;
&lt;br /&gt;
* Desktop environment&lt;br /&gt;
** XFCE&lt;br /&gt;
** KDE&lt;br /&gt;
** Gnome&lt;br /&gt;
* Ability to migrate an image from one board to another&lt;br /&gt;
** Reconfigure feeds&lt;br /&gt;
** Load new boot image&lt;br /&gt;
** Swap to a new board&lt;br /&gt;
* Web interfaces to install packages and get a device package manifest&lt;br /&gt;
** May also involve remote device management&lt;br /&gt;
* Package feed viewer&lt;br /&gt;
** Something like rpmfind to view and inspect package info&lt;br /&gt;
* Increase available packages to new components&lt;/div&gt;</summary>
		<author><name>Mark Hatle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Binary_Distro_Process&amp;diff=65538</id>
		<title>Binary Distro Process</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Binary_Distro_Process&amp;diff=65538"/>
		<updated>2019-12-13T18:43:48Z</updated>

		<summary type="html">&lt;p&gt;Mark Hatle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;High Level Architecture&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A binary distribution begins with creating a process that allows you to do consistent, deterministic builds.  This process becomes cyclical over the life of the product.  The general procedure involves: Setup the build (new configuration or restoration of the prior build configuration and artifacts), performing the build, verifying the results of the build, storing the artifacts for the next iteration, and publishing the artifacts for the end user to use.&lt;br /&gt;
&lt;br /&gt;
[[File:Binary_Workflow.JPG]]&lt;br /&gt;
Everything starts with an overall system configuration.  The following items will need to be captured as part of the Configs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description of Process&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Layer Setup &amp;amp; Configuration&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Layer Setup&lt;br /&gt;
** URLs&lt;br /&gt;
** Commit IDs&lt;br /&gt;
* Configuration&lt;br /&gt;
** bblayers.conf&lt;br /&gt;
** local.conf&lt;br /&gt;
   USER_CLASSES += &amp;quot;reproducible_build&amp;quot;&lt;br /&gt;
   USER_CLASSES += &amp;quot;packagefeed-stability&amp;quot;&lt;br /&gt;
   USER_CLASSES += &amp;quot;buildhistory&amp;quot;&lt;br /&gt;
   DEFAULTTUNE = &amp;quot;&amp;lt;common tune&amp;gt;&amp;quot;&lt;br /&gt;
   DISTRO = &amp;quot;...&amp;quot;&lt;br /&gt;
   PACKAGE_CLASSES = &amp;quot;package_rpm&amp;quot;&lt;br /&gt;
   EXTRA_IMAGE_FEATURES – REMOVE debug-tweaks!&lt;br /&gt;
   BB_HASHSERVER = &amp;quot;auto&amp;quot;&lt;br /&gt;
   BB_SIGNATURE_HANDLER = &amp;quot;OEEquivHash&amp;quot;&lt;br /&gt;
   PRSERV_HOST = &amp;quot;localhost:0&amp;quot;&lt;br /&gt;
   INHERIT += &amp;quot;archiver&amp;quot;&lt;br /&gt;
   ARCHIVER_MODE[src] = &amp;quot;original&amp;quot;&lt;br /&gt;
   ARCHIVER_MODE[recipe] = &amp;quot;1&amp;quot;&lt;br /&gt;
   ARCHIVER_MODE[dumpdata] = &amp;quot;1&amp;quot;&lt;br /&gt;
   ARCHIVER_MODE[srpm] = &amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Build Project&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The project is built using a standard process/target.  Depending on the purposes of the binary distribution, it may require one or more recipe targets or even a world build.&lt;br /&gt;
&lt;br /&gt;
The results of the build will be a series of artifacts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Artifacts&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following artifacts will be generated and stored as part of the build:&lt;br /&gt;
&lt;br /&gt;
* Configuration&lt;br /&gt;
** Layer URLs/Commit IDs (or copies of)&lt;br /&gt;
** project configuration files (local.conf/bblayers.conf)&lt;br /&gt;
* Log(s)&lt;br /&gt;
** Console Logs&lt;br /&gt;
** Individual Build Logs&lt;br /&gt;
** buildhistory&lt;br /&gt;
* Sources&lt;br /&gt;
** Downloads&lt;br /&gt;
** ARCHIVER output&lt;br /&gt;
* Sstate&lt;br /&gt;
** prserver database&lt;br /&gt;
** sstate-cache&lt;br /&gt;
** hash equivalency database&lt;br /&gt;
* Package Repository&lt;br /&gt;
** Repository Configuration&lt;br /&gt;
** RPM Packages &lt;br /&gt;
* images&lt;br /&gt;
* eSDK / SDK&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Test&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A test pass is then executed.  The first step should be an inspection of the logs (including build history) to verify the output is as expected.  Next a series of tests will need to verify that the image(s) boot, RPM packages can be installed, upgrades from the first and last releases work properly, etc.  Over time this test suite will need to be expanded to deal with issues found along the way. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Fix&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the case of a test failure, a fix for the failure will need to be created and committed.  Failed artifacts will be discarded (not released) as part of this.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Release&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the case of a test pass, assuming it has been decided to release, the artifacts are published.  Note, prior artifacts should never be removed from the publishing location.  Some artifacts, like build history may be determined to be internal only, but generally everything can be released.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Restore Last Released Artifacts&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Once a new build is determined to be needed, layers are updated, last released artifacts are restored and a new build is performed repeating the process.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;EOL&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Product End-Of-Life is declared and no further updates are released.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following requirements were identified as being needed for a binary distribution.  Note, a specific distribution may not require all of these items, but they should all be considered as part of this development.&lt;br /&gt;
&lt;br /&gt;
Stage 1 requirements:&lt;br /&gt;
&lt;br /&gt;
* Prebuilt/bootable image for each board&lt;br /&gt;
* A repeatable process to generate a binary package feeds&lt;br /&gt;
** Process shall be worked on in conjunction with the community&lt;br /&gt;
** Process shall allow updated packages to be built and released in addition to prior builds&lt;br /&gt;
* A mechanism to capture the source to binary build information so a user can transition from binary distribution to source distribution&lt;br /&gt;
** local.conf&lt;br /&gt;
** prserver&lt;br /&gt;
*** Must be configurable to NOT clash with the prserver values for the official feed&lt;br /&gt;
** sstate-cache&lt;br /&gt;
*** hash equivalency&lt;br /&gt;
** documentation&lt;br /&gt;
*** how to transition to custom builds&lt;br /&gt;
**** eSDK, full bitbake&lt;br /&gt;
*** how to puyblish custom components (feeds)&lt;br /&gt;
* Should use Yocto Project helper classes&lt;br /&gt;
** reproducible_build&lt;br /&gt;
** packagefeed-stability (may not be required with hash equivalency)&lt;br /&gt;
* Must be secure!&lt;br /&gt;
** The default image must not have predefined passwords!&lt;br /&gt;
*** Passwords, ssh keys, etc should not be predefined&lt;br /&gt;
*** A &#039;first boot&#039; mechanism to generate device specific information is needed&lt;br /&gt;
**** Host keys&lt;br /&gt;
**** root and/or user passwords&lt;br /&gt;
** All services (within reason) should be disabled by default&lt;br /&gt;
*** initial attack surface should be as small as reasonable&lt;br /&gt;
* Package feeds must be generic (reusable), and only &#039;specific&#039; when necessary (machine)&lt;br /&gt;
** Generic architecture feeds&lt;br /&gt;
*** x86_64&lt;br /&gt;
*** armv7 hard-float&lt;br /&gt;
*** armv8 -- aarch64&lt;br /&gt;
*** etc&lt;br /&gt;
** SOC_FAMILY specific feeds (as necessary)&lt;br /&gt;
*** device drivers and other soc family items for groups of boards&lt;br /&gt;
** MACHINE (board) specific feeds&lt;br /&gt;
*** machine specific packages&lt;br /&gt;
** Supports one or more custom feeds (as configured and enabled by the device admin)&lt;br /&gt;
* Package Feeds must be cumulative, permitting a user to revert to a specific version&lt;br /&gt;
* Downloadable image or other mechanism to quickly boot, without needing an SDK&lt;br /&gt;
** Must be preconfigured to use the package feeds (where applicable)&lt;br /&gt;
*** System upgrade should be able to be an automated process (cronjob)&lt;br /&gt;
*** Manual updates must be supported&lt;br /&gt;
* PSIRT / Security Response process&lt;br /&gt;
** Define and document product lifespan (EOL)&lt;br /&gt;
** CVE Monitoring&lt;br /&gt;
*** Product a report of public known issues, issues under investigation, and issues that have been fixed&lt;br /&gt;
*** SLA (Service Level Agreements) defined for security fix/release to binary feed&lt;br /&gt;
*** Method for outside people to notify us of security issues (may not  be CVE)&lt;br /&gt;
*** On-going kernel upgrades to deal with kernel defects&lt;br /&gt;
**** May be Yocto Project, LTS or &#039;master&#039; kernels&lt;br /&gt;
* Test strategy for validating binary packages&lt;br /&gt;
** Buildhistory used to allow architects/leads to verify components before release&lt;br /&gt;
** API / ABI comparison tooling to verify system is unlikely to break due to a change&lt;br /&gt;
*** http://github.com/lvc/abi-dumper&lt;br /&gt;
*** http://github.com/lvc/abi-compliance-checker&lt;br /&gt;
** Package upgrade testing&lt;br /&gt;
*** First release to current version(s)&lt;br /&gt;
*** Last release to current version(s)&lt;br /&gt;
*** Random intermediate release to current version(s)&lt;br /&gt;
*** Should execute ptest and oe qa tests and/or other automated tests after upgrading&lt;br /&gt;
**** Goal is as good or better then prior test pass&lt;br /&gt;
&lt;br /&gt;
Stage 2 requirements:&lt;br /&gt;
&lt;br /&gt;
* Cryptographic signed sstate-cache&lt;br /&gt;
** Sstate-cache objects are signed and verified prior to usage&lt;br /&gt;
* Cryptographic Signed packages and package feeds&lt;br /&gt;
** Package manager must validate signatures before installing&lt;br /&gt;
** User must be able to add their own signature to extend the package feeds&lt;br /&gt;
* Increase available packages to new components&lt;br /&gt;
&lt;br /&gt;
Possible future work, based on user feedback:&lt;br /&gt;
&lt;br /&gt;
* Desktop environment&lt;br /&gt;
** XFCE&lt;br /&gt;
** KDE&lt;br /&gt;
** Gnome&lt;br /&gt;
* Ability to migrate an image from one board to another&lt;br /&gt;
** Reconfigure feeds&lt;br /&gt;
** Load new boot image&lt;br /&gt;
** Swap to a new board&lt;br /&gt;
* Web interfaces to install packages and get a device package manifest&lt;br /&gt;
** May also involve remote device management&lt;br /&gt;
* Package feed viewer&lt;br /&gt;
** Something like rpmfind to view and inspect package info&lt;br /&gt;
* Increase available packages to new components&lt;/div&gt;</summary>
		<author><name>Mark Hatle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=File:Binary_Workflow.JPG&amp;diff=65537</id>
		<title>File:Binary Workflow.JPG</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=File:Binary_Workflow.JPG&amp;diff=65537"/>
		<updated>2019-12-13T18:26:05Z</updated>

		<summary type="html">&lt;p&gt;Mark Hatle: Binary Distribution Process Workflow&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Binary Distribution Process Workflow&lt;/div&gt;</summary>
		<author><name>Mark Hatle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Binary_Distro_Process&amp;diff=65536</id>
		<title>Binary Distro Process</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Binary_Distro_Process&amp;diff=65536"/>
		<updated>2019-12-13T18:23:47Z</updated>

		<summary type="html">&lt;p&gt;Mark Hatle: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;High Level Architecture&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A binary distribution begins with creating a process that allows you to do consistent, deterministic builds.  This process becomes cyclical over the life of the product.  The general procedure involves: Setup the build (new configuration or restoration of the prior build configuration and artifacts), performing the build, verifying the results of the build, storing the artifacts for the next iteration, and publishing the artifacts for the end user to use.&lt;br /&gt;
&lt;br /&gt;
PICTURE HERE&lt;br /&gt;
&lt;br /&gt;
Everything starts with an overall system configuration.  The following items will need to be captured as part of the Configs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description of Process&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Layer Setup &amp;amp; Configuration&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Layer Setup&lt;br /&gt;
** URLs&lt;br /&gt;
** Commit IDs&lt;br /&gt;
* Configuration&lt;br /&gt;
** bblayers.conf&lt;br /&gt;
** local.conf&lt;br /&gt;
   USER_CLASSES += &amp;quot;reproducible_build&amp;quot;&lt;br /&gt;
   USER_CLASSES += &amp;quot;packagefeed-stability&amp;quot;&lt;br /&gt;
   USER_CLASSES += &amp;quot;buildhistory&amp;quot;&lt;br /&gt;
   DEFAULTTUNE = &amp;quot;&amp;lt;common tune&amp;gt;&amp;quot;&lt;br /&gt;
   DISTRO = &amp;quot;...&amp;quot;&lt;br /&gt;
   PACKAGE_CLASSES = &amp;quot;package_rpm&amp;quot;&lt;br /&gt;
   EXTRA_IMAGE_FEATURES – REMOVE debug-tweaks!&lt;br /&gt;
   BB_HASHSERVER = &amp;quot;auto&amp;quot;&lt;br /&gt;
   BB_SIGNATURE_HANDLER = &amp;quot;OEEquivHash&amp;quot;&lt;br /&gt;
   PRSERV_HOST = &amp;quot;localhost:0&amp;quot;&lt;br /&gt;
   INHERIT += &amp;quot;archiver&amp;quot;&lt;br /&gt;
   ARCHIVER_MODE[src] = &amp;quot;original&amp;quot;&lt;br /&gt;
   ARCHIVER_MODE[recipe] = &amp;quot;1&amp;quot;&lt;br /&gt;
   ARCHIVER_MODE[dumpdata] = &amp;quot;1&amp;quot;&lt;br /&gt;
   ARCHIVER_MODE[srpm] = &amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Build Project&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The project is built using a standard process/target.  Depending on the purposes of the binary distribution, it may require one or more recipe targets or even a world build.&lt;br /&gt;
&lt;br /&gt;
The results of the build will be a series of artifacts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Artifacts&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following artifacts will be generated and stored as part of the build:&lt;br /&gt;
&lt;br /&gt;
* Configuration&lt;br /&gt;
** Layer URLs/Commit IDs (or copies of)&lt;br /&gt;
** project configuration files (local.conf/bblayers.conf)&lt;br /&gt;
* Log(s)&lt;br /&gt;
** Console Logs&lt;br /&gt;
** Individual Build Logs&lt;br /&gt;
** buildhistory&lt;br /&gt;
* Sources&lt;br /&gt;
** Downloads&lt;br /&gt;
** ARCHIVER output&lt;br /&gt;
* Sstate&lt;br /&gt;
** prserver database&lt;br /&gt;
** sstate-cache&lt;br /&gt;
** hash equivalency database&lt;br /&gt;
* Package Repository&lt;br /&gt;
** Repository Configuration&lt;br /&gt;
** RPM Packages &lt;br /&gt;
* images&lt;br /&gt;
* eSDK / SDK&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Test&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A test pass is then executed.  The first step should be an inspection of the logs (including build history) to verify the output is as expected.  Next a series of tests will need to verify that the image(s) boot, RPM packages can be installed, upgrades from the first and last releases work properly, etc.  Over time this test suite will need to be expanded to deal with issues found along the way. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Fix&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the case of a test failure, a fix for the failure will need to be created and committed.  Failed artifacts will be discarded (not released) as part of this.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Release&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the case of a test pass, assuming it has been decided to release, the artifacts are published.  Note, prior artifacts should never be removed from the publishing location.  Some artifacts, like build history may be determined to be internal only, but generally everything can be released.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Restore Last Released Artifacts&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Once a new build is determined to be needed, layers are updated, last released artifacts are restored and a new build is performed repeating the process.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;EOL&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Product End-Of-Life is declared and no further updates are released.&lt;/div&gt;</summary>
		<author><name>Mark Hatle</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Binary_Distro_Process&amp;diff=65535</id>
		<title>Binary Distro Process</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Binary_Distro_Process&amp;diff=65535"/>
		<updated>2019-12-13T18:21:04Z</updated>

		<summary type="html">&lt;p&gt;Mark Hatle: Binary Distribution Process&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;High Level Architecture&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A binary distribution begins with creating a process that allows you to do consistent, deterministic builds.  This process becomes cyclical over the life of the product.  The general procedure involves: Setup the build (new configuration or restoration of the prior build configuration and artifacts), performing the build, verifying the results of the build, storing the artifacts for the next iteration, and publishing the artifacts for the end user to use.&lt;br /&gt;
&lt;br /&gt;
PICTURE HERE&lt;br /&gt;
&lt;br /&gt;
Everything starts with an overall system configuration.  The following items will need to be captured as part of the Configs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Layer Setup &amp;amp; Configuration&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Layer Setup&lt;br /&gt;
** URLs&lt;br /&gt;
** Commit IDs&lt;br /&gt;
* Configuration&lt;br /&gt;
** bblayers.conf&lt;br /&gt;
** local.conf&lt;br /&gt;
   USER_CLASSES += &amp;quot;reproducible_build&amp;quot;&lt;br /&gt;
   USER_CLASSES += &amp;quot;packagefeed-stability&amp;quot;&lt;br /&gt;
   USER_CLASSES += &amp;quot;buildhistory&amp;quot;&lt;br /&gt;
   DEFAULTTUNE = &amp;quot;&amp;lt;common tune&amp;gt;&amp;quot;&lt;br /&gt;
   DISTRO = &amp;quot;...&amp;quot;&lt;br /&gt;
   PACKAGE_CLASSES = &amp;quot;package_rpm&amp;quot;&lt;br /&gt;
   EXTRA_IMAGE_FEATURES – REMOVE debug-tweaks!&lt;br /&gt;
   BB_HASHSERVER = &amp;quot;auto&amp;quot;&lt;br /&gt;
   BB_SIGNATURE_HANDLER = &amp;quot;OEEquivHash&amp;quot;&lt;br /&gt;
   PRSERV_HOST = &amp;quot;localhost:0&amp;quot;&lt;br /&gt;
   INHERIT += &amp;quot;archiver&amp;quot;&lt;br /&gt;
   ARCHIVER_MODE[src] = &amp;quot;original&amp;quot;&lt;br /&gt;
   ARCHIVER_MODE[recipe] = &amp;quot;1&amp;quot;&lt;br /&gt;
   ARCHIVER_MODE[dumpdata] = &amp;quot;1&amp;quot;&lt;br /&gt;
   ARCHIVER_MODE[srpm] = &amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Build Project&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The project is built using a standard process/target.  Depending on the purposes of the binary distribution, it may require one or more recipe targets or even a world build.&lt;br /&gt;
&lt;br /&gt;
The results of the build will be a series of artifacts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Artifacts&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following artifacts will be generated and stored as part of the build:&lt;br /&gt;
&lt;br /&gt;
* Configuration&lt;br /&gt;
** Layer URLs/Commit IDs (or copies of)&lt;br /&gt;
** project configuration files (local.conf/bblayers.conf)&lt;br /&gt;
* Log(s)&lt;br /&gt;
** Console Logs&lt;br /&gt;
** Individual Build Logs&lt;br /&gt;
** buildhistory&lt;br /&gt;
* Sources&lt;br /&gt;
** Downloads&lt;br /&gt;
** ARCHIVER output&lt;br /&gt;
* Sstate&lt;br /&gt;
** prserver database&lt;br /&gt;
** sstate-cache&lt;br /&gt;
** hash equivalency database&lt;br /&gt;
* Package Repository&lt;br /&gt;
** Repository Configuration&lt;br /&gt;
** RPM Packages &lt;br /&gt;
* images&lt;br /&gt;
* eSDK / SDK&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Test&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A test pass is then executed.  The first step should be an inspection of the logs (including build history) to verify the output is as expected.  Next a series of tests will need to verify that the image(s) boot, RPM packages can be installed, upgrades from the first and last releases work properly, etc.  Over time this test suite will need to be expanded to deal with issues found along the way. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Fix&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the case of a test failure, a fix for the failure will need to be created and committed.  Failed artifacts will be discarded (not released) as part of this.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Release&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the case of a test pass, assuming it has been decided to release, the artifacts are published.  Note, prior artifacts should never be removed from the publishing location.  Some artifacts, like build history may be determined to be internal only, but generally everything can be released.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Restore Last Released Artifacts&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Once a new build is determined to be needed, layers are updated, last released artifacts are restored and a new build is performed repeating the process.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;EOL&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Product End-Of-Life is declared and no further updates are released.&lt;/div&gt;</summary>
		<author><name>Mark Hatle</name></author>
	</entry>
</feed>