2019-06-06 17:52:15 +02:00
|
|
|
################################################################################
|
|
|
|
#
|
|
|
|
# mender-grubenv
|
|
|
|
#
|
|
|
|
################################################################################
|
|
|
|
|
2021-11-03 20:55:20 +01:00
|
|
|
MENDER_GRUBENV_VERSION = 1a7db967495bbe8be53b7a69dcb42822f39d9a74
|
2019-06-06 17:52:15 +02:00
|
|
|
MENDER_GRUBENV_SITE = $(call github,mendersoftware,grub-mender-grubenv,$(MENDER_GRUBENV_VERSION))
|
|
|
|
MENDER_GRUBENV_LICENSE = Apache-2.0
|
|
|
|
MENDER_GRUBENV_LICENSE_FILES = LICENSE
|
2019-09-03 00:34:41 +02:00
|
|
|
# Grub2 must be built first so this package can overwrite the config files
|
|
|
|
# provided by grub.
|
|
|
|
MENDER_GRUBENV_DEPENDENCIES = grub2
|
|
|
|
MENDER_GRUBENV_INSTALL_IMAGES = YES
|
2019-06-06 17:52:15 +02:00
|
|
|
|
|
|
|
MENDER_GRUBENV_MAKE_ENV = \
|
|
|
|
$(TARGET_CONFIGURE_OPTS) \
|
package/mender-grubenv: fix install for legacy BIOS or ARM U-Boot
Some last-minute changes were made when applying commits 7a68960b682c0
(boot/grub2/Config.in: add symbols to represent legacy and EFI boot) and
4d5b209384e0 (package/mender-grubenv: fix grub module checks), and the
renaming of the BR2_TARGET_GRUB_LEGACY was not fully propagated.
This caused the path to the boot files to always be interpreted as being
the EFI one, and never the legacy one. In practice, that was not causing
any build failure, because the path was passed at build-time to
mender-grubenv, that would use it as the location where to install its
files, and finally as the location where our image-isntall commands
would look for them.
Still this is incorrect because it would not match where grub2 would
eventually end up lookig for its files at runtime...
To avoid further issue, drop the conditional block dedicated to setting
the path to the boot files, drop the intermediate variable, and move
setting the environment variable down into the existing conditional
block.
We do drop the intermediate variable, because there is no longer any
genericity needed: the installation commands are already duplicated for
the two cases anyway.
Reported-by: Peter Korsgaard <peter@korsgaard.com>
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Cc: Adam Duskett <aduskett@gmail.com>
Cc: Köry Maincent <kory.maincent@bootlin.com>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2021-12-05 00:13:25 +01:00
|
|
|
$(TARGET_MAKE_ENV)
|
2019-06-06 17:52:15 +02:00
|
|
|
|
|
|
|
MENDER_GRUBENV_DEFINES = \
|
|
|
|
$(or $(call qstrip,$(BR2_PACKAGE_MENDER_GRUBENV_DEFINES)),\
|
|
|
|
$(@D)/mender_grubenv_defines.example)
|
|
|
|
|
|
|
|
# These grub modules must be built in for the grub scripts to work properly.
|
|
|
|
# Without them, the system will not boot.
|
2021-12-03 23:58:04 +01:00
|
|
|
MENDER_GRUBENV_MANDATORY_MODULES = loadenv hashsum echo halt gcry_sha256 test regexp
|
package/mender-grubenv: fix grub module checks
Commit b68810e70cbd (boot/grub2: add support to build multiple Grub2
configurations in the same build) broke mender-grubenv by splititng up
BR2_TARGET_GRUB2_BUILTIN_MODULES into two separate symbols, one for
legacy boot and one for EFI boot.
This change causes a systematic build failure now, as the legacy variable
BR2_TARGET_GRUB2_BUILTIN_MODULES is now always empty (during build).
We fix that by supplicating the missing modules to check: one for EFI and
one for legacy boot.
The EFI check is tricky: Indeed, there can be more than one EFI platform
enabled simultaneously; indeed, on x86_64, we can have both the 32-bit
and 64-bit EFI platforms enabled. So the check is inverted, and we check
that no platform is not enabled (yeah, double negation). For consistency,
we do the same for the legacy boot, even though in that case, there can
only ever be only one enabled at once at most.
Furthermore, mender-grubenv does not support multiple installations of
grub concurrently; it can only be installed for either legacy or EFI,
not both at the same time: /etc/mender-grubenv.cfg, its configuration
file, can only contain settings for one or the other, not both.
So we add a new check to Config.in to support only one grub installation
type at a time.
Signed-off-by: Adam Duskett <aduskett@gmail.com>
[yann.morin.1998@free.fr:
- drop superfluous check on empty modules lists
- move EFI and legacy commands under same condition as checks
- variables were renamed
- misc eye-candy
]
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Cc: Köry Maincent <kory.maincent@bootlin.com>
2021-12-03 19:51:06 +01:00
|
|
|
|
|
|
|
ifeq ($(BR2_TARGET_GRUB2_HAS_LEGACY_BOOT),y)
|
|
|
|
MENDER_GRUBENV_MODULES_MISSING_PC = \
|
|
|
|
$(filter-out $(call qstrip,$(BR2_TARGET_GRUB2_BUILTIN_MODULES_PC)),\
|
|
|
|
$(MENDER_GRUBENV_MANDATORY_MODULES))
|
|
|
|
|
package/mender-grubenv: fix install for legacy BIOS or ARM U-Boot
Some last-minute changes were made when applying commits 7a68960b682c0
(boot/grub2/Config.in: add symbols to represent legacy and EFI boot) and
4d5b209384e0 (package/mender-grubenv: fix grub module checks), and the
renaming of the BR2_TARGET_GRUB_LEGACY was not fully propagated.
This caused the path to the boot files to always be interpreted as being
the EFI one, and never the legacy one. In practice, that was not causing
any build failure, because the path was passed at build-time to
mender-grubenv, that would use it as the location where to install its
files, and finally as the location where our image-isntall commands
would look for them.
Still this is incorrect because it would not match where grub2 would
eventually end up lookig for its files at runtime...
To avoid further issue, drop the conditional block dedicated to setting
the path to the boot files, drop the intermediate variable, and move
setting the environment variable down into the existing conditional
block.
We do drop the intermediate variable, because there is no longer any
genericity needed: the installation commands are already duplicated for
the two cases anyway.
Reported-by: Peter Korsgaard <peter@korsgaard.com>
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Cc: Adam Duskett <aduskett@gmail.com>
Cc: Köry Maincent <kory.maincent@bootlin.com>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2021-12-05 00:13:25 +01:00
|
|
|
MENDER_GRUBENV_MAKE_ENV += ENV_DIR=/boot/grub
|
|
|
|
|
package/mender-grubenv: fix grub module checks
Commit b68810e70cbd (boot/grub2: add support to build multiple Grub2
configurations in the same build) broke mender-grubenv by splititng up
BR2_TARGET_GRUB2_BUILTIN_MODULES into two separate symbols, one for
legacy boot and one for EFI boot.
This change causes a systematic build failure now, as the legacy variable
BR2_TARGET_GRUB2_BUILTIN_MODULES is now always empty (during build).
We fix that by supplicating the missing modules to check: one for EFI and
one for legacy boot.
The EFI check is tricky: Indeed, there can be more than one EFI platform
enabled simultaneously; indeed, on x86_64, we can have both the 32-bit
and 64-bit EFI platforms enabled. So the check is inverted, and we check
that no platform is not enabled (yeah, double negation). For consistency,
we do the same for the legacy boot, even though in that case, there can
only ever be only one enabled at once at most.
Furthermore, mender-grubenv does not support multiple installations of
grub concurrently; it can only be installed for either legacy or EFI,
not both at the same time: /etc/mender-grubenv.cfg, its configuration
file, can only contain settings for one or the other, not both.
So we add a new check to Config.in to support only one grub installation
type at a time.
Signed-off-by: Adam Duskett <aduskett@gmail.com>
[yann.morin.1998@free.fr:
- drop superfluous check on empty modules lists
- move EFI and legacy commands under same condition as checks
- variables were renamed
- misc eye-candy
]
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Cc: Köry Maincent <kory.maincent@bootlin.com>
2021-12-03 19:51:06 +01:00
|
|
|
define MENDER_GRUBENV_INSTALL_I386_CFG
|
|
|
|
mkdir -p $(BINARIES_DIR)/boot-part/grub
|
package/mender-grubenv: fix install for legacy BIOS or ARM U-Boot
Some last-minute changes were made when applying commits 7a68960b682c0
(boot/grub2/Config.in: add symbols to represent legacy and EFI boot) and
4d5b209384e0 (package/mender-grubenv: fix grub module checks), and the
renaming of the BR2_TARGET_GRUB_LEGACY was not fully propagated.
This caused the path to the boot files to always be interpreted as being
the EFI one, and never the legacy one. In practice, that was not causing
any build failure, because the path was passed at build-time to
mender-grubenv, that would use it as the location where to install its
files, and finally as the location where our image-isntall commands
would look for them.
Still this is incorrect because it would not match where grub2 would
eventually end up lookig for its files at runtime...
To avoid further issue, drop the conditional block dedicated to setting
the path to the boot files, drop the intermediate variable, and move
setting the environment variable down into the existing conditional
block.
We do drop the intermediate variable, because there is no longer any
genericity needed: the installation commands are already duplicated for
the two cases anyway.
Reported-by: Peter Korsgaard <peter@korsgaard.com>
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Cc: Adam Duskett <aduskett@gmail.com>
Cc: Köry Maincent <kory.maincent@bootlin.com>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2021-12-05 00:13:25 +01:00
|
|
|
cp -dpfr $(TARGET_DIR)/boot/grub/grub.cfg \
|
|
|
|
$(TARGET_DIR)/boot/grub/mender_grubenv* \
|
package/mender-grubenv: fix grub module checks
Commit b68810e70cbd (boot/grub2: add support to build multiple Grub2
configurations in the same build) broke mender-grubenv by splititng up
BR2_TARGET_GRUB2_BUILTIN_MODULES into two separate symbols, one for
legacy boot and one for EFI boot.
This change causes a systematic build failure now, as the legacy variable
BR2_TARGET_GRUB2_BUILTIN_MODULES is now always empty (during build).
We fix that by supplicating the missing modules to check: one for EFI and
one for legacy boot.
The EFI check is tricky: Indeed, there can be more than one EFI platform
enabled simultaneously; indeed, on x86_64, we can have both the 32-bit
and 64-bit EFI platforms enabled. So the check is inverted, and we check
that no platform is not enabled (yeah, double negation). For consistency,
we do the same for the legacy boot, even though in that case, there can
only ever be only one enabled at once at most.
Furthermore, mender-grubenv does not support multiple installations of
grub concurrently; it can only be installed for either legacy or EFI,
not both at the same time: /etc/mender-grubenv.cfg, its configuration
file, can only contain settings for one or the other, not both.
So we add a new check to Config.in to support only one grub installation
type at a time.
Signed-off-by: Adam Duskett <aduskett@gmail.com>
[yann.morin.1998@free.fr:
- drop superfluous check on empty modules lists
- move EFI and legacy commands under same condition as checks
- variables were renamed
- misc eye-candy
]
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Cc: Köry Maincent <kory.maincent@bootlin.com>
2021-12-03 19:51:06 +01:00
|
|
|
$(BINARIES_DIR)/boot-part/grub
|
|
|
|
endef
|
|
|
|
endif # BR2_TARGET_GRUB2_HAS_LEGACY_BOOT
|
|
|
|
|
|
|
|
ifeq ($(BR2_TARGET_GRUB2_HAS_EFI_BOOT),y)
|
|
|
|
MENDER_GRUBENV_MODULES_MISSING_EFI = \
|
|
|
|
$(filter-out $(call qstrip,$(BR2_TARGET_GRUB2_BUILTIN_MODULES_EFI)),\
|
2019-06-06 17:52:15 +02:00
|
|
|
$(MENDER_GRUBENV_MANDATORY_MODULES))
|
|
|
|
|
package/mender-grubenv: fix install for legacy BIOS or ARM U-Boot
Some last-minute changes were made when applying commits 7a68960b682c0
(boot/grub2/Config.in: add symbols to represent legacy and EFI boot) and
4d5b209384e0 (package/mender-grubenv: fix grub module checks), and the
renaming of the BR2_TARGET_GRUB_LEGACY was not fully propagated.
This caused the path to the boot files to always be interpreted as being
the EFI one, and never the legacy one. In practice, that was not causing
any build failure, because the path was passed at build-time to
mender-grubenv, that would use it as the location where to install its
files, and finally as the location where our image-isntall commands
would look for them.
Still this is incorrect because it would not match where grub2 would
eventually end up lookig for its files at runtime...
To avoid further issue, drop the conditional block dedicated to setting
the path to the boot files, drop the intermediate variable, and move
setting the environment variable down into the existing conditional
block.
We do drop the intermediate variable, because there is no longer any
genericity needed: the installation commands are already duplicated for
the two cases anyway.
Reported-by: Peter Korsgaard <peter@korsgaard.com>
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Cc: Adam Duskett <aduskett@gmail.com>
Cc: Köry Maincent <kory.maincent@bootlin.com>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2021-12-05 00:13:25 +01:00
|
|
|
MENDER_GRUBENV_MAKE_ENV += ENV_DIR=/boot/EFI/BOOT
|
|
|
|
|
package/mender-grubenv: fix grub module checks
Commit b68810e70cbd (boot/grub2: add support to build multiple Grub2
configurations in the same build) broke mender-grubenv by splititng up
BR2_TARGET_GRUB2_BUILTIN_MODULES into two separate symbols, one for
legacy boot and one for EFI boot.
This change causes a systematic build failure now, as the legacy variable
BR2_TARGET_GRUB2_BUILTIN_MODULES is now always empty (during build).
We fix that by supplicating the missing modules to check: one for EFI and
one for legacy boot.
The EFI check is tricky: Indeed, there can be more than one EFI platform
enabled simultaneously; indeed, on x86_64, we can have both the 32-bit
and 64-bit EFI platforms enabled. So the check is inverted, and we check
that no platform is not enabled (yeah, double negation). For consistency,
we do the same for the legacy boot, even though in that case, there can
only ever be only one enabled at once at most.
Furthermore, mender-grubenv does not support multiple installations of
grub concurrently; it can only be installed for either legacy or EFI,
not both at the same time: /etc/mender-grubenv.cfg, its configuration
file, can only contain settings for one or the other, not both.
So we add a new check to Config.in to support only one grub installation
type at a time.
Signed-off-by: Adam Duskett <aduskett@gmail.com>
[yann.morin.1998@free.fr:
- drop superfluous check on empty modules lists
- move EFI and legacy commands under same condition as checks
- variables were renamed
- misc eye-candy
]
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Cc: Köry Maincent <kory.maincent@bootlin.com>
2021-12-03 19:51:06 +01:00
|
|
|
define MENDER_GRUBENV_INSTALL_EFI_CFG
|
|
|
|
mkdir -p $(BINARIES_DIR)/efi-part/EFI/BOOT
|
package/mender-grubenv: fix install for legacy BIOS or ARM U-Boot
Some last-minute changes were made when applying commits 7a68960b682c0
(boot/grub2/Config.in: add symbols to represent legacy and EFI boot) and
4d5b209384e0 (package/mender-grubenv: fix grub module checks), and the
renaming of the BR2_TARGET_GRUB_LEGACY was not fully propagated.
This caused the path to the boot files to always be interpreted as being
the EFI one, and never the legacy one. In practice, that was not causing
any build failure, because the path was passed at build-time to
mender-grubenv, that would use it as the location where to install its
files, and finally as the location where our image-isntall commands
would look for them.
Still this is incorrect because it would not match where grub2 would
eventually end up lookig for its files at runtime...
To avoid further issue, drop the conditional block dedicated to setting
the path to the boot files, drop the intermediate variable, and move
setting the environment variable down into the existing conditional
block.
We do drop the intermediate variable, because there is no longer any
genericity needed: the installation commands are already duplicated for
the two cases anyway.
Reported-by: Peter Korsgaard <peter@korsgaard.com>
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Cc: Adam Duskett <aduskett@gmail.com>
Cc: Köry Maincent <kory.maincent@bootlin.com>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2021-12-05 00:13:25 +01:00
|
|
|
cp -dpfr $(TARGET_DIR)/boot/EFI/BOOT/grub.cfg \
|
|
|
|
$(TARGET_DIR)/boot/EFI/BOOT/mender_grubenv* \
|
package/mender-grubenv: fix grub module checks
Commit b68810e70cbd (boot/grub2: add support to build multiple Grub2
configurations in the same build) broke mender-grubenv by splititng up
BR2_TARGET_GRUB2_BUILTIN_MODULES into two separate symbols, one for
legacy boot and one for EFI boot.
This change causes a systematic build failure now, as the legacy variable
BR2_TARGET_GRUB2_BUILTIN_MODULES is now always empty (during build).
We fix that by supplicating the missing modules to check: one for EFI and
one for legacy boot.
The EFI check is tricky: Indeed, there can be more than one EFI platform
enabled simultaneously; indeed, on x86_64, we can have both the 32-bit
and 64-bit EFI platforms enabled. So the check is inverted, and we check
that no platform is not enabled (yeah, double negation). For consistency,
we do the same for the legacy boot, even though in that case, there can
only ever be only one enabled at once at most.
Furthermore, mender-grubenv does not support multiple installations of
grub concurrently; it can only be installed for either legacy or EFI,
not both at the same time: /etc/mender-grubenv.cfg, its configuration
file, can only contain settings for one or the other, not both.
So we add a new check to Config.in to support only one grub installation
type at a time.
Signed-off-by: Adam Duskett <aduskett@gmail.com>
[yann.morin.1998@free.fr:
- drop superfluous check on empty modules lists
- move EFI and legacy commands under same condition as checks
- variables were renamed
- misc eye-candy
]
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Cc: Köry Maincent <kory.maincent@bootlin.com>
2021-12-03 19:51:06 +01:00
|
|
|
$(BINARIES_DIR)/efi-part/EFI/BOOT
|
|
|
|
endef
|
|
|
|
endif # BR2_TARGET_GRUB2_HAS_EFI_BOOT
|
|
|
|
|
2019-06-06 17:52:15 +02:00
|
|
|
ifeq ($(BR2_PACKAGE_MENDER_GRUBENV)$(BR_BUILDING),yy)
|
package/mender-grubenv: fix grub module checks
Commit b68810e70cbd (boot/grub2: add support to build multiple Grub2
configurations in the same build) broke mender-grubenv by splititng up
BR2_TARGET_GRUB2_BUILTIN_MODULES into two separate symbols, one for
legacy boot and one for EFI boot.
This change causes a systematic build failure now, as the legacy variable
BR2_TARGET_GRUB2_BUILTIN_MODULES is now always empty (during build).
We fix that by supplicating the missing modules to check: one for EFI and
one for legacy boot.
The EFI check is tricky: Indeed, there can be more than one EFI platform
enabled simultaneously; indeed, on x86_64, we can have both the 32-bit
and 64-bit EFI platforms enabled. So the check is inverted, and we check
that no platform is not enabled (yeah, double negation). For consistency,
we do the same for the legacy boot, even though in that case, there can
only ever be only one enabled at once at most.
Furthermore, mender-grubenv does not support multiple installations of
grub concurrently; it can only be installed for either legacy or EFI,
not both at the same time: /etc/mender-grubenv.cfg, its configuration
file, can only contain settings for one or the other, not both.
So we add a new check to Config.in to support only one grub installation
type at a time.
Signed-off-by: Adam Duskett <aduskett@gmail.com>
[yann.morin.1998@free.fr:
- drop superfluous check on empty modules lists
- move EFI and legacy commands under same condition as checks
- variables were renamed
- misc eye-candy
]
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Cc: Köry Maincent <kory.maincent@bootlin.com>
2021-12-03 19:51:06 +01:00
|
|
|
ifneq ($(MENDER_GRUBENV_MODULES_MISSING_EFI),)
|
|
|
|
$(error The following missing grub2 efi modules must be enabled for mender-grubenv \
|
|
|
|
to work: $(MENDER_GRUBENV_MODULES_MISSING_EFI))
|
|
|
|
endif
|
|
|
|
ifneq ($(MENDER_GRUBENV_MODULES_MISSING_PC),)
|
|
|
|
$(error The following missing grub2 pc modules must be enabled for mender-grubenv \
|
|
|
|
to work: $(MENDER_GRUBENV_MODULES_MISSING_PC))
|
2019-06-06 17:52:15 +02:00
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
|
|
|
define MENDER_GRUBENV_CONFIGURE_CMDS
|
|
|
|
$(INSTALL) -m 0644 $(MENDER_GRUBENV_DEFINES) $(@D)/mender_grubenv_defines
|
|
|
|
endef
|
|
|
|
|
|
|
|
define MENDER_GRUBENV_BUILD_CMDS
|
|
|
|
$(MENDER_GRUBENV_MAKE_ENV) $(MAKE) -C $(@D)
|
|
|
|
endef
|
|
|
|
|
|
|
|
define MENDER_GRUBENV_INSTALL_TARGET_CMDS
|
|
|
|
$(MENDER_GRUBENV_MAKE_ENV) $(MAKE) DESTDIR=$(TARGET_DIR) -C $(@D) install
|
|
|
|
endef
|
|
|
|
|
2019-09-03 00:34:41 +02:00
|
|
|
define MENDER_GRUBENV_INSTALL_IMAGES_CMDS
|
package/mender-grubenv: fix grub module checks
Commit b68810e70cbd (boot/grub2: add support to build multiple Grub2
configurations in the same build) broke mender-grubenv by splititng up
BR2_TARGET_GRUB2_BUILTIN_MODULES into two separate symbols, one for
legacy boot and one for EFI boot.
This change causes a systematic build failure now, as the legacy variable
BR2_TARGET_GRUB2_BUILTIN_MODULES is now always empty (during build).
We fix that by supplicating the missing modules to check: one for EFI and
one for legacy boot.
The EFI check is tricky: Indeed, there can be more than one EFI platform
enabled simultaneously; indeed, on x86_64, we can have both the 32-bit
and 64-bit EFI platforms enabled. So the check is inverted, and we check
that no platform is not enabled (yeah, double negation). For consistency,
we do the same for the legacy boot, even though in that case, there can
only ever be only one enabled at once at most.
Furthermore, mender-grubenv does not support multiple installations of
grub concurrently; it can only be installed for either legacy or EFI,
not both at the same time: /etc/mender-grubenv.cfg, its configuration
file, can only contain settings for one or the other, not both.
So we add a new check to Config.in to support only one grub installation
type at a time.
Signed-off-by: Adam Duskett <aduskett@gmail.com>
[yann.morin.1998@free.fr:
- drop superfluous check on empty modules lists
- move EFI and legacy commands under same condition as checks
- variables were renamed
- misc eye-candy
]
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Cc: Köry Maincent <kory.maincent@bootlin.com>
2021-12-03 19:51:06 +01:00
|
|
|
$(MENDER_GRUBENV_INSTALL_I386_CFG)
|
|
|
|
$(MENDER_GRUBENV_INSTALL_EFI_CFG)
|
2019-09-03 00:34:41 +02:00
|
|
|
endef
|
|
|
|
|
2019-06-06 17:52:15 +02:00
|
|
|
$(eval $(generic-package))
|