Skip to content

Rhel9 - #189

Closed
dGilli wants to merge 336 commits into
linuxserver:fedora42from
dGilli:rhel9
Closed

Rhel9#189
dGilli wants to merge 336 commits into
linuxserver:fedora42from
dGilli:rhel9

Conversation

@dGilli

@dGilli dGilli commented Aug 28, 2026

Copy link
Copy Markdown

linuxserver.io


  • I have read the contributing guideline and understand that I have made the correct modifications

Description:

Benefits of this PR and context:

How Has This Been Tested?

Source / References:

dGilli added 25 commits August 27, 2026 14:37
…, decisions ADR (F31-F35/F40/F41), state flip
…ings F42-F45, NRP recipe reference, progress refresh
…12-pkg delta, XDG_RUNTIME_DIR), exact startwm.sh code, watchdog match proof
… chown, nautilus flag, dbus socket), autonomous QA all pass + edge 4/4
… — task 2

Image dgilli/baseimage-selkies:rhel9-p1-gnome (f54738a5b9d4), 5 build cycles.
Revert point: tag pre-gnome-desktop -> b4c199f.

- Dockerfile.rhel9: +12 GNOME packages (AppStream, F42/F43/F47): gnome-shell
  40.10 + mutter + gnome-session set + gnome-settings-daemon + nautilus 40.2 +
  gnome-terminal + gedit + gnome-calculator + gnome-screenshot + firefox 140
  ESR + glx-utils (glxinfo for the GLX-ready wait). xsetroot and
  dbus-run-session were already present (F46)
- root/defaults/startwm.sh: 5th distro-aware no-op branch — direct gnome-shell
  launch (NRP-proven pattern F44: --x11 --sm-disable, no gnome-session, which
  bypasses welcome screen/keyring/logind/lock); deterministic session bus via
  explicit dbus-daemon --address (F51: EL9 dbus-run-session drops a random
  /tmp socket other apps cannot discover); per-boot XDG_RUNTIME_DIR=
  /tmp/runtime-abc (F48: /config/.XDG is on the persistent volume); no
  auto-apps (user decision 2026-08-28 — clean desktop, apps via GNOME app
  grid). DESKTOP=openbox keeps the full openbox + autostart + RESTART_APP
  contract (svc-watchdog pgreps the sh process)
- init-selkies-config/run: +6 lines — chown /config/.cache to abc (F49: the
  base init-mods pip hook leaves it root-owned, which breaks GNOME app
  caches); its TERMINAL_NAMES list already covers gnome-terminal for
  DISABLE_TERMINALS hardening
- package_versions_rhel9.txt: regenerated (24 epel / 414 rhel9 / 220 ubi9-base
  + 40 python; EPEL key virtual pkg excluded by convention)
- findings F42-F51 in memory-bank/findings.md (separate MB commits)
…task doc, ADR, findings F42-F51, state COMPLETE
…tings at boot

Image dgilli/baseimage-selkies:rhel9-p1-gnome (99da8c1475f5), cycles 6-7.

- root/usr/share/backgrounds/slu-rhel.jpg: user-provided SLU/RHEL wallpaper
  (1920x1080 JPEG; moved from repo-root SLU-RHEL.jpg)
- root/defaults/startwm.sh: gnome branch sets org.gnome.desktop.background
  picture-uri/-dark + picture-options=spanned once the session bus is up;
  gsettings writes land in the dconf user DB under /config and are re-applied
  idempotently every boot (F52: RHEL9 enum is "spanned", not Fedora's
  "span" — c6's "span" was silently rejected, leaving default zoom)
- fixed stale dbus-socket comment (auto-apps were removed earlier)
…ned), task doc/README/progress/activeContext updates, ops-log
… c4->c7, ADR consequences/refs, toc ranges, task doc outcome/files/cycle table)
…AsNonRoot — rootful image drops in as-is; verified in NRP repo + docs, MCP has no deployment docs), F30 partial (user dev registry dgilli/selkies-rhel9, tag ceremony deferred to production)
…em R1 (deferred by user), progress/README/activeContext updates
…lli/selkies-rhel9

Image pushed: docker.io/dgilli/selkies-rhel9:latest (OCI manifest
sha256:462464663a88..., config = local c7 99da8c1475f5); verified
pull-by-digest + cold-boot smoke (web 200, ws 101, fresh-volume wallpaper).
- deploy/nrp-selkies-rhel9.yaml: NRP template shape (Deployment+Service+
  Ingress, nrp-workspace-* labels, haproxy) adapted to the LSIO-parity
  contract: Service 80->3000 only (selkies ws is same-origin via nginx
  /websocket -> internal 8082), USERNAME/PASSWORD nginx basic auth,
  /config + dshm volumes, NO securityContext (F28: NRP templates carry
  none), seccomp note for roadmap R1 (F55: docker default allows ptrace
  on kernel>=4.8); header documents the full NRP-env -> our-env mapping
  incl. inapplicable SELKIES_* vars for our selkies 348bc4f build
…i/selkies-rhel9:latest, NRP mapping (b97a611), F28/F30/F55 resolutions, build-deployment push recipe, task doc 280828_phase1-5-nrp-dev-push, state COMPLETE
…hboard app install/run now works)

Image dgilli/baseimage-selkies:rhel9-p1-gnome (5c835fb6a147, c8). Revert:
tag pre-r1-proot-apps -> 89f567a.
- Dockerfile.rhel9: upstream proot-apps section ported verbatim (latest
  linuxserver/proot-apps release tarball -> /proot-apps + pversion; static
  proot/jq/ncat, no dnf deps) at the upstream placement (after user perms).
  The shared init-selkies-config bootstrap then wires ~/.local/bin
  unmodified (F53: shipping /proot-apps was the only image-side gap)
- root/selkies-proot: RHEL9-guarded (distro-aware shared-tree pattern)
  bwrap stub loop before exec — F54's verified fix: glycin apps bundle
  bwrap whose user-ns availability test deadlocks inside proot's ptrace
  emulation (no-timeout await); the stub emits glycin's recognized
  'No permissions' string -> clean NotSandboxed fallback. Re-applied on
  every invocation (install/update re-extracts restore the real binary)
- Verified on fresh volume: /selkies-proot install+run filezilla ->
  FileZilla 3.68.1 rendered (WARNING: Glycin running without sandbox),
  marker-simulated re-extract re-stubbed, dash app entry created
…tic artifacts, 0.3.2), header image id, fix misaligned selkies line (pip version string contains spaces)
… F56 (shipping facts), task doc 280828_r1-proot-apps, roadmap/progress/toc/README/activeContext, dev registry re-push b70d42e3
…te (F30 re-push, README/progress/phase1-5 doc, activeContext F-range + task-2 final clarification, GNOME task doc artifact, techContext RHEL9 table -> shipped state (F41 cvt correction, GNOME default DE, proot-apps row), quick-start RHEL9 build/run/smoke recipe + where-things-are)
docker.io/dgilli/selkies-rhel9 is PRIVATE; production pin v4-llvmpipe = c8
5c835fb6a147 (manifest b70d42e3...; :latest tracks dev).
- deploy/nrp/selkies-rhel9.yaml.template: drop-in NRP placeholder template
  (standard set only — renderer-compatible): Service 8080 -> containerPort
  3000 (ws same-origin via nginx /websocket; no 8082 exposure), USERNAME=abc
  + PASSWORD secretRef (their PASSWD/BASIC_AUTH_* vars are foreign to our
  image; missing PASSWORD = no-auth UI), NO encoder placeholder (our selkies
  348bc4f rejects the reference config's vp8enc; H.264 streams via the
  pixelflux wheel), /config + dshm emptyDirs (ephemeral per user decision),
  imagePullSecrets dockerhub-dgilli (hardcoded — their sed set has no such
  placeholder), no securityContext (F28), Guaranteed QoS, GPU placeholders
  kept for phase 2
- deploy/nrp-selkies-rhel9.yaml: header note — standalone dev manifest;
  production artifact is the template above
- Verified: replicated the reference 19-expression sed render + YAML parse +
  structural cross-check (ALL PASS); e-enc-test boot proved the vp8enc
  rejection + pixelflux x264enc fallback
- memory-bank: F57, F30 resolved, ADR, task doc (separate MB commit)
…te contract + 3 breaking mismatches + pixelflux encoder truth), F30 fully resolved (private + v4-llvmpipe + pull secret), ADR (our repo owns the drop-in template; slu-nrp-k8s-vm = earlier attempt, reference only), task doc 280828_phase1-5-production-nrp, index files
Idempotent: ns auto-detect (context default) -> docker-registry secret
dockerhub-dgilli from LOCAL podman auth (dgilli; accepts all hub alias
keys, token never on a command line) -> verify selkies-password -> PSA
check (rejects restricted/baseline — rootful pod, F28) -> render the
template with the standard placeholder set -> kubectl apply -> wait Ready
-> print URL/login/teardown. --dry-run does everything read-only.

Live-verified 2026-08-28 against the real NRP cluster (nautilus context,
ns slu-researchtechnologies-dgilli): pod Running 0 restarts on
nautilus-it-cpu15.fullerton.edu, ingress live ~2 min after apply
(initial 503 = controller reconcile timing), 401 anonymous / 200 abc,
served page is the selkies web client off our nginx 1.20.1.
Probe fixes learned live: kubectl version (not cluster-info — 403 under
minimal NRP RBAC), podman auth key alias 'docker.io', wait-line quoting.
…researchtechnologies-dgilli, pod Running 0 restarts, ingress live, 401/200 auth gate, selkies client served off nginx 1.20.1); apply-nrp-e2e.sh one-shot; pod left running for user manual verification (teardown noted)
…2E PASSED (GNOME + SLU wallpaper + H.264 + FileZilla R1 on the live NRP cluster), user tore down the e2e pod, secrets documented (temp selkies-password + pull dockerhub-dgilli); F57/README/progress/activeContext closed out; Next = housekeeping, R1 step 3, phase 2

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Thanks for opening this pull request! Be sure to follow the pull request template!

@dGilli dGilli closed this Aug 28, 2026
@LinuxServer-CI LinuxServer-CI moved this from PRs to Done in Issue & PR Tracker Aug 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Development

Successfully merging this pull request may close these issues.

5 participants