Merge pull request 'packaging/windows: fix BTRFS+QEMU boot-loop, document what's confirmed' (#3) from fix/id-space-strike-request-perf-2026-08-11 into master

Reviewed-on: #3
This commit is contained in:
Dominik Moritz Roth 2026-08-11 21:17:18 +02:00
commit 7a405ad263
2 changed files with 33 additions and 6 deletions

View File

@ -6,12 +6,28 @@ machine and no GitHub, by booting a real Windows VM inside a container
hood, no license key needed for the eval install it fetches automatically) hood, no license key needed for the eval install it fetches automatically)
and driving the whole build over a shared folder. and driving the whole build over a shared folder.
**Status: written, not yet run against a real boot.** Everything here **Status: has actually been run.** Two real environment issues hit and
follows dockur/windows's and WiX's documented mechanics, but there's no fixed so far (both already applied in this directory, see "Confirmed
KVM/Windows available in the environment this was authored in to actually issues hit" below); Windows install itself was still in progress as of
exercise it end to end. Treat the first run as a debugging session, not a last check. `oem/install.bat` onward (MSYS2/GTK4/WiX provisioning, the
push-button success — watch it happen at http://localhost:8006 (dockur's actual .msi packaging) has NOT been reached/exercised yet — treat that
noVNC viewer) so you can see where it's stuck if it stalls. part as still a debugging session, not a push-button success. Watch it
happen at http://localhost:8006 (dockur's noVNC viewer) if it stalls.
## Confirmed issues hit (on Fedora + BTRFS)
- **SELinux blocks the bind mounts** ("Storage folder (/storage) is not
writeable!") — fixed with `:Z` on every volume in `docker-compose.yml`.
Harmless no-op on a host without SELinux.
- **BTRFS + QEMU disk images boot-loop Windows Setup for hours** with no
error, just the same boot-manager log lines repeating forever and the
disk barely growing — dockur/windows warns about this itself
("you are using the BTRFS filesystem for /storage, this might
introduce issues with Windows Setup!"), and on this host it wasn't
idle chatter. Fixed by disabling copy-on-write on `storage/` before
the VM ever writes to it (`chattr +C`, only affects files created
after it's set, so it needs an empty directory) — `build_windows.sh`
now does this itself on every run. No-op on a non-btrfs filesystem.
## How it fits together ## How it fits together

View File

@ -30,6 +30,17 @@ fi
command -v docker >/dev/null 2>&1 || { echo "docker not found." >&2; exit 1; } command -v docker >/dev/null 2>&1 || { echo "docker not found." >&2; exit 1; }
mkdir -p storage oem shared/src shared/dist "$OUT_DIR" mkdir -p storage oem shared/src shared/dist "$OUT_DIR"
# dockur/windows itself warns about this ("you are using the BTRFS
# filesystem for /storage, this might introduce issues with Windows
# Setup!") and it's not idle: confirmed on this host as a genuine
# multi-hour Windows Setup boot-loop (repeating the same boot-manager
# log lines forever, disk barely growing) -- QEMU disk images on a
# copy-on-write filesystem are a known bad combination. +C only takes
# effect for files created AFTER it's set on an empty directory, so
# this only helps on a fresh/emptied storage/; it's a no-op (harmless,
# chattr just errors quietly) on a non-btrfs filesystem or an
# already-populated storage/ from a previous run.
chattr +C storage 2>/dev/null || true
echo "==> starting the Windows build VM (docker compose up -d)" echo "==> starting the Windows build VM (docker compose up -d)"
docker compose up -d docker compose up -d