80 lines
2.7 KiB
Plaintext
80 lines
2.7 KiB
Plaintext
# This class generate the swu file needed by swupdate
|
|
# This should not be used directly but via coreos-image.bbclass
|
|
|
|
# This is made to work with our default boot flow, so it depends on the output
|
|
# of coreos-image-uki.bbclass. Other boot flow are not supported by CoreOS.
|
|
|
|
# Swupdate image generation
|
|
# ==============================================================================
|
|
|
|
IMAGE_FSTYPES:append = " ext4.zst"
|
|
python () {
|
|
image = d.getVar('IMAGE_BASENAME')
|
|
d.setVarFlag("SWUPDATE_IMAGES_FSTYPES", image, ".ext4.zst")
|
|
}
|
|
|
|
inherit swupdate-image
|
|
|
|
# Ensure than variable used in the sw-description files are watched for change
|
|
do_swuimage[vardeps] += "COREOS_KERNEL_FILENAME EFIBOOTGUARD_TIMEOUT EFIDIR EFI_BOOT_IMAGE COREOS_EFIBOOTGUARD_FILENAME"
|
|
do_swuimage[deptask] += "do_bundle_uki"
|
|
|
|
COREOS_EFIBOOTGUARD_NAME ?= "efibootguard${EFI_ARCH}"
|
|
COREOS_EFIBOOTGUARD_EXT ?= ".efi"
|
|
COREOS_EFIBOOTGUARD_FILENAME = "${COREOS_EFIBOOTGUARD_NAME}${COREOS_EFIBOOTGUARD_EXT}"
|
|
|
|
SWUPDATE_IMAGES += "${COREOS_KERNEL_NAME} ${COREOS_EFIBOOTGUARD_NAME}"
|
|
|
|
python () {
|
|
kernel = d.getVar('COREOS_KERNEL_NAME')
|
|
kernelext = d.getVar('COREOS_KERNEL_EXT')
|
|
d.setVarFlag("SWUPDATE_IMAGES_FSTYPES", kernel, kernelext)
|
|
|
|
efibootguard = d.getVar('COREOS_EFIBOOTGUARD_NAME')
|
|
efibootguardext = d.getVar('COREOS_EFIBOOTGUARD_EXT')
|
|
d.setVarFlag("SWUPDATE_IMAGES_FSTYPES", efibootguard, efibootguardext)
|
|
}
|
|
|
|
FILESEXTRAPATHS:append := ":${COREOS_ROOT}/layers/meta-belden-coreos/files"
|
|
|
|
# Space seperated list of extension points
|
|
COREOS_SWUPDATE_EXTENDS_FOR ??= ""
|
|
|
|
def coreos_swupdate_extends(d, s, key):
|
|
"""
|
|
Extends the swupdate for each extension points defined by COREOS_SWUPDATE_EXTENDS_FOR
|
|
"""
|
|
extends_for = d.getVar('COREOS_SWUPDATE_EXTENDS_FOR', True).replace("-", "_").split()
|
|
|
|
def kv_to_sw_description(kv):
|
|
swdescr = ",{\n"
|
|
for key, value in kv.items():
|
|
swdescr += f'{key} = "{value}";\n'
|
|
swdescr += "}\n"
|
|
return swdescr
|
|
|
|
text = ""
|
|
|
|
# BSP and Distro can extends the swupdate by implementing some python
|
|
# function that return a list of dictionary.
|
|
for extension_point in extends_for:
|
|
try:
|
|
kv_list = globals()[f"coreos_swupdate_extends_{key}_for_{extension_point}"](d,s)
|
|
except KeyError:
|
|
# Don't fail if the extension is not implemented
|
|
pass
|
|
else:
|
|
for kv in kv_list:
|
|
text += kv_to_sw_description(kv)
|
|
|
|
return text
|
|
|
|
# Signature support
|
|
inherit coreos-efi-secureboot
|
|
SWUPDATE_SIGNING = "CMS"
|
|
SWUPDATE_CMS_KEY = "${COREOS_EFI_SECUREBOOT_KEYDIR}/swupdate.key"
|
|
SWUPDATE_CMS_CERT = "${COREOS_EFI_SECUREBOOT_KEYDIR}/swupdate.crt"
|
|
|
|
COREOS_IMAGE_SWUPDATE_EXTRACLASSES ?= ""
|
|
inherit ${COREOS_IMAGE_SWUPDATE_EXTRACLASSES}
|