Add Fedora as variant alongside Ubuntu defaults#305
Conversation
|
Would it be possible to add protontricks into the steam image? Its usually a hassle if you have to use it to change the proton enviroment. And while it has become better there are still games that require it or in case you want to use mods. |
I might be interested in doing it, but not in this PR. This PR is already huge. |
|
I'm interested in trying this out. The current Ubuntu-based retroarch image randomly freezes on some games when using the Vulkan backend and I'm curious if a Fedora image would be more stable. Are these images ready to test, or is it still WIP? |
should be as easy as just changing the image tag in the config file with the fedora variants mentioned here https://github.com/games-on-whales/gow/pkgs/container/steam |
|
Its already merged into another branch so i guess it got just automatically build |
|
Using nested gamescope at first crashed the container but on second try it seems to work fine now an improvement over the ubuntu image since there nested gamescope is completly unusable |
| mkdir -p "$STEAMDIR/debian-installation" | ||
| touch "$STEAMDIR/debian-installation/.cef-enable-remote-debugging" |
There was a problem hiding this comment.
| mkdir -p "$STEAMDIR/debian-installation" | |
| touch "$STEAMDIR/debian-installation/.cef-enable-remote-debugging" | |
| touch "$STEAMDIR/.cef-enable-remote-debugging" | |
| ln -fs --no-target-directory "$STEAMDIR/compatibilitytools.d" "$STEAMDIR_LEGACY/compatibilitytools.d" | |
| ln -fs --no-target-directory "$STEAMDIR_LEGACY/steamapps" "$STEAMDIR/steamapps" |
With this change decky loader should work out of the box for people again.
With the symlink things like Decky's WineCellar Plugin should again work out of the box too
Last symlinks allows the lossless scaling plugin to detect the install of Lossless Scaling (has to be installed in the containers default Steam Library)
There was a problem hiding this comment.
The debian installation directory is redundant since its no longer used.
There was a problem hiding this comment.
I will probably add a seperate PR for the Ubuntu side too but this would fix it immidiatly for the fedora image.
There was a problem hiding this comment.
There is however still an issue with decky loader beeing unable to update last time i tried i haven't figured out a fix for that yet besides deleting the homebrew folder.
There was a problem hiding this comment.
--no-target-directory for the symlinks are needed otherwise ln treats the symlinks as actual paths to drop the file into if the symlink already exists.
| @@ -0,0 +1,2 @@ | |||
| #!/bin/bash | |||
| service dbus start | |||
There was a problem hiding this comment.
when trying to start the xfce container i get back
7/opt/gow/startdbus: line 2: service: command not found
- xfce: fix startdbus.sh failing with "service: command not found" on Fedora by invoking dbus-daemon directly - steam: drop redundant debian-installation path and add compatibilitytools.d/steamapps symlinks so Decky WineCellar and Lossless Scaling plugins work out of the box Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
xfce now fails with |
53d4d1f to
e175ac1
Compare
There was a problem hiding this comment.
I really do not like the idea of this Enviromental Variables but on the other side i haven't seen this path actually beeing used at all by Steam.
But even if it did trying to overwrite the Variable in the config doesn't work probably cause its set after the Enviromental Variables from the config already got applied.
Also even if it worked it would mess up Games for People that do not have cloud saves since they would not get migrated over.
| export WINEPREFIX="$HOME/.local/share/WolfSteam/pfx" | ||
| export STEAM_COMPAT_DATA_PATH="$WINEPREFIX" |
There was a problem hiding this comment.
This doesn't actually seem to do anything and even if it did it cannot be overwriten by Enviroment Variables set in the config i think this should just be removed
| export WINEPREFIX="$HOME/.local/share/WolfSteam/pfx" | |
| export STEAM_COMPAT_DATA_PATH="$WINEPREFIX" |
There was a problem hiding this comment.
If not removed these variables should be applied before the enviroment variables from the config.toml are applied for the container that way people can actually overwrite them if they don't want to use them.
|
Updating to the latest image caused the container to immidiatly crash this should have been caused by the two latest commits |
| # Add /usr/games/ to $PATH in order to be able to run gamescope | ||
| ENV PATH="/usr/games/:${PATH}" | ||
|
|
There was a problem hiding this comment.
# Add /usr/games/ to $PATH in order to be able to run gamescope ENV PATH="/usr/games/:${PATH}"
Needs to be added since the steam binary is part of this path.
There was a problem hiding this comment.
Without this steam will never startup
ABeltramo
left a comment
There was a problem hiding this comment.
I've manually reviewed and tested the following Fedora images:
- Steam - added a fix that should port all config and saves from a previous Ubuntu installtion if available
- Firefox - all good
- Retroarch - all good
- XFCE - needs fixes
Here's a screenshot highlighting the main issues:

I think we are very close to merge this, let's just make sure that we don't have massive regressions 😅 I'm going to test a bit more the other images later.
Add Fedora-based Docker images for base, base-app, firefox, and steam as an alternative to the existing Ubuntu images. Ubuntu remains the default; Fedora images are tagged with -fedora suffix (e.g. edge-fedora) plus standalone fedora and fedora-43 tags. - Add build-fedora/ directories with self-contained Fedora Dockerfiles and scripts for base, base-app, firefox, and steam - Add variant input to reusable workflow controlling build path, tag suffix, cache keys, and artifact names - Add parallel Fedora build chain in auto-build.yml - Fix is_fork detection in CI (replaces pull_request event checks) - Fix steamos-dbus-watchdog.sh duplicate -shutdown line - Clean up Debian-isms from Fedora Dockerfiles
Add build-fedora/ directories with Fedora Dockerfiles for: - base-emu (RPM Fusion retroarch + AppImage emulators) - pulseaudio (alsa-lib + pulseaudio via dnf) - retroarch (RPM Fusion) - kodi (dnf) - xfce (Fedora XFCE group + Firefox) - prismlauncher (COPR repo) - pegasus (AppImage approach) - es-de (AppImage, distro-agnostic) - heroic-games-launcher (RPM + Wine from RPM Fusion) - lutris (dnf + Wine + patched bwrap from RPM Fusion) Update auto-build.yml CI to add: - base-emu-fedora chain for emulator images - emus-fedora matrix (pegasus, es-de) - Full apps-fedora matrix with all images
- base-emu: replace removed xorg-x11-server-utils with xrandr - lutris: replace SDL2.i686 with sdl2-compat.i686, xorg-x11-server-utils with xrandr - heroic-games-launcher: replace SDL2.i686 with sdl2-compat.i686 - prismlauncher: remove java-17-openjdk and java-1.8.0-openjdk (unavailable on F43) - kodi: add RPM Fusion repos (kodi package lives there, not in base repos) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The merge job's digest download pattern digests-base-* was matching both digests-base-linux-amd64 (Ubuntu) and digests-base-fedora-linux-amd64 (Fedora), causing the Ubuntu base:sha-xxx tag to point to a manifest containing the Fedora digest. This made base-app (Ubuntu) fail with 'apt-get: command not found' since it inherited a Fedora image. Fix by prefixing variant artifacts: digests-fedora-base-linux-amd64, so digests-base-* only matches Ubuntu digests. Also move tag suffix from global flavor to per-tag suffix= to prevent standalone 'fedora' and 'fedora-43' tags from becoming 'fedora-fedora'.
- kodi: remove 'service dbus start' (not available on Fedora, handled at runtime by overlay script 99-startdbus.sh) - pegasus: remove fuseiso and compat-openssl11 (not in Fedora 43 repos)
- steam/lutris (both variants): change bwrap-builder stage from
ubuntu:25.04/fedora:43 to ${BASE_APP_IMAGE} to avoid Docker Hub
rate limits (429 Too Many Requests) from parallel pulls
- pegasus (fedora): use x11-static.zip instead of nonexistent AppImage
- Bump all actions to latest major versions supporting Node.js 24: checkout v4→v6, cache v4→v5, upload-artifact v4→v7, download-artifact v4→v8, metadata-action v5→v6, setup-qemu-action v3→v4, setup-buildx-action v3→v4, login-action v3→v4, build-push-action v6→v7 - Remove deprecated 'install: true' from setup-buildx-action - Add default BASE_APP_IMAGE to firefox/steam Fedora Dockerfiles to fix InvalidDefaultArgInFrom lint warning
- xfce: fix startdbus.sh failing with "service: command not found" on Fedora by invoking dbus-daemon directly - steam: drop redundant debian-installation path and add compatibilitytools.d/steamapps symlinks so Decky WineCellar and Lossless Scaling plugins work out of the box Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Adds three media-client apps following the existing per-app pattern, each with Ubuntu build/ and Fedora build-fedora/ variants: - plex: Plex HTPC .deb/.rpm pulled from plex.tv downloads API - emby: Emby Theater Electron tarball from GitHub releases - youtube: FreeTube .deb/.rpm from GitHub releases (ad-free YT client) All three wire into the apps and apps-fedora CI matrices in auto-build.yml. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- plex: install real Plex HTPC from the upstream tarball at artifacts.plex.tv, resolving the current version from the Flathub manifest (Plex only publishes HTPC for Linux via Flathub — no .deb/.rpm or AppImage exists) - emby: use the actual emby-theater .deb/.rpm assets from the emby-theater-electron GitHub release (regex now matches the real names) - youtube: fetch FreeTube from /releases?per_page=1 since every FreeTube release is marked prerelease (so /releases/latest 404s), and fix Fedora regex to match amd64.rpm (FreeTube uses amd64 even on x86_64 rpms) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Plex does not publish .deb/.rpm/AppImage builds of HTPC for Linux and the raw tarball at artifacts.plex.tv is blocked by Cloudflare bot-management, so flatpak is the only reliable install path. Launch with `flatpak run tv.plex.PlexHTPC` at runtime. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Use public.ecr.aws/ubuntu/ubuntu and quay.io/fedora/fedora instead of docker.io to avoid Docker Hub pull rate limits, which have been failing PR builds with 429 errors. Both mirrors are operated by the respective vendors (Canonical / Red Hat) and are rate-limit-free.
The quay.io/fedora/fedora:43 base image ships with the ffmpeg-free subsystem preinstalled, which conflicts with the full ffmpeg package from rpmfusion-free that base-emu requires. Pass --allowerasing so dnf swaps the preinstalled libswresample-free for the rpmfusion version.
If flatpak is not present in the image for any reason, the unguarded flatpak remote-add call combined with set -e crashes XFCE startup on first launch. Skip the flathub setup and log when flatpak is missing instead of failing the container.
…|| true The Fedora xfce image was shipping with zero packages installed from this RUN: gnome-software-plugin-flatpak is a Debian/Ubuntu name and doesn't exist on Fedora (the flatpak plugin is built into gnome-software itself), so dnf5 aborted the whole transaction with "No match for argument". The trailing `&& dnf remove -y foot 2>/dev/null || true && dnf clean all` then masked the failure under shell precedence ((A && B) || true) && D, so BuildKit saw exit 0 and cached an empty layer. Every later build imported that broken layer from the registry cache, which is why users hit `dbus-launch: command not found` and `startxfce4: command not found` at runtime even though CI was green. Drop gnome-software-plugin-flatpak and brace-group the foot removal so `|| true` can only ever mask that one command. Editing the Dockerfile also invalidates the BuildKit cache, forcing a real rebuild.
/usr/games/gamescope is Ubuntu-specific; Fedora installs gamescope to /usr/bin/gamescope. Use command -v gamescope in both init-gamescope.sh and launch-comp.sh so the binary is found regardless of distro. Also guard the chown in init-gamescope.sh against gamescope being absent, preventing a hard container crash on startup. Fixes wolf:fedora dying at boot with: chown: cannot access '/usr/games/gamescope': No such file or directory
PR #310 only updated images/base-app/build/scripts/ (Ubuntu). The Fedora copies under images/base-app/build-fedora/scripts/ kept the original fragile pattern, so the gamescope path bug still bites the :fedora-43 image: - init-gamescope.sh used `chown ... $(which gamescope)`. The Fedora base image (quay.io/fedora/fedora:43 + minimal additions) does not ship the `which` package, so $(which gamescope) expands to empty, chown errors with "missing operand", and set -e kills container init. Mirror PR #310: resolve via `command -v gamescope` and skip the chown if the binary is absent. - launch-comp.sh called bare `gamescope`. Use `"$(command -v gamescope)"` so the script keeps working if PATH is altered, matching the Ubuntu variant. - Dockerfile carried `ENV PATH="/usr/games/:${PATH}"` from the Ubuntu Dockerfile. On Fedora gamescope is at /usr/bin/gamescope; the /usr/games/ prefix is meaningless. Remove it together with its comment.
/usr/games is not on PATH on Fedora, which caused 'steam: command not found' at startup. Place the custom wrapper at /usr/bin/steam, the same path the removed distro binary occupied.
Upstream now ships aarch64 and x64 AppImages alongside the SteamDeck build. The previous jq filter only excluded SteamDeck, so wget -O received two URLs and concatenated both downloads into one file, producing an unparseable binary (Exec format error at launch). Select ES-DE_x64.AppImage by exact name; es-de only builds linux/amd64.
The inline `# comment \` lines inside the `dnf install` continuation were treated as a bash comment that swallowed the backslash, splitting the package list so most of it ran as separate (failing) commands. Collapse the comments out of the continuation. For flatpak integration: register Flathub as a system remote, pre-seed AppStream metadata at build time so gnome-software surfaces flatpak apps on first launch, and drop a dconf override setting `packaging-format-preference=['flatpak', 'rpm']` so the Software manager prefers Flathub over dnf/rpm.
2733db1 to
c4094ef
Compare
The migration path runs when a user has an existing Ubuntu Steam dir (~/.steam/debian-installation) and is launching the Fedora image for the first time. On a fresh Fedora profile the destination ~/.local/share/Steam doesn't exist yet, so `rm -r $STEAMDIR` dies with "No such file or directory", cont-init aborts, and Steam never starts — the Moonlight client just sees a black screen until the session times out. -r → -rf on both cleanup calls so missing directories are a no-op.
Installing @xfce-desktop-environment pulls in xfce-polkit, whose
autostart entry runs /usr/libexec/xfce-polkit at session start.
xfce-polkit calls polkit_unix_session_new_for_process_sync(), which
requires systemd-logind. The containerized Fedora session runs with a
plain entrypoint as PID 1 — no logind — so the call returns NULL and
xfce-polkit crashes:
CRITICAL: polkit_agent_listener_register_with_options:
assertion 'POLKIT_IS_SUBJECT (subject)' failed
XFCE's session manager then surfaces a "PolicyKitAgent" error dialog at
startup. Wolf streaming doesn't need interactive pkexec/gparted-style
privilege prompts, so just hide the autostart.
|
I think this is good to go, we are creating newer |


Summary
Builds on #282 by keeping Ubuntu as the default and adding Fedora as a tagged alternative, rather than replacing Ubuntu entirely. Adds Fedora variants for all GOW images.
build-fedora/directories for every imagevariantinput to the reusable CI workflow, controlling build path, tag suffix, cache keys, and artifact namesauto-build.yml(runs alongside the unchanged Ubuntu chain)is_forkCI detection fixes from WIP: Move GOW images to Fedora #282steamos-dbus-watchdog.shduplicate-shutdownlineDEBIAN_FRONTEND,NEEDRESTART_SUSPEND) from Fedora DockerfilesImages with Fedora variants
Tagging
edgeedge-fedora,fedora,fedora-431.2.3,1,latest1.2.3-fedora,1-fedorabranch-namebranch-name-fedoraDirectory layout
Each image gets a
build-fedora/alongside its existingbuild/:CI structure
Test plan
ghcr.io/games-on-whales/steam:edge→ Ubuntughcr.io/games-on-whales/steam:edge-fedora→ Fedoraghcr.io/games-on-whales/steam:fedora→ Fedora (standalone tag)