From 689a92ec088ba90608ff92cce672f2faf25c51b3 Mon Sep 17 00:00:00 2001 From: Peter Kindler Date: Mon, 18 Mar 2024 11:16:59 +0100 Subject: [PATCH] feat(coreos-installer): add coreos-installer for eagle40-03 --- .../components/optional/installer.rst | 22 +++++---- .../conf/machine/eagle40-03.conf | 3 +- .../coreos-generic-features/partitions.inc | 15 +++--- .../beaglebone_1.0.sfdisk | 10 ++-- .../eagle40-03_1.0.sfdisk | 13 +++++ .../coreos-installer-config_%.bbappend | 1 + .../wic/beaglebone-sdcard.wks.in | 8 ++-- .../wic/generic-uefi-usb-installer.wks | 16 +++++++ .../wic/generic-uefi.wks.in | 13 ++--- .../wic/qemu-efi-coreos-generic.wks.in | 12 ++--- .../classes/coreos-image-installer.bbclass | 41 ++++++++++++++++ .../classes/coreos-image.bbclass | 6 ++- .../images/coreos-image-all-features.bb | 3 ++ .../images/coreos-image-installer.bb | 48 +------------------ .../99-overwrite.sh | 23 +++++++++ .../post-install.sh | 5 ++ .../coreos-installer-unattended_1.0.bb | 23 +++++++++ .../coreos-installer/25-installer-config.sh | 10 ++++ .../coreos-installer/coreos-installer_1.0.bb | 20 ++++---- .../swupdate/swupdate/defconfig | 1 + .../cn9130-cf-pro_1.0.sfdisk | 10 ++-- .../wic/cn913x-sdcard.wks.in | 12 ++--- 22 files changed, 204 insertions(+), 111 deletions(-) create mode 100644 layers/meta-belden-coreos-bsp/recipes-coreos/coreos-installer/coreos-installer-config/eagle40-03_1.0.sfdisk create mode 100644 layers/meta-belden-coreos-bsp/wic/generic-uefi-usb-installer.wks create mode 100644 layers/meta-belden-coreos/classes/coreos-image-installer.bbclass create mode 100644 layers/meta-belden-coreos/recipes-coreos/coreos-installer/coreos-installer-unattended/99-overwrite.sh create mode 100644 layers/meta-belden-coreos/recipes-coreos/coreos-installer/coreos-installer-unattended/post-install.sh create mode 100644 layers/meta-belden-coreos/recipes-coreos/coreos-installer/coreos-installer-unattended_1.0.bb diff --git a/documentation/components/optional/installer.rst b/documentation/components/optional/installer.rst index b3858e4..1492527 100644 --- a/documentation/components/optional/installer.rst +++ b/documentation/components/optional/installer.rst @@ -3,33 +3,35 @@ CoreOS Installer **************** -The CoreOS installer is a set of script running on the target and a +The CoreOS installer is a set of scripts running on the target and a corresponding bitbake image that is used into the bootstrap process of CoreOS. coreos-image-installer ====================== -The CoreOS installer image is a single binary EFI file that include a kernel, -device tree and an initramfs with all the tools needed to install CoreOS. +The CoreOS image installer results in an image contairing only a single binary +EFI file. This EFI file includes a kernel, a device tree and an initramfs with +all (and only) the tools needed to install CoreOS. -An installer image is automatically built in parallel of a normal image. -This can be deactivated by setting `COREOS_IMAGE_GENERATE_INSTALLER` to 0. +The installer image is not automatically built in parallel of a normal image. +This can be changed by setting `COREOS_IMAGE_GENERATE_INSTALLER` to 1 in the +image file (as it is done for example in coreos-image-all-features.bb). The installer image build by default only a single EFI binary named -coreos-installer-MACHINE.efi. An SDCard image can be generate if +coreos-installer-MACHINE.efi. An SDCard or USB image can be generated if `COREOS_INSTALLER_WKS_FILE` is set to a wks file. coreos-installer ================ -The coreos-installer recipe installs some script that is used at startup -to automatically format the internal emmc of the device. It also contains +The coreos-installer recipe installs scripts that are used at startup to +automatically format the internal emmc of the device. The recipe also contains a swupdate configuration file to setup swupdate correctly for that use case. coreos-installer-config ======================= The coreos-installer-config recipe installs device specific configuration file -used by the coreos-installer. This includes the partitionner config file. Distro -and project based on CoreOS can change the partionning scheme or partition size +used by the coreos-installer. This includes the partitioner config file. Distros +and projects based on CoreOS can change the partioning scheme or partition size by installing their own version of this package using a `bbappend file`. diff --git a/layers/meta-belden-coreos-bsp/conf/machine/eagle40-03.conf b/layers/meta-belden-coreos-bsp/conf/machine/eagle40-03.conf index e35d684..deb76de 100644 --- a/layers/meta-belden-coreos-bsp/conf/machine/eagle40-03.conf +++ b/layers/meta-belden-coreos-bsp/conf/machine/eagle40-03.conf @@ -28,11 +28,10 @@ APPEND += "console=ttyS0,115200" # Ensure that both flash-image.bin and boot.scr are generated as they are needed # for a wic image WKS_FILE = "generic-uefi.wks.in" -# COREOS_INSTALLER_WKS_FILE ?= "" --> TBD +COREOS_INSTALLER_WKS_FILE ?= "generic-uefi-usb-installer.wks" IMAGE_FSTYPES += "wic.xz wic.bmap" MACHINE_ESSENTIAL_EXTRA_RDEPENDS += " kernel-modules" -# COREOS_IMAGE_SWUPDATE_EXTRACLASSES += "" --> TBD # No watchdog available yet EFIBOOTGUARD_TIMEOUT ?= "0" diff --git a/layers/meta-belden-coreos-bsp/conf/machine/include/coreos-generic-features/partitions.inc b/layers/meta-belden-coreos-bsp/conf/machine/include/coreos-generic-features/partitions.inc index 88ddf6e..24cbca5 100644 --- a/layers/meta-belden-coreos-bsp/conf/machine/include/coreos-generic-features/partitions.inc +++ b/layers/meta-belden-coreos-bsp/conf/machine/include/coreos-generic-features/partitions.inc @@ -1,17 +1,20 @@ - -# Variable used in WKS file - +# Variables used in WKS file WKS_PART_EFI ??= 'part --source efibootguard-efi --label efi --part-type=EF00' WKS_PART_EFIBOOTGUARD_A ??= 'part --source efibootguard-boot --label ebg0 --part-type=0700 --sourceparams "args=coreos.root=rootfs0,watchdog=${EFIBOOTGUARD_TIMEOUT},revision=2,kernel=${COREOS_KERNEL_FILENAME};KERNEL.EFI"' WKS_PART_EFIBOOTGUARD_B ??= 'part --source efibootguard-boot --label ebg1 --part-type=0700 --sourceparams "args=coreos.root=rootfs1,watchdog=${EFIBOOTGUARD_TIMEOUT},revision=1,kernel=${COREOS_KERNEL_FILENAME};KERNEL.EFI"' WKS_PART_ROOT_A ??= 'part / --source rootfs --fstype=ext4 --label rootfs0' WKS_PART_ROOT_B ??= 'part --fstype=ext4 --label rootfs1' -WKS_PART_ROOT_SIZE ??= '1G' -WKS_PART_USERDATA_SIZE ??= '1G' WKS_PART_USERDATA ??= 'part /usr/local/data --fstype=btrfs --label userdata' +PART_EFI_SIZE ??= '64M' +PART_ROOT_SIZE ??= '1G' +PART_EFIBG_SIZE ??= '128M' +PART_USERDATA_SIZE ??= '1G' + +# Variables used in SFDISK file SFDISK_PART_EFI ??= 'type=C12A7328-F81F-11D2-BA4B-00A0C93EC93B, name="efi"' SFDISK_PART_EFIBOOTGUARD_A ??= 'type=EBD0A0A2-B9E5-4433-87C0-68B6B72699C7, name="ebg0"' SFDISK_PART_EFIBOOTGUARD_B ??= 'type=EBD0A0A2-B9E5-4433-87C0-68B6B72699C7, name="ebg1"' SFDISK_PART_ROOT_A ??= 'type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, name="rootfs0"' -SFDISK_PART_ROOT_B ??= 'type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, name="rootfs0"' +SFDISK_PART_ROOT_B ??= 'type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, name="rootfs1"' +SFDISK_PART_USERDATA ??= 'type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, name="userdata"' diff --git a/layers/meta-belden-coreos-bsp/recipes-coreos/coreos-installer/coreos-installer-config/beaglebone_1.0.sfdisk b/layers/meta-belden-coreos-bsp/recipes-coreos/coreos-installer/coreos-installer-config/beaglebone_1.0.sfdisk index 3cc9887..0f86c69 100644 --- a/layers/meta-belden-coreos-bsp/recipes-coreos/coreos-installer/coreos-installer-config/beaglebone_1.0.sfdisk +++ b/layers/meta-belden-coreos-bsp/recipes-coreos/coreos-installer/coreos-installer-config/beaglebone_1.0.sfdisk @@ -12,8 +12,8 @@ sector-size: 512 /dev/mmcblk1p1 : start= 256, size= 512, type=4DA6E9DA-C803-4BE4-BAC4-8192717C5EB0, name="mlo", attrs="RequiredPartition" /dev/mmcblk1p2 : start= 768, size= 8192, type=5B97345D-B7A1-47D3-A491-ED40F4841639, name="uboot", attrs="RequiredPartition" -/dev/mmcblk1p3 : start= 8960, size= 131072, ${SFDISK_PART_EFI} -/dev/mmcblk1p4 : start= 140032, size= 262144, ${SFDISK_PART_EFIBOOTGUARD_A} -/dev/mmcblk1p5 : start= 402176, size= 262144, ${SFDISK_PART_EFIBOOTGUARD_B} -/dev/mmcblk1p6 : start= 664320, size= 3403375, ${SFDISK_PART_ROOT_A} -/dev/mmcblk1p7 : start= 4067695, size= 3403375, ${SFDISK_PART_ROOT_B} +/dev/mmcblk1p3 : size= ${PART_EFI_SIZE}, ${SFDISK_PART_EFI} +/dev/mmcblk1p4 : size= ${PART_EFIBG_SIZE}, ${SFDISK_PART_EFIBOOTGUARD_A} +/dev/mmcblk1p5 : size= ${PART_EFIBG_SIZE}, ${SFDISK_PART_EFIBOOTGUARD_B} +/dev/mmcblk1p6 : size= ${PART_ROOT_SIZE}, ${SFDISK_PART_ROOT_A} +/dev/mmcblk1p7 : size= ${PART_ROOT_SIZE}, ${SFDISK_PART_ROOT_B} diff --git a/layers/meta-belden-coreos-bsp/recipes-coreos/coreos-installer/coreos-installer-config/eagle40-03_1.0.sfdisk b/layers/meta-belden-coreos-bsp/recipes-coreos/coreos-installer/coreos-installer-config/eagle40-03_1.0.sfdisk new file mode 100644 index 0000000..60c2dbc --- /dev/null +++ b/layers/meta-belden-coreos-bsp/recipes-coreos/coreos-installer/coreos-installer-config/eagle40-03_1.0.sfdisk @@ -0,0 +1,13 @@ +label: gpt +device: /dev/mmcblk2 +unit: sectors +first-lba: 34 +last-lba: 7471070 +sector-size: 512 + +/dev/mmcblk2p1 : start= 256, size= ${PART_EFI_SIZE}, ${SFDISK_PART_EFI} +/dev/mmcblk2p2 : size= ${PART_ROOT_SIZE}, ${SFDISK_PART_ROOT_A} +/dev/mmcblk2p3 : size= ${PART_ROOT_SIZE}, ${SFDISK_PART_ROOT_B} +/dev/mmcblk2p4 : size= ${PART_EFIBG_SIZE}, ${SFDISK_PART_EFIBOOTGUARD_A} +/dev/mmcblk2p5 : size= ${PART_EFIBG_SIZE}, ${SFDISK_PART_EFIBOOTGUARD_B} +/dev/mmcblk2p6 : size= ${PART_USERDATA_SIZE}, ${SFDISK_PART_USERDATA} diff --git a/layers/meta-belden-coreos-bsp/recipes-coreos/coreos-installer/coreos-installer-config_%.bbappend b/layers/meta-belden-coreos-bsp/recipes-coreos/coreos-installer/coreos-installer-config_%.bbappend index 749c84f..ef77630 100644 --- a/layers/meta-belden-coreos-bsp/recipes-coreos/coreos-installer/coreos-installer-config_%.bbappend +++ b/layers/meta-belden-coreos-bsp/recipes-coreos/coreos-installer/coreos-installer-config_%.bbappend @@ -1,3 +1,4 @@ FILESEXTRAPATHS:prepend := "${THISDIR}/coreos-installer-config:" SRC_URI:append:beaglebone = " file://beaglebone_1.0.sfdisk" +SRC_URI:append:eagle40-03 = " file://eagle40-03_1.0.sfdisk" diff --git a/layers/meta-belden-coreos-bsp/wic/beaglebone-sdcard.wks.in b/layers/meta-belden-coreos-bsp/wic/beaglebone-sdcard.wks.in index cfaac14..19c75cf 100644 --- a/layers/meta-belden-coreos-bsp/wic/beaglebone-sdcard.wks.in +++ b/layers/meta-belden-coreos-bsp/wic/beaglebone-sdcard.wks.in @@ -13,8 +13,8 @@ part --offset 768S --source rawcopy --sourceparams="file=u-boot.img" --ondisk mm # Let's define a 4MiB maximum size for the bootloader # 4MiB => 4*1024*1024/512=8192S | 768S + 8192S => 8960S ${WKS_PART_EFI} --ondisk mmcblk0 --offset 8960S --fixed-size 32M -${WKS_PART_EFIBOOTGUARD_A} --ondisk mmcblk0 --fixed-size 128M -${WKS_PART_EFIBOOTGUARD_B} --ondisk mmcblk0 --fixed-size 128M -${WKS_PART_ROOT_A} --ondisk mmcblk0 --fixed-size ${WKS_PART_ROOT_SIZE} -${WKS_PART_ROOT_B} --ondisk mmcblk0 --fixed-size ${WKS_PART_ROOT_SIZE} +${WKS_PART_EFIBOOTGUARD_A} --ondisk mmcblk0 --fixed-size ${PART_EFIBG_SIZE} +${WKS_PART_EFIBOOTGUARD_B} --ondisk mmcblk0 --fixed-size ${PART_EFIBG_SIZE} +${WKS_PART_ROOT_A} --ondisk mmcblk0 --fixed-size ${PART_ROOT_SIZE} +${WKS_PART_ROOT_B} --ondisk mmcblk0 --fixed-size ${PART_ROOT_SIZE} bootloader --ptable gpt diff --git a/layers/meta-belden-coreos-bsp/wic/generic-uefi-usb-installer.wks b/layers/meta-belden-coreos-bsp/wic/generic-uefi-usb-installer.wks new file mode 100644 index 0000000..346b54d --- /dev/null +++ b/layers/meta-belden-coreos-bsp/wic/generic-uefi-usb-installer.wks @@ -0,0 +1,16 @@ +# short-description: Create USB image for Eagle 40-03 +# long-description: Creates a partitioned USB image for Eagle 40-03. + +# offset 1S => 1 sector (1x512 byte) +# The bootloader can be at 4 different position in raw mode: 0S, 256S, 512S, 768S +# MBR disk use only the sector 0, so 1S is free +# GPT disk use sector 0-33S, so first free slot is 256S +# Offset are from the BBB default settings + +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +# Don't name partition in the installer disk image, otherwise the installer may not work as it rely on partition label! +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +part --offset 256S --source bootimg-partition --part-type=EF00 --ondisk mmcblk0 +part --fixed-size 3G --fstype=vfat --label=image +bootloader --ptable gpt diff --git a/layers/meta-belden-coreos-bsp/wic/generic-uefi.wks.in b/layers/meta-belden-coreos-bsp/wic/generic-uefi.wks.in index 471e0c2..06b42c6 100644 --- a/layers/meta-belden-coreos-bsp/wic/generic-uefi.wks.in +++ b/layers/meta-belden-coreos-bsp/wic/generic-uefi.wks.in @@ -1,10 +1,11 @@ # short-description: Create an EFI disk image for genericx86* # long-description: Creates a partitioned EFI disk image for genericx86* machines -${WKS_PART_EFI} --align 1024 --size 64M --extra-space 0 --overhead-factor 1 -${WKS_PART_ROOT_A} --size ${WKS_PART_ROOT_SIZE} --extra-space 0 --overhead-factor 1 -${WKS_PART_ROOT_B} --size ${WKS_PART_ROOT_SIZE} --extra-space 0 --overhead-factor 1 -${WKS_PART_EFIBOOTGUARD_A} --align 1024 --size 128M --extra-space 0 --overhead-factor 1 -${WKS_PART_EFIBOOTGUARD_B} --align 1024 --size 128M --extra-space 0 --overhead-factor 1 -${WKS_PART_USERDATA} --size ${WKS_PART_USERDATA_SIZE} --extra-space 0 --overhead-factor 1 + +${WKS_PART_EFI} --align 1024 --size ${PART_EFI_SIZE} --extra-space 0 --overhead-factor 1 +${WKS_PART_ROOT_A} --size ${PART_ROOT_SIZE} --extra-space 0 --overhead-factor 1 +${WKS_PART_ROOT_B} --size ${PART_ROOT_SIZE} --extra-space 0 --overhead-factor 1 +${WKS_PART_EFIBOOTGUARD_A} --align 1024 --size ${PART_EFIBG_SIZE} --extra-space 0 --overhead-factor 1 +${WKS_PART_EFIBOOTGUARD_B} --align 1024 --size ${PART_EFIBG_SIZE} --extra-space 0 --overhead-factor 1 +${WKS_PART_USERDATA} --size ${PART_USERDATA_SIZE} --extra-space 0 --overhead-factor 1 bootloader --ptable gpt diff --git a/layers/meta-belden-coreos-bsp/wic/qemu-efi-coreos-generic.wks.in b/layers/meta-belden-coreos-bsp/wic/qemu-efi-coreos-generic.wks.in index 1db9345..35c69b2 100644 --- a/layers/meta-belden-coreos-bsp/wic/qemu-efi-coreos-generic.wks.in +++ b/layers/meta-belden-coreos-bsp/wic/qemu-efi-coreos-generic.wks.in @@ -2,11 +2,11 @@ # long-description: Creates a partitioned EFI disk image that the user # can directly dd to boot media. -part --source efibootguard-efi --label efi --part-type=EF00 --use-uuid --offset 20480S --size 64M --extra-space 0 --overhead-factor 1 -part / --source rootfs --fstype=ext4 --label rootfs0 --use-uuid --size ${WKS_PART_ROOT_SIZE} --extra-space 0 --overhead-factor 1 -part --fstype=ext4 --label rootfs1 --use-uuid --size ${WKS_PART_ROOT_SIZE} --extra-space 0 --overhead-factor 1 -part --source efibootguard-boot --label ebg0 --part-type=0700 --sourceparams "args=coreos.root=rootfs0,watchdog=${EFIBOOTGUARD_TIMEOUT},revision=2,kernel=${COREOS_KERNEL_FILENAME};KERNEL.EFI" --use-uuid --align 1024 --size 128M --extra-space 0 --overhead-factor 1 -part --source efibootguard-boot --label ebg1 --part-type=0700 --sourceparams "args=coreos.root=rootfs1,watchdog=${EFIBOOTGUARD_TIMEOUT},revision=1,kernel=${COREOS_KERNEL_FILENAME};KERNEL.EFI" --use-uuid --align 1024 --size 128M --extra-space 0 --overhead-factor 1 -${WKS_PART_USERDATA} --use-uuid --size ${WKS_PART_USERDATA_SIZE} --extra-space 0 --overhead-factor 1 +part --source efibootguard-efi --label efi --part-type=EF00 --use-uuid --offset 20480S --size ${PART_EFI_SIZE} --extra-space 0 --overhead-factor 1 +part / --source rootfs --fstype=ext4 --label rootfs0 --use-uuid --size ${PART_ROOT_SIZE} --extra-space 0 --overhead-factor 1 +part --fstype=ext4 --label rootfs1 --use-uuid --size ${PART_ROOT_SIZE} --extra-space 0 --overhead-factor 1 +part --source efibootguard-boot --label ebg0 --part-type=0700 --sourceparams "args=coreos.root=rootfs0,watchdog=${EFIBOOTGUARD_TIMEOUT},revision=2,kernel=${COREOS_KERNEL_FILENAME};KERNEL.EFI" --use-uuid --align 1024 --size ${PART_EFIBG_SIZE} --extra-space 0 --overhead-factor 1 +part --source efibootguard-boot --label ebg1 --part-type=0700 --sourceparams "args=coreos.root=rootfs1,watchdog=${EFIBOOTGUARD_TIMEOUT},revision=1,kernel=${COREOS_KERNEL_FILENAME};KERNEL.EFI" --use-uuid --align 1024 --size ${PART_EFIBG_SIZE} --extra-space 0 --overhead-factor 1 +${WKS_PART_USERDATA} --use-uuid --size ${PART_USERDATA_SIZE} --extra-space 0 --overhead-factor 1 bootloader --ptable gpt \ No newline at end of file diff --git a/layers/meta-belden-coreos/classes/coreos-image-installer.bbclass b/layers/meta-belden-coreos/classes/coreos-image-installer.bbclass new file mode 100644 index 0000000..ca7d088 --- /dev/null +++ b/layers/meta-belden-coreos/classes/coreos-image-installer.bbclass @@ -0,0 +1,41 @@ +# Class used to generate image based on Belden CoreOS + +export IMAGE_BASENAME = "${MLPREFIX}${PN}" +IMAGE_NAME_SUFFIX ?= "" +IMAGE_LINGUAS = "" + +LICENSE = "MIT" + +IMAGE_FSTYPES = "cpio.gz" + +# Support for generating a SDCard or USB installer is optional +COREOS_INSTALLER_WKS_FILE ??= "" +WKS_FILE = "${COREOS_INSTALLER_WKS_FILE}" +IMAGE_FSTYPES += "${@'wic.xz wic.bmap' if d.getVar('COREOS_INSTALLER_WKS_FILE') else ''}" +IMAGE_BOOT_FILES = "${COREOS_KERNEL_FILENAME};EFI/BOOT/${EFI_BOOT_IMAGE}" + +COREOS_IMAGE_GENERATE_UKI = "1" + +# IMGDEPLOYDIR has to be used instead of DEPLOY_DIR_IMAGE here, because it will +# run during image generation +COREOS_UKI_PART_INITRAMFS = "${IMGDEPLOYDIR}/${IMAGE_BASENAME}-${MACHINE}.cpio.gz" +COREOS_IMAGE_GENERATE_SWU = "0" + +# Change generated UKI filename and reset the bundled command line to "APPEND" +# to ensure that root is not set in the kernel command line +COREOS_KERNEL_NAME ?= "coreos-installer-${MACHINE}" +COREOS_KERNEL_CMDLINE ?= "${APPEND}" + +inherit coreos-image + +# Only install a reduced set of package and feature to keep image size small +IMAGE_INSTALL = "packagegroup-coreos-boot coreos-installer coreos-installer-unattended util-linux-sfdisk util-linux-fdisk util-linux-cfdisk efibootguard efibootguard-tools" +IMAGE_FEATURES = "debug-tweaks swupdate" +NO_RECOMMENDATIONS = "1" + +IMAGE_ROOTFS_SIZE = "8192" +INITRAMFS_MAXSIZE = "976562" +IMAGE_ROOTFS_EXTRA_SPACE = "0" + +# Use the same restriction as initramfs-module-install +COMPATIBLE_HOST = '(x86_64.*|i.86.*|arm.*|aarch64.*)-(linux.*|freebsd.*)' diff --git a/layers/meta-belden-coreos/classes/coreos-image.bbclass b/layers/meta-belden-coreos/classes/coreos-image.bbclass index 42cc7d7..a06aae2 100644 --- a/layers/meta-belden-coreos/classes/coreos-image.bbclass +++ b/layers/meta-belden-coreos/classes/coreos-image.bbclass @@ -90,8 +90,10 @@ IMAGE_ROOTFS_EXTRA_SPACE:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'sys # Unified kernel image and swupdate support # ============================================================================== -# Support for Unified Kernel Image and Swupdate are optional -COREOS_IMAGE_GENERATE_INSTALLER ?= "${@"1" if "efi" in d.getVar('COMBINED_FEATURES') and "swupdate" in d.getVar("DISTRO_FEATURES") else "0"}" +# The CoreOS image installer is disabled by default. +COREOS_IMAGE_GENERATE_INSTALLER ?= "0" + +# Support for Unified Kernel Image and Swupdate are optional. COREOS_IMAGE_GENERATE_UKI ?= "${@bb.utils.contains("COMBINED_FEATURES", "efi", "1", "0", d)}" COREOS_IMAGE_GENERATE_SWU ?= "${@"1" if "efi" in d.getVar('COMBINED_FEATURES') and "swupdate" in d.getVar("DISTRO_FEATURES") else "0"}" diff --git a/layers/meta-belden-coreos/recipes-core/images/coreos-image-all-features.bb b/layers/meta-belden-coreos/recipes-core/images/coreos-image-all-features.bb index 6cdacc9..38651d7 100644 --- a/layers/meta-belden-coreos/recipes-core/images/coreos-image-all-features.bb +++ b/layers/meta-belden-coreos/recipes-core/images/coreos-image-all-features.bb @@ -10,3 +10,6 @@ IMAGE_INSTALL:append = "${@bb.utils.contains("IMAGE_FEATURES", "swupdate", " swu # development tools IMAGE_INSTALL:append = " systemd-analyze" + +# Enable the optional image installer +COREOS_IMAGE_GENERATE_INSTALLER = "1" diff --git a/layers/meta-belden-coreos/recipes-core/images/coreos-image-installer.bb b/layers/meta-belden-coreos/recipes-core/images/coreos-image-installer.bb index 9db6cc3..8fae0b1 100644 --- a/layers/meta-belden-coreos/recipes-core/images/coreos-image-installer.bb +++ b/layers/meta-belden-coreos/recipes-core/images/coreos-image-installer.bb @@ -1,50 +1,4 @@ DESCRIPTION = "Initramfs image with the CoreOS emmc installer" - - - -# Don't reboot the device at reboot and don't do A/B switching -BAD_RECOMMENDATIONS = "swupdate-progress swupdate-coreos-config" - -export IMAGE_BASENAME = "${MLPREFIX}${PN}" -IMAGE_NAME_SUFFIX ?= "" -IMAGE_LINGUAS = "" - LICENSE = "MIT" -IMAGE_FSTYPES = "cpio.gz" - -# Support for generating a SDCard installer is optional -COREOS_INSTALLER_WKS_FILE ??= "" -WKS_FILE = "${COREOS_INSTALLER_WKS_FILE}" -IMAGE_FSTYPES += "${@'wic.xz wic.bmap' if d.getVar('COREOS_INSTALLER_WKS_FILE') else ''}" -IMAGE_BOOT_FILES = "${COREOS_KERNEL_FILENAME};EFI/BOOT/${EFI_BOOT_IMAGE}" - -COREOS_IMAGE_GENERATE_UKI = "1" - -# Avoid dependancy loop, we are already in an installer image, so we don't need -# to bundle another one -COREOS_IMAGE_GENERATE_INSTALLER = "0" - -# IMGDEPLOYDIR has to be used instead of DEPLOY_DIR_IMAGE here, because it will -# run during image generation -COREOS_UKI_PART_INITRAMFS = "${IMGDEPLOYDIR}/${IMAGE_BASENAME}-${MACHINE}.cpio.gz" -COREOS_IMAGE_GENERATE_SWU = "0" - -# Change generated UKI filename and reset the bundled command line to "APPEND" -# to ensure that root is not set in the kernel command line -COREOS_KERNEL_NAME ?= "coreos-installer-${MACHINE}" -COREOS_KERNEL_CMDLINE ?= "${APPEND}" - -inherit coreos-image - -# Only install a reduced set of package and feature to keep image size small -IMAGE_INSTALL = "packagegroup-coreos-boot coreos-installer swupdate-www util-linux-sfdisk util-linux-fdisk util-linux-cfdisk efibootguard efibootguard-tools" -IMAGE_FEATURES = "debug-tweaks swupdate networkmanager" -NO_RECOMMENDATIONS = "1" - -IMAGE_ROOTFS_SIZE = "8192" -INITRAMFS_MAXSIZE = "976562" -IMAGE_ROOTFS_EXTRA_SPACE = "0" - -# Use the same restriction as initramfs-module-install -COMPATIBLE_HOST = '(x86_64.*|i.86.*|arm.*|aarch64.*)-(linux.*|freebsd.*)' +inherit coreos-image-installer diff --git a/layers/meta-belden-coreos/recipes-coreos/coreos-installer/coreos-installer-unattended/99-overwrite.sh b/layers/meta-belden-coreos/recipes-coreos/coreos-installer/coreos-installer-unattended/99-overwrite.sh new file mode 100644 index 0000000..b45c6a1 --- /dev/null +++ b/layers/meta-belden-coreos/recipes-coreos/coreos-installer/coreos-installer-unattended/99-overwrite.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env sh + +# catch errors from previous source files +if [ "$SWUPDATE_EXIT" != "" ]; then + # Notify the installation status indicator about the failed installation. + # This can result in the red LED lighting up. + dbus-send --system /org/belden/CoreOSInstallationStatusIndicator org.belden.CoreOSInstallationStatusIndicator.InstallationStatusFailure + exit 1 +fi + +# Notify the installation status indicator about the success with partitioning +# the blockdevice. This can result in the first green LED lighting up. +dbus-send --system /org/belden/CoreOSInstallationStatusIndicator org.belden.CoreOSInstallationStatusIndicator.InstallationStatusPartitioningSuccess + +mount /dev/disk/by-label/image /mnt +if [ ! -f "/mnt/image.swu" ]; then + echo "Could not find image.swu on the vfat partition!" + dbus-send --system /org/belden/CoreOSInstallationStatusIndicator org.belden.CoreOSInstallationStatusIndicator.InstallationStatusFailure + exit 1 +fi + +SWUPDATE_ARGS="${SWUPDATE_ARGS} -p /usr/lib/swupdate/post-install.sh" +SWUPDATE_ARGS="${SWUPDATE_ARGS} -i /mnt/image.swu" diff --git a/layers/meta-belden-coreos/recipes-coreos/coreos-installer/coreos-installer-unattended/post-install.sh b/layers/meta-belden-coreos/recipes-coreos/coreos-installer/coreos-installer-unattended/post-install.sh new file mode 100644 index 0000000..61dd7da --- /dev/null +++ b/layers/meta-belden-coreos/recipes-coreos/coreos-installer/coreos-installer-unattended/post-install.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env sh + +# Notify the installation status indicator about the success with flashing the image. +# This can result in the second green LED lighting up. +dbus-send --system /org/belden/CoreOSInstallationStatusIndicator org.belden.CoreOSInstallationStatusIndicator.InstallationStatusImageFlashingSuccess diff --git a/layers/meta-belden-coreos/recipes-coreos/coreos-installer/coreos-installer-unattended_1.0.bb b/layers/meta-belden-coreos/recipes-coreos/coreos-installer/coreos-installer-unattended_1.0.bb new file mode 100644 index 0000000..3f20cca --- /dev/null +++ b/layers/meta-belden-coreos/recipes-coreos/coreos-installer/coreos-installer-unattended_1.0.bb @@ -0,0 +1,23 @@ +DESCRIPTION = "CoreOS scripts for unattended installation" +SECTION = "coreos" +LICENSE = "CLOSED" + +SRC_URI += "\ + file://99-overwrite.sh \ + file://post-install.sh \ +" + +FILES:${PN} = "\ + ${libdir}/swupdate/conf.d/99-overwrite.sh \ + ${libdir}/swupdate/post-install.sh \ +" + +RDEPENDS:${PN} = "coreos-installer" + +RCONFLICTS:${PN} = "swupdate-www" + +do_install() { + install -d ${D}${libdir}/swupdate/conf.d + install -m 755 ${WORKDIR}/post-install.sh ${D}${libdir}/swupdate/ + install -m 755 ${WORKDIR}/99-overwrite.sh ${D}${libdir}/swupdate/conf.d/ +} diff --git a/layers/meta-belden-coreos/recipes-coreos/coreos-installer/coreos-installer/25-installer-config.sh b/layers/meta-belden-coreos/recipes-coreos/coreos-installer/coreos-installer/25-installer-config.sh index 2d4f613..44d9375 100644 --- a/layers/meta-belden-coreos/recipes-coreos/coreos-installer/coreos-installer/25-installer-config.sh +++ b/layers/meta-belden-coreos/recipes-coreos/coreos-installer/coreos-installer/25-installer-config.sh @@ -1,5 +1,8 @@ #!/usr/bin/env sh +set -o errtrace +trap 'echo "An error occured in line $LINENO: $BASH_COMMAND, exiting..."; SWUPDATE_EXIT=1; exit;' ERR + # Read /etc/hwrevision and turn it into a stripped string # with the format ${MACHINE}_${VERSION} HWREVISION=$(tr ' ' '_' < /etc/hwrevision | tr -d '[:space:]') @@ -15,6 +18,13 @@ fi DISK=$(grep "^device:\s" < "${SFDISK_DUMP_FILE}" | cut -d ' ' -f 2) +# Remove the partition table signature, if there is already one. +# This ensures that sfdisk always finds a 'clean' disk to install / recover +wipefs -a -f ${DISK} + +# Give the kernel some time to reload the partition +sleep 3 + echo "Flashing ${SFDISK_DUMP_FILE} to ${DISK}" cat "${SFDISK_DUMP_FILE}" sfdisk "${DISK}" < "${SFDISK_DUMP_FILE}" diff --git a/layers/meta-belden-coreos/recipes-coreos/coreos-installer/coreos-installer_1.0.bb b/layers/meta-belden-coreos/recipes-coreos/coreos-installer/coreos-installer_1.0.bb index 43e5bab..f5f0c73 100644 --- a/layers/meta-belden-coreos/recipes-coreos/coreos-installer/coreos-installer_1.0.bb +++ b/layers/meta-belden-coreos/recipes-coreos/coreos-installer/coreos-installer_1.0.bb @@ -1,22 +1,18 @@ DESCRIPTION = "CoreOS Installer scripts" -LICENSE = "CLOSED" SECTION = "coreos" +LICENSE = "CLOSED" -SRC_URI+= " \ - file://25-installer-config.sh \ -" +SRC_URI += "file://25-installer-config.sh" -# This package ship an alternate configuration for SWUpade to disable A/B -# switching and always flash A -RCONFLICTS:${PN}= "swupdate-coreos-config" - -FILES:${PN} = " \ - ${libdir}/swupdate/conf.d/25-installer-config.sh \ -" +FILES:${PN} = "${libdir}/swupdate/conf.d/25-installer-config.sh" # glibc-utils provide iconv # glibc-gconv-utf-16 provide utf-16 support to iconv -RDEPENDS:${PN} = "coreos-installer-config dosfstools util-linux-lsblk util-linux-sfdisk glibc-utils glibc-gconv-utf-16" +RDEPENDS:${PN} = "coreos-installer-config dosfstools glibc-gconv-utf-16 glibc-utils util-linux-lsblk util-linux-sfdisk util-linux-wipefs" + +# This package ships an alternate configuration for SWUpdate to disable A/B +# switching and always flash A +RCONFLICTS:${PN} = "swupdate-coreos-config" do_install() { install -d ${D}${libdir}/swupdate/conf.d diff --git a/layers/meta-belden-coreos/recipes-support/swupdate/swupdate/defconfig b/layers/meta-belden-coreos/recipes-support/swupdate/swupdate/defconfig index 23f4fc8..1761f56 100644 --- a/layers/meta-belden-coreos/recipes-support/swupdate/swupdate/defconfig +++ b/layers/meta-belden-coreos/recipes-support/swupdate/swupdate/defconfig @@ -24,6 +24,7 @@ CONFIG_DISKPART=y CONFIG_DISKPART_FORMAT=y CONFIG_FAT_FILESYSTEM=y CONFIG_EXT_FILESYSTEM=y +CONFIG_SIGNED=y CONFIG_SIGNED_IMAGES=y CONFIG_SIGALG_RAWRSA=n CONFIG_SIGALG_CMS=y diff --git a/layers/meta-belden-marvell-bsp/recipes-coreos/coreos-installer/coreos-installer-config/cn9130-cf-pro_1.0.sfdisk b/layers/meta-belden-marvell-bsp/recipes-coreos/coreos-installer/coreos-installer-config/cn9130-cf-pro_1.0.sfdisk index dfdbc02..de305c2 100644 --- a/layers/meta-belden-marvell-bsp/recipes-coreos/coreos-installer/coreos-installer-config/cn9130-cf-pro_1.0.sfdisk +++ b/layers/meta-belden-marvell-bsp/recipes-coreos/coreos-installer/coreos-installer-config/cn9130-cf-pro_1.0.sfdisk @@ -18,8 +18,8 @@ sector-size: 512 /dev/mmcblk0p1 : start= 4096, size= 8192, type=71B02716-C000-4F0D-AE03-2F5DC0A114CD, name="fw0", attrs="RequiredPartition" /dev/mmcblk0p2 : start= 12288, size= 8192, type=71B02716-C000-4F0D-AE03-2F5DC0A114CD, name="fw1", attrs="RequiredPartition" -/dev/mmcblk0p3 : start= 20480, size= 131072, ${SFDISK_PART_EFI} -/dev/mmcblk0p4 : start= 151552, size= 262144, ${SFDISK_PART_EFIBOOTGUARD_A} -/dev/mmcblk0p5 : start= 413696, size= 262144, ${SFDISK_PART_EFIBOOTGUARD_B} -/dev/mmcblk0p6 : start= 675840, size= 7294976, ${SFDISK_PART_ROOT_A} -/dev/mmcblk0p7 : start= 7970816, size= 7294976, ${SFDISK_PART_ROOT_B} +/dev/mmcblk0p3 : size= ${PART_EFI_SIZE}, ${SFDISK_PART_EFI} +/dev/mmcblk0p4 : size= ${PART_EFIBG_SIZE}, ${SFDISK_PART_EFIBOOTGUARD_A} +/dev/mmcblk0p5 : size= ${PART_EFIBG_SIZE}, ${SFDISK_PART_EFIBOOTGUARD_B} +/dev/mmcblk0p6 : size= ${PART_ROOT_SIZE}, ${SFDISK_PART_ROOT_A} +/dev/mmcblk0p7 : size= ${PART_ROOT_SIZE}, ${SFDISK_PART_ROOT_B} diff --git a/layers/meta-belden-marvell-bsp/wic/cn913x-sdcard.wks.in b/layers/meta-belden-marvell-bsp/wic/cn913x-sdcard.wks.in index cb6acf9..55b9779 100644 --- a/layers/meta-belden-marvell-bsp/wic/cn913x-sdcard.wks.in +++ b/layers/meta-belden-marvell-bsp/wic/cn913x-sdcard.wks.in @@ -11,11 +11,11 @@ part --offset 4096S --source rawcopy --sourceparams="file=flash-image.bin" --ondisk mmcblk1 --size 4M --extra-space 0 --overhead-factor 1 --part-name fw0 part --offset 12288S --source rawcopy --sourceparams="file=flash-image.bin" --ondisk mmcblk1 --size 4M --extra-space 0 --overhead-factor 1 --part-name fw1 -${WKS_PART_EFI} --ondisk mmcblk1 --offset 20480S --size 64M --extra-space 0 --overhead-factor 1 -${WKS_PART_ROOT_A} --ondisk mmcblk1 --size ${WKS_PART_ROOT_SIZE} --extra-space 0 --overhead-factor 1 -${WKS_PART_ROOT_B} --ondisk mmcblk1 --size ${WKS_PART_ROOT_SIZE} --extra-space 0 --overhead-factor 1 -${WKS_PART_EFIBOOTGUARD_A} --ondisk mmcblk1 --align 1024 --size 128M --extra-space 0 --overhead-factor 1 -${WKS_PART_EFIBOOTGUARD_B} --ondisk mmcblk1 --align 1024 --size 128M --extra-space 0 --overhead-factor 1 -${WKS_PART_USERDATA} --ondisk mmcblk1 --size ${WKS_PART_USERDATA_SIZE} --extra-space 0 --overhead-factor 1 +${WKS_PART_EFI} --ondisk mmcblk1 --offset 20480S --size ${PART_EFI_SIZE} --extra-space 0 --overhead-factor 1 +${WKS_PART_ROOT_A} --ondisk mmcblk1 --size ${PART_ROOT_SIZE} --extra-space 0 --overhead-factor 1 +${WKS_PART_ROOT_B} --ondisk mmcblk1 --size ${PART_ROOT_SIZE} --extra-space 0 --overhead-factor 1 +${WKS_PART_EFIBOOTGUARD_A} --ondisk mmcblk1 --align 1024 --size ${PART_EFIBG_SIZE} --extra-space 0 --overhead-factor 1 +${WKS_PART_EFIBOOTGUARD_B} --ondisk mmcblk1 --align 1024 --size ${PART_EFIBG_SIZE} --extra-space 0 --overhead-factor 1 +${WKS_PART_USERDATA} --ondisk mmcblk1 --size ${PART_USERDATA_SIZE} --extra-space 0 --overhead-factor 1 bootloader --ptable gpt