Fix: --disable-nested-snapshots did not disable anything until reboot
apply.sh only ever ADDED patches; there was no revert path anywhere. Disabling
removed the opt-in marker and then merely skipped re-applying -- but the overlay
persists for the whole boot, so the previously patched cloud/{snapshot,crud}.py,
cloud_backup/sync.py and _truecloud_nested.py were all still on disk, and
middlewared re-imported them on the restart install.sh performs.
It printed "DISABLED (stock guard restored)" while the feature kept running until
the next reboot. Someone disabling it because they were worried about it would
have believed it was off.
apply.sh now reverts on every not-needed path (opt-out, or superseded by native
support): remove the module FIRST -- every injected block is guarded by
`if _tc_nested is not None`, so the stock guard comes back even if a later step
fails -- then strip the appended blocks from the three patched files.
restic.py also carries a TRUECLOUD_PATCH block but belongs to the providers
module; reverting it would silently break B2 backups, so it is explicitly
excluded. Verified: the three nested files restore byte-for-byte to stock, the
module is removed, and restic.py's block survives.
install.sh --disable also tears the staging tree down first, since those bind
mounts pin ZFS snapshots that could otherwise never be destroyed.
Updating WITHOUT the flag was always correct and is unchanged: the nested module
is never installed into middleware unless explicitly enabled.
109 tests, ruff and shellcheck clean.
This commit is contained in:
@@ -1,5 +1,32 @@
|
||||
# Changelog
|
||||
|
||||
## v0.3.2 — 2026-07-13
|
||||
|
||||
### Fixed
|
||||
|
||||
- **`install.sh --disable-nested-snapshots` did not actually disable anything
|
||||
until the next reboot.** `apply.sh` only ever *added* patches — there was no
|
||||
revert path. Disabling removed the opt-in marker and then merely *skipped*
|
||||
re-applying, but the overlay persists for the whole boot, so the previously
|
||||
patched `plugins/cloud/{snapshot,crud}.py`, `plugins/cloud_backup/sync.py` and
|
||||
`_truecloud_nested.py` were all still sitting there — and middlewared
|
||||
re-imported them on the restart `install.sh` performs.
|
||||
|
||||
It printed *"DISABLED (stock guard restored)"* while the feature kept running.
|
||||
Someone turning it off *because they were worried about it* would have believed
|
||||
it was off.
|
||||
|
||||
`apply.sh` now actively reverts: it removes the module first (every injected
|
||||
block is guarded by `if _tc_nested is not None`, so the stock guard is restored
|
||||
even if a later step fails), then strips its appended blocks from the three
|
||||
patched files. `restic.py` also carries a `TRUECLOUD_PATCH` block but belongs to
|
||||
the *providers* module and is deliberately left alone — reverting it would break
|
||||
B2 backups. `install.sh --disable` also tears down any staging tree first, since
|
||||
those bind mounts pin ZFS snapshots that could otherwise never be destroyed.
|
||||
|
||||
Updating **without** the flag was always correct and is unchanged: the nested
|
||||
module is never installed into middleware unless it is explicitly enabled.
|
||||
|
||||
## v0.3.1 — 2026-07-13
|
||||
|
||||
### Added
|
||||
|
||||
Reference in New Issue
Block a user