Skip to content

install-dev.sh: support ostree-based distros (Silverblue, Universal Blue) #1266

@celebdor

Description

@celebdor

Problem

The install-dev.sh installer does not work on ostree-based Linux distributions such as Fedora Silverblue, Universal Blue (Bazzite, Aurora, Bluefin), and Fedora CoreOS.

On these systems /usr is an immutable ostree deployment. The install_rpm_packages() function calls dnf install -y (or yum/zypper/rpm -Uvh), which fails because it cannot write to the read-only filesystem. The correct tool is rpm-ostree install, which layers the package into a new deployment that takes effect after reboot.

This also means the script's assumption that the gateway systemd unit is immediately available after package installation does not hold — start_user_gateway() runs before the new deployment is booted.

Reproduction

# On Fedora Silverblue 42 / Universal Blue
curl -LsSf https://raw.githubusercontent.com/NVIDIA/OpenShell/main/install.sh \
  | OPENSHELL_VERSION=dev sh

The openshell CLI binary gets installed (possibly via the shell profile installer path), but the gateway sub-package and its systemd user unit are not installed. Running openshell gateway start returns error: unrecognized subcommand 'start' — which is expected after PR #1221 removed gateway start, but the replacement systemd-based flow also doesn't work because the unit was never installed.

Suggested approach

  1. Detect ostree in linux_package_method() — e.g. check for /run/ostree-booted or rpm-ostree availability.

  2. Two possible strategies:

    • Layer via rpm-ostree install: Install the RPMs into a new deployment, warn the user that a reboot is required, and defer start_user_gateway() to a post-reboot step (perhaps a first-boot systemd unit or a message telling the user to run a registration command after reboot).

    • User-local install (no layering): Extract binaries to ~/.local/bin/, place the systemd unit in ~/.config/systemd/user/openshell-gateway.service (adjusting ExecStart), and enable it immediately. This avoids the reboot but diverges from the package-managed layout.

    The user-local approach is probably the better UX for a dev install since it doesn't require a reboot and doesn't touch the base image.

Environment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:buildRelated to CI/CD and buildsos:linuxBug affects Linux hostsstate:agent-readyApproved for agent implementationtopic:compatibilityCompatibility-related work

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions