Closing the popup after the fact left it on screen for the 15-20 seconds between the updater's version check and the Homebrew Channel running its init.d hooks. That race cannot be won, so remove it. /usr/sbin/update is launched on demand by ls-hubd via a manifest, and ls-hubd.conf lists ManifestsVolatileDirectories under /var - writable, persistent, and how webOS itself ships manifest updates. A manifest there with the same id and a higher version replaces the read-only one, so drop in a copy that keeps every role and permission file and only empties serviceFiles. Nothing on the bus can start the updater after that: no version check, no alert, nothing to dismiss. Callers get an immediate "Service does not exist" rather than a hang, and deleting the file undoes it. Verified on a CX (webOS 5, 04.60.65) across reboots: no update process, /tmp/var/log/update.log never created, no alert. Previously that log was 55 kB with two server checks and an _gAlertWindowId per boot. Revert puts the updater back on the bus. The manifest, its D-Bus service file and the updater binary are all discovered from ls-hubd.conf rather than hardcoded. The popup-closing layer stays as a fallback for when this one is off. Also tried and rejected, now documented in the README: update-related settings, masking update.service (no writable unit directory), and breaking its ping through /var/systemd/system/env/update.env - the ping does fail, but something else on the bus activates the updater anyway. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
ef8b6b96c4
commit
80e2d7e5fa
+16
-7
@@ -4,19 +4,24 @@ that webOS shows on every boot, without touching the firmware itself.</p>
|
||||
<p>Blocking the update servers alone does not do it: the updater asks LG about
|
||||
new firmware around 20 seconds before the Homebrew Channel gets to run its boot
|
||||
hooks, so on a CX the check succeeds every time and the popup is already up.
|
||||
Nothing running that late can win the race, so this app closes the popup as
|
||||
well as blocking the servers.</p>
|
||||
Nothing running that late can win that race, so this app removes it instead -
|
||||
it takes the updater off the bus entirely, and the check never happens.</p>
|
||||
|
||||
<p>It applies up to five reversible layers and re-applies them on every boot
|
||||
<p>It applies up to six reversible layers and re-applies them on every boot
|
||||
through a Homebrew Channel startup hook:</p>
|
||||
|
||||
<ul>
|
||||
<li><b>Stop the updater running</b> - webOS launches /usr/sbin/update on
|
||||
demand from an ls-hubd manifest. This drops a higher-version manifest into
|
||||
the writable directory ls-hubd already scans, identical to LG's except
|
||||
that it lists no service files, so the updater can no longer be launched:
|
||||
no version check, no popup, nothing to dismiss.</li>
|
||||
<li><b>Block LG update servers</b> - points snu/su/nsu.lge.com and their TLS
|
||||
and CDN aliases at 127.0.0.1 in /etc/hosts, which stops the download and
|
||||
every later check in the session.</li>
|
||||
<li><b>Close the update popup</b> - closes the alert raised during boot, then
|
||||
stays subscribed to the notification manager and closes any later one as
|
||||
it opens.</li>
|
||||
<li><b>Close the update popup</b> - fallback for a popup that appears anyway:
|
||||
closes the alert raised during boot, then stays subscribed to the
|
||||
notification manager and closes any later one as it opens.</li>
|
||||
<li><b>Delete staged firmware</b> - wipes /mnt/lg/cmn_data/swupdate should the
|
||||
TV ever manage to download an image.</li>
|
||||
<li><b>Lock the staging folder</b> - bind-mounts an empty read-only directory
|
||||
@@ -27,4 +32,8 @@ through a Homebrew Channel startup hook:</p>
|
||||
</ul>
|
||||
|
||||
<p>Requires root and the Homebrew Channel: the app asks the Homebrew Channel to
|
||||
elevate its own service on first launch. "Remove protection" undoes everything.</p>
|
||||
elevate its own service on first launch. "Remove protection" undoes everything,
|
||||
including putting the updater back on the bus.</p>
|
||||
|
||||
<p>While the updater layer is on, expect the Software Update screen in Settings
|
||||
to show an error - it queries the service that is now gone.</p>
|
||||
|
||||
Reference in New Issue
Block a user