<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal">Hello,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I’ve been trying to get the security stuff in meta-secure-core working so I can upgrade from one version of the OS I’m creating, right now called LewisOS, to a new version, just by being able to run “rpm -U” or “dnf upgrade” commands. I
can run “dnf upgrade” successfully against non kernel related packages, but the kernel, initramfs and systemd-boot RPMs always fail with the same error, no matter what I try.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I am using Zeus for my builds. I am using an older commit for LewisOS version X, 8a518a2054bdd349d7661ee4872590fc8750313f, dated 2019 Dec 30, of the meta-secure-core GIT repo. I am using 8302e3c479154157667e22e9d7c5461c966b4586, dated
2020 Jan 19, of the meta-secure-core GIT repo for LewisOS version Y.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">My machine is intel-corei7-64.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I’ll just stick with systemd-boot RPM for this email. LewisOS version X installs systemd-boot-243+0+efb536d0cb-r0.corei7_64_intell_common. LewisOS version Y contains systemd-boot-243.2-r0.corei7_64_intel_common. When I try to upgrade
systemd-boot, I get the following error message:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">=== Start upgrade messages ===<o:p></o:p></p>
<p class="MsoNormal">root@intel-corei7-64:/var/opt/repos/os# rpm -q systemd-boot<o:p></o:p></p>
<p class="MsoNormal">systemd-boot-243+0+efb536d0cb-r0.corei7_64_intel_common<o:p></o:p></p>
<p class="MsoNormal">root@intel-corei7-64:/var/opt/repos/os# rpm -qp systemd-boot-243.2-r0.corei7_64_intel_common.rpm<o:p></o:p></p>
<p class="MsoNormal">systemd-boot-243.2-r0.corei7_64_intel_common<o:p></o:p></p>
<p class="MsoNormal">root@intel-corei7-64:/var/opt/repos/os# rpm -Uhv systemd-boot-243.2-r0.corei7_64_intel_common.rpm<o:p></o:p></p>
<p class="MsoNormal">Verifying… ######################################## [100%]<o:p></o:p></p>
<p class="MsoNormal">Preparing… ######################################## [100%]<o:p></o:p></p>
<p class="MsoNormal">Updating / installing…<o:p></o:p></p>
<p class="MsoNormal"> 1:systemd-boot-243.2-r0 ######################################## [ 50%]<o:p></o:p></p>
<p class="MsoNormal">error: ima: could not apply signature on ‘/boot/EFI/BOOT/bootx64.efi;5e49ad05’: Operation not supported<o:p></o:p></p>
<p class="MsoNormal">error: Plugin ima: hook fsm_file_prepare failed<o:p></o:p></p>
<p class="MsoNormal">error: unpacking of archive failed on file /boot/EFI/BOOT/bootx64.efi;5e49ad05: cpio: (error 0x2)<o:p></o:p></p>
<p class="MsoNormal">error: systemd-boot-243.2-r0.corei7_64_intel_common: install failed<o:p></o:p></p>
<p class="MsoNormal">error: systemd-boot-243+0+efb536d0cb-r0.corei7_64_intel_common: erase skipped<o:p></o:p></p>
<p class="MsoNormal">=== End upgrade messages ===<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">The above error messages also appear when I try updating kernel-image-bzimage, kernel-initramfs and systemd-bootconf.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I have the following in my bblayers.conf file:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">=== Start bblayers.conf ===<o:p></o:p></p>
<p class="MsoNormal"># LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf<o:p></o:p></p>
<p class="MsoNormal"># changes incompatibly<o:p></o:p></p>
<p class="MsoNormal">LCONF_VERSION = "7"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">BBPATH = "${TOPDIR}"<o:p></o:p></p>
<p class="MsoNormal">BBFILES ?= ""<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">BBLAYERS ?= " \<o:p></o:p></p>
<p class="MsoNormal"> ${HOME}/meta-stryker/meta-lewisos-distro \<o:p></o:p></p>
<p class="MsoNormal"> ${HOME}/meta-stryker/meta-lewisos-common \<o:p></o:p></p>
<p class="MsoNormal"> ${HOME}/meta-stryker/meta-lewisos-edge \<o:p></o:p></p>
<p class="MsoNormal"> ${HOME}/oe-core/meta \<o:p></o:p></p>
<p class="MsoNormal"> ${HOME}/meta-openembedded/meta-python \<o:p></o:p></p>
<p class="MsoNormal"> ${HOME}/meta-openembedded/meta-perl \<o:p></o:p></p>
<p class="MsoNormal"> ${HOME}/meta-openembedded/meta-filesystems \<o:p></o:p></p>
<p class="MsoNormal"> ${HOME}/meta-openembedded/meta-oe \<o:p></o:p></p>
<p class="MsoNormal"> ${HOME}/meta-openembedded/meta-networking \<o:p></o:p></p>
<p class="MsoNormal"> ${HOME}/meta-openembedded/meta-webserver \<o:p></o:p></p>
<p class="MsoNormal"> ${HOME}/meta-intel \<o:p></o:p></p>
<p class="MsoNormal"> ${HOME}/meta-virtualization \<o:p></o:p></p>
<p class="MsoNormal"> ${HOME}/meta-cloud-services \<o:p></o:p></p>
<p class="MsoNormal"> ${HOME}/meta-cloud-services/meta-openstack \<o:p></o:p></p>
<p class="MsoNormal"> ${HOME}/meta-secure-core/meta \<o:p></o:p></p>
<p class="MsoNormal"> ${HOME}/meta-secure-core/meta-signing-key \<o:p></o:p></p>
<p class="MsoNormal"> ${HOME}/meta-secure-core/meta-tpm \<o:p></o:p></p>
<p class="MsoNormal"> ${HOME}/meta-secure-core/meta-tpm2 \<o:p></o:p></p>
<p class="MsoNormal"> ${HOME}/meta-secure-core/meta-efi-secure-boot \<o:p></o:p></p>
<p class="MsoNormal"> ${HOME}/meta-secure-core/meta-integrity \<o:p></o:p></p>
<p class="MsoNormal"> ${HOME}/meta-secure-core/meta-encrypted-storage \<o:p></o:p></p>
<p class="MsoNormal"> ${HOME}/meta-secure-core/meta-ids \<o:p></o:p></p>
<p class="MsoNormal"> ${HOME}/meta-secure-core/meta-intel-sgx \<o:p></o:p></p>
<p class="MsoNormal"> "<o:p></o:p></p>
<p class="MsoNormal">=== End bblayers.conf ===<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Here is my local.conf file<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">=== Start local.conf ===<o:p></o:p></p>
<p class="MsoNormal">MACHINE ?= "intel-corei7-64"<o:p></o:p></p>
<p class="MsoNormal">DL_DIR ?= "/var/opt/openembedded-linux/downloads"<o:p></o:p></p>
<p class="MsoNormal">SSTATE_DIR ?= "/var/opt/openembedded-linux/sstate-cache"<o:p></o:p></p>
<p class="MsoNormal">PACKAGE_CLASSES ?= "package_rpm"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># Extra image configuration defaults<o:p></o:p></p>
<p class="MsoNormal">#<o:p></o:p></p>
<p class="MsoNormal"># The EXTRA_IMAGE_FEATURES variable allows extra packages to be added to the generated<o:p></o:p></p>
<p class="MsoNormal"># images.<o:p></o:p></p>
<p class="MsoNormal"># There are other application targets that can be used here too, see<o:p></o:p></p>
<p class="MsoNormal"># meta/classes/image.bbclass and meta/classes/core-image.bbclass for more details.<o:p></o:p></p>
<p class="MsoNormal"># We default to enabling the debugging tweaks.<o:p></o:p></p>
<p class="MsoNormal">EXTRA_IMAGE_FEATURES ?= "debug-tweaks"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">USER_CLASSES ?= "buildstats image-mklibs image-prelink"<o:p></o:p></p>
<p class="MsoNormal">PATCHRESOLVE = "noop"<o:p></o:p></p>
<p class="MsoNormal">BB_DISKMON_DIRS ??= "\<o:p></o:p></p>
<p class="MsoNormal"> STOPTASKS,${TMPDIR},1G,100K \<o:p></o:p></p>
<p class="MsoNormal"> STOPTASKS,${DL_DIR},1G,100K \<o:p></o:p></p>
<p class="MsoNormal"> STOPTASKS,${SSTATE_DIR},1G,100K \<o:p></o:p></p>
<p class="MsoNormal"> STOPTASKS,/tmp,100M,100K \<o:p></o:p></p>
<p class="MsoNormal"> ABORT,${TMPDIR},100M,1K \<o:p></o:p></p>
<p class="MsoNormal"> ABORT,${DL_DIR},100M,1K \<o:p></o:p></p>
<p class="MsoNormal"> ABORT,${SSTATE_DIR},100M,1K \<o:p></o:p></p>
<p class="MsoNormal"> ABORT,/tmp,10M,1K"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">PACKAGECONFIG_append_pn-qemu-native = " sdl"<o:p></o:p></p>
<p class="MsoNormal">PACKAGECONFIG_append_pn-nativesdk-qemu = " sdl"<o:p></o:p></p>
<p class="MsoNormal">CONF_VERSION = "1"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">DISTRO = "lewisos"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># The following 2 lines are to generate an ISO.<o:p></o:p></p>
<p class="MsoNormal">IMAGE_FSTYPES += "live"<o:p></o:p></p>
<p class="MsoNormal">NOISO = "0"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># The following line is needed to help address issues with updating the OS.<o:p></o:p></p>
<p class="MsoNormal"># It prevents a lot of messages regarding file/directory ownership issues.<o:p></o:p></p>
<p class="MsoNormal">DIRFILES = "1"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># The BBMASK directive below is to prevent the kernel-initramfs.bbappend<o:p></o:p></p>
<p class="MsoNormal"># from meta-secure-core from being used. We have customized the bb file.<o:p></o:p></p>
<p class="MsoNormal"># So, don't want any changes to it.<o:p></o:p></p>
<p class="MsoNormal">BBMASK += "meta-secure-core/meta-efi-secure-boot/recipes-core/images/kernel-initramfs.bbappend"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># INITRAMFS_IMAGE must be defined here. It cannot be defined in an image<o:p></o:p></p>
<p class="MsoNormal"># recipe. If it is only defined in an image recipe, the build fails to<o:p></o:p></p>
<p class="MsoNormal"># sign packages.<o:p></o:p></p>
<p class="MsoNormal">INITRAMFS_IMAGE = "secure-core-image-initramfs"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># Similarly, the kernel-image-bzimage must be defined here. When it was<o:p></o:p></p>
<p class="MsoNormal"># set in the image recipe, got complaints about no buildable providers.<o:p></o:p></p>
<p class="MsoNormal"># Weird.<o:p></o:p></p>
<p class="MsoNormal">IMAGE_INSTALL += "kernel-image-bzimage"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># These DISTRO_FEATURES must remain here. When I tried to put them into<o:p></o:p></p>
<p class="MsoNormal"># the lewisos.conf distro configuration file, the build of the stryker-edge<o:p></o:p></p>
<p class="MsoNormal"># image failed. Got old errors. Apparently some of the bbappends were<o:p></o:p></p>
<p class="MsoNormal"># not picked up properly when these were defined in the distro config<o:p></o:p></p>
<p class="MsoNormal"># file. Not sure why.<o:p></o:p></p>
<p class="MsoNormal">DISTRO_FEATURES_NATIVE_append += "systemd ima tpm tpm2 efi-secure-boot luks"<o:p></o:p></p>
<p class="MsoNormal">DISTRO_FEATURES_append += "systemd ima tpm tpm2 efi-secure-boot luks modsign pam intel-sgx"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">MACHINE_FEATURES_NATIVE_append += "efi"<o:p></o:p></p>
<p class="MsoNormal">MACHINE_FEATURES_append += "efi"<o:p></o:p></p>
<p class="MsoNormal">DEBUG_FLAGS_forcevariable = ""<o:p></o:p></p>
<p class="MsoNormal">USER_CLASSES_remove = "image-prelink"<o:p></o:p></p>
<p class="MsoNormal">=== End local.conf ===<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Here is my lewisos.conf distro configuration file.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">=== Start lewisos.conf ===<o:p></o:p></p>
<p class="MsoNormal"># Lewisos distribution configuration file<o:p></o:p></p>
<p class="MsoNormal">DISTRO = "lewisos"<o:p></o:p></p>
<p class="MsoNormal">DISTRO_NAME = "Lewis test distribution"<o:p></o:p></p>
<p class="MsoNormal">DISTRO_VERSION = "0.1.3-ou"<o:p></o:p></p>
<p class="MsoNormal">MAINTAINER = "mako.device@stryker.com"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">IMAGE_VERSION_SUFFIX = "-${DISTRO_VERSION}"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># Want to use systemd as the init manager<o:p></o:p></p>
<p class="MsoNormal">DISTRO_FEATURES_append = " systemd"<o:p></o:p></p>
<p class="MsoNormal">VIRTUAL-RUNTIME_init_manager = "systemd"<o:p></o:p></p>
<p class="MsoNormal">VIRTUAL-RUNTIME_initscripts = "systemd-compat-units"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># Need virtualization<o:p></o:p></p>
<p class="MsoNormal">DISTRO_FEATURES_append = " virtualization"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># Add support for wireless<o:p></o:p></p>
<p class="MsoNormal">DISTRO_FEATURES_append = " wifi"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># Add support for disk encryption, secure boot and access to TPM<o:p></o:p></p>
<p class="MsoNormal"># Needed for both the product build, and for native<o:p></o:p></p>
<p class="MsoNormal"># From the meta-secure-core layer<o:p></o:p></p>
<p class="MsoNormal"># DISTRO_FEATURES_append = " ima tpm tpm2 efi-secure-boot luks modsign pam intel-sgx"<o:p></o:p></p>
<p class="MsoNormal"># DISTRO_FEATURES_NATIVE_append = " ima tpm tpm2 efi-secure-boot luks"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># Remove undesirable features<o:p></o:p></p>
<p class="MsoNormal">DISTRO_FEATURES_BACKFILL_CONSIDERED += "nfs"<o:p></o:p></p>
<p class="MsoNormal">DISTRO_FEATURES_BACKFILL_CONSIDERED += "sysvinit"<o:p></o:p></p>
<p class="MsoNormal">DISTRO_FEATURES_BACKFILL_CONSIDERED += "zeroconf"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># Set up for signing RPMs<o:p></o:p></p>
<p class="MsoNormal"># Inherit the sign_rpm_ext and user-key-store classes from the meta-secure-core<o:p></o:p></p>
<p class="MsoNormal"># layer. They provide some additional functionality.<o:p></o:p></p>
<p class="MsoNormal"># If not using the meta-secure-core layer, uncomment the sign_rpm line and<o:p></o:p></p>
<p class="MsoNormal"># comment out the sign_rpm_ext and user-key-store lines.<o:p></o:p></p>
<p class="MsoNormal"># INHERIT += "sign_rpm"<o:p></o:p></p>
<p class="MsoNormal">INHERIT += "sign_rpm_ext"<o:p></o:p></p>
<p class="MsoNormal">INHERIT += "user-key-store"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># NOTE: The two RPM_GPG lines cannot have spaces in their values. It causes<o:p></o:p></p>
<p class="MsoNormal"># the build to fail since the scripts cannot handle the space.<o:p></o:p></p>
<p class="MsoNormal">RPM_GPG_NAME = "xxxxxxxx"<o:p></o:p></p>
<p class="MsoNormal">RPM_GPG_PASSPHRASE = "yyyyyyyy"<o:p></o:p></p>
<p class="MsoNormal">=== End lewisos.conf ===<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">And here is my bbappend for linux-intel<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">=== Start linux-intel_%.bbappend ===<o:p></o:p></p>
<p class="MsoNormal">FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"<o:p></o:p></p>
<p class="MsoNormal">SRC_URI += "file://kernel_baseline.scc"<o:p></o:p></p>
<p class="MsoNormal">KERNEL_IMAGEDEST = "boot/${DISTRO}-${DISTRO_VERSION}"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">FILES_kernel-image-bzimage = "/boot/${PV}/bzImage-${KERNEL_VERSION_NAME}"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">python do_package_prepend () {<o:p></o:p></p>
<p class="MsoNormal"> os.remove(d.getVar('D') + '/' + d.getVar('KERNEL_IMAGEDEST') + '/bzImage')<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">require recipes-kernel/linux/linux-yocto-integrity.inc<o:p></o:p></p>
<p class="MsoNormal">=== End linux-intel_%.bbappend ===<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I’m removing symbolic links and putting the kernel and initramfs in version specific directories because the /boot partition is vfat, which doesn’t support symbolic links, and if I kept the names as something like bzImage, then “dnf upgrade”
would complain about multiple RPMs trying to own the same file.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">What am I missing? Where did I make a mistake? Does the meta-secure-core, or Openembedded/Yocto in general support upgrading from version X to version Y of an OS using just some command like “dnf upgrade”?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">If you need more information, please let me know.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">As one last piece of info, if I remove “ima” from DISTRO_FEATURES, the build hangs when trying to sign the RPMs.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thank you<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Lewis Muhlenkamp<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
Follow this link to read our <a href="https://www.stryker.com/content/stryker/gb/en/legal/global-policy-statement.html/">
Privacy Statement</a>
</body>
</html>