Fix backend patch never loading at boot: schedule deferred middlewared restart
PREINIT initshutdownscripts are executed by middlewared itself (ix-preinit.service, ordered after ix-zfs pool import), so the running process had already imported the stock modules when apply.sh patched them in the overlay — S3/B2 support silently reverted on every reboot until something restarted middlewared. install.sh masked the bug with its explicit restart. apply.sh now detects boot context (parent process is middlewared) and schedules a single detached restart via a transient systemd unit (truecloud-mw-restart, After=multi-user.target and ix-postinit.service). Manual runs never trigger a restart. create_task.py verify no longer trusts hook_status.json alone: it compares the middlewared main-process start time (derived from /proc/<pid>/stat and btime) against patched_at and reports FAIL when the running process predates the patch. recover.sh and uninstall.sh cancel a still-queued deferred restart before their own; docs updated to match the real boot ordering.
This commit is contained in:
+5
-1
@@ -3,7 +3,7 @@
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
VERSION="0.0.3"
|
||||
VERSION="0.0.4"
|
||||
|
||||
PATCH_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
_HOOK_COMMENT='TrueCloud provider patch (S3/B2)'
|
||||
@@ -99,6 +99,10 @@ if [ "$_restore_failed" -eq 1 ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Cancel a deferred boot restart if one is still queued — we restart ourselves.
|
||||
systemctl stop truecloud-mw-restart.service 2>/dev/null || true
|
||||
systemctl reset-failed truecloud-mw-restart.service 2>/dev/null || true
|
||||
|
||||
echo "Restarting middlewared ..."
|
||||
if systemctl restart middlewared; then
|
||||
echo ""
|
||||
|
||||
Reference in New Issue
Block a user