From ac69c70750f5b3e78ce0c71319719616af365d04 Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Fri, 13 Oct 2023 13:45:04 -0400 Subject: [PATCH] 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. --- src/libostree/ostree-sysroot-deploy.c | 3 +++ tests/kolainst/destructive/staged-deploy.sh | 8 ++++++++ 2 files changed, 11 insertions(+) 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) -- 2.30.2