From 8318ad5e1e3cfe4213775e21883d98fc61588bae Mon Sep 17 00:00:00 2001 From: Toomas Soome Date: Fri, 5 Jun 2015 15:46:03 +0300 Subject: [PATCH] libbe: disable grub menu management illumos issue #6707 --- usr/src/lib/libbe/common/be_utils.c | 25 +++++++++++++++++++------ usr/src/lib/libbe/common/libbe_priv.h | 2 ++ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/usr/src/lib/libbe/common/be_utils.c b/usr/src/lib/libbe/common/be_utils.c index 4e028059fb..8d4dc1b629 100644 --- a/usr/src/lib/libbe/common/be_utils.c +++ b/usr/src/lib/libbe/common/be_utils.c @@ -405,16 +405,24 @@ be_get_defaults(struct be_defaults *defaults) { void *defp; + defaults->be_deflt_grub = B_FALSE; defaults->be_deflt_rpool_container = B_FALSE; defaults->be_deflt_bename_starts_with[0] = '\0'; if ((defp = defopen_r(BE_DEFAULTS)) != NULL) { const char *res = defread_r(BE_DFLT_BENAME_STARTS, defp); - if (res != NULL && res[0] != NULL) { + if (res != NULL && res[0] != '\0') { (void) strlcpy(defaults->be_deflt_bename_starts_with, res, ZFS_MAX_DATASET_NAME_LEN); defaults->be_deflt_rpool_container = B_TRUE; } + if (be_is_isa("i386")) { + res = defread_r(BE_DFLT_BE_HAS_GRUB, defp); + if (res != NULL && res[0] != '\0') { + if (strcasecmp(res, "true") == 0) + defaults->be_deflt_grub = B_TRUE; + } + } defclose_r(defp); } } @@ -3116,11 +3124,16 @@ be_err_to_str(int err) boolean_t be_has_grub(void) { - /* - * TODO: This will need to be expanded to check for the existence of - * grub if and when there is grub support for SPARC. - */ - return (be_is_isa("i386")); + static struct be_defaults be_defaults; + static boolean_t be_deflts_set = B_FALSE; + + /* be_has_grub can be called quite many times */ + if (be_deflts_set == B_FALSE) { + be_get_defaults(&be_defaults); + be_deflts_set = B_TRUE; + } + + return (be_defaults.be_deflt_grub); } /* diff --git a/usr/src/lib/libbe/common/libbe_priv.h b/usr/src/lib/libbe/common/libbe_priv.h index a9c464dc69..d9cb964c25 100644 --- a/usr/src/lib/libbe/common/libbe_priv.h +++ b/usr/src/lib/libbe/common/libbe_priv.h @@ -42,6 +42,7 @@ extern "C" { #define BE_AUTO_NAME_DELIM '-' #define BE_DEFAULTS "/etc/default/be" #define BE_DFLT_BENAME_STARTS "BENAME_STARTS_WITH=" +#define BE_DFLT_BE_HAS_GRUB "BE_HAS_GRUB=" #define BE_CONTAINER_DS_NAME "ROOT" #define BE_DEFAULT_CONSOLE "text" #define BE_POLICY_PROPERTY "org.opensolaris.libbe:policy" @@ -137,6 +138,7 @@ typedef struct be_plcy_list { struct be_defaults { boolean_t be_deflt_rpool_container; + boolean_t be_deflt_grub; char be_deflt_bename_starts_with[ZFS_MAX_DATASET_NAME_LEN]; }; -- 2.11.4.GIT