From 93999d337e521a4be3aa4ae7820835802986d394 Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Mon, 26 Aug 2019 17:43:26 +0000 Subject: [PATCH] sysroot: Add a clearer error if /boot/loader isn't found I've seen people confused by this error in the case where `/boot` isn't mounted or the BLS fragments were deleted, etc. If you understand ostree deeply it's clear but, let's do better here and a direct error message for the case where we can't find `/boot/loader` which is the majority of these. The other case could happen if e.g. just the BLS fragment for the booted deployment was deleted; let's reword that one a bit too. Closes: #1905 Approved by: rfairley --- src/libostree/ostree-sysroot.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/libostree/ostree-sysroot.c b/src/libostree/ostree-sysroot.c index b3ad2498..2c0c0546 100644 --- a/src/libostree/ostree-sysroot.c +++ b/src/libostree/ostree-sysroot.c @@ -959,7 +959,18 @@ ostree_sysroot_load_if_changed (OstreeSysroot *self, } if (self->root_is_ostree_booted && !self->booted_deployment) - return glnx_throw (error, "Unexpected state: /run/ostree-booted found and in / sysroot but not in a booted deployment"); + { + if (!glnx_fstatat_allow_noent (self->sysroot_fd, "boot/loader", NULL, AT_SYMLINK_NOFOLLOW, error)) + return FALSE; + if (errno == ENOENT) + { + return glnx_throw (error, "Unexpected state: /run/ostree-booted found, but no /boot/loader directory"); + } + else + { + return glnx_throw (error, "Unexpected state: /run/ostree-booted found and in / sysroot, but bootloader entry not found"); + } + } if (!_ostree_sysroot_reload_staged (self, error)) return FALSE;