From 85b13d07a7dd80162c932ea2143d90eac0b01dcb Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 1 Sep 2026 13:49:05 +0000 Subject: [PATCH] Fix wolf.sh: mount /home/retro/.local/share, not just .config MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Confirmed live: Dolphin's "data is corrupted" / "could not write to/read from Wii system memory" was ~/.local/share/dolphin-emu (the emulated Wii NAND) not existing at all inside the container — ls: cannot access '/home/retro/.local/share/dolphin-emu/': No such file or directory Only /home/retro/.config had a persistent mount (retro-home, added earlier this session for the RetroArch permission-denied fix) — /home/retro/.local/share, the other half of the XDG base directory split many apps use (config vs. actual data), was never addressed and started completely empty on every container launch. Any NAND state Dolphin wrote mid-session vanished the moment that container was torn down, which is consistent with "corrupted" rather than merely "empty" if a session ended mid-write. Same fix as the earlier .config mount: a new retro-home-data host directory mounted at /home/retro/.local/share in both the esde and retroarch app profiles (both CATALOG copies), forced to 1000:1000 ownership like the other retro-home dirs since the container's retro user is hardcoded to that uid regardless of the host account. --- services/wolf.sh | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/services/wolf.sh b/services/wolf.sh index 5629dac..74ca723 100644 --- a/services/wolf.sh +++ b/services/wolf.sh @@ -753,7 +753,7 @@ UDEV "$GAME_STORAGE_DIR/steam-cache" \ "$GAME_STORAGE_DIR/bios" "$GAME_STORAGE_DIR/retroarch/cores" \ "$GAME_STORAGE_DIR/retroarch/shaders" "$GAME_STORAGE_DIR/retroarch/overlays" \ - "$GAME_STORAGE_DIR/retro-home" + "$GAME_STORAGE_DIR/retro-home" "$GAME_STORAGE_DIR/retro-home-data" # ── Wolf state folder on the game drive ─────────────────────────────────── # This is the clean way to keep Steam (and everything else) off the OS @@ -805,13 +805,17 @@ UDEV chown -R "$ACTUAL_USER:$ACTUAL_USER" "$GAME_STORAGE_DIR" 2>/dev/null || true # The GoW app containers' 'retro' user is hardcoded to uid 1000 regardless - # of what ACTUAL_USER's own uid happens to be — force these two directly - # onto 1000:1000 so they're writable inside the container even when - # ACTUAL_USER isn't uid 1000. Both are mounted at/under /home/retro/.config - # (see the esde/retroarch CATALOG mounts) — retro-home in particular is - # what /home/retro/.config itself binds to, so anything an app writes - # there directly (Waybar, Sway, RetroArch's own state) needs this. - chown -R 1000:1000 "$GAME_STORAGE_DIR/retro-home" "$GAME_STORAGE_DIR/retroarch" 2>/dev/null || true + # of what ACTUAL_USER's own uid happens to be — force these directly onto + # 1000:1000 so they're writable inside the container even when + # ACTUAL_USER isn't uid 1000. retro-home/retro-home-data back + # /home/retro/.config and /home/retro/.local/share respectively (see the + # esde/retroarch CATALOG mounts) — apps split state across both XDG dirs + # (Waybar/Sway/RetroArch's own config lives under .config; Dolphin's + # emulated Wii NAND in particular lives under .local/share/dolphin-emu — + # confirmed live: "data is corrupted" / "could not write to/read from Wii + # system memory" was this directory not existing at all, since only + # .config had a persistent mount before this). + chown -R 1000:1000 "$GAME_STORAGE_DIR/retro-home" "$GAME_STORAGE_DIR/retro-home-data" "$GAME_STORAGE_DIR/retroarch" 2>/dev/null || true log_success "Storage layout: $GAME_STORAGE_DIR/{roms//,steam,saves,media,emulators,...}" log_info "ES-DE ROM directories pre-created. Drop ROMs in the matching subfolder." @@ -1444,6 +1448,7 @@ CATALOG = { f'{games}/media:/media:rw', f'{games}/bios:/home/retro/bioses:rw', f'{games}/retro-home:/home/retro/.config:rw', + f'{games}/retro-home-data:/home/retro/.local/share:rw', f'{games}/retroarch:/home/retro/.config/retroarch:rw', f'{games}/emulators:/mnt/games/emulators:rw', f'{games}/emulators:/home/retro/Applications:rw'], @@ -1469,6 +1474,7 @@ CATALOG = { f'{games}/saves:/mnt/games/saves:rw', f'{games}/bios:/home/retro/bioses:rw', f'{games}/retro-home:/home/retro/.config:rw', + f'{games}/retro-home-data:/home/retro/.local/share:rw', f'{games}/retroarch:/home/retro/.config/retroarch:rw'], env=STD_ENV, cap_add=STD_CAP, security_opt=[], ipc_mode='host', ulimits=[], privileged=False, @@ -2743,6 +2749,7 @@ CATALOG = { f'{games}/media:/media:rw', f'{games}/bios:/home/retro/bioses:rw', f'{games}/retro-home:/home/retro/.config:rw', + f'{games}/retro-home-data:/home/retro/.local/share:rw', f'{games}/retroarch:/home/retro/.config/retroarch:rw', f'{games}/emulators:/mnt/games/emulators:rw', f'{games}/emulators:/home/retro/Applications:rw'], @@ -2768,6 +2775,7 @@ CATALOG = { f'{games}/saves:/mnt/games/saves:rw', f'{games}/bios:/home/retro/bioses:rw', f'{games}/retro-home:/home/retro/.config:rw', + f'{games}/retro-home-data:/home/retro/.local/share:rw', f'{games}/retroarch:/home/retro/.config/retroarch:rw'], env=STD_ENV, cap_add=STD_CAP, security_opt=[], ipc_mode='host', ulimits=[], privileged=False,