Skip to content

Add Fedora as variant alongside Ubuntu defaults#305

Merged
ABeltramo merged 27 commits intomasterfrom
fedora-variant-images
Apr 19, 2026
Merged

Add Fedora as variant alongside Ubuntu defaults#305
ABeltramo merged 27 commits intomasterfrom
fedora-variant-images

Conversation

@JBailes
Copy link
Copy Markdown
Contributor

@JBailes JBailes commented Apr 2, 2026

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.

  • Adds self-contained build-fedora/ directories for every image
  • Adds variant input to the reusable CI workflow, controlling build path, tag suffix, cache keys, and artifact names
  • Adds a parallel Fedora build chain in auto-build.yml (runs alongside the unchanged Ubuntu chain)
  • Applies the is_fork CI detection fixes from WIP: Move GOW images to Fedora #282
  • Fixes steamos-dbus-watchdog.sh duplicate -shutdown line
  • Cleans up Debian-isms (DEBIAN_FRONTEND, NEEDRESTART_SUSPEND) from Fedora Dockerfiles

Images with Fedora variants

Image Fedora approach
base Fedora 43 base with dnf
base-app Mesa/Gamescope/Sway via dnf
base-emu RPM Fusion retroarch + AppImage emulators
pulseaudio alsa-lib + pulseaudio via dnf
firefox dnf install firefox
steam RPM Fusion + custom steam.sh wrapper
retroarch RPM Fusion
kodi dnf
xfce @xfce-desktop-environment group
prismlauncher COPR repo
pegasus AppImage approach
es-de AppImage (distro-agnostic)
heroic-games-launcher RPM + Wine from RPM Fusion
lutris dnf + Wine + patched bwrap

Tagging

Event Ubuntu (unchanged) Fedora
Push to master edge edge-fedora, fedora, fedora-43
Tag v1.2.3 1.2.3, 1, latest 1.2.3-fedora, 1-fedora
Branch push branch-name branch-name-fedora

Directory layout

Each image gets a build-fedora/ alongside its existing build/:

images/base/build/          ← Ubuntu (untouched)
images/base/build-fedora/   ← Fedora (new)
...same pattern for all images...

CI structure

Ubuntu chain (unchanged):
  base → base-app → base-emu → emus (pegasus, es-de)
                  → apps (all 9 apps)

Fedora chain (new, runs in parallel):
  base-fedora → base-app-fedora → base-emu-fedora → emus-fedora (pegasus, es-de)
                                → apps-fedora (all 9 apps)

Test plan

  • Ubuntu CI chain produces identical images/tags as before
  • Fedora CI chain builds all images
  • ghcr.io/games-on-whales/steam:edge → Ubuntu
  • ghcr.io/games-on-whales/steam:edge-fedora → Fedora
  • ghcr.io/games-on-whales/steam:fedora → Fedora (standalone tag)
  • Wine/32-bit apps (lutris, heroic) build successfully on Fedora

@JBailes JBailes changed the base branch from dev-fedora-images to master April 2, 2026 16:43
@MNarath1
Copy link
Copy Markdown

MNarath1 commented Apr 3, 2026

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.

@JBailes
Copy link
Copy Markdown
Contributor Author

JBailes commented Apr 3, 2026

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.

@ApexArray
Copy link
Copy Markdown

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?

@MNarath1
Copy link
Copy Markdown

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

@MNarath1
Copy link
Copy Markdown

Its already merged into another branch so i guess it got just automatically build

@MNarath1
Copy link
Copy Markdown

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

Comment on lines +25 to +26
mkdir -p "$STEAMDIR/debian-installation"
touch "$STEAMDIR/debian-installation/.cef-enable-remote-debugging"
Copy link
Copy Markdown

@MNarath1 MNarath1 Apr 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
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)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The debian installation directory is redundant since its no longer used.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I will probably add a seperate PR for the Ubuntu side too but this would fix it immidiatly for the fedora image.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

--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
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

when trying to start the xfce container i get back
7/opt/gow/startdbus: line 2: service: command not found

JBailes pushed a commit that referenced this pull request Apr 11, 2026
- 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>
@MNarath1
Copy link
Copy Markdown

xfce now fails with

wolf-1  | ,bash: line 1: startxfce4: command not found

@JBailes JBailes force-pushed the fedora-variant-images branch from 53d4d1f to e175ac1 Compare April 11, 2026 18:23
Copy link
Copy Markdown

@MNarath1 MNarath1 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment on lines +10 to +11
export WINEPREFIX="$HOME/.local/share/WolfSteam/pfx"
export STEAM_COMPAT_DATA_PATH="$WINEPREFIX"
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Suggested change
export WINEPREFIX="$HOME/.local/share/WolfSteam/pfx"
export STEAM_COMPAT_DATA_PATH="$WINEPREFIX"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@MNarath1
Copy link
Copy Markdown

MNarath1 commented Apr 17, 2026

Updating to the latest image caused the container to immidiatly crash this should have been caused by the two latest commits

wolf-1  | 15:10:19.022806349 DEBUG | [DOCKER] Container logs: 
wolf-1  | [2026-04-17 17:10:18] 
wolf-1  | J[2026-04-17 17:10:18] [ /etc/cont-init.d/10-setup_user.sh: executing... ]
wolf-1  | 7[2026-04-17 17:10:18] **** Configure default user ****
wolf-1  | K[2026-04-17 17:10:18] Setting default user uid=1000(retro) gid=1000(retro)
wolf-1  | Auseradd: warning: the home directory /home/retro already exists.
wolf-1  | ;useradd: Not copying any file from skel directory into it.
wolf-1  | +[2026-04-17 17:10:18] Setting umask to 000
wolf-1  | >[2026-04-17 17:10:18] Ensure retro home directory is writable
wolf-1  | 9[2026-04-17 17:10:18] Ensure XDG_RUNTIME_DIR is writable
wolf-1  |  DONE
wolf-1  | [2026-04-17 17:10:18] 
wolf-1  | M[2026-04-17 17:10:18] [ /etc/cont-init.d/15-setup_devices.sh: executing... ]
wolf-1  | 2[2026-04-17 17:10:18] **** Configure devices ****
wolf-1  | )[2026-04-17 17:10:18] Exec device groups
wolf-1  | :[2026-04-17 17:10:18] Path '/dev/input/*' is not present.
wolf-1  | :[2026-04-17 17:10:18] Path '/dev/nvidia*' is not present.
wolf-1  | B[2026-04-17 17:10:18] Adding user 'retro' to groups: video,render
wolf-1  |  DONE
wolf-1  | [2026-04-17 17:10:18] 
wolf-1  | F[2026-04-17 17:10:18] [ /etc/cont-init.d/30-nvidia.sh: executing... ]
wolf-1  | [2026-04-17 17:10:18] 
wolf-1  | K[2026-04-17 17:10:18] [ /etc/cont-init.d/init-gamescope.sh: executing... ]
wolf-1  | [2026-04-17 17:10:18] 
wolf-1  | L[2026-04-17 17:10:18] [ /etc/cont-init.d/system-services.sh: executing... ]
wolf-1  | +[2026-04-17 17:10:18] *** DBus started ***
wolf-1  | L/etc/cont-init.d/system-services.sh: line 10: bluetoothd: command not found
wolf-1  | ,[2026-04-17 17:10:18] *** Bluez started ***
wolf-1  | 5[2026-04-17 17:10:18] *** NetworkManager started ***
wolf-1  | 5[2026-04-17 17:10:18] *** D-Bus Watchdog started ***
wolf-1  | 3[2026-04-17 17:10:18] *** Decky Loader started ***
wolf-1  | [[2026-04-17 17:10:18] [steamos-dbus-watchdog] Starting D-Bus watcher for Steam shutdown...
wolf-1  | O[2026-04-17 17:10:18] Launching the container's startup script as user 'retro'
wolf-1  | '[2026-04-17 17:10:18] Steam startup.sh
wolf-1  | KClaimed global gamescope stats session at "/run/user/wolf/gamescope-stats"
wolf-1  | S[gamescope] [Info]  console: gamescope version  (gcc 15.2.1)
wolf-1  | GNo CAP_SYS_NICE, falling back to regular-priority compute and threads.
wolf-1  | Performance will be affected.
wolf-1  | j[gamescope] [Info]  scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts'
wolf-1  | w[gamescope] [Info]  scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope'
wolf-1  | ~[gamescope] [Info]  scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/common'
wolf-1  | �[gamescope] [Info]  scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/inspect.lua' (id: 0)
wolf-1  | �[gamescope] [Info]  scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/modegen.lua' (id: 1)
wolf-1  | �[gamescope] [Info]  scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/util.lua' (id: 2)
wolf-1  | �[gamescope] [Info]  scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/displays'
wolf-1  | �[gamescope] [Info]  scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/asus.rogally.lcd.lua' (id: 3)
wolf-1  | �[gamescope] [Info]  scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/deckhd.steamdeck.deckhd-lcd.lua' (id: 4)
wolf-1  | �[gamescope] [Info]  scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/gpd.win4.lcd.lua' (id: 5)
wolf-1  | �[gamescope] [Info]  scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongo.lcd.lua' (id: 6)
wolf-1  | �[gamescope] [Info]  scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/lenovo.legiongos.lcd.lua' (id: 7)
wolf-1  | �[gamescope] [Info]  scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/onexplayer.f1.oled.lua' (id: 8)
wolf-1  | �[gamescope] [Info]  scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.lcd.lua' (id: 9)
wolf-1  | �[gamescope] [Info]  scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.oled.lua' (id: 10)
wolf-1  | �[gamescope] [Info]  scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/zotac.zone.oled.lua' (id: 11)
wolf-1  | d[gamescope] [Info]  scriptmgr: Loading scripts from: '/etc/gamescope/scripts'
wolf-1  | g[gamescope] [Warn]  scriptmgr: Directory '/etc/gamescope/scripts' does not exist
wolf-1  | s[gamescope] [Info]  scriptmgr: Loading scripts from: '/home/retro/.config/gamescope/scripts'
wolf-1  | v[gamescope] [Warn]  scriptmgr: Directory '/home/retro/.config/gamescope/scripts' does not exist
wolf-1  | �[gamescope] [Info]  vulkan: selecting physical device 'AMD Radeon RX 7900 XTX (RADV NAVI31)': queue family 1 (general queue family 0)
wolf-1  | `[gamescope] [Info]  vulkan: physical device supports DRM format modifiers
wolf-1  | n[gamescope] [Info]  wlserver: [backend/headless/backend.c:67] Creating headless backend
wolf-1  | I[gamescope] [Info]  xdg_backend: Seat name: seat-0
wolf-1  | O[gamescope] [Info]  xdg_backend: Initted Wayland backend
wolf-1  | \[gamescope] [Info]  vulkan: supported DRM formats for sampling usage:
wolf-1  | F[gamescope] [Info]  vulkan:   AR24 (0x34325241)
wolf-1  | F[gamescope] [Info]  vulkan:   XR24 (0x34325258)
wolf-1  | F[gamescope] [Info]  vulkan:   AB24 (0x34324241)
wolf-1  | F[gamescope] [Info]  vulkan:   XB24 (0x34324258)
wolf-1  | F[gamescope] [Info]  vulkan:   RG16 (0x36314752)
wolf-1  | F[gamescope] [Info]  vulkan:   AB4H (0x48344241)
wolf-1  | F[gamescope] [Info]  vulkan:   XB4H (0x48344258)
wolf-1  | F[gamescope] [Info]  vulkan:   AB30 (0x30334241)
wolf-1  | F[gamescope] [Info]  vulkan:   XB30 (0x30334258)
wolf-1  | F[gamescope] [Info]  vulkan:   AR30 (0x30335241)
wolf-1  | F[gamescope] [Info]  vulkan:   XR30 (0x30335258)
wolf-1  | W[gamescope] [Info]  wlserver: Using explicit sync when available
wolf-1  | h[gamescope] [Info]  wlserver: Running compositor on wayland display 'gamescope-0'
wolf-1  | n[gamescope] [Info]  wlserver: [backend/headless/backend.c:17] Starting headless backend
wolf-1  | h[gamescope] [Info]  wlserver: Successfully initialized libei for input emulation!
wolf-1  | �[gamescope] [Info]  wlserver: [xwayland/sockets.c:119] Created /tmp/.X11-unix ourselves -- other users will be unable to create X11 UNIX sockets of their own
wolf-1  | d[gamescope] [Info]  wlserver: [xwayland/server.c:107] Starting Xwayland on :0
wolf-1  | 1The XKEYBOARD keymap compiler (xkbcomp) reports:
wolf-1  | 4> Warning:          Could not resolve keysym XF86OK
wolf-1  | 6> Warning:          Could not resolve keysym XF86GoTo
wolf-1  | <> Warning:          Could not resolve keysym XF86VendorLogo
wolf-1  | I> Warning:          Could not resolve keysym XF86MediaSelectProgramGuide
wolf-1  | I> Warning:          Could not resolve keysym XF86MediaSelectProgramGuide
wolf-1  | A> Warning:          Could not resolve keysym XF86MediaSelectHome
wolf-1  | C> Warning:          Could not resolve keysym XF86MediaLanguageMenu
wolf-1  | @> Warning:          Could not resolve keysym XF86MediaTitleMenu
wolf-1  | B> Warning:          Could not resolve keysym XF86AudioChannelMode
wolf-1  | ?> Warning:          Could not resolve keysym XF86MediaSelectPC
wolf-1  | ?> Warning:          Could not resolve keysym XF86MediaSelectTV
wolf-1  | B> Warning:          Could not resolve keysym XF86MediaSelectCable
wolf-1  | @> Warning:          Could not resolve keysym XF86MediaSelectVCR
wolf-1  | D> Warning:          Could not resolve keysym XF86MediaSelectVCRPlus
wolf-1  | F> Warning:          Could not resolve keysym XF86MediaSelectSatellite
wolf-1  | ?> Warning:          Could not resolve keysym XF86MediaSelectCD
wolf-1  | A> Warning:          Could not resolve keysym XF86MediaSelectTape
wolf-1  | B> Warning:          Could not resolve keysym XF86MediaSelectRadio
wolf-1  | B> Warning:          Could not resolve keysym XF86MediaSelectTuner
wolf-1  | => Warning:          Could not resolve keysym XF86MediaPlayer
wolf-1  | E> Warning:          Could not resolve keysym XF86MediaSelectTeletext
wolf-1  | F> Warning:          Could not resolve keysym XF86MediaSelectAuxiliary
wolf-1  | ?> Warning:          Could not resolve keysym XF86MediaPlaySlow
wolf-1  | A> Warning:          Could not resolve keysym XF86NumberEntryMode
wolf-1  | C> Warning:          Could not resolve keysym XF86RefreshRateToggle
wolf-1  | ?> Warning:          Could not resolve keysym XF86Accessibility
wolf-1  | >> Warning:          Could not resolve keysym XF86DoNotDisturb
wolf-1  | 2Errors from xkbcomp are not fatal to the X server
wolf-1  | N[gamescope] [Error] pipewire: pw_context_connect failed
wolf-1  | EWarning: failed to setup PipeWire, screen capture won't be available
wolf-1  | c[gamescope] [Info]  xwm: Embedded, no cursor set. Using left_ptr by default.
wolf-1  | S[gamescope] [Info]  edid: Patching res 800x1280 -> 2560x1600
wolf-1  | A[gamescope] [Info]  vblank: Using timerfd.
wolf-1  | T[gamescope] [Info]  xdg_backend: Post-Initted Wayland backend
wolf-1  | Ddbus-run-session: failed to exec 'steam': No such file or directory

Comment thread images/base-app/build-fedora/Dockerfile Outdated
Comment on lines -66 to -68
# Add /usr/games/ to $PATH in order to be able to run gamescope
ENV PATH="/usr/games/:${PATH}"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

# 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.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Without this steam will never startup

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No longer applies.

Copy link
Copy Markdown
Member

@ABeltramo ABeltramo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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:
Image

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.

@JBailes
Copy link
Copy Markdown
Contributor Author

JBailes commented Apr 18, 2026

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: Image

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.

Already pushed a PR fixing this.

JBailes and others added 6 commits April 18, 2026 19:42
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)
JBailes and others added 19 commits April 18, 2026 19:42
- 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.
@JBailes JBailes force-pushed the fedora-variant-images branch from 2733db1 to c4094ef Compare April 18, 2026 19:43
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.
@JBailes
Copy link
Copy Markdown
Contributor Author

JBailes commented Apr 18, 2026

@ABeltramo
image

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.
@ABeltramo
Copy link
Copy Markdown
Member

I think this is good to go, we are creating newer :edge builds anyway so I think it's time to merge this. Thanks for all your work @JBailes time to migrate users to the new versions!

@ABeltramo ABeltramo merged commit 4958bea into master Apr 19, 2026
104 checks passed
@ABeltramo ABeltramo deleted the fedora-variant-images branch April 19, 2026 18:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants