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
-
Detect ostree in linux_package_method() — e.g. check for /run/ostree-booted or rpm-ostree availability.
-
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
Problem
The
install-dev.shinstaller does not work on ostree-based Linux distributions such as Fedora Silverblue, Universal Blue (Bazzite, Aurora, Bluefin), and Fedora CoreOS.On these systems
/usris an immutable ostree deployment. Theinstall_rpm_packages()function callsdnf install -y(oryum/zypper/rpm -Uvh), which fails because it cannot write to the read-only filesystem. The correct tool isrpm-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
The
openshellCLI binary gets installed (possibly via the shell profile installer path), but the gateway sub-package and its systemd user unit are not installed. Runningopenshell gateway startreturnserror: unrecognized subcommand 'start'— which is expected after PR #1221 removedgateway start, but the replacement systemd-based flow also doesn't work because the unit was never installed.Suggested approach
Detect ostree in
linux_package_method()— e.g. check for/run/ostree-bootedorrpm-ostreeavailability.Two possible strategies:
Layer via
rpm-ostree install: Install the RPMs into a new deployment, warn the user that a reboot is required, and deferstart_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(adjustingExecStart), 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
install-dev.shfrommain(post PR refactor(cli): remove gateway lifecycle management #1221)OPENSHELL_VERSION=dev