feat(packaging): the plugin runner becomes a default component
WP6.1 of design/library-scanner-plugins-implementation-plan.md. The library is a flagship surface and cannot depend on an opt-in subsystem (design D9, closing G9): once the scanners are plugins, a host whose runner is off comes up with an empty library and no obvious reason why. The security posture for on-by-default was already built and shipped — LocalService on Windows, a sandboxed systemd --user unit on Linux, the scoped plugin-token lane. Windows (.iss): the PunktfunkScripting task is registered ENABLED and started on a FRESH install, and left to the existing restore path on an upgrade. The distinction is a new TaskExists probe taken before StopBunRuntimes disables anything — TaskEnabled alone cannot tell a fresh install from an operator who deliberately turned the runner off, and defaulting to "on" would silently switch it back on for them. deb/rpm: `systemctl --global enable` from the postinst/%post, guarded to first install only so an upgrade never undoes a mask. `--global` because a maintainer script has no user session to act on, and it is the only mechanism that makes a --user unit on-by-default for everyone. sysext: RPM scriptlets never run from a sysext image, so the enablement symlink is baked in directly (/usr/lib/systemd/user/default.target.wants/). Without it the runner would ship present-but-off on exactly the platform where an operator is least likely to go looking for it. Opt-out throughout is `systemctl --user mask punktfunk-scripting` — `mask`, not `disable`, since a plain disable cannot remove a symlink under /etc or /usr. The unit comment, both package descriptions, and the docs-site plugins page all say so; the page also gains the Windows equivalent. Not gated on hardware: none of this is verifiable from a Mac. The .iss change needs an installer run (fresh + upgrade, and an upgrade with the task deliberately disabled), and the deb/rpm/sysext changes need a package build.
This commit is contained in:
@@ -6,9 +6,16 @@
|
||||
# SIGTERM interrupts the whole tree STRUCTURALLY, so every plugin's scoped finalizers run before
|
||||
# exit (clean deregister / preset release) — hence the generous stop timeout below.
|
||||
#
|
||||
# OPT-IN — unlike punktfunk-web, the package does NOT auto-enable this: the runner does nothing until
|
||||
# you add scripts or install plugins. Turn it on once you have automation to run:
|
||||
# systemctl --user enable --now punktfunk-scripting
|
||||
# ON BY DEFAULT — the packages enable this for every user (`systemctl --global enable` from the
|
||||
# .deb/.rpm scriptlets; a baked-in default.target.wants symlink in the sysext image). It used to be
|
||||
# opt-in, on the reasoning that the runner does nothing until you add scripts or plugins. That
|
||||
# stopped being true when the game-library scanners became plugins: the library is a flagship
|
||||
# surface, and a host whose runner is off now comes up with an empty library and no obvious reason
|
||||
# why (design/library-scanner-plugins.md D9).
|
||||
#
|
||||
# It remains opt-OUT, per user:
|
||||
# systemctl --user mask punktfunk-scripting
|
||||
# (`mask`, not `disable` — a plain disable cannot remove a symlink that lives in /etc or /usr.)
|
||||
#
|
||||
# Auto-wired like the console: a plugin's connect() reads the host's SCOPED plugin token + identity
|
||||
# cert from ~/.config/punktfunk/{plugin-token,cert.pem} (written by the host's `serve`) — no env
|
||||
|
||||
Reference in New Issue
Block a user