[OE-core] [PATCH] image/populate_sdk: Ensure symlinks in target sysroot are relative

Hans Beckérus hans.beckerus at gmail.com
Thu Sep 12 07:48:30 UTC 2013


I have a slight problem with this patch. The new
sysroot-relativelinks.py does not obtain the proper access protection
bits!?
Which results in the following error when packaging the SDK

/home/poky/build/tmp/work/zynq_zc706-poky-linux-gnueabi/rootfs-default/1.0-r0/temp/run.populate_sdk_image.20803:
line 496: /home/poky/scripts/sysroot-relativelinks.py: Permission
denied

[home/poky]: ls -l scripts/sysroot-relativelinks.py
-rw-rw-r-- 1  poky poky 959 Sep 12 09:38 scripts/sysroot-relativelinks.py

The execution bit is missing!?

I can of course apply the execution bit manually, but what may cause
the patch to not set the bits properly in my scripts folder for new
files? Please advise.

Thanks.
Hans


On Wed, Sep 11, 2013 at 11:42 AM, Richard Purdie
<richard.purdie at linuxfoundation.org> wrote:
> In the target sysroot of an SDK we can have target system absolute links
> which don't make sense. This adds a script which fixes them up to become relative
> paths instead.
>
> [YOCTO #5020]
>
> Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
> ---
> diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass
> index 4a0946c..f1e62f14 100644
> --- a/meta/classes/image.bbclass
> +++ b/meta/classes/image.bbclass
> @@ -4,7 +4,7 @@ inherit populate_sdk_base
>
>  TOOLCHAIN_TARGET_TASK += "${PACKAGE_INSTALL}"
>  TOOLCHAIN_TARGET_TASK_ATTEMPTONLY += "${PACKAGE_INSTALL_ATTEMPTONLY}"
> -POPULATE_SDK_POST_TARGET_COMMAND += "rootfs_install_complementary populate_sdk; "
> +POPULATE_SDK_POST_TARGET_COMMAND += "rootfs_install_complementary populate_sdk; rootfs_sysroot_relativelinks; "
>
>  inherit gzipnative
>
> @@ -617,6 +617,11 @@ rootfs_trim_schemas () {
>         done
>  }
>
> +# Make any absolute links in a sysroot relative
> +rootfs_sysroot_relativelinks () {
> +       sysroot-relativelinks.py ${SDK_OUTPUT}/${SDKTARGETSYSROOT}
> +}
> +
>  EXPORT_FUNCTIONS zap_root_password remove_init_link do_rootfs make_zimage_symlink_relative set_image_autologin rootfs_update_timestamp rootfs_no_x_startup
>
>  do_fetch[noexec] = "1"
> diff --git a/scripts/sysroot-relativelinks.py b/scripts/sysroot-relativelinks.py
> new file mode 100755
> index 0000000..2e13744
> --- /dev/null
> +++ b/scripts/sysroot-relativelinks.py
> @@ -0,0 +1,31 @@
> +#!/usr/bin/env python
> +import sys
> +import os
> +
> +# Take a sysroot directory and turn all the abolute symlinks and turn them into
> +# relative ones such that the sysroot is usable within another system.
> +
> +if len(sys.argv) != 2:
> +    print("Usage is " + sys.argv[0] + "<directory>")
> +    sys.exit(1)
> +
> +topdir = sys.argv[1]
> +topdir = os.path.abspath(topdir)
> +
> +def handlelink(filep, subdir):
> +    link = os.readlink(filep)
> +    if link[0] != "/":
> +        return
> +    if link.startswith(topdir):
> +        return
> +    #print("Replacing %s with %s for %s" % (link, topdir+link, filep))
> +    print("Replacing %s with %s for %s" % (link, os.path.relpath(topdir+link, subdir), filep))
> +    os.unlink(filep)
> +    os.symlink(os.path.relpath(topdir+link, subdir), filep)
> +
> +for subdir, dirs, files in os.walk(topdir):
> +    for f in files:
> +        filep = os.path.join(subdir, f)
> +        if os.path.islink(filep):
> +            #print("Considering %s" % filep)
> +            handlelink(filep, subdir)
>
>
>
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core at lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core



More information about the Openembedded-core mailing list