mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-24 07:46:48 +00:00
6041eb9547
VMWare ESXI 6.5 and above is not compatible with
subformat=monolithicSparse (The default qemu-img convert -O VMDK option).
Monolithic Sparse vmdk can be imported, but issues occur when running
sysupgrade with new images and other tasks that modify the file system
(issues like Kernel panics, reboot loops, sometimes crashing the Host ESXI
box).
This change creates an additional VMDK output file for ESXI that sets the
subformat to monlithicFlat, and the adapter_type to the SCSI lsilogic
controller.
This change existed back on:
25e36d379e
But it looks like the change was removed when refactoring occurred with:
5f6a2732f892b6229473576d89cc963ae9c97d5d
Signed-off-by: John Sommerville <jsommerville@untangle.com>
182 lines
5.8 KiB
Makefile
182 lines
5.8 KiB
Makefile
#
|
|
# Copyright (C) 2006-2012 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)/image.mk
|
|
|
|
export PATH=$(TARGET_PATH):/sbin
|
|
|
|
GRUB2_MODULES = biosdisk boot chain configfile ext2 linux ls part_msdos reboot serial test vga
|
|
GRUB2_MODULES_ISO = biosdisk boot chain configfile iso9660 linux ls part_msdos reboot serial test vga
|
|
GRUB_TERMINALS =
|
|
GRUB_SERIAL_CONFIG =
|
|
GRUB_TERMINAL_CONFIG =
|
|
GRUB_CONSOLE_CMDLINE =
|
|
|
|
USE_ATKBD = generic 64
|
|
|
|
ifneq ($(strip $(foreach subtarget,$(USE_ATKBD),$(CONFIG_TARGET_x86_$(subtarget)))),)
|
|
GRUB2_MODULES += at_keyboard
|
|
GRUB2_MODULES_ISO += at_keyboard
|
|
endif
|
|
|
|
ifneq ($(CONFIG_GRUB_CONSOLE),)
|
|
GRUB_CONSOLE_CMDLINE += console=tty0
|
|
GRUB_TERMINALS += console
|
|
endif
|
|
|
|
GRUB_SERIAL:=$(call qstrip,$(CONFIG_GRUB_SERIAL))
|
|
|
|
ifneq ($(GRUB_SERIAL),)
|
|
GRUB_CONSOLE_CMDLINE += console=$(GRUB_SERIAL),$(CONFIG_GRUB_BAUDRATE)n8$(if $(CONFIG_GRUB_FLOWCONTROL),r,)
|
|
GRUB_SERIAL_CONFIG := serial --unit=0 --speed=$(CONFIG_GRUB_BAUDRATE) --word=8 --parity=no --stop=1 --rtscts=$(if $(CONFIG_GRUB_FLOWCONTROL),on,off)
|
|
GRUB_TERMINALS += serial
|
|
endif
|
|
|
|
ifneq ($(GRUB_TERMINALS),)
|
|
GRUB_TERMINAL_CONFIG := terminal_input $(GRUB_TERMINALS); terminal_output $(GRUB_TERMINALS)
|
|
endif
|
|
|
|
ROOTPART:=$(call qstrip,$(CONFIG_TARGET_ROOTFS_PARTNAME))
|
|
ROOTPART:=$(if $(ROOTPART),$(ROOTPART),PARTUUID=$(IMG_PART_SIGNATURE)-02)
|
|
|
|
GRUB_TIMEOUT:=$(call qstrip,$(CONFIG_GRUB_TIMEOUT))
|
|
GRUB_TITLE:=$(call qstrip,$(CONFIG_GRUB_TITLE))
|
|
|
|
ifneq ($(CONFIG_GRUB_IMAGES),)
|
|
|
|
BOOTOPTS:=$(call qstrip,$(CONFIG_GRUB_BOOTOPTS))
|
|
|
|
define Image/cmdline/ext4
|
|
root=$(ROOTPART) rootfstype=ext4 rootwait
|
|
endef
|
|
|
|
define Image/cmdline/squashfs
|
|
root=$(ROOTPART) rootfstype=squashfs rootwait
|
|
endef
|
|
|
|
define Image/Build/grub2
|
|
# left here because the image builder doesnt need these
|
|
$(INSTALL_DIR) $(KDIR)/root.grub/boot/grub $(KDIR)/grub2
|
|
$(CP) $(KDIR)/bzImage $(KDIR)/root.grub/boot/vmlinuz
|
|
grub-mkimage \
|
|
-p /boot/grub \
|
|
-d $(STAGING_DIR_HOST)/lib/grub/i386-pc \
|
|
-o $(KDIR)/grub2/core.img \
|
|
-O i386-pc \
|
|
-c ./grub-early.cfg \
|
|
$(GRUB2_MODULES)
|
|
$(CP) $(STAGING_DIR_HOST)/lib/grub/i386-pc/*.img $(KDIR)/grub2/
|
|
echo '(hd0) $(BIN_DIR)/$(IMG_COMBINED)-$(1).img' > $(KDIR)/grub2/device.map
|
|
sed \
|
|
-e 's#@SERIAL_CONFIG@#$(strip $(GRUB_SERIAL_CONFIG))#g' \
|
|
-e 's#@TERMINAL_CONFIG@#$(strip $(GRUB_TERMINAL_CONFIG))#g' \
|
|
-e 's#@CMDLINE@#$(strip $(call Image/cmdline/$(1)) $(BOOTOPTS) $(GRUB_CONSOLE_CMDLINE))#g' \
|
|
-e 's#@TIMEOUT@#$(GRUB_TIMEOUT)#g' \
|
|
-e 's#@TITLE@#$(GRUB_TITLE)#g' \
|
|
./grub.cfg > $(KDIR)/root.grub/boot/grub/grub.cfg
|
|
-$(CP) $(STAGING_DIR_ROOT)/boot/. $(KDIR)/root.grub/boot/
|
|
PADDING="1" SIGNATURE="$(IMG_PART_SIGNATURE)" PATH="$(TARGET_PATH)" $(SCRIPT_DIR)/gen_image_generic.sh \
|
|
$(BIN_DIR)/$(IMG_COMBINED)-$(1).img \
|
|
$(CONFIG_TARGET_KERNEL_PARTSIZE) $(KDIR)/root.grub \
|
|
$(CONFIG_TARGET_ROOTFS_PARTSIZE) $(KDIR)/root.$(1) \
|
|
256
|
|
grub-bios-setup \
|
|
--device-map="$(KDIR)/grub2/device.map" \
|
|
-d "$(KDIR)/grub2" \
|
|
-r "hd0,msdos1" \
|
|
"$(BIN_DIR)/$(IMG_COMBINED)-$(1).img"
|
|
endef
|
|
endif
|
|
|
|
define Image/Build/iso
|
|
$(INSTALL_DIR) $(KDIR)/root.grub/boot/grub $(KDIR)/grub2
|
|
$(CP) $(KDIR)/bzImage $(KDIR)/root.grub/boot/vmlinuz
|
|
grub-mkimage \
|
|
-p /boot/grub \
|
|
-d $(STAGING_DIR_HOST)/lib/grub/i386-pc \
|
|
-o $(KDIR)/grub2/eltorito.img \
|
|
-O i386-pc \
|
|
-c ./grub-early.cfg \
|
|
$(GRUB2_MODULES_ISO)
|
|
cat \
|
|
$(STAGING_DIR_HOST)/lib/grub/i386-pc/cdboot.img \
|
|
$(KDIR)/grub2/eltorito.img \
|
|
> $(KDIR)/root.grub/boot/grub/eltorito.img
|
|
sed \
|
|
-e 's#@SERIAL_CONFIG@#$(strip $(GRUB_SERIAL_CONFIG))#g' \
|
|
-e 's#@TERMINAL_CONFIG@#$(strip $(GRUB_TERMINAL_CONFIG))#g' \
|
|
-e 's#@CMDLINE@#root=/dev/sr0 rootfstype=iso9660 rootwait $(strip $(call Image/cmdline/$(1)) $(BOOTOPTS) $(GRUB_CONSOLE_CMDLINE))#g' \
|
|
-e 's#@TIMEOUT@#$(GRUB_TIMEOUT)#g' \
|
|
-e 's#@TITLE@#$(GRUB_TITLE)#g' \
|
|
./grub-iso.cfg > $(KDIR)/root.grub/boot/grub/grub.cfg
|
|
-$(CP) $(STAGING_DIR_ROOT)/boot/. $(KDIR)/root.grub/boot/
|
|
mkisofs -R -b boot/grub/eltorito.img -no-emul-boot -boot-info-table \
|
|
-o $(KDIR)/root.iso $(KDIR)/root.grub $(TARGET_DIR)
|
|
endef
|
|
|
|
ifneq ($(CONFIG_VDI_IMAGES),)
|
|
define Image/Build/vdi
|
|
rm $(BIN_DIR)/$(IMG_COMBINED)-$(1).vdi || true
|
|
$(STAGING_DIR_HOST)/bin/qemu-img convert -f raw -O vdi \
|
|
$(BIN_DIR)/$(IMG_COMBINED)-$(1).img \
|
|
$(BIN_DIR)/$(IMG_COMBINED)-$(1).vdi
|
|
endef
|
|
endif
|
|
|
|
ifneq ($(CONFIG_VMDK_IMAGES),)
|
|
define Image/Build/vmdk
|
|
rm $(BIN_DIR)/$(IMG_COMBINED)-$(1).vmdk || true
|
|
$(STAGING_DIR_HOST)/bin/qemu-img convert -f raw -O vmdk \
|
|
$(BIN_DIR)/$(IMG_COMBINED)-$(1).img \
|
|
$(BIN_DIR)/$(IMG_COMBINED)-$(1).vmdk
|
|
#build the ESXI VMDK with
|
|
rm $(BIN_DIR)/$(IMG_COMBINED)-$(1)-esxi.vmdk || true
|
|
rm $(BIN_DIR)/$(IMG_COMBINED)-$(1)-esxi-flat.vmdk || true
|
|
$(STAGING_DIR_HOST)/bin/qemu-img convert -f raw -O vmdk -o adapter_type=lsilogic,subformat=monolithicFlat \
|
|
$(BIN_DIR)/$(IMG_COMBINED)-$(1).img \
|
|
$(BIN_DIR)/$(IMG_COMBINED)-$(1)-esxi.vmdk
|
|
endef
|
|
endif
|
|
|
|
define Image/Build/gzip
|
|
gzip -f9n $(BIN_DIR)/$(IMG_COMBINED)-$(1).img
|
|
gzip -f9n $(BIN_DIR)/$(IMG_ROOTFS)-$(1).img
|
|
endef
|
|
|
|
$(eval $(call Image/gzip-ext4-padded-squashfs))
|
|
|
|
define Image/BuildKernel
|
|
$(CP) $(KDIR)/bzImage $(BIN_DIR)/$(IMG_PREFIX)-vmlinuz
|
|
endef
|
|
|
|
define Image/Prepare
|
|
$(call Image/Prepare/grub2)
|
|
endef
|
|
|
|
define Image/Build/Initramfs
|
|
$(CP) $(KDIR)/bzImage-initramfs $(BIN_DIR)/$(IMG_PREFIX)-ramfs.bzImage
|
|
endef
|
|
|
|
define Image/Build
|
|
$(call Image/Build/$(1))
|
|
ifneq ($(1),iso)
|
|
$(call Image/Build/grub2,$(1))
|
|
$(call Image/Build/vdi,$(1))
|
|
$(call Image/Build/vmdk,$(1))
|
|
$(CP) $(KDIR)/root.$(1) $(BIN_DIR)/$(IMG_ROOTFS)-$(1).img
|
|
else
|
|
$(CP) $(KDIR)/root.iso $(BIN_DIR)/$(IMG_PREFIX).iso
|
|
endif
|
|
$(CP) $(KDIR)/bzImage $(BIN_DIR)/$(IMG_PREFIX)-vmlinuz
|
|
$(call Image/Build/gzip/$(1))
|
|
ifeq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),y)
|
|
$(call Image/Build/Initramfs)
|
|
endif
|
|
endef
|
|
|
|
$(eval $(call BuildImage))
|