diff options
author | Javier Martinez Canillas <javierm@redhat.com> | 2018-06-12 12:18:33 +0200 |
---|---|---|
committer | Samuel Mendoza-Jonas <sam@mendozajonas.com> | 2018-06-18 10:56:29 +1000 |
commit | 6d06f0dbe1195cd8be7d3c54d02012ff16466d0c (patch) | |
tree | fc9231bf3ecf9ddc9f3389f837717d2d129966ad /discover/grub2 | |
parent | 761398a5dce21926a68e016627825b9010edff7e (diff) | |
download | talos-petitboot-6d06f0dbe1195cd8be7d3c54d02012ff16466d0c.tar.gz talos-petitboot-6d06f0dbe1195cd8be7d3c54d02012ff16466d0c.zip |
discover/grub: Use different paths to search for the BLS directory
Currenlty the BLS fragments are only searched in the /loader/entries
directory, but this assumes that there is a boot partition mounted
in /boot. This may not always be the case, /boot may not be a mount
point and just a directory inside the root partition.
To cover this case, Petitboot tries to find a GRUB 2 config file in
different paths. So let's do the same for the BLS files directory.
Also change some of the unit tests to use /boot/loader/entries as a
BLS directory instead of /loader/entries.
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
Diffstat (limited to 'discover/grub2')
-rw-r--r-- | discover/grub2/blscfg.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/discover/grub2/blscfg.c b/discover/grub2/blscfg.c index 78086ee..a381306 100644 --- a/discover/grub2/blscfg.c +++ b/discover/grub2/blscfg.c @@ -15,7 +15,11 @@ #include "discover/parser-conf.h" #include "discover/parser.h" -#define BLS_DIR "/loader/entries" +static const char *const bls_dirs[] = { + "/loader/entries", + "/boot/loader/entries", + NULL +}; struct bls_state { struct discover_boot_option *opt; @@ -195,8 +199,10 @@ int builtin_blscfg(struct grub2_script *script, struct conf_context *conf; struct bls_state *state; char *buf, *filename; + const char * const *dir; const char *blsdir; int n, len, rc = -1; + struct stat statbuf; conf = talloc_zero(dc, struct conf_context); if (!conf) @@ -209,7 +215,17 @@ int builtin_blscfg(struct grub2_script *script, blsdir = script_env_get(script, "blsdir"); if (!blsdir) - blsdir = BLS_DIR; + for (dir = bls_dirs; *dir; dir++) + if (!parser_stat_path(dc, dc->device, *dir, &statbuf)) { + blsdir = *dir; + break; + } + + if (!blsdir) { + device_handler_status_dev_info(dc->handler, dc->device, + _("BLS directory wasn't found")); + goto err; + } n = parser_scandir(dc, blsdir, &bls_entries, bls_filter, bls_sort); if (n <= 0) @@ -249,7 +265,7 @@ int builtin_blscfg(struct grub2_script *script, if (n > 0) { device_handler_status_dev_info(dc->handler, dc->device, _("Scanning %s failed"), - BLS_DIR); + blsdir); do { free(bls_entries[n]); } while (n-- > 0); |