From patchwork Tue Jun 12 10:18:33 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Javier Martinez Canillas X-Patchwork-Id: 928225 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 414m7p4Y5Pz9s0W for ; Tue, 12 Jun 2018 20:19:02 +1000 (AEST) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 414m7p3GytzF4Gq for ; Tue, 12 Jun 2018 20:19:02 +1000 (AEST) Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=redhat.com X-Original-To: petitboot@lists.ozlabs.org Delivered-To: petitboot@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=redhat.com (client-ip=74.125.82.68; helo=mail-wm0-f68.google.com; envelope-from=javierm@redhat.com; receiver=) Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=redhat.com Received: from mail-wm0-f68.google.com (mail-wm0-f68.google.com [74.125.82.68]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 414m7S2x7wzF4GT for ; Tue, 12 Jun 2018 20:18:44 +1000 (AEST) Received: by mail-wm0-f68.google.com with SMTP id e16-v6so19576543wmd.0 for ; Tue, 12 Jun 2018 03:18:44 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=mdVavhruy6lyq1OKhzKMSAoBa7qRkzc0eu+JgQ98RrI=; b=oHTwhCF1/TM8WtACW1EgJbIJOEfpr4imcohK5JWbinxrT0CIV1/L3lk2HASiCpaaRa EaqOt/JzKMNyXHyutXNGStiNqrsfP+u/+tsql/XUz5UYENJQfJ7jtNz5Ve+5tfYOQNvA 3NMfXZZvkuf78oNpG7dW0V467i0hJrkJSO4kgt6tEc3MfwAxgSuccgMoLLvEAxt8V6fV pCB/FUjzRYUkJJKbHimbAO4C5/z+/Os1EwfLpJWyaFc4UGrH/h3FnTd8Y4eWmvZKukdg uzqcGbz9SDOqPcvx0X/yuVi6LtUIYOy48UqsVE5IXn4OpKtwrhQLgfB209XnudkLwKgE 5AEg== X-Gm-Message-State: APt69E2/F3XCLJL7J6MPTE7TJA64ABtWQgTA7jhYwZdRLsGFDtp5lFIU VSG3e+pQBL7vSKGVmO3tiF/Li5sQ9Rc= X-Google-Smtp-Source: ADUXVKJ+UQ1IApCfaFqNQ8eZiRLZqlSPjQsfzq2Mzs/c63jEtnc51WvcpctF2eozi7+1EHqvUVKVtw== X-Received: by 2002:a1c:852:: with SMTP id 79-v6mr1663600wmi.115.1528798720503; Tue, 12 Jun 2018 03:18:40 -0700 (PDT) Received: from minerva.redhat.com ([90.77.100.34]) by smtp.gmail.com with ESMTPSA id m58-v6sm1275862wrf.61.2018.06.12.03.18.39 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 12 Jun 2018 03:18:39 -0700 (PDT) From: Javier Martinez Canillas To: petitboot@lists.ozlabs.org Subject: [PATCH v3 2/3] discover/grub: Use different paths to search for the BLS directory Date: Tue, 12 Jun 2018 12:18:33 +0200 Message-Id: <20180612101835.20872-3-javierm@redhat.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180612101835.20872-1-javierm@redhat.com> References: <20180612101835.20872-1-javierm@redhat.com> X-BeenThere: petitboot@lists.ozlabs.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: Petitboot bootloader development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jan Hlavac , Peter Jones , Javier Martinez Canillas , Samuel Mendoza-Jonas MIME-Version: 1.0 Errors-To: petitboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Petitboot" 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 --- discover/grub2/blscfg.c | 22 ++++++++++++++++--- .../test-grub2-blscfg-default-filename.c | 8 ++++--- test/parser/test-grub2-blscfg-default-index.c | 14 +++++++----- test/parser/test-grub2-blscfg-default-title.c | 8 ++++--- test/parser/test-grub2-blscfg-multiple-bls.c | 2 ++ test/parser/test-grub2-blscfg-opts-config.c | 2 ++ test/parser/test-grub2-blscfg-opts-grubenv.c | 2 ++ 7 files changed, 43 insertions(+), 15 deletions(-) diff --git a/discover/grub2/blscfg.c b/discover/grub2/blscfg.c index 78086ee9fb0..a3813064a0a 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); diff --git a/test/parser/test-grub2-blscfg-default-filename.c b/test/parser/test-grub2-blscfg-default-filename.c index fb740599d1b..80a0e224406 100644 --- a/test/parser/test-grub2-blscfg-default-filename.c +++ b/test/parser/test-grub2-blscfg-default-filename.c @@ -10,11 +10,13 @@ void run_test(struct parser_test *test) struct discover_boot_option *opt; struct discover_context *ctx; + test_add_dir(test, test->ctx->device, "/boot/loader/entries"); + test_add_file_string(test, test->ctx->device, - "/loader/entries/6c063c8e48904f2684abde8eea303f41-4.15.2-302.fc28.x86_64.conf", + "/boot/loader/entries/6c063c8e48904f2684abde8eea303f41-4.15.2-302.fc28.x86_64.conf", "title Fedora (4.15.2-302.fc28.x86_64) 28 (Twenty Eight)\n" - "linux /vmlinuz-4.15.2-302.fc28.x86_64\n" - "initrd /initramfs-4.15.2-302.fc28.x86_64.img\n" + "linux /boot/vmlinuz-4.15.2-302.fc28.x86_64\n" + "initrd /boot/initramfs-4.15.2-302.fc28.x86_64.img\n" "options root=/dev/mapper/fedora-root ro rd.lvm.lv=fedora/root\n"); test_read_conf_embedded(test, "/boot/grub2/grub.cfg"); diff --git a/test/parser/test-grub2-blscfg-default-index.c b/test/parser/test-grub2-blscfg-default-index.c index 4ef3e2e68bc..b792d86381d 100644 --- a/test/parser/test-grub2-blscfg-default-index.c +++ b/test/parser/test-grub2-blscfg-default-index.c @@ -17,18 +17,20 @@ void run_test(struct parser_test *test) struct discover_boot_option *opt; struct discover_context *ctx; + test_add_dir(test, test->ctx->device, "/boot/loader/entries"); + test_add_file_string(test, test->ctx->device, - "/loader/entries/6c063c8e48904f2684abde8eea303f41-4.15.2-300.fc28.x86_64.conf", + "/boot/loader/entries/6c063c8e48904f2684abde8eea303f41-4.15.2-300.fc28.x86_64.conf", "title Fedora (4.15.2-300.fc28.x86_64) 28 (Twenty Eight)\n" - "linux /vmlinuz-4.15.2-300.fc28.x86_64\n" - "initrd /initramfs-4.15.2-300.fc28.x86_64.img\n" + "linux /boot/vmlinuz-4.15.2-300.fc28.x86_64\n" + "initrd /boot/initramfs-4.15.2-300.fc28.x86_64.img\n" "options root=/dev/mapper/fedora-root ro rd.lvm.lv=fedora/root\n\n"); test_add_file_string(test, test->ctx->device, - "/loader/entries/6c063c8e48904f2684abde8eea303f41-4.14.18-300.fc28.x86_64.conf", + "/boot/loader/entries/6c063c8e48904f2684abde8eea303f41-4.14.18-300.fc28.x86_64.conf", "title Fedora (4.14.18-300.fc28.x86_64) 28 (Twenty Eight)\n" - "linux /vmlinuz-4.14.18-300.fc28.x86_64\n" - "initrd /initramfs-4.14.18-300.fc28.x86_64.img\n" + "linux /boot/vmlinuz-4.14.18-300.fc28.x86_64\n" + "initrd /boot/initramfs-4.14.18-300.fc28.x86_64.img\n" "options root=/dev/mapper/fedora-root ro rd.lvm.lv=fedora/root\n"); test_read_conf_embedded(test, "/boot/grub2/grub.cfg"); diff --git a/test/parser/test-grub2-blscfg-default-title.c b/test/parser/test-grub2-blscfg-default-title.c index 94acf80bd54..778dcc0579a 100644 --- a/test/parser/test-grub2-blscfg-default-title.c +++ b/test/parser/test-grub2-blscfg-default-title.c @@ -11,6 +11,8 @@ void run_test(struct parser_test *test) struct discover_boot_option *opt; struct discover_context *ctx; + test_add_dir(test, test->ctx->device, "/boot/loader/entries"); + test_add_file_string(test, test->ctx->device, "/boot/grub2/grubenv", "# GRUB Environment Block\n" @@ -18,10 +20,10 @@ void run_test(struct parser_test *test) "kernelopts=root=/dev/mapper/fedora-root ro rd.lvm.lv=fedora/root\n"); test_add_file_string(test, test->ctx->device, - "/loader/entries/6c063c8e48904f2684abde8eea303f41-4.15.2-302.fc28.x86_64.conf", + "/boot/loader/entries/6c063c8e48904f2684abde8eea303f41-4.15.2-302.fc28.x86_64.conf", "title Fedora (4.15.2-302.fc28.x86_64) 28 (Twenty Eight)\n" - "linux /vmlinuz-4.15.2-302.fc28.x86_64\n" - "initrd /initramfs-4.15.2-302.fc28.x86_64.img\n" + "linux /boot/vmlinuz-4.15.2-302.fc28.x86_64\n" + "initrd /boot/initramfs-4.15.2-302.fc28.x86_64.img\n" "options $kernelopts\n"); test_read_conf_embedded(test, "/boot/grub2/grub.cfg"); diff --git a/test/parser/test-grub2-blscfg-multiple-bls.c b/test/parser/test-grub2-blscfg-multiple-bls.c index 8fd218c371e..94f40d191fa 100644 --- a/test/parser/test-grub2-blscfg-multiple-bls.c +++ b/test/parser/test-grub2-blscfg-multiple-bls.c @@ -9,6 +9,8 @@ void run_test(struct parser_test *test) struct discover_boot_option *opt; struct discover_context *ctx; + test_add_dir(test, test->ctx->device, "/loader/entries"); + test_add_file_string(test, test->ctx->device, "/loader/entries/6c063c8e48904f2684abde8eea303f41-4.15.2-302.fc28.x86_64.conf", "title Fedora (4.15.2-302.fc28.x86_64) 28 (Twenty Eight)\n" diff --git a/test/parser/test-grub2-blscfg-opts-config.c b/test/parser/test-grub2-blscfg-opts-config.c index 856aae2adf5..fdce2294b0e 100644 --- a/test/parser/test-grub2-blscfg-opts-config.c +++ b/test/parser/test-grub2-blscfg-opts-config.c @@ -10,6 +10,8 @@ void run_test(struct parser_test *test) struct discover_boot_option *opt; struct discover_context *ctx; + test_add_dir(test, test->ctx->device, "/loader/entries"); + test_add_file_string(test, test->ctx->device, "/loader/entries/6c063c8e48904f2684abde8eea303f41-4.15.2-302.fc28.x86_64.conf", "title Fedora (4.15.2-302.fc28.x86_64) 28 (Twenty Eight)\n" diff --git a/test/parser/test-grub2-blscfg-opts-grubenv.c b/test/parser/test-grub2-blscfg-opts-grubenv.c index c77c589b770..544a5de4d23 100644 --- a/test/parser/test-grub2-blscfg-opts-grubenv.c +++ b/test/parser/test-grub2-blscfg-opts-grubenv.c @@ -10,6 +10,8 @@ void run_test(struct parser_test *test) struct discover_boot_option *opt; struct discover_context *ctx; + test_add_dir(test, test->ctx->device, "/loader/entries"); + test_add_file_string(test, test->ctx->device, "/boot/grub2/grubenv", "# GRUB Environment Block\n"