Skip to content

feat(tmachine): build local Debian artifacts - #4598

Merged
elezar merged 2 commits into
mainfrom
feat/4597-tmachine-deb/elezar
Oct 15, 2026
Merged

elezar merged 2 commits into
mainfrom
feat/4597-tmachine-deb/elezar

Conversation

@elezar

@elezar elezar commented Oct 15, 2026 •

Copy link
Copy Markdown
Member

Summary

Allow tmachine to consume a Debian package built from the local checkout through artifacts/packages/openshell.deb. Build common binaries and the VM driver in separate tasks, and keep the DEB task limited to packaging staged inputs.

Related Issue

Closes #4597

Changes

  • Extend build-artifacts-binaries to stage the prover alongside the existing common binaries.
  • Add build-artifacts-vm-driver to build and stage the VM driver with its embedded Linux runtime, using the sandbox and supervisor staged by the common binaries task.
  • Add build-artifacts-deb. The aggregate build runs common binaries, the VM driver, and DEB packaging in that order.
  • Document the aggregate command's DEB output, architecture selection, and package-version override.
  • Refresh the Linux VM runtime archive checksums to match the published assets. Immutable runtime versioning is tracked in ci(vm): publish immutable runtime artifacts and automate Nix updates #4600.

Testing

  • Nix formatting checks, git diff --check, and Markdown lint pass after the task split.
  • New VM driver task evaluates for x86_64 Linux.
  • ARM64 Darwin common-binaries and VM-driver task wrappers build successfully, including their generated shell checks.
  • Before extraction: standalone ARM64 binaries and DEB tasks completed on macOS; DEB packaging invoked no Cargo builds. Inspected ARM64 package metadata, the four packaged binaries, and the user service.
  • Full binary/package build repeated after the task split.
  • x86_64 package build executed.

Checklist

  • Follows Conventional Commits.
  • Commits are signed off for DCO.

Signed-off-by: Evan Lezar <elezar@nvidia.com>
@copy-pr-bot

copy-pr-bot Bot commented Oct 15, 2026

Copy link
Copy Markdown

Auto-sync is disabled for draft pull requests in this repository. Workflows must be run manually.

Contributors can view more details about this message here.

Signed-off-by: Evan Lezar <elezar@nvidia.com>
Comment thread nix/pkgs/vm-runtime.nix
@elezar
elezar marked this pull request as ready for review October 15, 2026 13:24
@elezar
elezar enabled auto-merge October 15, 2026 13:31
@elezar
elezar added this pull request to the merge queue Oct 15, 2026
Merged via the queue into main with commit 59ddef6 Oct 15, 2026
81 of 84 checks passed
@elezar
elezar deleted the feat/4597-tmachine-deb/elezar branch October 15, 2026 13:52
@elezar elezar mentioned this pull request Oct 16, 2026
6 of 9 tasks
elezar added a commit that referenced this pull request Oct 16, 2026
On macOS hosts, the aarch64 musl openshell-prover that
build-artifacts-binaries produced was not static. z3-sys asks for a
dynamic libstdc++ (-Wl,-Bdynamic -lstdc++), and the musl cross compiler
wrapper resolved libstdc++.so. The result was a static executable with a
DT_NEEDED entry for libstdc++.so.6 and no interpreter, which crashed
during C++ static initialization. The local Debian package from #4598
ships this prover without running it.

Build the musl binaries with CXXSTDLIB=static:-bundle=stdc++ so z3-sys
requests a static libstdc++. CXXSTDLIB applies to every target and
Darwin has no libstdc++, so set it only on this musl build rather than in
the shared toolchain environment. The bundled form, static=stdc++, fails
because rustc cannot find libstdc++.a on its own search path.

Run tasks/scripts/verify-static-binary.sh on the musl CLI, sandbox and
prover, as the release does, so a binary that is not fully static fails
the local build.

Signed-off-by: Evan Lezar <elezar@nvidia.com>
opensource-fork-sync Bot pushed a commit to cla7aye15I4nd/opensource-NVIDIA__OpenShell that referenced this pull request Oct 17, 2026
* fix(tmachine): link libstdc++ statically and verify static musl binaries

On macOS hosts, the aarch64 musl openshell-prover that
build-artifacts-binaries produced was not static. z3-sys asks for a
dynamic libstdc++ (-Wl,-Bdynamic -lstdc++), and the musl cross compiler
wrapper resolved libstdc++.so. The result was a static executable with a
DT_NEEDED entry for libstdc++.so.6 and no interpreter, which crashed
during C++ static initialization. The local Debian package from NVIDIA#4598
ships this prover without running it.

Build the musl binaries with CXXSTDLIB=static:-bundle=stdc++ so z3-sys
requests a static libstdc++. CXXSTDLIB applies to every target and
Darwin has no libstdc++, so set it only on this musl build rather than in
the shared toolchain environment. The bundled form, static=stdc++, fails
because rustc cannot find libstdc++.a on its own search path.

Run tasks/scripts/verify-static-binary.sh on the musl CLI, sandbox and
prover, as the release does, so a binary that is not fully static fails
the local build.

Signed-off-by: Evan Lezar <elezar@nvidia.com>

* feat(tmachine): build local RPM artifacts

Add build-artifacts-rpm, which builds the CLI and gateway RPMs that
tmachine's rpm installer expects at artifacts/packages/rpm/openshell.rpm
and artifacts/packages/rpm/openshell-gateway.rpm. It runs
`packit build locally` with openshell.spec in the Fedora 44 image that
build-rpm.yml uses, for the host's Linux architecture, and packages the
binaries staged by build-artifacts-binaries. The package version defaults
to the development version that branch E2E CI computes.

The aggregate build-artifacts app runs the RPM step after the DEB step.

Signed-off-by: Evan Lezar <elezar@nvidia.com>

---------

Signed-off-by: Evan Lezar <elezar@nvidia.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(tmachine): build local Debian package artifacts

2 participants