From 3282efb287985de4b4d63b0f724200be56c9e817 Mon Sep 17 00:00:00 2001 From: Gauthier Jolly Date: Wed, 28 Jun 2023 12:03:42 +0200 Subject: [PATCH] ubuntu-cpc: cleanup disk-images-uefi.binary Remove all the logic that is not related to cloud-images. Non cloud-images should use disk-image-uefi-non-cloud.binary --- .../hooks.d/base/disk-image-uefi.binary | 402 +----------------- 1 file changed, 22 insertions(+), 380 deletions(-) diff --git a/live-build/ubuntu-cpc/hooks.d/base/disk-image-uefi.binary b/live-build/ubuntu-cpc/hooks.d/base/disk-image-uefi.binary index 792b2e1a..0b7399f2 100755 --- a/live-build/ubuntu-cpc/hooks.d/base/disk-image-uefi.binary +++ b/live-build/ubuntu-cpc/hooks.d/base/disk-image-uefi.binary @@ -9,32 +9,12 @@ case $ARCH in ;; esac -case ${PROJECT:-}:${SUBPROJECT:-} in - *:canary) - echo "We don't create EFI images for canary." - exit 0 - ;; - ubuntu) - IMAGE_STR="# DESKTOP_IMG: This file was created/modified by the Desktop Image build process" - FS_LABEL="desktop-rootfs" - IMAGE_SIZE=12884901888 # 12G - ;; - *) - IMAGE_STR="# CLOUD_IMG: This file was created/modified by the Cloud Image build process" - FS_LABEL="cloudimg-rootfs" - ;; -esac +IMAGE_STR="# CLOUD_IMG: This file was created/modified by the Cloud Image build process" +FS_LABEL="cloudimg-rootfs" # 4G (4*1024**3) IMAGE_SIZE=4294967296 -# Change image size for preinstalled generic images -if [ -n "${SUBARCH:-}" ]; then - if [ "${SUBARCH:-}" = "generic" ]; then - IMAGE_SIZE=3758096384 # bump to 3.5G (3584*1024**2), due to linux-generic instead of virtual -fi -fi - if [ "$ARCH" = "riscv64" ]; then IMAGE_SIZE=4831838208 # bump to 4.5G (4608*1024**2); initrd creation fails with "No space left" with 3.5G fi @@ -48,143 +28,27 @@ create_partitions() { sgdisk "${disk_image}" --zap-all case $ARCH in arm64|armhf) - if [ "${SUBARCH:-}" = "generic" ]; then - sgdisk "${disk_image}" \ - --new=15:0:+2G \ - --typecode=15:ef00 \ - --attributes=15:set:2 \ - --new=14::+4M \ - --change-name=14:CIDATA \ - --new=1: - else - sgdisk "${disk_image}" \ - --new=15:0:+2G \ - --typecode=15:ef00 \ - --new=1: - fi + sgdisk "${disk_image}" \ + --new=15:0:+2G \ + --typecode=15:ef00 \ + --new=1: ;; riscv64) - # same as arm64/armhf, but set bit 2 legacy bios bootable - # on the first partition for uboot - # and have two loader partitions of uboot SPL & real one - # and have CIDATA partition for preinstalled image - if [ -z "${SUBARCH:-}" ]; then - # cloud-image - sgdisk "${disk_image}" \ - --set-alignment=2 \ - --new=15::+2G \ - --typecode=15:ef00 \ - --new=1:: \ - --attributes=1:set:2 - elif [ "${SUBARCH:-}" = "nezha" ] || [ "${SUBARCH:-}" = "licheerv" ]; then - # Nezha/LicheeRV D1 boards - sgdisk "${disk_image}" \ - --set-alignment=2 \ - --new=13:256:25575 \ - --change-name=13:loader1 \ - --typecode=13:B161E8AB-7D4B-4DB4-821C-4120A0554A35 \ - --attributes=13:set:0 \ - --new=16:25576:32799 \ - --change-name=16:loader2b \ - --typecode=16:F79E76D9-AC98-418B-8F31-E17EA24FF07C \ - --attributes=16:set:0 \ - --new=14:32800:43007 \ - --change-name=14:loader2 \ - --typecode=14:F4FA3898-3478-4941-887D-FCEC4E9E3C05 \ - --attributes=14:set:0 \ - --new=15::+2G \ - --typecode=15:ef00 \ - --change-name=15:ESP \ - --new=12::+4M \ - --change-name=12:CIDATA \ - --new=1:: \ - --attributes=1:set:2 - elif [ "${SUBARCH:-}" = "icicle" ]; then - # Microchip Icicle Kit - sgdisk "${disk_image}" \ - --set-alignment=2 \ - --new=13:256:25575 \ - --change-name=13:loader \ - --typecode=13:ef02 \ - --attributes=13:set:0 \ - --new=15::+2G \ - --typecode=15:ef00 \ - --change-name=15:ESP \ - --new=12::+4M \ - --change-name=12:CIDATA \ - --new=1:: \ - --attributes=1:set:2 - elif [ "${SUBARCH:-}" = "visionfive" ]; then - # VisionFive - sgdisk "${disk_image}" \ - --set-alignment=2 \ - --new=15::+2G \ - --typecode=15:ef00 \ - --change-name=15:ESP \ - --new=12::+4M \ - --change-name=12:CIDATA \ - --new=3::+1M \ - --change-name=3:uEnv \ - --new=1:: \ - --attributes=1:set:2 - elif [ "${SUBARCH:-}" = "visionfive2" ]; then - # VisionFive 2 - sgdisk "${disk_image}" \ - --set-alignment=4096 \ - --new=13:4096:8191 \ - --typecode=13:2E54B353-1271-4842-806F-E436D6AF6985 \ - --change-name=13:loader1 \ - --new=2:8192:16383 \ - --typecode=2:7a097280-70d2-44bc-886c-ff5ffbb7b098 \ - --change-name=2:loader2 \ - --new=12:16384:24575 \ - --change-name=12:CIDATA \ - --new=15:24576:229375 \ - --typecode=15:ef00 \ - --change-name=15:ESP \ - --new=1:229376: \ - --attributes=1:set:2 - else - # preinstalled server, currently FU540 - # FU740 too in the future - sgdisk "${disk_image}" \ - --set-alignment=2 \ - --new=13:34:2081 \ - --change-name=13:loader1 \ - --typecode=13:5B193300-FC78-40CD-8002-E86C45580B47 \ - --attributes=13:set:0 \ - --new=14:2082:10239 \ - --change-name=14:loader2 \ - --typecode=14:2E54B353-1271-4842-806F-E436D6AF6985 \ - --attributes=14:set:0 \ - --new=15::+2G \ - --typecode=15:ef00 \ - --new=12::+4M \ - --change-name=12:CIDATA \ - --new=1:: \ - --attributes=1:set:2 - fi + sgdisk "${disk_image}" \ + --set-alignment=2 \ + --new=15::+2G \ + --typecode=15:ef00 \ + --new=1:: \ + --attributes=1:set:2 ;; amd64) - if [ "${SUBARCH:-}" = "generic" ]; then - sgdisk "${disk_image}" \ - --new=14::+4M \ - --typecode=14:ef02 \ - --attributes=14:set:2 \ - --new=15::+2G \ - --typecode=15:ef00 \ - --new=13::+4M \ - --change-name=13:CIDATA \ - --new=1:: - else - sgdisk "${disk_image}" \ - --new=14::+4M \ - --new=15::+2G \ - --new=1:: - sgdisk "${disk_image}" \ - -t 14:ef02 \ - -t 15:ef00 - fi + sgdisk "${disk_image}" \ + --new=14::+4M \ + --new=15::+2G \ + --new=1:: + sgdisk "${disk_image}" \ + -t 14:ef02 \ + -t 15:ef00 ;; esac sgdisk "${disk_image}" \ @@ -234,242 +98,20 @@ install_grub() { arm64) chroot mountpoint apt-get -qqy install --no-install-recommends shim-signed grub-efi-arm64-signed efi_target=arm64-efi - if [ "${SUBARCH:-}" = "generic" ]; then - # Server preinstalled image - # Setup cidata sample data & nocloud fallback - # Allows login on first boot with or without metadata - cidata_dev="${loop_device}p14" - setup_cidata "${cidata_dev}" - setup_cinocloud mountpoint - fi ;; armhf) chroot mountpoint apt-get -qqy install --no-install-recommends grub-efi-arm grub-efi-arm-bin efi_target=arm-efi - if [ "${SUBARCH:-}" = "generic" ]; then - # Server preinstalled image - # Setup cidata sample data & nocloud fallback - # Allows login on first boot with or without metadata - cidata_dev="${loop_device}p14" - setup_cidata "${cidata_dev}" - setup_cinocloud mountpoint - fi ;; amd64) chroot mountpoint apt-get install -qqy grub-pc shim-signed efi_target=x86_64-efi - if [ "${SUBARCH:-}" = "generic" ]; then - # Server preinstalled image - # Setup cidata sample data & nocloud fallback - # Allows login on first boot with or without metadata - cidata_dev="${loop_device}p13" - setup_cidata "${cidata_dev}" - setup_cinocloud mountpoint - fi ;; riscv64) - if [ -n "${SUBARCH:-}" ]; then - # Per-device images - local my_d=$(dirname $(readlink -f ${0})) - echo "Adjusting GRUB defaults for ${ARCH}" - mkdir -p mountpoint/etc/default/grub.d/ - cp ${my_d}/riscv64/grub/10_cmdline.cfg mountpoint/etc/default/grub.d/ - case "${SUBARCH}" in - "icicle") - echo "Installing GRUB for ${SUBARCH} board" - cp ${my_d}/riscv64/grub/90_watchdog-thresh.cfg mountpoint/etc/default/grub.d/ - # flash-kernel is needed to install the dtb for update-grub: it uses the - # /proc/device-tree/model value to pick the correct dtb and as we are in a chroot, - # the model value is wrong and we need to use /etc/flash-kernel/machine instead. - # This explains why we install flash-kernel here. - chroot mountpoint mkdir -p /etc/flash-kernel/ - chroot mountpoint bash -c "echo 'Microchip PolarFire-SoC Icicle Kit' > /etc/flash-kernel/machine" - chroot mountpoint bash -c 'FK_FORCE=yes apt-get install -qqy grub-efi-riscv64 flash-kernel' - efi_target=riscv64-efi - # The real U-Boot - chroot mountpoint apt-get install -qqy u-boot-microchip - loader="${loop_device}p13" - dd if=mountpoint/usr/lib/u-boot/microchip_icicle/u-boot.payload of=$loader - # Provide end-user modifyable CIDATA - cidata_dev="${loop_device}p12" - setup_cidata "${cidata_dev}" - # Provide stock nocloud datasource - # Allow interactive login on baremetal board, - # without a cloud datasource. - setup_cinocloud mountpoint - - # u-boot-microchip will boot using UEFI if it does not find - # any extlinux.conf or boot.scr: but flash-kernel will - # install a boot.scr if it believes it did not boot in - # EFI mode, so make sure we don't leave a boot.scr - # behind. - chroot mountpoint rm -f /boot/boot.scr - ;; - "nezha"|"licheerv") - echo "Reducing initramfs size for ${SUBARCH} board" - mkdir -p mountpoint/etc/initramfs-tools/conf.d/ - cp ${my_d}/riscv64/initramfs-tools/modules_list.conf mountpoint/etc/initramfs-tools/conf.d/ - chroot mountpoint update-initramfs -c -v -k all - echo "Installing U-Boot for ${SUBARCH} board" - # flash-kernel is needed to install the dtb for update-grub: it uses the - # /proc/device-tree/model value to pick the correct dtb and as we are in a chroot, - # the model value is wrong and we need to use /etc/flash-kernel/machine instead. - # This explains why we install flash-kernel here. - chroot mountpoint mkdir -p /etc/flash-kernel/ - if [ "$SUBARCH" = "nezha" ]; then - chroot mountpoint bash -c "echo 'Allwinner D1 Nezha' > /etc/flash-kernel/machine" - elif [ "$SUBARCH" = "licheerv" ]; then - chroot mountpoint bash -c "echo 'Sipeed Lichee RV Dock' > /etc/flash-kernel/machine" - # cryptsetup-initramfs is a large contributor of the initrd size: we have to - # remove it for the LicheeRV board, otherwise it fails to boot. cryptsetup-initramfs - # needs to embed plymouth (and then the drm/gpu stuff) for interacting with the user - # to decrypt the rootfs (passphrase key). - chroot mountpoint bash -c "apt remove -qqy cryptsetup-initramfs" - fi - chroot mountpoint bash -c 'FK_FORCE=yes apt-get install -qqy grub-efi-riscv64 flash-kernel' - efi_target=riscv64-efi - - # u-boot-nezha supports both the LicheeRV and the Nezha D1. - chroot mountpoint apt-get install -qqy u-boot-nezha - # Since version 2022.10 U-Boot SPL and U-Boot are installed onto the same partition. - # Package nezha-boot0 is not needed anymore. - loader1="${loop_device}p13" - dd if=mountpoint/usr/lib/u-boot/${SUBARCH}/u-boot-sunxi-with-spl.bin of=$loader1 - # Provide end-user modifyable CIDATA - cidata_dev="${loop_device}p12" - setup_cidata "${cidata_dev}" - # Provide stock nocloud datasource - # Allow interactive login on baremetal SiFive board, - # without a cloud datasource. - setup_cinocloud mountpoint - - # u-boot-${SUBARCH} will boot using UEFI if it does not find - # any extlinux.conf or boot.scr: but flash-kernel will - # install a boot.scr if it believes it did not boot in - # EFI mode, so make sure we don't leave a boot.scr - # behind. - chroot mountpoint rm -f /boot/boot.scr - ;; - "visionfive") - echo "Installing GRUB for VisionFive board" - # flash-kernel is needed to install the dtb for update-grub: it uses the - # /proc/device-tree/model value to pick the correct dtb and as we are in a chroot, - # the model value is wrong and we need to use /etc/flash-kernel/machine instead. - # This explains why we install flash-kernel here. - chroot mountpoint mkdir -p /etc/flash-kernel/ - chroot mountpoint bash -c "echo 'StarFive VisionFive V1' > /etc/flash-kernel/machine" - chroot mountpoint bash -c 'FK_FORCE=yes apt-get install -qqy grub-efi-riscv64 flash-kernel' - efi_target=riscv64-efi - - # factory u-boot requires a p3 partition with /boot/uEnv.txt file - uenv_dev="${loop_device}p3" - mkfs.ext4 "${uenv_dev}" - uenv_mnt_dir=`mktemp -d uenvXXX` - mount "${uenv_dev}" "${uenv_mnt_dir}" - mkdir -p "${uenv_mnt_dir}"/boot - - cat <<'EOF' >${uenv_mnt_dir}/boot/uEnv.txt -scriptaddr=0x88100000 -script_offset_f=0x1fff000 -script_size_f=0x1000 - -kernel_addr_r=0x84000000 -kernel_comp_addr_r=0x90000000 -kernel_comp_size=0x10000000 - -fdt_addr_r=0x88000000 -ramdisk_addr_r=0x88300000 - -bootcmd=load mmc 0:f ${kernel_addr_r} /EFI/ubuntu/grubriscv64.efi; bootefi ${kernel_addr_r} -bootcmd_mmc0=devnum=0; run mmc_boot - -ipaddr=192.168.120.200 -netmask=255.255.255.0 -EOF + chroot mountpoint apt-get install -qqy u-boot-menu grub-efi-riscv64 + efi_target=riscv64-efi - umount "${uenv_mnt_dir}" - rmdir "${uenv_mnt_dir}" - # Provide end-user modifyable CIDATA - cidata_dev="${loop_device}p12" - setup_cidata "${cidata_dev}" - # Provide stock nocloud datasource - # Allow interactive login on baremetal SiFive board, - # without a cloud datasource. - setup_cinocloud mountpoint - ;; - "visionfive2") - echo "Installing GRUB for ${SUBARCH} board" - cp ${my_d}/riscv64/grub/90_watchdog-thresh.cfg mountpoint/etc/default/grub.d/ - # flash-kernel is needed to install the dtb for update-grub: it uses the - # /proc/device-tree/model value to pick the correct dtb and as we are in a chroot, - # the model value is wrong and we need to use /etc/flash-kernel/machine instead. - # This explains why we install flash-kernel here. - chroot mountpoint mkdir -p /etc/flash-kernel/ - chroot mountpoint bash -c "echo 'StarFive VisionFive 2 v1.3B' > /etc/flash-kernel/machine" - chroot mountpoint bash -c 'FK_FORCE=yes apt-get install -qqy grub-efi-riscv64 flash-kernel' - efi_target=riscv64-efi - # Provide end-user modifyable CIDATA - cidata_dev="${loop_device}p12" - setup_cidata "${cidata_dev}" - # Provide stock nocloud datasource - # Allow interactive login on baremetal board, - # without a cloud datasource. - setup_cinocloud mountpoint - # Flash-kernel creates boot.scr if it believes we did - # not boot in UEFi mode. Remove it so that we can boot - # via GRUB. - chroot mountpoint rm -f /boot/boot.scr - ;; - *) - cp ${my_d}/riscv64/grub/90_watchdog-thresh.cfg mountpoint/etc/default/grub.d/ - echo "Installing u-boot-menu for ${SUBARCH} board" - chroot mountpoint apt-get install -qqy u-boot-menu #grub-efi-riscv64 - mkdir -p mountpoint/etc/u-boot-menu/conf.d/ - cp ${my_d}/riscv64/u-boot-menu/*.conf mountpoint/etc/u-boot-menu/conf.d/ - efi_target=riscv64-efi - chroot mountpoint u-boot-update - u_boot_arch="${SUBARCH}" - if [ "${u_boot_arch}" = "hifive" ]; then - u_boot_arch=sifive_fu540 - fi - chroot mountpoint apt-get install -qqy u-boot-sifive - # FSBL, which gets U-Boot SPL - loader1="${loop_device}p13" - # The real U-Boot - loader2="${loop_device}p14" - dd if=mountpoint/usr/lib/u-boot/${u_boot_arch}/u-boot-spl.bin of=$loader1 - dd if=mountpoint/usr/lib/u-boot/${u_boot_arch}/u-boot.itb of=$loader2 - # Provide end-user modifyable CIDATA - cidata_dev="${loop_device}p12" - setup_cidata "${cidata_dev}" - # Provide stock nocloud datasource - # Allow interactive login on baremetal SiFive board, - # without a cloud datasource. - setup_cinocloud mountpoint - ;; - esac - else - # Other images e.g. cloud images - chroot mountpoint apt-get install -qqy u-boot-menu grub-efi-riscv64 - efi_target=riscv64-efi - - chroot mountpoint u-boot-update - fi - - if [ "${SUBARCH:-}" != "nezha" ] && \ - [ "${SUBARCH:-}" != "licheerv" ] && \ - [ "${SUBARCH:-}" != "icicle" ] && \ - [ "${SUBARCH:-}" != "visionfive" ] && \ - [ "${SUBARCH:-}" != "visionfive2" ]; then - ## TODO remove below once we have grub-efi-riscv64 for the platforms - rm mountpoint/tmp/device.map - umount mountpoint/boot/efi - mount - umount_partition mountpoint - rmdir mountpoint - return - ## - fi + chroot mountpoint u-boot-update ;; esac