From: Colin Walters Date: Fri, 13 Oct 2023 17:45:04 +0000 (-0400) Subject: deploy: Remove lock when re-staging X-Git-Tag: archive/raspbian/2023.7-3+rpi1^2~16^2^2~5^2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=ac69c70750f5b3e78ce0c71319719616af365d04;p=ostree.git deploy: Remove lock when re-staging This closes the biggest foot-gun when doing e.g. `rpm-ostree rebase` when zincati is running on a FCOS system. Previously if zincati happened to have staged + locked a deployment, we'd keep around the lock which is definitely not what is desired. --- diff --git a/src/libostree/ostree-sysroot-deploy.c b/src/libostree/ostree-sysroot-deploy.c index e7b91b69..6cdef145 100644 --- a/src/libostree/ostree-sysroot-deploy.c +++ b/src/libostree/ostree-sysroot-deploy.c @@ -3676,6 +3676,9 @@ ostree_sysroot_stage_tree_with_options (OstreeSysroot *self, const char *osname, { if (!_ostree_sysroot_rmrf_deployment (self, self->staged_deployment, cancellable, error)) return FALSE; + // Also remove the lock; xref https://github.com/ostreedev/ostree/issues/3025 + if (!ot_ensure_unlinked_at (AT_FDCWD, _OSTREE_SYSROOT_RUNSTATE_STAGED_LOCKED, error)) + return FALSE; } /* Bump mtime so external processes know something changed, and then reload. */ diff --git a/tests/kolainst/destructive/staged-deploy.sh b/tests/kolainst/destructive/staged-deploy.sh index c923605f..01c2b489 100755 --- a/tests/kolainst/destructive/staged-deploy.sh +++ b/tests/kolainst/destructive/staged-deploy.sh @@ -91,6 +91,14 @@ EOF test ! -f /run/ostree/staged-deployment-locked echo "ok cleanup staged" + # And verify that re-staging cleans the previous lock + test '!' -f /run/ostree/staged-deployment + ostree admin deploy --stage staged-deploy + test -f /run/ostree/staged-deployment + test '!' -f /run/ostree/staged-deployment-locked + ostree admin undeploy 0 + echo "ok restage unlocked" + # Upgrade with staging ostree admin deploy --stage staged-deploy origcommit=$(ostree rev-parse staged-deploy)