From a1dc0bafa96b250915fbe26f3946dc2131e345d6 Mon Sep 17 00:00:00 2001 From: Paul Spooren Date: Fri, 20 Mar 2020 00:10:55 -1000 Subject: [PATCH] x86: switch image generation to new code This commit introduces few related changes which need to be done in single commit to keep images buildable between git revisions. In result it retains all previous image creation possibilities with slight name change of generated images. Brief summary of the commit: * Split up image generation recipe to smaller chunks to make it more generic and reusable. * Make iso images x86 specific and drop their definition as root filesystem. * Convert image creation process to generic code specified in image.mk. * Make geode subtarget inherit features from the main target instead of redefining them. * For subtargets create device definitions with basic packages set. Signed-off-by: Tomasz Maciej Nowak [rebased] Signed-off-by: Paul Spooren Signed-off-by: Tianling Shen --- config/Config-images.in | 18 +- include/image.mk | 1 - package/boot/grub2/Makefile | 158 ++++++++++++++++++ package/boot/grub2/common.mk | 76 --------- package/boot/grub2/files/grub-early.cfg | 1 + package/boot/grub2/grub2-efi/Makefile | 23 --- package/boot/grub2/grub2/Makefile | 33 ---- .../grub2/patches/300-CVE-2015-8370.patch | 2 +- 8 files changed, 168 insertions(+), 144 deletions(-) create mode 100644 package/boot/grub2/Makefile delete mode 100644 package/boot/grub2/common.mk create mode 100644 package/boot/grub2/files/grub-early.cfg delete mode 100644 package/boot/grub2/grub2-efi/Makefile delete mode 100644 package/boot/grub2/grub2/Makefile diff --git a/config/Config-images.in b/config/Config-images.in index 40d1e28dd3..339ddeb096 100644 --- a/config/Config-images.in +++ b/config/Config-images.in @@ -120,13 +120,6 @@ menu "Target Images" help Create an ext4 filesystem with a journal. - config TARGET_ROOTFS_ISO - bool "iso" - default n - depends on TARGET_x86_generic - help - Create a bootable ISO image. - config TARGET_ROOTFS_JFFS2 bool "jffs2" depends on USES_JFFS2 @@ -191,7 +184,7 @@ menu "Target Images" config GRUB_IMAGES bool "Build GRUB images (Linux x86 or x86_64 host only)" depends on TARGET_x86 - depends on TARGET_ROOTFS_EXT4FS || TARGET_ROOTFS_ISO || TARGET_ROOTFS_JFFS2 || TARGET_ROOTFS_SQUASHFS + depends on TARGET_ROOTFS_EXT4FS || TARGET_ROOTFS_JFFS2 || TARGET_ROOTFS_SQUASHFS select PACKAGE_grub2 default y @@ -247,6 +240,11 @@ menu "Target Images" This is the title of the GRUB menu entry. If unspecified, it defaults to OpenWrt. + config ISO_IMAGES + bool "Build LiveCD image (ISO)" + depends on TARGET_x86 + select GRUB_IMAGES + config VDI_IMAGES bool "Build VirtualBox image files (VDI)" depends on TARGET_x86 || TARGET_x86_64 @@ -295,14 +293,14 @@ menu "Target Images" config TARGET_KERNEL_PARTSIZE int "Kernel partition size (in MB)" - depends on GRUB_IMAGES || EFI_IMAGES || USES_BOOT_PART + depends on USES_BOOT_PART default 8 if TARGET_apm821xx_sata default 64 if TARGET_bcm27xx default 16 config TARGET_ROOTFS_PARTSIZE int "Root filesystem partition size (in MB)" - depends on GRUB_IMAGES || EFI_IMAGES || USES_ROOTFS_PART || TARGET_ROOTFS_EXT4FS || TARGET_mvebu || TARGET_rb532 || TARGET_sunxi || TARGET_uml + depends on USES_ROOTFS_PART || TARGET_ROOTFS_EXT4FS || TARGET_mvebu || TARGET_rb532 || TARGET_sunxi || TARGET_uml default 160 help Select the root filesystem partition size. diff --git a/include/image.mk b/include/image.mk index a98e50c717..cdbc129ded 100644 --- a/include/image.mk +++ b/include/image.mk @@ -90,7 +90,6 @@ fs-types-$(CONFIG_TARGET_ROOTFS_SQUASHFS) += squashfs fs-types-$(CONFIG_TARGET_ROOTFS_JFFS2) += $(addprefix jffs2-,$(JFFS2_BLOCKSIZE)) fs-types-$(CONFIG_TARGET_ROOTFS_JFFS2_NAND) += $(addprefix jffs2-nand-,$(NAND_BLOCKSIZE)) fs-types-$(CONFIG_TARGET_ROOTFS_EXT4FS) += ext4 -fs-types-$(CONFIG_TARGET_ROOTFS_ISO) += iso fs-types-$(CONFIG_TARGET_ROOTFS_UBIFS) += ubifs fs-subtypes-$(CONFIG_TARGET_ROOTFS_JFFS2) += $(addsuffix -raw,$(addprefix jffs2-,$(JFFS2_BLOCKSIZE))) diff --git a/package/boot/grub2/Makefile b/package/boot/grub2/Makefile new file mode 100644 index 0000000000..a57486b91d --- /dev/null +++ b/package/boot/grub2/Makefile @@ -0,0 +1,158 @@ +# +# Copyright (C) 2006-2015 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk +include $(INCLUDE_DIR)/kernel.mk + +PKG_NAME:=grub +PKG_CPE_ID:=cpe:/a:gnu:grub2 +PKG_VERSION:=2.06~rc1 +PKG_RELEASE:=2 + +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz +PKG_SOURCE_URL:=https://alpha.gnu.org/gnu/grub +PKG_HASH:=2c87f1f21e2ab50043e6cd9163c08f1b6c3a6171556bf23ff9ed65b074145484 + +HOST_BUILD_PARALLEL:=1 +PKG_BUILD_DEPENDS:=grub2/host + +PKG_ASLR_PIE:=0 +PKG_SSP:=0 + +PKG_FLAGS:=nonshared + +include $(INCLUDE_DIR)/host-build.mk +include $(INCLUDE_DIR)/package.mk + +define Package/grub2/Default + CATEGORY:=Boot Loaders + SECTION:=boot + TITLE:=GRand Unified Bootloader ($(1)) + URL:=http://www.gnu.org/software/grub/ + DEPENDS:=@TARGET_x86 + VARIANT:=$(1) +endef + +Package/grub2=$(call Package/grub2/Default,pc) +Package/grub2-efi=$(call Package/grub2/Default,efi) + +define Package/grub2-editenv + CATEGORY:=Utilities + SECTION:=utils + SUBMENU:=Boot Loaders + TITLE:=Grub2 Environment editor + URL:=http://www.gnu.org/software/grub/ + DEPENDS:=@TARGET_x86 + VARIANT:=pc +endef + +define Package/grub2-editenv/description + Edit grub2 environment files. +endef + +HOST_BUILD_PREFIX := $(STAGING_DIR_HOST) + +CONFIGURE_VARS += \ + grub_build_mkfont_excuse="don't want fonts" + +CONFIGURE_ARGS += \ + --target=$(REAL_GNU_TARGET_NAME) \ + --disable-werror \ + --disable-nls \ + --disable-device-mapper \ + --disable-libzfs \ + --disable-liblzma \ + --disable-grub-mkfont \ + --with-platform=$(BUILD_VARIANT) + +HOST_CONFIGURE_VARS += \ + grub_build_mkfont_excuse="don't want fonts" + +HOST_CONFIGURE_ARGS += \ + --disable-grub-mkfont \ + --target=$(REAL_GNU_TARGET_NAME) \ + --sbindir="$(STAGING_DIR_HOST)/bin" \ + --disable-werror \ + --disable-libzfs \ + --disable-nls \ + --with-platform=none + +HOST_MAKE_FLAGS += \ + TARGET_RANLIB=$(TARGET_RANLIB) \ + LIBLZMA=$(STAGING_DIR_HOST)/lib/liblzma.a + +TARGET_CFLAGS := $(filter-out -O2 -O3 -fno-plt,$(TARGET_CFLAGS)) + +define Host/Configure + $(SED) 's,(RANLIB),(TARGET_RANLIB),' $(HOST_BUILD_DIR)/grub-core/Makefile.in + $(Host/Configure/Default) +endef + +define Package/grub2/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/grub-bios-setup $(1)/usr/sbin/ + $(INSTALL_DIR) $(STAGING_DIR_IMAGE)/grub2 + $(CP) $(PKG_BUILD_DIR)/grub-core/boot.img $(STAGING_DIR_IMAGE)/grub2/ + $(CP) $(PKG_BUILD_DIR)/grub-core/cdboot.img $(STAGING_DIR_IMAGE)/grub2/ + sed 's#msdos1#gpt1#g' ./files/grub-early.cfg >$(PKG_BUILD_DIR)/grub-early.cfg + $(STAGING_DIR_HOST)/bin/grub-mkimage \ + -d $(PKG_BUILD_DIR)/grub-core \ + -p /boot/grub \ + -O i386-pc \ + -c $(PKG_BUILD_DIR)/grub-early.cfg \ + -o $(STAGING_DIR_IMAGE)/grub2/gpt-core.img \ + at_keyboard biosdisk boot chain configfile fat linux ls part_gpt reboot serial vga + $(STAGING_DIR_HOST)/bin/grub-mkimage \ + -d $(PKG_BUILD_DIR)/grub-core \ + -p /boot/grub \ + -O i386-pc \ + -c ./files/grub-early.cfg \ + -o $(STAGING_DIR_IMAGE)/grub2/generic-core.img \ + at_keyboard biosdisk boot chain configfile ext2 linux ls part_msdos reboot serial vga + $(STAGING_DIR_HOST)/bin/grub-mkimage \ + -d $(PKG_BUILD_DIR)/grub-core \ + -p /boot/grub \ + -O i386-pc \ + -c ./files/grub-early.cfg \ + -o $(STAGING_DIR_IMAGE)/grub2/eltorito.img \ + at_keyboard biosdisk boot chain configfile iso9660 linux ls part_msdos reboot serial test vga + $(STAGING_DIR_HOST)/bin/grub-mkimage \ + -d $(PKG_BUILD_DIR)/grub-core \ + -p /boot/grub \ + -O i386-pc \ + -c ./files/grub-early.cfg \ + -o $(STAGING_DIR_IMAGE)/grub2/legacy-core.img \ + biosdisk boot chain configfile ext2 linux ls part_msdos reboot serial vga +endef + +define Package/grub2-efi/install + sed 's#msdos1#gpt1#g' ./files/grub-early.cfg >$(PKG_BUILD_DIR)/grub-early.cfg + $(STAGING_DIR_HOST)/bin/grub-mkimage \ + -d $(PKG_BUILD_DIR)/grub-core \ + -p /boot/grub \ + -O $(CONFIG_ARCH)-efi \ + -c $(PKG_BUILD_DIR)/grub-early.cfg \ + -o $(STAGING_DIR_IMAGE)/grub2/boot$(if $(CONFIG_x86_64),x64,ia32).efi \ + at_keyboard boot chain configfile fat linux ls part_gpt reboot serial efi_gop efi_uga + $(STAGING_DIR_HOST)/bin/grub-mkimage \ + -d $(PKG_BUILD_DIR)/grub-core \ + -p /boot/grub \ + -O $(CONFIG_ARCH)-efi \ + -c ./files/grub-early.cfg \ + -o $(STAGING_DIR_IMAGE)/grub2/iso-boot$(if $(CONFIG_x86_64),x64,ia32).efi \ + at_keyboard boot chain configfile fat iso9660 linux ls part_msdos part_gpt reboot serial test efi_gop efi_uga +endef + +define Package/grub2-editenv/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/grub-editenv $(1)/usr/sbin/ +endef + +$(eval $(call HostBuild)) +$(eval $(call BuildPackage,grub2)) +$(eval $(call BuildPackage,grub2-efi)) +$(eval $(call BuildPackage,grub2-editenv)) diff --git a/package/boot/grub2/common.mk b/package/boot/grub2/common.mk deleted file mode 100644 index 115648a7f9..0000000000 --- a/package/boot/grub2/common.mk +++ /dev/null @@ -1,76 +0,0 @@ -# -# Copyright (C) 2006-2015 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk -include $(INCLUDE_DIR)/kernel.mk - -PKG_CPE_ID:=cpe:/a:gnu:grub2 -PKG_VERSION:=2.06~rc1 -PKG_RELEASE:=2 - -PKG_SOURCE:=grub-$(PKG_VERSION).tar.xz -PKG_SOURCE_URL:=https://alpha.gnu.org/gnu/grub -PKG_HASH:=2c87f1f21e2ab50043e6cd9163c08f1b6c3a6171556bf23ff9ed65b074145484 - -HOST_BUILD_PARALLEL:=1 - -PKG_ASLR_PIE:=0 -PKG_SSP:=0 - -PKG_FLAGS:=nonshared - -PATCH_DIR := ../patches -HOST_PATCH_DIR := ../patches -HOST_BUILD_DIR := $(BUILD_DIR_HOST)/$(PKG_NAME)-$(PKG_VERSION) - -include $(INCLUDE_DIR)/host-build.mk -include $(INCLUDE_DIR)/package.mk - -define Package/grub2/Default - CATEGORY:=Boot Loaders - SECTION:=boot - TITLE:=GRand Unified Bootloader - URL:=http://www.gnu.org/software/grub/ - DEPENDS:=@TARGET_x86||TARGET_x86_64 -endef - -HOST_BUILD_PREFIX := $(STAGING_DIR_HOST) - -CONFIGURE_VARS += \ - grub_build_mkfont_excuse="don't want fonts" - -CONFIGURE_ARGS += \ - --target=$(REAL_GNU_TARGET_NAME) \ - --disable-werror \ - --disable-nls \ - --disable-device-mapper \ - --disable-libzfs \ - --disable-liblzma \ - --disable-grub-mkfont \ - --with-platform=none - -HOST_CONFIGURE_VARS += \ - grub_build_mkfont_excuse="don't want fonts" - -HOST_CONFIGURE_ARGS += \ - --disable-grub-mkfont \ - --target=$(REAL_GNU_TARGET_NAME) \ - --sbindir="$(STAGING_DIR_HOST)/bin" \ - --disable-werror \ - --disable-libzfs \ - --disable-nls - -HOST_MAKE_FLAGS += \ - TARGET_RANLIB=$(TARGET_RANLIB) \ - LIBLZMA=$(STAGING_DIR_HOST)/lib/liblzma.a - -TARGET_CFLAGS := $(filter-out -O2 -O3 -fno-plt,$(TARGET_CFLAGS)) - -define Host/Configure - $(SED) 's,(RANLIB),(TARGET_RANLIB),' $(HOST_BUILD_DIR)/grub-core/Makefile.in - $(Host/Configure/Default) -endef diff --git a/package/boot/grub2/files/grub-early.cfg b/package/boot/grub2/files/grub-early.cfg new file mode 100644 index 0000000000..4a5b5a6092 --- /dev/null +++ b/package/boot/grub2/files/grub-early.cfg @@ -0,0 +1 @@ +configfile (hd0,msdos1)/boot/grub/grub.cfg diff --git a/package/boot/grub2/grub2-efi/Makefile b/package/boot/grub2/grub2-efi/Makefile deleted file mode 100644 index 035bfc3336..0000000000 --- a/package/boot/grub2/grub2-efi/Makefile +++ /dev/null @@ -1,23 +0,0 @@ -include $(TOPDIR)/rules.mk -include $(INCLUDE_DIR)/kernel.mk - -PKG_NAME:=grub-efi - -include ../common.mk - -TAR_OPTIONS:= --transform 's/grub-${PKG_VERSION}/${PKG_NAME}-${PKG_VERSION}/' $(TAR_OPTIONS) - -PKG_BUILD_DEPENDS:=grub2-efi/host - -CONFIGURE_ARGS += --with-platform=efi -HOST_CONFIGURE_ARGS += --with-platform=efi --program-suffix=-efi -HOST_BUILD_DIR := $(BUILD_DIR_HOST)/$(PKG_NAME)-$(PKG_VERSION) - -define Package/grub2-efi -$(call Package/grub2/Default) -HIDDEN:=1 -TITLE += (with EFI support) -endef - -$(eval $(call HostBuild)) -$(eval $(call BuildPackage,grub2-efi)) diff --git a/package/boot/grub2/grub2/Makefile b/package/boot/grub2/grub2/Makefile deleted file mode 100644 index c00797662b..0000000000 --- a/package/boot/grub2/grub2/Makefile +++ /dev/null @@ -1,33 +0,0 @@ -include $(TOPDIR)/rules.mk -include $(INCLUDE_DIR)/kernel.mk - -PKG_NAME:=grub - -include ../common.mk - -PKG_BUILD_DEPENDS:=grub2/host - -define Package/grub2 -$(call Package/grub2/Default) -endef - -define Package/grub2-editenv - CATEGORY:=Utilities - SECTION:=utils - TITLE:=Grub2 Environment editor - URL:=http://www.gnu.org/software/grub/ - DEPENDS:=@TARGET_x86||TARGET_x86_64 -endef - -define Package/grub2-editenv/description - Edit grub2 environment files. -endef - -define Package/grub2-editenv/install - $(INSTALL_DIR) $(1)/usr/sbin - $(INSTALL_BIN) $(PKG_BUILD_DIR)/grub-editenv $(1)/usr/sbin/ -endef - -$(eval $(call HostBuild)) -$(eval $(call BuildPackage,grub2)) -$(eval $(call BuildPackage,grub2-editenv)) diff --git a/package/boot/grub2/patches/300-CVE-2015-8370.patch b/package/boot/grub2/patches/300-CVE-2015-8370.patch index f6b8a93d39..22f6c90928 100644 --- a/package/boot/grub2/patches/300-CVE-2015-8370.patch +++ b/package/boot/grub2/patches/300-CVE-2015-8370.patch @@ -32,7 +32,7 @@ Signed-off-by: Ismael Ripoll-Ripoll @@ -172,7 +172,7 @@ grub_username_get (char buf[], unsigned break; } - + - if (key == GRUB_TERM_BACKSPACE) + if (key == GRUB_TERM_BACKSPACE && cur_len) {