On 6/17/20 9:48 PM, Bruce Ashfield wrote:
On Wed, Jun 17, 2020 at 2:20 AM <[email protected]> wrote:From: Yanfei Xu <[email protected]> Some filesystems don't support symlink, then you will get failed when you install or update the kernel rpm package. Now we use a copy for these filesystems instead of symlink. Suggested-by: Bruce Ashfield <[email protected]> Signed-off-by: Yanfei Xu <[email protected]> --- meta/classes/kernel.bbclass | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass index 41101a64a0..e9b5a84de7 100644 --- a/meta/classes/kernel.bbclass +++ b/meta/classes/kernel.bbclass @@ -94,6 +94,14 @@ python __anonymous () { d.appendVar('RDEPENDS_%s-image' % kname, ' %s-image-%s' % (kname, typelower)) d.setVar('PKG_%s-image-%s' % (kname,typelower), '%s-image-%s-${KERNEL_VERSION_PKG_NAME}' % (kname, typelower)) d.setVar('ALLOW_EMPTY_%s-image-%s' % (kname, typelower), '1') + d.setVar('pkg_postinst_ontarget_%s-image-%s' % (kname,typelower), """ +set +e +ln -sf %s-${KERNEL_VERSION} ${KERNEL_IMAGEDEST}/%s > /dev/null 2>&1 +if [ $? -ne 0 ]; then + echo "Filesystem on ${KERNEL_IMAGEDEST}/ doesn't support symlink, then use a copy."This could say "... doesn't support symlinks, falling back to copied image (%s)" (and fill in the image file we are actually using).
This discription is more clear. I will rewrite the message.
+fiI expected to see the fallback copy here in the postinstall, but this looks ok to me .. I'm going to just type in my process of reading the
At the beginning, I was going to only place versioned-image in rpm package, then make symlink or copy in postinstall on target. But it will cause rpm package don't contain no-versioned image. However, ARM device may use the no-versioned image for booting in boot partation. So I didn't implement it like that.
patch so you can correct me if I'm wrong. The logic is split between the two places. Below during the build (do_install), and here in the postinstall. In do_install(), we no longer symlink, but instead copy the versioned image into the non versioned 'image' file. And then in the postinstall, we try and make a symlink (which may fail) to the same thing (the versioned image to a non versioned one), and that's a force symlink so it will clobber the previously copied one if possible, or implicitly fall back if the symlink fails.
Your understanding is right.
I have confirmed that both non versioned image and versioned image are packaged in rpm package. [bcm_2xxx_rpi4]$ rpm -qpl kernel-image-image-5.4.46-yocto-standard-5.4.x+git0+f8c88c4331_87b52c3030-r0.bcm_2xxx_rpi4.rpmSo yes, that logic seems fine to me. The reason I went through all that, is that for on-target upgrades. You won't have the do_install() to place the versioned image, have you confirmed that the versioned image file is packaged and will be
/boot /boot/Image /boot/Image-5.4.46-yocto-standardBesides, I have tested "dnf install" on target, it did place files of package and then run postinstall script.
present on an on-target install ? So the logic is the same with the symlink ? It should be, otherwise this would never work, but I just wanted to be sure. Yes, the logic is the same with the original symlink, hence I also think
there is no new bug introduced to on-target upgrades.
+set -e +""" % (type, type)) image = d.getVar('INITRAMFS_IMAGE') # If the INTIRAMFS_IMAGE is set but the INITRAMFS_IMAGE_BUNDLE is set to 0, @@ -386,7 +394,7 @@ kernel_do_install() { for imageType in ${KERNEL_IMAGETYPES} ; do install -m 0644 ${KERNEL_OUTPUT_DIR}/${imageType} ${D}/${KERNEL_IMAGEDEST}/${imageType}-${KERNEL_VERSION} if [ "${KERNEL_PACKAGE_NAME}" = "kernel" ]; then - ln -sf ${imageType}-${KERNEL_VERSION} ${D}/${KERNEL_IMAGEDEST}/${imageType} + install -m 0644 ${D}/${KERNEL_IMAGEDEST}/${imageType}-${KERNEL_VERSION} ${D}/${KERNEL_IMAGEDEST}/${imageType}Looking at this, can the existing line: install -m 0644 ${KERNEL_OUTPUT_DIR}/${imageType} ${D}/${KERNEL_IMAGEDEST}/${imageType}-${KERNEL_VERSION} be combined with the one you added ? We are copying the non-versioned image into a versioned image file, and then in the new logic, coping that versioned image into a non-versioned one. Couldn't we just have one copy of the non-versioned image, into the non-versioned image in KERNEL_IMAGEDEST ?
I don't think it could be. Cause the existing line :
"if [ "${KERNEL_PACKAGE_NAME}" = "kernel" ]; then"
can't be ingnored.
Thanks for reviewing,
Yanfei
Cheers, Brucefi done install -m 0644 System.map ${D}/boot/System.map-${KERNEL_VERSION} @@ -602,6 +610,7 @@ pkg_postinst_${KERNEL_PACKAGE_NAME}-base () { fi } + PACKAGESPLITFUNCS_prepend = "split_kernel_packages " python split_kernel_packages () { -- 2.18.2
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#139625): https://lists.openembedded.org/g/openembedded-core/message/139625 Mute This Topic: https://lists.openembedded.org/mt/74932613/21656 Group Owner: [email protected] Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
