Add kill switch and recover.sh for emergency recovery

If the patch ever prevents middlewared from starting, users now have a
clear escape hatch that requires no knowledge of Python internals:

  bash /data/truecloud-patch/recover.sh

Or at a bare shell prompt:

  touch /data/truecloud-patch/disabled
  systemctl restart middlewared

sitecustomize.py checks for /data/truecloud-patch/disabled at Python
startup and skips the import hook entirely when the file exists.
apply.sh does the same so the PREINIT script also does nothing on reboot.

recover.sh is copied to /data/truecloud-patch/ by install.sh so it is
available even without the original repo directory.

README gains an "Emergency recovery" section above Troubleshooting.
This commit is contained in:
2026-06-15 02:35:55 +00:00
parent 2d32c81485
commit 8f24725078
5 changed files with 84 additions and 1 deletions
+3
View File
@@ -183,6 +183,9 @@ _PATCHES = {
def _install():
import importlib.util
import os
if os.path.exists("/data/truecloud-patch/disabled"):
return # kill switch: touch /data/truecloud-patch/disabled to bypass this hook
if importlib.util.find_spec("middlewared") is None:
return # not a middlewared Python process; nothing to do
sys.meta_path.append(_Finder())