Added bubblewrap / apparmor fixes and diagnostic tools for troubleshooting it on related distros.

This commit is contained in:
2026-09-03 22:16:43 +02:00
parent ecdea827ac
commit 5be4ace6c2
9 changed files with 1039 additions and 9 deletions

View File

@@ -10,6 +10,7 @@ import platform
import shutil
from typing import Mapping
from .container_host import ContainerHostReport, inspect_container_host
from .launcher import find_wine_tools
from .paths import AppPaths
from .runtime import find_steam_proton7
@@ -37,6 +38,7 @@ class DoctorReport:
architecture: str
display_backend: str
tools: list[ToolStatus]
container_host: ContainerHostReport
package_hint: str | None
warnings: list[str]
@@ -51,6 +53,8 @@ def inspect_host(environment: Mapping[str, str] | None = None) -> DoctorReport:
version = os_release.get("VERSION_ID", "unknown")
wine_tools = find_wine_tools()
umu_path = _umu_path(env)
container_host = inspect_container_host(environment=env)
container_required = umu_path is not None
tools = [
ToolStatus(
"python3",
@@ -100,6 +104,12 @@ def inspect_host(environment: Mapping[str, str] | None = None) -> DoctorReport:
distribution in ARCH_FAMILY_DISTRIBUTIONS,
"Steam Runtime container; managed automatically when needed",
),
ToolStatus(
"bubblewrap",
container_host.bwrap_path,
container_required,
"user-namespace sandbox required by UMU and pressure-vessel",
),
ToolStatus(
"vulkaninfo",
shutil.which("vulkaninfo"),
@@ -118,15 +128,30 @@ def inspect_host(environment: Mapping[str, str] | None = None) -> DoctorReport:
"No local game runtime is installed yet; run runtime-bootstrap to fetch the "
"pinned official UMU helper. Startup and Play also retry automatically."
)
if container_required and not container_host.ready:
warnings.append(
container_host.recommendation
or "The Steam Runtime Bubblewrap sandbox is unavailable."
)
if container_host.broken_umu_profile_link:
warnings.append(
"UMU's AppArmor profile link is broken and may prevent profiles from "
"loading after reboot; run `pristontale-eu container-host --repair`."
)
warnings.extend(_arch_runtime_warnings(distribution, platform.machine()))
required_ok = all(item.path is not None for item in tools if item.required)
return DoctorReport(
ok=required_ok,
ok=(
required_ok
and (not container_required or container_host.ready)
and not container_host.broken_umu_profile_link
),
distribution=distribution,
version=version,
architecture=platform.machine(),
display_backend="wayland" if env.get("WAYLAND_DISPLAY") else "x11",
tools=tools,
container_host=container_host,
package_hint=_package_hint(distribution),
warnings=warnings,
)
@@ -160,21 +185,22 @@ def _package_hint(distribution: str) -> str | None:
if distribution in {"ubuntu", "debian", "linuxmint", "pop"}:
return (
"Install Python/Tk, Wine (64- and 32-bit), Winetricks, "
"Cabextract, OpenSSL, and both 64- and 32-bit Vulkan drivers with APT."
"Cabextract, OpenSSL, Bubblewrap, and both 64- and 32-bit Vulkan "
"drivers with APT. Ubuntu also needs its AppArmor tools."
)
if distribution in {"fedora", "nobara"}:
return (
"Install python3-tkinter, wine, winetricks, cabextract, openssl, "
"Install python3-tkinter, wine, winetricks, bubblewrap, cabextract, openssl, "
"and the matching 32-bit Vulkan driver with DNF."
)
if distribution in ARCH_FAMILY_DISTRIBUTIONS:
return (
"Install python, tk, wine, winetricks, umu-launcher, cabextract, "
"Install python, tk, wine, winetricks, umu-launcher, bubblewrap, cabextract, "
"openssl, and the matching lib32 Vulkan and gstreamer dependencies with Pacman."
)
if distribution in {"opensuse-tumbleweed", "opensuse-leap", "suse"}:
return (
"Install Python/Tk, Wine, Winetricks, Cabextract, OpenSSL, and "
"Install Python/Tk, Wine, Winetricks, Bubblewrap, Cabextract, OpenSSL, and "
"32-bit Vulkan support with Zypper."
)
return None