summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTom Rini <trini@konsulko.com>2018-05-05 09:38:03 -0400
committerJia Zhang <zhang.jia@linux.alibaba.com>2018-05-06 18:59:55 +0800
commit4d27285e2874fdd112d1f0f06511ee68dcb145c4 (patch)
tree566d20006f2b7033d8302b31992390b4fd3f9f58
parente00aed3e080beac7907050524eb304f25bb039dd (diff)
downloadmeta-secure-core-4d27285e2874fdd112d1f0f06511ee68dcb145c4.tar.gz
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 <trini@konsulko.com>
-rw-r--r--meta-efi-secure-boot/recipes-kernel/linux/kernel-initramfs.bbappend61
-rw-r--r--meta/recipes-core/images/kernel-initramfs.bb41
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
4do_install[nostamp] = "1" 4do_install[nostamp] = "1"
5 5
6fakeroot python do_sign() { 6fakeroot python do_sign() {
7 initramfs = None
8
9 if d.getVar('BUNDLE', True) == '0': 7 if d.getVar('BUNDLE', True) == '0':
10 initramfs = d.expand('${D}/boot/${INITRAMFS_IMAGE}${INITRAMFS_EXT_NAME}.cpio.gz') 8 for compr in d.getVar('INITRAMFS_FSTYPES').split():
9 uks_sel_sign(d.expand('${D}/boot/${INITRAMFS_IMAGE}${INITRAMFS_EXT_NAME}.') + compr, d)
11 else: 10 else:
12 initramfs = d.expand('${D}/boot/${KERNEL_IMAGETYPE}-initramfs${INITRAMFS_EXT_NAME}') 11 uks_sel_sign(d.expand('${D}/boot/${KERNEL_IMAGETYPE}-initramfs${INITRAMFS_EXT_NAME}'), d)
13
14 if initramfs == None or not os.path.exists(initramfs):
15 return
16
17 uks_sel_sign(initramfs, d)
18} 12}
19addtask sign after do_install before do_deploy do_package 13addtask sign after do_install before do_deploy do_package
20do_sign[prefuncs] += "check_deploy_keys" 14do_sign[prefuncs] += "check_deploy_keys"
21 15
22do_deploy() { 16do_deploy() {
23 initramfs="" 17 install -d "${DEPLOYDIR}"
24 initramfs_dest="" 18 for SIG in ${D}/boot/*.p7b; do
25 19 install -m 0644 ${SIG} ${DEPLOYDIR}
26 if [ "${BUNDLE}" = "0" ]; then 20 done
27 initramfs="${D}/boot/${INITRAMFS_IMAGE}${INITRAMFS_EXT_NAME}.cpio.gz"
28 initramfs_dest="${DEPLOYDIR}/${INITRAMFS_IMAGE}-${MACHINE}.cpio.gz"
29 else
30 initramfs="${D}/boot/${KERNEL_IMAGETYPE}-initramfs${INITRAMFS_EXT_NAME}"
31 initramfs_dest="${DEPLOYDIR}/${KERNEL_IMAGETYPE}-initramfs-${MACHINE}.bin"
32 fi
33
34 if [ -f "$initramfs.p7b" ]; then
35 install -d "${DEPLOYDIR}"
36
37 install -m 0644 "$initramfs.p7b" "$initramfs_dest.p7b"
38 fi
39} 21}
40addtask deploy after do_install before do_build 22addtask deploy after do_install before do_build
41 23
42pkg_postinst_${PN}_append() { 24python do_package_prepend () {
43 if [ "${BUNDLE}" = "1" ] ; then 25 if d.getVar('BUNDLE') == '1':
44 update-alternatives --install "/boot/${KERNEL_IMAGETYPE}.p7b" \ 26 d.appendVar(d.expand('ALTERNATIVE_${PN}'), ' ' + d.expand('${KERNEL_IMAGETYPE}' + '-initramfs.p7b'))
45 "${KERNEL_IMAGETYPE}.p7b" \ 27 d.setVarFlag('ALTERNATIVE_LINK_NAME', d.expand('${KERNEL_IMAGETYPE}') + '-initramfs.p7b', d.expand('/boot/${KERNEL_IMAGETYPE}-initramfs.p7b'))
46 "/boot/${KERNEL_IMAGETYPE}-initramfs${INITRAMFS_EXT_NAME}.p7b" 50101 28 d.setVarFlag('ALTERNATIVE_TARGET', d.expand('${KERNEL_IMAGETYPE}') + '-initramfs.p7b', d.expand('/boot/${KERNEL_IMAGETYPE}-initramfs${INITRAMFS_EXT_NAME}.p7b'))
47 fi 29 d.setVarFlag('ALTERNATIVE_PRIORITY', d.expand('${KERNEL_IMAGETYPE}') + '-initramfs.p7b', '50101')
48 30 else:
49 true 31 for compr in d.getVar('INITRAMFS_FSTYPES').split():
50} 32 d.appendVar(d.expand('ALTERNATIVE_${PN}'), ' ' + d.expand('${INITRAMFS_IMAGE}') + '.p7b')
51 33 d.setVarFlag('ALTERNATIVE_LINK_NAME', d.expand('${INITRAMFS_IMAGE}') + '.p7b', d.expand('/boot/${INITRAMFS_IMAGE}.p7b'))
52pkg_prerm_${PN}_append() { 34 d.setVarFlag('ALTERNATIVE_TARGET', d.expand('${INITRAMFS_IMAGE}') + '.p7b', d.expand('/boot/${INITRAMFS_IMAGE}${INITRAMFS_EXT_NAME}.' + compr + '.p7b'))
53 if [ "${BUNDLE}" = "1" ] ; then 35 d.setVarFlag('ALTERNATIVE_PRIORITY', d.expand('${INITRAMFS_IMAGE}') + '.p7b', '50101')
54 update-alternatives --remove "${KERNEL_IMAGETYPE}.p7b" \
55 "${KERNEL_IMAGETYPE}-initramfs${INITRAMFS_EXT_NAME}.p7b"
56 fi
57
58 true
59} 36}
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"
35do_install() { 35do_install() {
36 [ -z "${INITRAMFS_IMAGE}" ] && exit 0 36 [ -z "${INITRAMFS_IMAGE}" ] && exit 0
37 37
38 install -d "${D}/boot"
38 if [ "${BUNDLE}" = "0" ]; then 39 if [ "${BUNDLE}" = "0" ]; then
39 for suffix in cpio.gz cpio.lzo cpio.lzma cpio.xz; do 40 for suffix in ${INITRAMFS_FSTYPES}; do
40 img="${DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE}-${MACHINE}.$suffix" 41 img="${DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE}-${MACHINE}.$suffix"
41 42
42 if [ -s "$img" ]; then 43 install -m 0644 "$img" \
43 install -d "${D}/boot" 44 "${D}/boot/${INITRAMFS_IMAGE}${INITRAMFS_EXT_NAME}.$suffix"
44 install -m 0644 "$img" \
45 "${D}/boot/${INITRAMFS_IMAGE}${INITRAMFS_EXT_NAME}.$suffix"
46 break
47 fi
48 done 45 done
49 else 46 else
50 if [ -e "${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-initramfs-${MACHINE}.bin" ]; then 47 if [ -e "${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-initramfs-${MACHINE}.bin" ]; then
51 install -d "${D}/boot"
52 install -m 0644 "${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-initramfs-${MACHINE}.bin" \ 48 install -m 0644 "${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-initramfs-${MACHINE}.bin" \
53 "${D}/boot/${KERNEL_IMAGETYPE}-initramfs${INITRAMFS_EXT_NAME}" 49 "${D}/boot/${KERNEL_IMAGETYPE}-initramfs${INITRAMFS_EXT_NAME}"
54 fi 50 fi
55 fi 51 fi
56} 52}
57 53
58pkg_postinst_${PN}() { 54inherit update-alternatives
59 if [ "${BUNDLE}" = "1" ]; then 55
60 update-alternatives --install "/boot/${KERNEL_IMAGETYPE}" \ 56ALTERNATIVES_${PN} = ""
61 "${KERNEL_IMAGETYPE}" "/boot/${KERNEL_IMAGETYPE}-initramfs${INITRAMFS_EXT_NAME}" \ 57
62 50101 || true 58python do_package_prepend () {
63 fi 59 if d.getVar('BUNDLE') == '1':
64} 60 d.appendVar(d.expand('ALTERNATIVE_${PN}'), ' ' + d.expand('${KERNEL_IMAGETYPE}' + '-initramfs'))
65 61 d.setVarFlag('ALTERNATIVE_LINK_NAME', d.expand('${KERNEL_IMAGETYPE}') + '-initramfs', d.expand('/boot/${KERNEL_IMAGETYPE}-initramfs'))
66pkg_prerm_${PN}() { 62 d.setVarFlag('ALTERNATIVE_TARGET', d.expand('${KERNEL_IMAGETYPE}') + '-initramfs', d.expand('/boot/${KERNEL_IMAGETYPE}-initramfs${INITRAMFS_EXT_NAME}'))
67 if [ "${BUNDLE}" = "1" ]; then 63 d.setVarFlag('ALTERNATIVE_PRIORITY', d.expand('${KERNEL_IMAGETYPE}') + '-initramfs', '50101')
68 update-alternatives --remove "${KERNEL_IMAGETYPE}" \ 64 else:
69 "${KERNEL_IMAGETYPE}-initramfs${INITRAMFS_EXT_NAME}" || true 65 for compr in d.getVar('INITRAMFS_FSTYPES').split():
70 fi 66 d.appendVar(d.expand('ALTERNATIVE_${PN}'), ' ' + d.expand('${INITRAMFS_IMAGE}'))
67 d.setVarFlag('ALTERNATIVE_LINK_NAME', d.expand('${INITRAMFS_IMAGE}'), d.expand('/boot/${INITRAMFS_IMAGE}'))
68 d.setVarFlag('ALTERNATIVE_TARGET', d.expand('${INITRAMFS_IMAGE}'), d.expand('/boot/${INITRAMFS_IMAGE}${INITRAMFS_EXT_NAME}.' + compr))
69 d.setVarFlag('ALTERNATIVE_PRIORITY', d.expand('${INITRAMFS_IMAGE}'), '50101')
71} 70}
72 71
73PACKAGE_ARCH = "${MACHINE_ARCH}" 72PACKAGE_ARCH = "${MACHINE_ARCH}"