ci / bun-nix (pull_request) Successful in 35s
ci / docs-drift (pull_request) Successful in 20s
ci / docs-site (pull_request) Successful in 1m21s
installer-smoke / smoke (arch, archlinux:base, pacman -Sy --noconfirm --needed curl git nodejs && (pacman-key --init >/dev/null 2>&1 || true)) (pull_request) Failing after 23s
installer-smoke / smoke (fedora-44, fedora:44, dnf install -y -q curl git nodejs) (pull_request) Failing after 0s
ci / web (pull_request) Successful in 1m27s
ci / rust-arm64 (pull_request) Successful in 1m31s
installer-smoke / smoke (debian-13, debian:trixie, apt-get update -qq && apt-get install -y -qq --no-install-recommends ca-certificates curl git nodejs) (pull_request) Failing after 21s
apple / swift (pull_request) Successful in 2m19s
apple / distribute (pull_request) Skipped
apple / screenshots (pull_request) Skipped
android / android (pull_request) Canceled after 2m37s
ci / rust (pull_request) Canceled after 2m38s
WP4 of the docs-and-onboarding overhaul (punktfunk-planning design/docs-and-onboarding-overhaul.md). scripts/install.sh — plain POSIX sh (dash-clean), ~380 lines, `curl -fsSL https://punktfunk.unom.io/install.sh | sh`: detect the distro from os-release (apt / dnf / pacman / rpm-ostree→sysext; NixOS, SteamOS, Windows and unknown distros get a one-line pointer and stop; Debian 12 / Ubuntu 24.04 / Mint 22 / Fedora 45 hit the documented floors with the right docs link) → install with the platforms.json lines VERBATIM (channel and the Fedora group are edited into the string at run time; `--yes` rewrites them non-interactive, a tty hands the package manager its own prompt; stdin is never read, because under `curl | sh` stdin is the script) → `punktfunk-host detect-conflicts` (exit 1 = active Sunshine-family host) → offer to keep both by moving the management API port (PUNKTFUNK_MGMT_BIND, default 47991, the firewall step opens it) → input group (ujust on Bazzite; no-op if already in) → optional punktfunk group, GameStream compat, shared clipboard (all default no) → firewalld/ufw profiles → enable host + console (+ the plugin runner where it isn't) → optional linger → verify (unit active, UDP 9777 bound) and print the console URL, the password command and the pairing steps. `--dry-run` prints every command and changes nothing; every prompt has a PUNKTFUNK_INSTALL_* environment twin; re-running is safe (install skipped when the binary exists). Running under sudo is refused (host.env and the units belong to the user); root without sudo gets a shim so the verbatim lines still work. Decisions: the canonical URL is punktfunk.unom.io/install.sh, a 302 on the website to the script at raw/branch/main (versioned with the code it installs; precedent: the Bazzite sysext bootstrap) — the website half is punktfunk-website PR #4. GPU drivers stay the docs pages' job; the one silent failure (Fedora + NVIDIA without RPM Fusion's ffmpeg-libs → no NVENC) is called out at the end. Gates: check-docs-drift.sh gate 6 — every apt/pacman/dnf/sysext install line in data/platforms.json must appear verbatim in the script, and the script must parse (shown to fail on a planted drift). New path-filtered workflow installer-smoke.yml runs the script unattended in debian:trixie, fedora:44 and archlinux:base against the real registry, then `punktfunk-host --version`, `detect-conflicts`, and a re-run that must say "already installed". Docs: install hub gains "Guided install (preview)" rendered from platforms.json's new `installer` block via an <Installer/> component (one-liner + inspect-first form + flags); CONTRIBUTING names the new gate. Verified locally: sh/dash -n, both docs gates, docs-site build + lint, and a --dry-run matrix over 16 faked os-release files (all four families, every floor, canary, every option, piped stdin). The container run itself is the CI job's to report — Docker on this machine was wedged under another session's emulated build. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
221 lines
8.5 KiB
JSON
221 lines
8.5 KiB
JSON
{
|
|
"$comment": "Single source for the install/port facts that used to drift across four surfaces (docs-and-onboarding-overhaul WP1). Consumers: docs-site install pages (<Install platform=…/> and <Ports/> in docs-site/src/components/platforms.tsx, reading the byte-identical snapshot docs-site/src/data/platforms.json that check-docs-drift.sh gates), the website download page (WP3), the guided install script (WP4). A port number, repo URL or install command lives HERE and nowhere else — pages quote it, they don't restate it. `install` is the shell snippet that puts the package on the box (lines, in order); `url` is a download/store link where there is no command. Validated by scripts/ci/check-docs-drift.sh (parse + snapshot sync; ponytail: cross-check against code literals when a consumer exists).",
|
|
|
|
"ports": {
|
|
"mgmt": {
|
|
"port": 47990,
|
|
"proto": "tcp",
|
|
"what": "management REST API (HTTPS + token; read-only status/library off loopback)",
|
|
"env": "PUNKTFUNK_MGMT_BIND",
|
|
"conflict": "Sunshine / Apollo / Vibeshine serve their web UI on 47990 too — the one port still shared with them once GameStream compat is off. Move it via PUNKTFUNK_MGMT_BIND; clients relearn it from discovery."
|
|
},
|
|
"web": {
|
|
"port": 47992,
|
|
"proto": "tcp",
|
|
"what": "web console (HTTPS, login-gated); plugin interfaces on 47993",
|
|
"also": [47993]
|
|
},
|
|
"native": {
|
|
"port": 9777,
|
|
"proto": "udp",
|
|
"what": "punktfunk/1 QUIC control port",
|
|
"env": "PUNKTFUNK_NATIVE_PORT"
|
|
},
|
|
"data": {
|
|
"port": null,
|
|
"proto": "udp",
|
|
"what": "per-session video data plane — ephemeral port the client hole-punches; nothing fixed to open",
|
|
"env": "PUNKTFUNK_DATA_PORT"
|
|
},
|
|
"mdns": {
|
|
"port": 5353,
|
|
"proto": "udp",
|
|
"what": "mDNS discovery"
|
|
},
|
|
"gamestream": {
|
|
"tcp": [47984, 47989, 48010],
|
|
"udp": [47998, 47999, 48000],
|
|
"what": "GameStream/Moonlight-compat planes (opt-in, PUNKTFUNK_GAMESTREAM=1)",
|
|
"conflict": "Sunshine / Apollo / Vibeshine bind these same fixed ports and advertise the same mDNS name — run only one GameStream host at a time, or keep punktfunk native-only."
|
|
}
|
|
},
|
|
|
|
"firewall": {
|
|
"$comment": "Service/profile names the Linux packages install for firewalld and ufw — the packages never open a port themselves.",
|
|
"native": "punktfunk-native",
|
|
"gamestream": "punktfunk-gamestream",
|
|
"web": "punktfunk-web"
|
|
},
|
|
|
|
"installer": {
|
|
"$comment": "The guided Linux installer (WP4, preview). Canonical URL is the website's /install.sh, a redirect to the raw script on main so it's versioned with the code it installs; the docs hub and the download page quote these lines.",
|
|
"status": "preview",
|
|
"url": "https://punktfunk.unom.io/install.sh",
|
|
"source": "https://git.unom.io/unom/punktfunk/raw/branch/main/scripts/install.sh",
|
|
"oneLiner": "curl -fsSL https://punktfunk.unom.io/install.sh | sh",
|
|
"inspectFirst": [
|
|
"curl -fsSLO https://punktfunk.unom.io/install.sh",
|
|
"less install.sh",
|
|
"sh install.sh"
|
|
],
|
|
"docs": "/docs/install#guided-install-preview"
|
|
},
|
|
|
|
"conflicts": {
|
|
"hosts": ["Sunshine", "Apollo", "Vibeshine"],
|
|
"detect": "punktfunk-host detect-conflicts",
|
|
"detectExit": "1 only when a conflicting host runs or will start on its own; dormant leftovers print but exit 0",
|
|
"docs": "/docs/switching-from-sunshine"
|
|
},
|
|
|
|
"platforms": [
|
|
{
|
|
"id": "debian",
|
|
"name": "Debian 13+ / Ubuntu 26.04+",
|
|
"installs": "host",
|
|
"packageManager": "apt",
|
|
"docs": "/docs/debian",
|
|
"repo": "https://git.unom.io/api/packages/unom/debian",
|
|
"install": [
|
|
"sudo install -d -m 0755 /etc/apt/keyrings",
|
|
"curl -fsSL https://git.unom.io/api/packages/unom/debian/repository.key | sudo tee /etc/apt/keyrings/punktfunk.asc >/dev/null",
|
|
"echo \"deb [signed-by=/etc/apt/keyrings/punktfunk.asc] https://git.unom.io/api/packages/unom/debian stable main\" | sudo tee /etc/apt/sources.list.d/punktfunk.list",
|
|
"sudo apt update",
|
|
"sudo apt install punktfunk-host"
|
|
]
|
|
},
|
|
{
|
|
"id": "arch",
|
|
"name": "Arch Linux / CachyOS",
|
|
"installs": "host",
|
|
"packageManager": "pacman",
|
|
"docs": "/docs/arch",
|
|
"repo": "https://git.unom.io/api/packages/unom/arch",
|
|
"install": [
|
|
"curl -fsS https://git.unom.io/api/packages/unom/arch/repository.key | sudo pacman-key --add -",
|
|
"sudo pacman-key --lsign-key E0CA04465C99C936E0B0C6510A317015A34DDD69",
|
|
"grep -q '^\\[punktfunk\\]' /etc/pacman.conf || printf '\\n[punktfunk]\\nServer = https://git.unom.io/api/packages/unom/arch/$repo/$arch\\n' | sudo tee -a /etc/pacman.conf >/dev/null",
|
|
"sudo pacman -Syu punktfunk-host"
|
|
]
|
|
},
|
|
{
|
|
"id": "fedora",
|
|
"name": "Fedora 43+",
|
|
"installs": "host",
|
|
"packageManager": "dnf",
|
|
"docs": "/docs/fedora",
|
|
"repo": "https://git.unom.io/api/packages/unom/rpm/fedora-44",
|
|
"install": [
|
|
"sudo tee /etc/yum.repos.d/punktfunk.repo >/dev/null <<'REPO'",
|
|
"[punktfunk]",
|
|
"name=punktfunk",
|
|
"# fedora-44 on Fedora 44; bazzite on Fedora 43 (a plain Fedora 43 build of the same package)",
|
|
"baseurl=https://git.unom.io/api/packages/unom/rpm/fedora-44",
|
|
"enabled=1",
|
|
"gpgcheck=1",
|
|
"repo_gpgcheck=1",
|
|
"gpgkey=https://git.unom.io/api/packages/unom/rpm/repository.key",
|
|
" https://git.unom.io/api/packages/unom/generic/punktfunk-keys/1/RPM-GPG-KEY-punktfunk",
|
|
"REPO",
|
|
"sudo dnf install punktfunk"
|
|
]
|
|
},
|
|
{
|
|
"id": "bazzite",
|
|
"name": "Bazzite / Fedora Atomic",
|
|
"installs": "host",
|
|
"packageManager": "sysext",
|
|
"docs": "/docs/bazzite",
|
|
"install": [
|
|
"curl -fsSLO https://git.unom.io/unom/punktfunk/raw/branch/main/packaging/bazzite/punktfunk-sysext.sh",
|
|
"sudo bash punktfunk-sysext.sh install"
|
|
]
|
|
},
|
|
{
|
|
"id": "nixos",
|
|
"name": "NixOS",
|
|
"installs": "host",
|
|
"packageManager": "nix",
|
|
"docs": "/docs/nixos",
|
|
"install": [
|
|
"# flake input: inputs.punktfunk.url = \"git+https://git.unom.io/unom/punktfunk\";",
|
|
"# then: imports = [ punktfunk.nixosModules.default ]; services.punktfunk.host.enable = true;"
|
|
]
|
|
},
|
|
{
|
|
"id": "steamos",
|
|
"name": "SteamOS (Steam Deck as host)",
|
|
"installs": "host",
|
|
"packageManager": "script",
|
|
"docs": "/docs/steamos-host",
|
|
"install": [
|
|
"git clone https://git.unom.io/unom/punktfunk ~/punktfunk",
|
|
"bash ~/punktfunk/scripts/steamdeck/install.sh"
|
|
]
|
|
},
|
|
{
|
|
"id": "windows",
|
|
"name": "Windows 11 (22H2+)",
|
|
"installs": "host",
|
|
"packageManager": "winget",
|
|
"docs": "/docs/windows-host",
|
|
"install": [
|
|
"winget source add -n punktfunk https://winget.punktfunk.unom.io -t Microsoft.Rest",
|
|
"winget install unom.PunktfunkHost"
|
|
]
|
|
},
|
|
{
|
|
"id": "linux-client",
|
|
"name": "Linux client (any distro)",
|
|
"installs": "client",
|
|
"packageManager": "flatpak",
|
|
"docs": "/docs/install-client#linux-desktop-flatpak",
|
|
"install": [
|
|
"flatpak install --user https://flatpak.unom.io/io.unom.Punktfunk.flatpakref"
|
|
]
|
|
},
|
|
{
|
|
"id": "steam-deck-client",
|
|
"name": "Steam Deck (Gaming Mode)",
|
|
"installs": "client",
|
|
"packageManager": "decky",
|
|
"docs": "/docs/steam-deck"
|
|
},
|
|
{
|
|
"id": "windows-client",
|
|
"name": "Windows client",
|
|
"installs": "client",
|
|
"packageManager": "msix",
|
|
"docs": "/docs/install-client#windows",
|
|
"install": [
|
|
"curl.exe -LO https://git.unom.io/api/packages/unom/generic/punktfunk-client-windows/latest/punktfunk-client-windows_x64.msix",
|
|
"Add-AppxPackage .\\punktfunk-client-windows_x64.msix"
|
|
]
|
|
},
|
|
{
|
|
"id": "macos-client",
|
|
"name": "macOS",
|
|
"installs": "client",
|
|
"packageManager": "dmg",
|
|
"docs": "/docs/install-client#macos",
|
|
"url": "https://git.unom.io/unom/punktfunk/releases"
|
|
},
|
|
{
|
|
"id": "apple-client",
|
|
"name": "iPhone, iPad, Apple TV",
|
|
"installs": "client",
|
|
"packageManager": "testflight",
|
|
"docs": "/docs/install-client#ios-ipados-apple-tv",
|
|
"url": "https://testflight.apple.com/join/Qr7uSemk"
|
|
},
|
|
{
|
|
"id": "android-client",
|
|
"name": "Android / Android TV",
|
|
"installs": "client",
|
|
"packageManager": "play",
|
|
"docs": "/docs/install-client#android",
|
|
"url": "https://play.google.com/store/apps/details?id=io.unom.punktfunk"
|
|
}
|
|
]
|
|
}
|