Support Arch Linux (pacman) installs in install.sh via existing release tarballs
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 8.7k
- Forks
- 1.3k
- Avg merge
- 2d 11h
- Merged PRs (30d)
- 253
Description
Problem Statement
install.sh only knows how to install on Linux via dpkg (Debian/Ubuntu) and rpm (Fedora/RHEL/openSUSE).
Arch Linux uses pacman and has neither natively, so curl -LsSf .../install.sh | sh has no install path at all on Arch or other pacman-based distros.
Proposed Design
Add a third Linux install path, install_linux_tarball(), gated specifically on has_cmd pacman inside linux_package_method() (might work for other package managers as well, but I can only confirm for Arch).
The new path consumes artifacts the release pipeline (.github/workflows/release-tag.yml) already builds, checksums, and publishes on every release, but that install.sh doesn't use today:
openshell-<arch>-unknown-linux-musl.tar.gz- the CLI, statically linked against musl, built with--features bundled-z3(no runtime Z3 dependency).openshell-gateway-<arch>-unknown-linux-gnu.tar.gz- the gateway, alsobundled-z3(CI asserts vialddthat it does not depend onlibz3), with a glibc >= 2.28 floor verified bytasks/scripts/verify-glibc-symbols.sh.
Flow, mirroring install_linux_rpm()'s existing shape:
- Download both checksum manifests (
openshell-checksums-sha256.txtandopenshell-gateway-checksums-sha256.txt- these are genuinely separate artifacts produced by separate steps in the release workflow). find_tarball_asset(checksums, arch, package)discovers the exact filename, matchingfind_rpm_asset()'s signature rather than taking a pre-built filename.- Loop over
file|checksumspairs to download and verify both the CLI and gateway tarballs (mirrors the existingfor _package_file in ...loop ininstall_linux_rpm()). - Fetch the systemd user unit (
deploy/deb/openshell-gateway.service) directly from the tagged commit onraw.githubusercontent.com, since acurl | shinstall has no repo checkout to read it from, and publishing would require untestable CI changes. tar -xzf+as_root installinline (without helper function) - unlikeinstall_deb_package/install_rpm_packages, which exist specifically to branch over competing front-ends (apt vs dpkg; dnf vs yum vs zypper vs rpm), there's no equivalent choice for a plain tarball, so a wrapper is redundant.
What this supports: Arch Linux and pacman-based derivatives, any architecture the release pipeline already publishes tarballs for.
What this does not support: distros without dpkg, rpm, or Gentoo, Slackware) — these continue to hit the existing hard error, unvalidated and out of scope for this change. Also out of scope: registering the package with pacman's own database (see Alternatives).
Alternatives Considered
- Trick detection into the dpkg path (
pacman -S dpkgthendpkg -i openshell.deb). Gets as far as downloading the.deb, but fails onPre-Depend s: init-system-helpers (>= 1.54~), a Debian-only meta-packagedpkg trigger scripts - it doesn't exist and can't be installed on Arch. - Force past the dependency check (
dpkg --force-depends -i), when my Claude agent suggested this I decided to explore better options (what this proposed feature has become). Claude wanted to manually download/checksum the.deb, then replicate whateverinstall.shnormally does. Works, but it's forcing a foreign distro's package manager to bypass its own dependency checks on a system it was never built for - fragile. - Build from source. Proved viable by hand (
cargo build --release -p openshell-cli -p openshell-server, skippingopenshell-driver-vmsince the Docker driver ships compiled directly intoopenshell-gateway). Rejected as the shipped fix because it takes ~10 minutes per install versus seconds for downloading the already-published tarballs, there's just no reason to waste compute doing this. - AUR package (
yay -S openshell, a real PKGBUILD). This is the more "native" long-term answer for Arch users and would integrate withpacman -Q/-R/updates, unlike a tarball installed outside pacman's database. Not proposed here because it's a separate artifact living outside this repo on, needing its own ongoing maintenance loop. Someone could investigate this if interested.
Agent Investigation
Validated end to end on a real Arch Linux machine:
- Removed the earlier
dpkgworkaround package (pacman -R dpkg) to restore a genuine Arch state before testing. - Ran the modified
install.shagainst the livev0.0.74GitHub release. It resolved the tarball path via the newpacmandetection, downloaded and checksum-verified both tarballs, fetched the unit file from the tag, installed everything, and enabled/started the gateway undersystemctl --user. - Hit the pre-existing "breaking upgrade" guard, because it detected the repo's dev wrapper script (
scripts/bin/openshell) onPATHand read it as a prior install. Confirmed there was no real prior state (~/.config/openshelldidn't exist, no systemd unit existed yet) before bypassing withOPENSHELL_ACK_BREAKING_UPGRADE=1- a false positive from the dev environment (mise's[env] _.pathputsscripts/binfirst inside the repo checkout), not a defect in the new path, and not something that affects real users installing from outside a repo checkout. - The gateway came up correctly and connected to the Docker driver.
openshell statusreportedConnected, version0.0.74.
Known follow-ups not covered by this proposal:
- No CI coverage yet for the new path -
test-release-canaryshould grow an Arch container job exercising it. - Install docs (
docs/) don't mention the tarball path yet. - An AUR package remains a separate, unimplemented follow-up (see Alternatives above).
I have a working, validated diff to install.sh for this already. Happy to open a PR if this is interesting.
Checklist
- I've reviewed existing issues and the architecture docs
- This is a design proposal, not a "please build this" request
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with install.sh's linux_package_method() and install_linux_rpm(), then inspect .github/workflows/release-tag.yml and deploy/deb/openshell-gateway.service. Verify the Arch path resolves both release tarballs, validates their checksums, installs the CLI, gateway, and user unit, and handles the tagged release correctly. The issue notes that test-release-canary lacks Arch coverage, so use that as the testing entry point.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- github-actions, shell
- Domain
- cli, devops, release
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 55/100