From patchwork Tue Apr 17 17:08:58 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: 899466 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [203.11.71.2]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 40QWzW2C9gz9s1t for ; Wed, 18 Apr 2018 03:13:11 +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 40QWzW0v45zF1S9 for ; Wed, 18 Apr 2018 03:13:11 +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=209.85.128.196; helo=mail-wr0-f196.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-wr0-f196.google.com (mail-wr0-f196.google.com [209.85.128.196]) (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 40QWvB1nKtzF1yB for ; Wed, 18 Apr 2018 03:09:24 +1000 (AEST) Received: by mail-wr0-f196.google.com with SMTP id d19so37570179wre.1 for ; Tue, 17 Apr 2018 10:09:24 -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; bh=kpptrL6FNs+cBODXRFEa7ERjuN6QmSaousKlvudu/kI=; b=pnYkXCLYIHlEqFLe4goJ1I4mnz2li3spDPomrC+60Sb8n6MOspDLbr24yB+eYWjOZe Tb+VjgprlpOZPEnkmKxzLbWBtotXmDnOgImDeEXwP3++YzmznZQvkfHjTRuBfwn8YqVW 1EB8sMBdSx6tedqVbwgXcIgmL+ThMxrp7v3CW7dkUvL6Uv5OOEtDSWmcsFqnPnqWwjhl GkjmzVk63aWzbR0HpQWaSLQjwHoTBtX2tHEB3f3O774WJjU3U0+VzRhe68SIiQVuaA/k hX7td6MMi2tKTXoZMgar+meCrd5r6PtUeeYczZ9Lh557C+cy5v0OnT33M6lmLcWLq0RD zFIQ== X-Gm-Message-State: ALQs6tAFMddYZn/OXl76MrMVcTxudRv2A0GGxed0Ta1DDX6ZI2jGrTb0 Sd6a4wY81KNFuw0p6nXQavizIv2I8TQ= X-Google-Smtp-Source: AIpwx48r8ha5PZ4D099BNJvNejEQlnAloyFWeVb5u2sMf+U/OCFuE5wDkVx/E+W2Jff4P3hWBI3DMg== X-Received: by 10.28.148.5 with SMTP id w5mr1587620wmd.48.1523984960768; Tue, 17 Apr 2018 10:09:20 -0700 (PDT) Received: from minerva.redhat.com ([90.77.100.34]) by smtp.gmail.com with ESMTPSA id b5sm14861993wrf.40.2018.04.17.10.09.19 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 17 Apr 2018 10:09:20 -0700 (PDT) From: Javier Martinez Canillas To: petitboot@lists.ozlabs.org Subject: [PATCH v2 1/3] discover/grub: Reverse BLS entries sorting to match Petitboot's boot order Date: Tue, 17 Apr 2018 19:08:58 +0200 Message-Id: <20180417170900.31045-1-javierm@redhat.com> X-Mailer: git-send-email 2.16.2 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: Javier Martinez Canillas , Peter Jones , Jan Hlavac , Samuel Mendoza-Jonas MIME-Version: 1.0 Errors-To: petitboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Petitboot" The BLS entries were sorted so that the latest entry was at the top in the Petitboot UI, since it matches how menu entries are sorted in GRUB2 config and the GRUB2 UI. But in the Petitboot's UI, the latest entry is expected to be at the bottom and the older one at the top. Sort the BLS entries to match what's expected. Signed-off-by: Javier Martinez Canillas --- Changes in v2: None discover/grub2/blscfg.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/discover/grub2/blscfg.c b/discover/grub2/blscfg.c index 02ac621be061..d20dde20bb9c 100644 --- a/discover/grub2/blscfg.c +++ b/discover/grub2/blscfg.c @@ -162,7 +162,7 @@ static int bls_filter(const struct dirent *ent) static int bls_sort(const struct dirent **ent_a, const struct dirent **ent_b) { - return strverscmp((*ent_b)->d_name, (*ent_a)->d_name); + return strverscmp((*ent_a)->d_name, (*ent_b)->d_name); } int builtin_blscfg(struct grub2_script *script, From patchwork Tue Apr 17 17:08:59 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: 899467 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 40QWzd39nBz9s19 for ; Wed, 18 Apr 2018 03:13:17 +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 40QWzd1xYjzF216 for ; Wed, 18 Apr 2018 03:13:17 +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=209.85.128.195; helo=mail-wr0-f195.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-wr0-f195.google.com (mail-wr0-f195.google.com [209.85.128.195]) (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 40QWvB1q9NzF20w for ; Wed, 18 Apr 2018 03:09:25 +1000 (AEST) Received: by mail-wr0-f195.google.com with SMTP id d1so37542879wrj.13 for ; Tue, 17 Apr 2018 10:09:25 -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=qvdMFbK/Su4D5XyMu0egLKcux+lYINB+7iIJvuVCvN8=; b=dYKkpFDfOD1k3akaSzRnfwUj7dfafFLP7w96MKDCsF1u0HYpsMrA71KlgWH2vyxUa0 OVfYfV/H4G5TwHdywBfUxFhm7JTNLOXZWz4HTWxZNWE7ZA5VCeHwIgxcu1zXVFgGH0t9 71guNf9tYP0yB098WnpL7pK1qkgJ31Mb/Lb0mcyWCh+yp+w0cBTJpK4M/0wiKtO20HKk CMBytqtlTMuzSfyjO2rnLgCn8zNqy34mzF/4+CRlqArwur7lAuJ+nYrkAOue/5RSnB/8 Dl6emFFwfq7auaDzVGeQYeJwqA7d+HCPaE4V6v0Rfd23eAnll8a+MyI0Hab2R7ds00dW DMzw== X-Gm-Message-State: ALQs6tCFBdnKSDHEGSKzcs6pk1s2JOP/rlPN1eXQxp8Oqqs1un8WR1mb 7xqsJUI0n2As1fWBniys4muSWxA08po= X-Google-Smtp-Source: AIpwx4+vOIgt69WpHS3OnKfmQB3Xj66yIxQdQ+Mye0vkArL7PEruzuvKCau5yCt6+aiS7Lkwkc8EqQ== X-Received: by 10.223.189.5 with SMTP id j5mr1243648wrh.138.1523984962107; Tue, 17 Apr 2018 10:09:22 -0700 (PDT) Received: from minerva.redhat.com ([90.77.100.34]) by smtp.gmail.com with ESMTPSA id b5sm14861993wrf.40.2018.04.17.10.09.20 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 17 Apr 2018 10:09:21 -0700 (PDT) From: Javier Martinez Canillas To: petitboot@lists.ozlabs.org Subject: [PATCH v2 2/3] discover/grub: Don't add discover context boot options in blscfg handler Date: Tue, 17 Apr 2018 19:08:59 +0200 Message-Id: <20180417170900.31045-2-javierm@redhat.com> X-Mailer: git-send-email 2.16.2 In-Reply-To: <20180417170900.31045-1-javierm@redhat.com> References: <20180417170900.31045-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: Javier Martinez Canillas , Peter Jones , Jan Hlavac , Samuel Mendoza-Jonas MIME-Version: 1.0 Errors-To: petitboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Petitboot" Instead of adding a boot option explicitly, just add it to the grub script boot option list and increment the number of options. That way BLS entries will be known by the grub script handler and can check if is a valid index. Signed-off-by: Javier Martinez Canillas --- Changes in v2: None discover/grub2/blscfg.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/discover/grub2/blscfg.c b/discover/grub2/blscfg.c index d20dde20bb9c..5dadd2c6e8ef 100644 --- a/discover/grub2/blscfg.c +++ b/discover/grub2/blscfg.c @@ -143,7 +143,8 @@ static void bls_finish(struct conf_context *conf) option->is_default = option_is_default(state->script, option); - discover_context_add_boot_option(dc, opt); + list_add_tail(&state->script->options, &opt->list); + state->script->n_options++; device_handler_status_dev_info(dc->handler, dc->device, _("Created menu entry from BLS file %s"), From patchwork Tue Apr 17 17:09:00 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: 899468 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 40QWzl04Frz9s19 for ; Wed, 18 Apr 2018 03:13:23 +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 40QWzk5tBwzF216 for ; Wed, 18 Apr 2018 03:13:22 +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=209.85.128.193; helo=mail-wr0-f193.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-wr0-f193.google.com (mail-wr0-f193.google.com [209.85.128.193]) (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 40QWvC3NR7zF1yB for ; Wed, 18 Apr 2018 03:09:27 +1000 (AEST) Received: by mail-wr0-f193.google.com with SMTP id h3so24921259wrh.5 for ; Tue, 17 Apr 2018 10:09:27 -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=vqZBbzThXUZX8PZtrYUOhwcUh26NPHdvSaBPdv5Kg88=; b=golsYctLABa4p7v9H4BXcd1xCY4r33qWpZppqAwsE3xMQReAxAJiKBkjAGydCwy3Vq 548APpWtYjMu4yFdiVkG/CoZxrwIk/jq/yurMaFmSf6vVrwOoKih0eS4z99xcUaKZ4f8 cMJGOHE8HNDvTsfTIpTgIctKgXPqSS57RllEECBdGzPkINxFhpLdwUyBsbMbjXnLCGjP Z/QuPEW0T8TmhVabqiLZ8JLFJdeQLMwPgW+BmrX7llVlfaMkTePuua5tbcsVInDMjUkE KlRWpI9ZW2XhI4gp65aGwek1v3xl1YehusEpfhqJZzDCKg5r7+3Oav0XEcGaFQ8AhrSm 7omQ== X-Gm-Message-State: ALQs6tBEiRyOYLwP2gTSxATLq7eGMJBQtbHbqFvPnFyl+fRLv4sIYyFH +OsTOZDwxnGTSuNZwwOVe5lhqS7M9L8= X-Google-Smtp-Source: AIpwx481nkUU25YhoiLt4iPbR3inW9f/f0KnO7pQHzBwi995gEqD1TA7IRPZbq3MhssXQ7FNG2ff9Q== X-Received: by 10.223.183.34 with SMTP id l34mr2384358wre.85.1523984963493; Tue, 17 Apr 2018 10:09:23 -0700 (PDT) Received: from minerva.redhat.com ([90.77.100.34]) by smtp.gmail.com with ESMTPSA id b5sm14861993wrf.40.2018.04.17.10.09.22 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 17 Apr 2018 10:09:22 -0700 (PDT) From: Javier Martinez Canillas To: petitboot@lists.ozlabs.org Subject: [PATCH v2 3/3] discover/grub: Allow to set a default index for BLS entries Date: Tue, 17 Apr 2018 19:09:00 +0200 Message-Id: <20180417170900.31045-3-javierm@redhat.com> X-Mailer: git-send-email 2.16.2 In-Reply-To: <20180417170900.31045-1-javierm@redhat.com> References: <20180417170900.31045-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: Javier Martinez Canillas , Peter Jones , Jan Hlavac , Samuel Mendoza-Jonas MIME-Version: 1.0 Errors-To: petitboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Petitboot" When the BLS support was added, the conclusion was that default indexes didn't apply for BLS snippets. But for GRUB 2 the indexes refers to the boot menu entries in memory, regardless of how these were generated. Since in GRUB 2 is valid to set a default index even for menu entries generated from BLS fragments, allow this to also be done in Petitboot. Signed-off-by: Javier Martinez Canillas --- Changes in v2: - Simplify expression when checking for default index. - Don't start the index for BLS entries from 0 since can be mixed with menu entries in the grub config file. - Add menu entries in grub config for grub2-blscfg-default-index test. discover/grub2/blscfg.c | 17 +++++++--- test/parser/Makefile.am | 1 + test/parser/test-grub2-blscfg-default-index.c | 45 +++++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 4 deletions(-) create mode 100644 test/parser/test-grub2-blscfg-default-index.c diff --git a/discover/grub2/blscfg.c b/discover/grub2/blscfg.c index 5dadd2c6e8ef..a1076b9db27b 100644 --- a/discover/grub2/blscfg.c +++ b/discover/grub2/blscfg.c @@ -20,6 +20,7 @@ struct bls_state { struct discover_boot_option *opt; struct grub2_script *script; + unsigned int idx; const char *filename; const char *title; const char *version; @@ -81,19 +82,25 @@ static void bls_process_pair(struct conf_context *conf, const char *name, } } -static bool option_is_default(struct grub2_script *script, +static bool option_is_default(struct bls_state *state, struct boot_option *option) { + unsigned int idx; const char *var; + char *end; - var = script_env_get(script, "default"); + var = script_env_get(state->script, "default"); if (!var) return false; if (!strcmp(var, option->id)) return true; - return !strcmp(var, option->name); + if (!strcmp(var, option->name)) + return true; + + idx = strtoul(var, &end, 10); + return end != var && *end == '\0' && idx == state->idx; } static void bls_finish(struct conf_context *conf) @@ -141,7 +148,7 @@ static void bls_finish(struct conf_context *conf) opt->dtb = create_grub2_resource(opt, conf->dc->device, root, state->dtb); - option->is_default = option_is_default(state->script, option); + option->is_default = option_is_default(state, option); list_add_tail(&state->script->options, &opt->list); state->script->n_options++; @@ -176,6 +183,7 @@ int builtin_blscfg(struct grub2_script *script, int argc __attribute__((unused)), char *argv[] __attribute__((unused))) { + unsigned int current_idx = script->n_options; struct discover_context *dc = script->ctx; struct dirent **bls_entries; struct conf_context *conf; @@ -217,6 +225,7 @@ int builtin_blscfg(struct grub2_script *script, state->script = script; state->filename = filename; + state->idx = current_idx++; conf->parser_info = state; rc = parser_request_file(dc, dc->device, filename, &buf, &len); diff --git a/test/parser/Makefile.am b/test/parser/Makefile.am index 3479d88cdb23..6ff3972d8316 100644 --- a/test/parser/Makefile.am +++ b/test/parser/Makefile.am @@ -41,6 +41,7 @@ parser_TESTS = \ test/parser/test-grub2-test-file-ops \ test/parser/test-grub2-single-yocto \ test/parser/test-grub2-blscfg-default-filename \ + test/parser/test-grub2-blscfg-default-index \ test/parser/test-grub2-blscfg-default-title \ test/parser/test-grub2-blscfg-multiple-bls \ test/parser/test-grub2-blscfg-opts-config \ diff --git a/test/parser/test-grub2-blscfg-default-index.c b/test/parser/test-grub2-blscfg-default-index.c new file mode 100644 index 000000000000..4ef3e2e68bcc --- /dev/null +++ b/test/parser/test-grub2-blscfg-default-index.c @@ -0,0 +1,45 @@ +#include "parser-test.h" + +#if 0 /* PARSER_EMBEDDED_CONFIG */ +set default=2 +menuentry 'title Fedora (4.15-9-304.fc28.x86_64) 28 (Twenty Eight)' { + linux /vmlinuz-4.15-9-301.fc28.x86_64 +} + +menuentry 'title Fedora (4.15.6-300.fc28.x86_64) 28 (Twenty Eight)' { + linux /vmlinuz-4.15.6-300.fc28.x86_64 +} +blscfg +#endif + +void run_test(struct parser_test *test) +{ + struct discover_boot_option *opt; + struct discover_context *ctx; + + test_add_file_string(test, test->ctx->device, + "/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" + "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", + "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" + "options root=/dev/mapper/fedora-root ro rd.lvm.lv=fedora/root\n"); + + test_read_conf_embedded(test, "/boot/grub2/grub.cfg"); + + test_run_parser(test, "grub2"); + + ctx = test->ctx; + + opt = get_boot_option(ctx, 2); + + check_name(opt, "Fedora (4.15.2-300.fc28.x86_64) 28 (Twenty Eight)"); + + check_is_default(opt); +}