package/systemd: enable building of systemd-boot
authorJames Hilliard <james.hilliard1@gmail.com>
Fri, 15 Mar 2019 22:26:37 +0000 (06:26 +0800)
committerThomas Petazzoni <thomas.petazzoni@bootlin.com>
Sun, 17 Mar 2019 12:46:55 +0000 (13:46 +0100)
systemd-boot is the integration of gummiboot into systemd, when
gummiboot is no longer maintained [0].

Add an option to build systemd-boot as part of the systemd build.

Install the boot files, that can serve as a template for the user
to tweak for their system.

[0] https://cgit.freedesktop.org/gummiboot/commit/?id=55df1539c9d330732e88bd196afee386db6e4a1d

Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
[yann.morin.1998@free.fr:
  - add missing depends on i386 || x86_64
  - add missing dependency to gnu-efi
  - add missing boot files
]
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
package/systemd/Config.in
package/systemd/boot-files/buildroot.conf [new file with mode: 0644]
package/systemd/boot-files/loader.conf [new file with mode: 0644]
package/systemd/systemd.mk

index 490222f376f2f009303a42c7de93b0106e2e31ce..63d9ea52e367901887c0bd1341a6c632b9faa126 100644 (file)
@@ -78,6 +78,34 @@ if BR2_PACKAGE_SYSTEMD
 config BR2_PACKAGE_PROVIDES_UDEV
        default "systemd"
 
+config BR2_PACKAGE_SYSTEMD_BOOT
+       bool "systemd-boot"
+       depends on BR2_i386 || BR2_x86_64
+       select BR2_PACKAGE_GNU_EFI
+       help
+         systemd-boot is a simple UEFI boot manager which executes
+         configured EFI images. The default entry is selected by a
+         configured pattern (glob) or an on-screen menu.
+
+         systemd-boot operates on the EFI System Partition (ESP)
+         only. Configuration file fragments, kernels, initrds, other
+         EFI images need to reside on the ESP. Linux kernels need to
+         be built with CONFIG_EFI_STUB to be able to be directly
+         executed as an EFI image.
+
+         See the Grub2 help text for details on preparing an EFI
+         capable disk image using systemd-boot: the instructions are
+         exactly the same, except that the systemd-boot configuration
+         files will be located in /loader/ inside the EFI partition.
+
+         https://www.freedesktop.org/wiki/Software/systemd/systemd-boot/
+
+config BR2_PACKAGE_SYSTEMD_BOOT_EFI_ARCH
+       string
+       default "ia32"  if BR2_i386
+       default "x64"   if BR2_x86_64
+       depends on BR2_PACKAGE_SYSTEMD_BOOT
+
 config BR2_PACKAGE_SYSTEMD_JOURNAL_GATEWAY
        bool "HTTP server for journal events"
        select BR2_PACKAGE_LIBMICROHTTPD
diff --git a/package/systemd/boot-files/buildroot.conf b/package/systemd/boot-files/buildroot.conf
new file mode 100644 (file)
index 0000000..16d4d85
--- /dev/null
@@ -0,0 +1,3 @@
+title  Buildroot
+linux  /bzImage
+options        root=/dev/sda2 rootwait console=tty1
diff --git a/package/systemd/boot-files/loader.conf b/package/systemd/boot-files/loader.conf
new file mode 100644 (file)
index 0000000..93b77b8
--- /dev/null
@@ -0,0 +1,2 @@
+timeout 3
+default buildroot
index 928e2dc1b665d66c7c374c7e5caa1ba136d584b7..5389b7ae3a9096ce8bd8eab63071624bdc3de5d0 100644 (file)
@@ -26,6 +26,7 @@ SYSTEMD_CONF_OPTS += \
        -Dima=false \
        -Defi=false \
        -Dgnu-efi=false \
+       -Dlibcryptsetup=false \
        -Dldconfig=false \
        -Ddefault-dnssec=no \
        -Dtests=false \
@@ -352,6 +353,34 @@ else
 SYSTEMD_CONF_OPTS += -Dhibernate=false
 endif
 
+ifeq ($(BR2_PACKAGE_SYSTEMD_BOOT),y)
+SYSTEMD_INSTALL_IMAGES = YES
+SYSTEMD_DEPENDENCIES += gnu-efi
+SYSTEMD_CONF_OPTS += \
+       -Defi=true \
+       -Dgnu-efi=true \
+       -Defi-cc=$(TARGET_CC) \
+       -Defi-ld=$(TARGET_LD) \
+       -Defi-libdir=$(STAGING_DIR)/usr/lib \
+       -Defi-ldsdir=$(STAGING_DIR)/usr/lib \
+       -Defi-includedir=$(STAGING_DIR)/usr/include/efi
+
+SYSTEMD_BOOT_EFI_ARCH = $(call qstrip,$(BR2_PACKAGE_SYSTEMD_BOOT_EFI_ARCH))
+define SYSTEMD_INSTALL_BOOT_FILES
+       $(INSTALL) -D -m 0644 $(@D)/build/src/boot/efi/systemd-boot$(SYSTEMD_BOOT_EFI_ARCH).efi \
+               $(BINARIES_DIR)/efi-part/EFI/BOOT/boot$(SYSTEMD_BOOT_EFI_ARCH).efi
+       echo "boot$(SYSTEMD_BOOT_EFI_ARCH).efi" > \
+               $(BINARIES_DIR)/efi-part/startup.nsh
+       $(INSTALL) -D -m 0644 $(SYSTEMD_PKGDIR)/boot-files/loader.conf \
+               $(BINARIES_DIR)/efi-part/loader/loader.conf
+       $(INSTALL) -D -m 0644 $(SYSTEMD_PKGDIR)/boot-files/buildroot.conf \
+               $(BINARIES_DIR)/efi-part/loader/entries/buildroot.conf
+endef
+
+else
+SYSTEMD_CONF_OPTS += -Defi=false -Dgnu-efi=false
+endif # BR2_PACKAGE_SYSTEMD_BOOT == y
+
 SYSTEMD_FALLBACK_HOSTNAME = $(call qstrip,$(BR2_TARGET_GENERIC_HOSTNAME))
 ifneq ($(SYSTEMD_FALLBACK_HOSTNAME),)
 SYSTEMD_CONF_OPTS += -Dfallback-hostname=$(SYSTEMD_FALLBACK_HOSTNAME)
@@ -376,6 +405,10 @@ SYSTEMD_POST_INSTALL_TARGET_HOOKS += \
        SYSTEMD_INSTALL_MACHINEID_HOOK \
        SYSTEMD_INSTALL_RESOLVCONF_HOOK
 
+define SYSTEMD_INSTALL_IMAGES_CMDS
+       $(SYSTEMD_INSTALL_BOOT_FILES)
+endef
+
 define SYSTEMD_USERS
        - - input -1 * - - - Input device group
        - - systemd-journal -1 * - - - Journal