Bus Engine OS configuration files
Bus Engine OS configuration files
The FSL-licensed Bus Engine OS preview binary can use configuration files you provide to inspect package recipes, validate source manifests, build package archives, assemble root filesystems, and build image profiles. The complete tested Bus Engine OS Linux distribution source set is separate from the binary tool: paid users receive the accepted package catalog, profile source, build scripts, and release materials under the applicable source-access terms.
The configuration model
Bus Engine OS builds a Linux system through four layers:
| Layer | Files | Purpose |
|---|---|---|
| Source manifest | manifests/.../sources.yml |
Declares upstream or generated source archives and their verification metadata. |
| Package recipe |
packages/<name>/package.yml plus build.sh
|
Defines how one source package becomes a validated .buspkg.tar.gz archive. |
| Image profile | config/profiles/<profile>.json |
Selects package groups, kernel config, services, boot expectations, and acceptance policy for one target system. |
| Build workspace | build/workspaces/<workspace>/... |
Holds package outputs, assembled root filesystems, images, logs, checksums, provenance, and boot evidence. |
People sometimes call the package catalog packages.yml. In the current Bus
Engine OS layout, the catalog is directory-based: each package has its own
package.yml, and profile commands resolve those files into one package set.
Package recipes
A package recipe names the package identity, source identity, architecture, license, dependency edges, and runtime-image membership. A minimal runtime package recipe looks like this:
name: hello
version: 1.0.0
release: 1
architecture: x86_64
license: MIT
license_status: reviewed
runtime: true
builder_only: false
source_name: hello
source_version: 1.0.0
source_filename: hello-1.0.0.tar.gz
runtime_dependencies: zlib
The package directory normally also contains build.sh. During a package
build, Bus Engine OS resolves the recipe, verifies the declared source archive
from the source cache, prepares dependency sysroots, runs the build into a
staging root, records metadata, and writes a .buspkg.tar.gz archive.
The main fields are:
| Field | Meaning |
|---|---|
name, version, release
|
Package identity used in archive ids, package databases, and dependency graphs. |
architecture |
Target package architecture such as x86_64, aarch64, or noarch. |
license, license_status
|
License expression and review state required before an archive can be accepted. |
runtime |
Marks a package as a runtime package rather than only a build tool. |
builder_only |
Marks packages used only to build other packages. Builder-only packages must stay out of runtime rootfs closure. |
source_name, source_version, source_filename
|
Link the recipe to a source entry in the source manifest. |
source_type |
Use generated when the package source is produced by Bus Engine OS rather than downloaded from upstream. |
source_dependencies |
Source archives that must be present before the build can run. |
build_dependencies |
Package archives installed into the build sysroot for compilation or configuration. |
test_dependencies |
Package archives needed only for package tests. |
runtime_dependencies |
Package archives required in the final runtime dependency graph. |
image_member |
Defaults to true for profile-selected runtime packages. Set it to false for accepted builder packages that must stay out of assembled images. |
patches |
Declared patch files and checksums applied before the build. |
Runtime dependency constraints can select version variants when a recipe
provides them. For example, runtime_dependencies: openssl=4.0.1 selects a
matching OpenSSL variant instead of the default openssl recipe.
Recipe variants
Version and architecture variants can override the top-level recipe. A version
variant such as packages/iproute2/versions/7.0.0/package.yml can inherit the
default recipe while changing version-specific fields. An architecture variant
such as packages/example/architectures/x86_64/package.yml can override the
target architecture or architecture-specific dependency details.
Variant manifests use extends:
extends: ../../package.yml
architecture: x86_64
Run the layout and graph checks before relying on a package tree:
bus engine os package layout-check --recipes packages
bus engine os package graph --kind runtime --recipes packages --package openssh
bus engine os package final-system-plan --recipes packages
Source manifests
Source manifests describe the upstream or generated source inputs that package
recipes refer to. A custom package tree can keep its own source manifest as
long as package recipes and source entries agree on source_name,
source_version, and source_filename.
Validate, fetch, and verify source inputs before building packages:
bus engine os source validate --manifest manifests/sources.yml
bus engine os source fetch --manifest manifests/sources.yml --cache build/sources
bus engine os source verify --manifest manifests/sources.yml --cache build/sources
Detached signature verification is available when source metadata requires it:
bus engine os source verify-openpgp \
--manifest manifests/sources.yml \
--cache build/sources \
--keyring keys/upstream.gpg
Image profiles
Image profiles live under config/profiles/. A profile selects the target
architecture, build profile, kernel package and config, rootfs package groups,
runtime configuration packages, service expectations, boot expectations, and
acceptance policy.
The accepted virtual-server profile is the starting point for server systems.
The gui-wayfire profile is additive GUI work under development and must not
change the accepted server package set.
Useful profile commands:
bus engine os profile list
bus engine os profile validate --manifest config/profiles/virtual-server.json
bus engine os profile resolve --profile virtual-server
bus engine os profile resolve --profile gui-wayfire --format json
bus engine os profile diff --left virtual-server --right gui-wayfire
bus engine os profile lock --profile virtual-server --check config/profiles/virtual-server.lock.json
A profile package entry has a status. existing means the recipe is expected
to build or resolve now. planned means the package is part of the design but
is not accepted for that profile yet.
Create a new profile when the target system needs a different kernel configuration, package group, service expectation, or acceptance policy. Keep feature work in additive profiles so experimental packages cannot silently alter the accepted server image.
Building a custom root filesystem
For a custom package tree, start with one package and one source entry. Fetch and verify sources, build the package, inspect the archive, then install it into a scratch root:
bus engine os source validate --manifest manifests/sources.yml
bus engine os source fetch --manifest manifests/sources.yml --cache build/sources
bus engine os source verify --manifest manifests/sources.yml --cache build/sources
bus engine os package build \
--recipe packages/hello \
--sources-cache build/sources \
--work build/work/hello \
--out-dir build/packages
bus engine os package validate build/packages/hello-1.0.0-1.x86_64.buspkg.tar.gz
bus engine os rootfs assemble \
--root build/rootfs \
build/packages/hello-1.0.0-1.x86_64.buspkg.tar.gz
bus engine os rootfs audit --root build/rootfs
bus engine os rootfs archive --root build/rootfs --out build/rootfs.tar.gz
For a full Bus Engine OS image, use an image profile:
bus engine os build image --profile virtual-server
The full-system command expects the relevant package recipes, source manifests, build scripts, and profile files to be available to the build workspace. The preview binary supplies the command implementation. Paid source access supplies the complete tested Bus Engine OS distribution source set for supported profiles.