Linux: publish an AUR package (slipstream-bin) with dependency handling #248

Closed
opened 2026-10-02 11:48:58 +00:00 by sky_line · 3 comments
Owner

Goal

Publish Slipstream on the AUR, so Arch / CachyOS / EndeavourOS / Manjaro / SteamOS users install it with their AUR helper, and pacman pulls in the system libraries the viewer and CEF media need. That removes the missing-library class of bugs (#245) for Arch-based users.

Scope

  • slipstream-bin package: repackages the official release tarball from Forgejo Releases.
    • source= points at the versioned release asset, pinned with sha256sums.
    • Installs to /opt/slipstream, with a /usr/bin/slipstream launcher symlink to the wrapper, a .desktop file, icons and the license files.
    • Version mapping: v1.0.0-beta.2 becomes pkgver=1.0.0beta2 or 1.0.0.2 (pick one scheme and keep it monotonic for pacman's vercmp). Final v1.0.0 must sort above every beta.
  • Dependencies (depends=), taken from ldd of the packaged binaries rather than guessed:
    • viewer: glibc, gcc-libs, libx11 / libxcursor / libxinerama / libxfixes / libxft, vulkan-icd-loader, libpulse / pipewire, dbus, libunwind, fontconfig, freetype2, …
    • CEF media (#245): nss, nspr, at-spi2-core, libcups, libdrm, mesa (gbm), libxkbcommon, libxcomposite, libxdamage, libxrandr, alsa-lib, pango, cairo.
    • optdepends: vlc / gstreamer for media streams, and the Vulkan driver (vulkan-radeon / nvidia-utils / vulkan-intel) with a note.
  • Sandbox: CEF runs no_sandbox from the tarball. Decide whether the package installs chrome-sandbox setuid root (as browsers do) or keeps no_sandbox, and document the choice.
  • Launcher: the wrapper's startup ldd media check (#245) should stay silent when installed via the package; deps are guaranteed. Consider skipping it when /opt/slipstream/.packaged-by=aur exists.
  • User data: stays in ~/.slipstreamviewer; the package never touches it.
  • Optional, later: a slipstream-git source package (heavy: autobuild 3p downloads, ~30 GB build) — probably not worth it. A -beta / RC channel package, or a slipstream-bin that tracks pre-releases with a flag.

Automation

  • A CI step in .forgejo/workflows/release.yml, after the release assets upload, regenerates PKGBUILD and .SRCINFO (makepkg --printsrcinfo) with the new version and sha256, then pushes to ssh://aur@aur.archlinux.org/slipstream-bin.git.
    • Needs an AUR account and an SSH key stored as a CI secret.
    • Push only on Release (and optionally Beta) tags, never on ci-*.
  • Keep the PKGBUILD template in-repo, e.g. scripts/packaging/aur/.
  • Validate with namcap and a clean-chroot build (extra-x86_64-build) on the applejack builder before publishing.

Docs

  • Add install instructions to the website download page and README-linux.txt: yay -S slipstream-bin / paru -S slipstream-bin.

#245 (CEF missing system libs), Linux portability notes (glibc pins / ISA level).

## Goal Publish Slipstream on the **AUR**, so Arch / CachyOS / EndeavourOS / Manjaro / SteamOS users install it with their AUR helper, and pacman pulls in the system libraries the viewer and CEF media need. That removes the missing-library class of bugs (#245) for Arch-based users. ## Scope - **`slipstream-bin` package:** repackages the official release tarball from Forgejo Releases. - `source=` points at the versioned release asset, pinned with `sha256sums`. - Installs to `/opt/slipstream`, with a `/usr/bin/slipstream` launcher symlink to the wrapper, a `.desktop` file, icons and the license files. - Version mapping: `v1.0.0-beta.2` becomes `pkgver=1.0.0beta2` or `1.0.0.2` (pick one scheme and keep it monotonic for pacman's `vercmp`). Final `v1.0.0` must sort above every beta. - **Dependencies (`depends=`)**, taken from `ldd` of the packaged binaries rather than guessed: - viewer: glibc, gcc-libs, libx11 / libxcursor / libxinerama / libxfixes / libxft, vulkan-icd-loader, libpulse / pipewire, dbus, libunwind, fontconfig, freetype2, … - CEF media (#245): nss, nspr, at-spi2-core, libcups, libdrm, mesa (gbm), libxkbcommon, libxcomposite, libxdamage, libxrandr, alsa-lib, pango, cairo. - `optdepends`: vlc / gstreamer for media streams, and the Vulkan driver (vulkan-radeon / nvidia-utils / vulkan-intel) with a note. - **Sandbox:** CEF runs `no_sandbox` from the tarball. Decide whether the package installs `chrome-sandbox` setuid root (as browsers do) or keeps `no_sandbox`, and document the choice. - **Launcher:** the wrapper's startup `ldd` media check (#245) should stay silent when installed via the package; deps are guaranteed. Consider skipping it when `/opt/slipstream/.packaged-by=aur` exists. - **User data:** stays in `~/.slipstreamviewer`; the package never touches it. - **Optional, later:** a `slipstream-git` source package (heavy: autobuild 3p downloads, ~30 GB build) — probably not worth it. A `-beta` / RC channel package, or a `slipstream-bin` that tracks pre-releases with a flag. ## Automation - A CI step in `.forgejo/workflows/release.yml`, after the release assets upload, regenerates `PKGBUILD` and `.SRCINFO` (`makepkg --printsrcinfo`) with the new version and sha256, then pushes to `ssh://aur@aur.archlinux.org/slipstream-bin.git`. - Needs an AUR account and an SSH key stored as a CI secret. - Push only on Release (and optionally Beta) tags, never on `ci-*`. - Keep the PKGBUILD template in-repo, e.g. `scripts/packaging/aur/`. - Validate with `namcap` and a clean-chroot build (`extra-x86_64-build`) on the applejack builder before publishing. ## Docs - Add install instructions to the website download page and README-linux.txt: `yay -S slipstream-bin` / `paru -S slipstream-bin`. ## Related #245 (CEF missing system libs), Linux portability notes (glibc pins / ISA level).
Author
Owner

Arch packaging has landed on branch aurpkg (not merged or pushed yet). Commits: 79bd808475, de7443e514, a6d0b9ee72, 5ced65d8a6.

What's there

  • scripts/packaging/aur/PKGBUILD + .SRCINFO for slipstream-bin, pinned to v0.14.0-beta.1 (sha256 from the release notes). It installs the tarball to /opt/slipstream and adds:

    • a /usr/bin/slipstream exec launcher;
    • slipstream.desktop (Exec=slipstream %u, handles x-scheme-handler/secondlife);
    • hicolor icons;
    • licenses under /usr/share/licenses/slipstream-bin/.

    User data stays in ~/.slipstreamviewer.

  • pkgver: vX.Y.Z-beta.N → X.Y.ZbetaN and vX.Y.Z → X.Y.Z. vercmp puts beta.9 < beta.10 < the final < the next version's betas. gen.sh --selftest checks this.

  • depends come from readelf/ldd over every ELF in the release tarball, mapped with pacman -Qo, plus the libraries the bundled SDL3/OpenAL/WebRTC load with dlopen. That covers all of CEF's #245 libraries. namcap, run in an archlinux container with those depends installed, resolves every 64-bit library. Vulkan drivers, GStreamer/libvlc and a few desktop extras are optdepends.

  • Sandbox: chrome-sandbox stays 0755 and is not setuid, the same as the tarball.

  • Wrapper: when .packaged-by sits next to it, the wrapper skips the per-user desktop entry, the per-user protocol registration and the #245 library check. The PKGBUILD guards those lines for older wrappers too.

  • Icons: viewer_manifest.py now ships share/icons/hicolor in the tarball, so future packages get every icon size.

  • gen.sh TAG [sha] writes the PKGBUILD and .SRCINFO for a tag. Without makepkg it uses a built-in writer whose output is byte-identical to makepkg's.

  • aur_push.sh does nothing until the AUR_SSH_KEY secret is set.

  • Checks run: makepkg -f passes on the real v0.14.0-beta.1 asset (209.6 MB .pkg.tar.zst); nothing was installed.

CI: a new arch-package job in release.yml runs after the Linux assets publish. Every step is continue-on-error. It:

  1. generates the PKGBUILD;
  2. builds the .pkg.tar.zst, but only if makepkg is present on the runner;
  3. attaches both to the release;
  4. pushes to the AUR, but only if AUR_SSH_KEY is set.

Follow-ups for you

  1. Enable the prebuilt package on applejack: apt install makepkg libarchive-tools. Until then only the PKGBUILD gets attached.

  2. One-time AUR setup:

    • register at aur.archlinux.org;
    • run ssh-keygen -t ed25519 -N '' -f aur_slipstream, and add the .pub file to the AUR account;
    • add the private key as the repo secret AUR_SSH_KEY;
    • optionally, set the variable AUR_PUBLISH_BETAS=false to push only final releases.

    The first push (the next tag's CI run, or aur_push.sh by hand) creates slipstream-bin on the AUR.

  3. To offer the curl -O …/PKGBUILD && makepkg -si path today, attach the committed PKGBUILD to the v0.14.0-beta.1 release by hand.

Full details are in scripts/packaging/aur/README.md.

Arch packaging has landed on branch `aurpkg` (not merged or pushed yet). Commits: 79bd808475, de7443e514, a6d0b9ee72, 5ced65d8a6. **What's there** - `scripts/packaging/aur/PKGBUILD` + `.SRCINFO` for `slipstream-bin`, pinned to v0.14.0-beta.1 (sha256 from the release notes). It installs the tarball to `/opt/slipstream` and adds: - a `/usr/bin/slipstream` exec launcher; - `slipstream.desktop` (`Exec=slipstream %u`, handles `x-scheme-handler/secondlife`); - hicolor icons; - licenses under `/usr/share/licenses/slipstream-bin/`. User data stays in `~/.slipstreamviewer`. - **pkgver:** `vX.Y.Z-beta.N` → `X.Y.ZbetaN` and `vX.Y.Z` → `X.Y.Z`. `vercmp` puts beta.9 < beta.10 < the final < the next version's betas. `gen.sh --selftest` checks this. - **depends** come from `readelf`/`ldd` over every ELF in the release tarball, mapped with `pacman -Qo`, plus the libraries the bundled SDL3/OpenAL/WebRTC load with dlopen. That covers all of CEF's #245 libraries. namcap, run in an archlinux container with those depends installed, resolves every 64-bit library. Vulkan drivers, GStreamer/libvlc and a few desktop extras are `optdepends`. - **Sandbox:** `chrome-sandbox` stays 0755 and is not setuid, the same as the tarball. - **Wrapper:** when `.packaged-by` sits next to it, the wrapper skips the per-user desktop entry, the per-user protocol registration and the #245 library check. The PKGBUILD guards those lines for older wrappers too. - **Icons:** `viewer_manifest.py` now ships `share/icons/hicolor` in the tarball, so future packages get every icon size. - `gen.sh TAG [sha]` writes the PKGBUILD and `.SRCINFO` for a tag. Without makepkg it uses a built-in writer whose output is byte-identical to makepkg's. - `aur_push.sh` does nothing until the `AUR_SSH_KEY` secret is set. - **Checks run:** `makepkg -f` passes on the real v0.14.0-beta.1 asset (209.6 MB `.pkg.tar.zst`); nothing was installed. **CI:** a new `arch-package` job in `release.yml` runs after the Linux assets publish. Every step is continue-on-error. It: 1. generates the PKGBUILD; 2. builds the `.pkg.tar.zst`, but only if makepkg is present on the runner; 3. attaches both to the release; 4. pushes to the AUR, but only if `AUR_SSH_KEY` is set. **Follow-ups for you** 1. Enable the prebuilt package on applejack: `apt install makepkg libarchive-tools`. Until then only the PKGBUILD gets attached. 2. One-time AUR setup: - register at aur.archlinux.org; - run `ssh-keygen -t ed25519 -N '' -f aur_slipstream`, and add the `.pub` file to the AUR account; - add the private key as the repo secret `AUR_SSH_KEY`; - optionally, set the variable `AUR_PUBLISH_BETAS=false` to push only final releases. The first push (the next tag's CI run, or `aur_push.sh` by hand) creates `slipstream-bin` on the AUR. 3. To offer the `curl -O …/PKGBUILD && makepkg -si` path today, attach the committed PKGBUILD to the v0.14.0-beta.1 release by hand. Full details are in `scripts/packaging/aur/README.md`.
Author
Owner

Status check (verification sweep): the packaging is in main and shipped with v1.0.0-beta.1: the PKGBUILD/.SRCINFO generator, the release-CI arch-package job and the AUR push (79bd808475, de7443e514, a6d0b9ee72, 5ced65d8a6). But the package isn't on the AUR yet: aur.archlinux.org/rpc/v5/info?arg[]=slipstream-bin returns 0 results as of 2026-10-03. Remaining: get the first AUR push to succeed (CI credentials / account), then close.

Status check (verification sweep): the packaging is in main and shipped with v1.0.0-beta.1: the PKGBUILD/.SRCINFO generator, the release-CI arch-package job and the AUR push (79bd808475, de7443e514, a6d0b9ee72, 5ced65d8a6). But the package isn't on the AUR yet: `aur.archlinux.org/rpc/v5/info?arg[]=slipstream-bin` returns 0 results as of 2026-10-03. Remaining: get the first AUR push to succeed (CI credentials / account), then close.
Author
Owner

Done: slipstream-bin is published on the AUR, and CI generates the PKGBUILD / .SRCINFO per release (with the signing key and dependency fixes). A native pacman repo is tracked in #419.

Done: `slipstream-bin` is published on the AUR, and CI generates the PKGBUILD / .SRCINFO per release (with the signing key and dependency fixes). A native pacman repo is tracked in #419.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
sky_line/Slipstream#248
No description provided.