From 4d27285e2874fdd112d1f0f06511ee68dcb145c4 Mon Sep 17 00:00:00 2001 From: Tom Rini Date: Sat, 5 May 2018 09:38:03 -0400 Subject: kernel-initramfs: Rework to use update-alternatives directly - All valid initramfs types will be listed in INITRAMFS_FSTYPES so use that variable rather than open-coding a list of possibilities. - Since we're using the list of things that must exist now we don't need to test if the files exist anymore. And when signing, we can sign all of them now. - Add some python to do_package to update all of the ALTERNATIVES variables dynamically based on how we're configured. This introduces an alternative for the initramfs portion as well so there is a stable name. Signed-off-by: Tom Rini --- .../recipes-kernel/linux/kernel-initramfs.bbappend | 61 +++++++--------------- meta/recipes-core/images/kernel-initramfs.bb | 41 +++++++-------- 2 files changed, 39 insertions(+), 63 deletions(-) diff --git a/meta-efi-secure-boot/recipes-kernel/linux/kernel-initramfs.bbappend b/meta-efi-secure-boot/recipes-kernel/linux/kernel-initramfs.bbappend index 7a82aa7..bb61f70 100644 --- a/meta-efi-secure-boot/recipes-kernel/linux/kernel-initramfs.bbappend +++ b/meta-efi-secure-boot/recipes-kernel/linux/kernel-initramfs.bbappend @@ -4,56 +4,33 @@ inherit user-key-store deploy do_install[nostamp] = "1" fakeroot python do_sign() { - initramfs = None - if d.getVar('BUNDLE', True) == '0': - initramfs = d.expand('${D}/boot/${INITRAMFS_IMAGE}${INITRAMFS_EXT_NAME}.cpio.gz') + for compr in d.getVar('INITRAMFS_FSTYPES').split(): + uks_sel_sign(d.expand('${D}/boot/${INITRAMFS_IMAGE}${INITRAMFS_EXT_NAME}.') + compr, d) else: - initramfs = d.expand('${D}/boot/${KERNEL_IMAGETYPE}-initramfs${INITRAMFS_EXT_NAME}') - - if initramfs == None or not os.path.exists(initramfs): - return - - uks_sel_sign(initramfs, d) + uks_sel_sign(d.expand('${D}/boot/${KERNEL_IMAGETYPE}-initramfs${INITRAMFS_EXT_NAME}'), d) } addtask sign after do_install before do_deploy do_package do_sign[prefuncs] += "check_deploy_keys" do_deploy() { - initramfs="" - initramfs_dest="" - - if [ "${BUNDLE}" = "0" ]; then - initramfs="${D}/boot/${INITRAMFS_IMAGE}${INITRAMFS_EXT_NAME}.cpio.gz" - initramfs_dest="${DEPLOYDIR}/${INITRAMFS_IMAGE}-${MACHINE}.cpio.gz" - else - initramfs="${D}/boot/${KERNEL_IMAGETYPE}-initramfs${INITRAMFS_EXT_NAME}" - initramfs_dest="${DEPLOYDIR}/${KERNEL_IMAGETYPE}-initramfs-${MACHINE}.bin" - fi - - if [ -f "$initramfs.p7b" ]; then - install -d "${DEPLOYDIR}" - - install -m 0644 "$initramfs.p7b" "$initramfs_dest.p7b" - fi + install -d "${DEPLOYDIR}" + for SIG in ${D}/boot/*.p7b; do + install -m 0644 ${SIG} ${DEPLOYDIR} + done } addtask deploy after do_install before do_build -pkg_postinst_${PN}_append() { - if [ "${BUNDLE}" = "1" ] ; then - update-alternatives --install "/boot/${KERNEL_IMAGETYPE}.p7b" \ - "${KERNEL_IMAGETYPE}.p7b" \ - "/boot/${KERNEL_IMAGETYPE}-initramfs${INITRAMFS_EXT_NAME}.p7b" 50101 - fi - - true -} - -pkg_prerm_${PN}_append() { - if [ "${BUNDLE}" = "1" ] ; then - update-alternatives --remove "${KERNEL_IMAGETYPE}.p7b" \ - "${KERNEL_IMAGETYPE}-initramfs${INITRAMFS_EXT_NAME}.p7b" - fi - - true +python do_package_prepend () { + if d.getVar('BUNDLE') == '1': + d.appendVar(d.expand('ALTERNATIVE_${PN}'), ' ' + d.expand('${KERNEL_IMAGETYPE}' + '-initramfs.p7b')) + d.setVarFlag('ALTERNATIVE_LINK_NAME', d.expand('${KERNEL_IMAGETYPE}') + '-initramfs.p7b', d.expand('/boot/${KERNEL_IMAGETYPE}-initramfs.p7b')) + d.setVarFlag('ALTERNATIVE_TARGET', d.expand('${KERNEL_IMAGETYPE}') + '-initramfs.p7b', d.expand('/boot/${KERNEL_IMAGETYPE}-initramfs${INITRAMFS_EXT_NAME}.p7b')) + d.setVarFlag('ALTERNATIVE_PRIORITY', d.expand('${KERNEL_IMAGETYPE}') + '-initramfs.p7b', '50101') + else: + for compr in d.getVar('INITRAMFS_FSTYPES').split(): + d.appendVar(d.expand('ALTERNATIVE_${PN}'), ' ' + d.expand('${INITRAMFS_IMAGE}') + '.p7b') + d.setVarFlag('ALTERNATIVE_LINK_NAME', d.expand('${INITRAMFS_IMAGE}') + '.p7b', d.expand('/boot/${INITRAMFS_IMAGE}.p7b')) + d.setVarFlag('ALTERNATIVE_TARGET', d.expand('${INITRAMFS_IMAGE}') + '.p7b', d.expand('/boot/${INITRAMFS_IMAGE}${INITRAMFS_EXT_NAME}.' + compr + '.p7b')) + d.setVarFlag('ALTERNATIVE_PRIORITY', d.expand('${INITRAMFS_IMAGE}') + '.p7b', '50101') } diff --git a/meta/recipes-core/images/kernel-initramfs.bb b/meta/recipes-core/images/kernel-initramfs.bb index 5b17403..fd23e74 100644 --- a/meta/recipes-core/images/kernel-initramfs.bb +++ b/meta/recipes-core/images/kernel-initramfs.bb @@ -35,39 +35,38 @@ do_populate_lic[depends] += "virtual/kernel:do_deploy" do_install() { [ -z "${INITRAMFS_IMAGE}" ] && exit 0 + install -d "${D}/boot" if [ "${BUNDLE}" = "0" ]; then - for suffix in cpio.gz cpio.lzo cpio.lzma cpio.xz; do + for suffix in ${INITRAMFS_FSTYPES}; do img="${DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE}-${MACHINE}.$suffix" - if [ -s "$img" ]; then - install -d "${D}/boot" - install -m 0644 "$img" \ - "${D}/boot/${INITRAMFS_IMAGE}${INITRAMFS_EXT_NAME}.$suffix" - break - fi + install -m 0644 "$img" \ + "${D}/boot/${INITRAMFS_IMAGE}${INITRAMFS_EXT_NAME}.$suffix" done else if [ -e "${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-initramfs-${MACHINE}.bin" ]; then - install -d "${D}/boot" install -m 0644 "${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-initramfs-${MACHINE}.bin" \ "${D}/boot/${KERNEL_IMAGETYPE}-initramfs${INITRAMFS_EXT_NAME}" fi fi } -pkg_postinst_${PN}() { - if [ "${BUNDLE}" = "1" ]; then - update-alternatives --install "/boot/${KERNEL_IMAGETYPE}" \ - "${KERNEL_IMAGETYPE}" "/boot/${KERNEL_IMAGETYPE}-initramfs${INITRAMFS_EXT_NAME}" \ - 50101 || true - fi -} - -pkg_prerm_${PN}() { - if [ "${BUNDLE}" = "1" ]; then - update-alternatives --remove "${KERNEL_IMAGETYPE}" \ - "${KERNEL_IMAGETYPE}-initramfs${INITRAMFS_EXT_NAME}" || true - fi +inherit update-alternatives + +ALTERNATIVES_${PN} = "" + +python do_package_prepend () { + if d.getVar('BUNDLE') == '1': + d.appendVar(d.expand('ALTERNATIVE_${PN}'), ' ' + d.expand('${KERNEL_IMAGETYPE}' + '-initramfs')) + d.setVarFlag('ALTERNATIVE_LINK_NAME', d.expand('${KERNEL_IMAGETYPE}') + '-initramfs', d.expand('/boot/${KERNEL_IMAGETYPE}-initramfs')) + d.setVarFlag('ALTERNATIVE_TARGET', d.expand('${KERNEL_IMAGETYPE}') + '-initramfs', d.expand('/boot/${KERNEL_IMAGETYPE}-initramfs${INITRAMFS_EXT_NAME}')) + d.setVarFlag('ALTERNATIVE_PRIORITY', d.expand('${KERNEL_IMAGETYPE}') + '-initramfs', '50101') + else: + for compr in d.getVar('INITRAMFS_FSTYPES').split(): + d.appendVar(d.expand('ALTERNATIVE_${PN}'), ' ' + d.expand('${INITRAMFS_IMAGE}')) + d.setVarFlag('ALTERNATIVE_LINK_NAME', d.expand('${INITRAMFS_IMAGE}'), d.expand('/boot/${INITRAMFS_IMAGE}')) + d.setVarFlag('ALTERNATIVE_TARGET', d.expand('${INITRAMFS_IMAGE}'), d.expand('/boot/${INITRAMFS_IMAGE}${INITRAMFS_EXT_NAME}.' + compr)) + d.setVarFlag('ALTERNATIVE_PRIORITY', d.expand('${INITRAMFS_IMAGE}'), '50101') } PACKAGE_ARCH = "${MACHINE_ARCH}" -- cgit v1.2.3-54-g00ecf