Omicron is the Oxide control plane, and thus brings together all of the various components outside of this repo that make up the software on the product. This includes (but definitely isn’t limited to):
Each of these has their own build processes that produce some sort of usable artifact, whether that is an illumos zone or a tarball of static assets.
The release engineering process builds the control plane and combines
it with the many external artifacts into a final artifact — a Zip
archive of a TUF repository — that contains everything necessary for
the product to operate. This process is run on each commit to ensure it
is always functional. You can also run the process locally with
cargo xtask releng
.
cargo xtask releng
performs all of these steps in parallel (with
the temporary exception of artifact downloads handled by
tools/install_builder_prerequisites.sh
):
-
tools/install_builder_prerequisites.sh
downloads several artifacts (via thetools/ci_*
scripts) that are necessary to build Omicron; many of these are ultimately packaged byomicron-package
. These scripts are generally controlled by thetools/*_version
andtools/*_checksums
files. -
cargo xtask releng
downloads the current root of trust and service processor images built by the Hubris release engineering process, which are signed in Permission Slip. This is controlled by thetools/permslip_production
andtools/permslip_staging
files. -
omicron-package
is the heart of the release engineering process; it reads the manifest frompackage-manifest.toml
, runs an appropriatecargo build
command, downloads any additional artifacts, and packages them into a series of illumos zones and tarballs. (It can also manage installation and uninstallation of these zones; see how-to-run.adoc.) -
Some of the illumos zones are distributed with the OS images (because they are reliant on OS-specific APIs), and some are distributed separately.
cargo xtask releng
unpacks the zones for the OS image into a temporary directory that is overlaid onto the OS image in the next step. -
helios-build
from the Helios repository then builds two images: the host image, which is used during normal operation, and the trampoline (or recovery) image, which is used to update the host image. -
Finally,
cargo xtask releng
generates a Zip archive of a TUF repository, which contains the host and trampoline OS images, the ROT and SP images, and all the illumos zones that are not installed into the OS images. This archive can be uploaded to Wicket to perform an upgrade of the rack while the control plane is not running.
Currently we use TUF repos generated in CI (by cargo xtask releng
)
directly. These repositories use a generated throwaway key to sign
the TUF metadata. In the limit, we will have a process to sign release
builds of these TUF repositories, which will be available as a Zip
archive for an operator to upload to Nexus or Wicket, as well as an
HTTPS repository for racks connected to the internet or with access to
a proxy to perform automatic updates. The exact nature of the PKI and
trust policies for each of these update flows is under discussion.