From 586cc2deee96ada367a6033f9062e8b0c24bc687 Mon Sep 17 00:00:00 2001 From: Jonathan Lebon Date: Tue, 16 Apr 2019 17:12:08 -0400 Subject: [PATCH] lib/deploy: Support locking deployment finalization Teach `ostree-finalize-staged.service` to check for a file in `/run` to determine if it should do the finalization. This will be used in RPM-OSTree, where we want to be able to separate out "preparing updates" from "making update the default" for more fine-grained control. See: https://github.com/projectatomic/rpm-ostree/issues/1748 Closes: #1841 Approved by: cgwalters --- src/libostree/ostree-sysroot-deploy.c | 11 +++++++++++ src/libostree/ostree-sysroot-private.h | 1 + 2 files changed, 12 insertions(+) diff --git a/src/libostree/ostree-sysroot-deploy.c b/src/libostree/ostree-sysroot-deploy.c index ce11fe67..3ca6c148 100644 --- a/src/libostree/ostree-sysroot-deploy.c +++ b/src/libostree/ostree-sysroot-deploy.c @@ -2886,6 +2886,17 @@ _ostree_sysroot_finalize_staged (OstreeSysroot *self, return TRUE; } + /* Check if finalization is locked. */ + if (!glnx_fstatat_allow_noent (AT_FDCWD, _OSTREE_SYSROOT_RUNSTATE_STAGED_LOCKED, + NULL, 0, error)) + return FALSE; + if (errno == 0) + { + ot_journal_print (LOG_INFO, "Not finalizing; found " + _OSTREE_SYSROOT_RUNSTATE_STAGED_LOCKED); + return TRUE; + } + /* Notice we send this *after* the trivial `return TRUE` above; this msg implies we've * committed to finalizing the deployment. */ ot_journal_send ("MESSAGE_ID=" SD_ID128_FORMAT_STR, diff --git a/src/libostree/ostree-sysroot-private.h b/src/libostree/ostree-sysroot-private.h index 9da6d4c9..e4b2039e 100644 --- a/src/libostree/ostree-sysroot-private.h +++ b/src/libostree/ostree-sysroot-private.h @@ -76,6 +76,7 @@ struct OstreeSysroot { #define OSTREE_SYSROOT_LOCKFILE "ostree/lock" /* We keep some transient state in /run */ #define _OSTREE_SYSROOT_RUNSTATE_STAGED "/run/ostree/staged-deployment" +#define _OSTREE_SYSROOT_RUNSTATE_STAGED_LOCKED "/run/ostree/staged-deployment-locked" #define _OSTREE_SYSROOT_DEPLOYMENT_RUNSTATE_DIR "/run/ostree/deployment-state/" #define _OSTREE_SYSROOT_DEPLOYMENT_RUNSTATE_FLAG_DEVELOPMENT "unlocked-development"