diff --git a/src/libostree/ostree-sysroot-deploy.c b/src/libostree/ostree-sysroot-deploy.c index e7b91b697a..6cdef14526 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 c923605f5f..01c2b48916 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)