]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core-contrib.git/commitdiff
image*.bbclass, kernel*.bbclass: create version-less artifacts and versioned hard...
authorMartin Jansa <Martin.Jansa@gmail.com>
Tue, 10 Jul 2018 19:36:10 +0000 (19:36 +0000)
committerMartin Jansa <martin.jansa@gmail.com>
Wed, 31 Jan 2024 10:07:05 +0000 (11:07 +0100)
* instead of versioned artifacts and version-less symlinks

* We used to create the actual artifact files with some version
  in the filename and then created symlink without any version
  which was updated to point to the latest one created.
  In some scenarios it's useful to create all artifacts - typically
  rootfs and kernel images with the same version - like release
  build even when the kernel itself wasn't modified since the
  previous release.

  If we include the release version in the regular _NAME variables
  then we'll need to re-run do_deploy and do_image which will cause
  kernel to be rebuilt and image to be re-created even when the
  only change since last build was the version number.

  With this change we can re-use kernel and image from sstate when
  nothing was changed and run only very fast do_deploy_links task
  which just adds another hard link to existing artifact from
  sstate.

* This is already used by various LGE builds as do_webos_deploy_fixup()
  https://github.com/webosose/meta-webosose/blob/master/meta-webos/classes/webos_deploy.bbclass
  but injecting this task in all the right places is difficult
  and sometimes requires whole bbclass to be duplicated. Having
  simpler way of versioning artifacts directly in oe-core might
  be useful for others.

* move IMAGE_VERSION_SUFFIX from _NAME variables to _LINK_NAME
  that way e.g. kernel.do_deploy can be reused from sstate to
  provide "version-less" artifacts and then very fast
  do_deploy_links task just adds links with consistent suffixes
  (by default the version from the recipe but could be easily set
  to e.g. some release name when building some products).
* create hard links instead of symlinks, so that whatever version
  the filename says is really there
* some IMAGE_FSTYPES might need the "version-less" IMAGE_NAME file
  to be removed first or they might either append or update the
  content of the image instead of creating new image file from
  scratch - I have seen this only with one proprietary format we
  generate with our own tool, so hopefully this isn't very common
* this is basically the mechanism are using in webOS with
  WEBOS_IMAGE_NAME_SUFFIX which is for official builds set from
  jenkins job and then all artifacts (images as well as corresponding
  kernel files) have the same version string)

* without this, you can still easily set the variables to contain
  the version from jenkins job (excluded from sstate signature like
  DATETIME currently is to prevent rebuilding it everytime even when
  the content didn't change) but then when kernel is reused from sstate
  you can have version 1.0 used on kernel artifacts and 2.0 on image
  artifacts.

* if you don't exclude the version string with vardepsexclude, then
  you get the right version in the filenames but for cost of
  re-executing do_deploy every single time, which with rm_work will
  cause all kernel tasks to be re-executed (together with everything
  which depends on it like external modules etc).

* the implementation "from outside" is a bit tricky as shown in webOS
  OSE, because first you need to reverse the meaning of IMAGE_NAME
  and IMAGE_LINK_NAME like here, but also replace all symlinks with
  hardlinks and then adjust all recipes/bbclasses to depend on our
  do_deploy_fixup task instead of the original do_deploy
  see the variable modifications:
  https://github.com/webosose/meta-webosose/blob/a35e81622aae1066591e44a132d01297ff478248/meta-webos/conf/distro/include/webos.inc#L65
  and then various bbclasses to hook do_webos_deploy_fixup task creating
  the hardlinks for possible artifacts:
  https://github.com/webosose/meta-webosose/blob/a35e81622aae1066591e44a132d01297ff478248/meta-webos/classes/webos_deploy.bbclass
  https://github.com/webosose/meta-webosose/blob/a35e81622aae1066591e44a132d01297ff478248/meta-webos/classes/kernel.bbclass
  https://github.com/webosose/meta-webosose/blob/a35e81622aae1066591e44a132d01297ff478248/meta-webos/classes/image.bbclass
  so hopefully with all these changes in oe-core other project can
  achieve the same just by setting one variable IMAGE_VERSION_SUFFIX

* drop ${PKGE}-${PKGV}-${PR} from kernel artifacts names (this is the
  latest build) and add it only in hardlinks created in do_deploy_links
  so that we can use PKGR there again (because these links are generally
  used only by human operators and they don't have their own TASKHASH or
  the IMAGE_VERSION_SUFFIX might be set to some release name which they
  do understand

* this allows to drop package_get_auto_pr from kernel do_deploy as well,
  leaving only 2 EXTENDPRAUTO bumps for each kernel build (do_package
  and do_deploy_links, unfortunatelly these will still have different
  value, so if you're looking for the exact kernel image in deploy
  directory based on kernel image package version seen on the device the
  EXTENDPRAUTO part of PR will be different).

[YOCTO #12937]

Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
meta/classes-recipe/image-artifact-names.bbclass
meta/classes-recipe/image.bbclass
meta/classes-recipe/kernel-artifact-names.bbclass
meta/classes-recipe/kernel-devicetree.bbclass
meta/classes-recipe/kernel-fitimage.bbclass
meta/classes-recipe/kernel.bbclass
meta/classes-recipe/qemuboot.bbclass
meta/classes-recipe/rootfs-postcommands.bbclass
meta/classes/cve-check.bbclass
meta/lib/oe/cve_check.py

index bc76ff0e1668ae099923ba47292ab62ecf92d287..d0f1b0dc5558d3c77207984c8194d8eeca73e0e0 100644 (file)
@@ -9,12 +9,12 @@
 ##################################################################
 
 IMAGE_BASENAME ?= "${PN}"
-IMAGE_VERSION_SUFFIX ?= "-${DATETIME}"
+IMAGE_VERSION_SUFFIX ?= "-${PKGE}-${PKGV}-${PKGR}-${DATETIME}"
 IMAGE_VERSION_SUFFIX[vardepsexclude] += "DATETIME SOURCE_DATE_EPOCH"
-IMAGE_NAME ?= "${IMAGE_LINK_NAME}${IMAGE_VERSION_SUFFIX}"
-IMAGE_LINK_NAME ?= "${IMAGE_BASENAME}${IMAGE_MACHINE_SUFFIX}${IMAGE_NAME_SUFFIX}"
+IMAGE_NAME ?= "${IMAGE_BASENAME}${IMAGE_MACHINE_SUFFIX}${IMAGE_NAME_SUFFIX}"
+IMAGE_LINK_NAME ?= "${IMAGE_NAME}${IMAGE_VERSION_SUFFIX}"
 
-# This needs to stay in sync with IMAGE_LINK_NAME, but with INITRAMFS_IMAGE instead of IMAGE_BASENAME
+# This needs to stay in sync with IMAGE_NAME, but with INITRAMFS_IMAGE instead of IMAGE_BASENAME
 # and without ${IMAGE_NAME_SUFFIX} which all initramfs images should set to empty
 INITRAMFS_IMAGE_NAME ?= "${@['${INITRAMFS_IMAGE}${IMAGE_MACHINE_SUFFIX}', ''][d.getVar('INITRAMFS_IMAGE') == '']}"
 
index 28be6c63623ab54fbb5f4b0ef9684cfb772fb813..d863dc9652faeadf464496cb119cc5ddcbf2d195 100644 (file)
@@ -142,7 +142,7 @@ do_rootfs[vardeps] += "${@rootfs_variables(d)}"
 # This follows many common usecases and user expectations.
 # But if you are building an image which doesn't need the kernel image at all,
 # you can unset this variable manually.
-KERNEL_DEPLOY_DEPEND ?= "virtual/kernel:do_deploy"
+KERNEL_DEPLOY_DEPEND ?= "virtual/kernel:do_deploy_links"
 do_build[depends] += "${KERNEL_DEPLOY_DEPEND}"
 
 
@@ -600,14 +600,14 @@ python create_symlinks() {
         return
     for type in subimages:
         dst = os.path.join(deploy_dir, link_name + "." + type)
-        src = img_name + "." + type
-        if os.path.exists(os.path.join(deploy_dir, src)):
-            bb.note("Creating symlink: %s -> %s" % (dst, src))
+        src = os.path.join(deploy_dir, img_name + "." + type)
+        if os.path.exists(src):
+            bb.note("Creating hardlink: %s -> %s" % (dst, src))
             if os.path.islink(dst):
                 os.remove(dst)
-            os.symlink(src, dst)
+            os.link(src, dst)
         else:
-            bb.note("Skipping symlink, source does not exist: %s -> %s" % (dst, src))
+            bb.note("Skipping hardlink, source does not exist: %s -> %s" % (dst, src))
 }
 
 MULTILIBRE_ALLOW_REP += "${base_bindir} ${base_sbindir} ${bindir} ${sbindir} ${libexecdir} ${sysconfdir} ${nonarch_base_libdir}/udev /lib/modules/[^/]*/modules.*"
index 1a7611a15e8ace95ff9d9ca6309c45f1b9d1808e..186c6bc5b930ee4f0a8bfe4203c49d30927efa5e 100644 (file)
 
 inherit image-artifact-names
 
-KERNEL_ARTIFACT_NAME ?= "${PKGE}-${PKGV}-${PKGR}${IMAGE_MACHINE_SUFFIX}${IMAGE_VERSION_SUFFIX}"
-KERNEL_ARTIFACT_LINK_NAME ?= "${MACHINE}"
+KERNEL_VERSION_SUFFIX ?= "${IMAGE_VERSION_SUFFIX}"
+
+KERNEL_ARTIFACT_NAME ?= "${MACHINE}"
+KERNEL_ARTIFACT_LINK_NAME ?= "${KERNEL_ARTIFACT_NAME}${KERNEL_VERSION_SUFFIX}"
 KERNEL_ARTIFACT_BIN_EXT ?= ".bin"
 
 KERNEL_IMAGE_NAME ?= "${KERNEL_ARTIFACT_NAME}"
index eff052b402963ab1c21f4aeb60d2fc3fc7e4b92b..cbfaa5c183bb27359a6a4ad8f08b477f2e698852 100644 (file)
@@ -91,7 +91,7 @@ do_install:append() {
        done
 }
 
-do_deploy:append() {
+kernel_do_deploy:append() {
        for dtbf in ${KERNEL_DEVICETREE}; do
                dtb=`normalize_dtb "$dtbf"`
                dtb_ext=${dtb##*.}
@@ -102,10 +102,7 @@ do_deploy:append() {
                fi
                install -m 0644 ${D}/${KERNEL_DTBDEST}/$dtb $deployDir/$dtb_base_name.$dtb_ext
                if [ -n "${KERNEL_DTB_NAME}" ] ; then
-                       ln -sf $dtb_base_name.$dtb_ext $deployDir/$dtb_base_name-${KERNEL_DTB_NAME}.$dtb_ext
-               fi
-               if [ -n "${KERNEL_DTB_LINK_NAME}" ] ; then
-                       ln -sf $dtb_base_name.$dtb_ext $deployDir/$dtb_base_name-${KERNEL_DTB_LINK_NAME}.$dtb_ext
+                       ln -vf $deployDir/$dtb_base_name.$dtb_ext $deployDir/$dtb_base_name-${KERNEL_DTB_NAME}.$dtb_ext
                fi
                for type in ${KERNEL_IMAGETYPE_FOR_MAKE}; do
                        if [ "$type" = "zImage" ] && [ "${KERNEL_DEVICETREE_BUNDLE}" = "1" ]; then
@@ -116,10 +113,6 @@ do_deploy:append() {
                                        ln -sf $type-$dtb_base_name.$dtb_ext${KERNEL_DTB_BIN_EXT} \
                                                $deployDir/$type-$dtb_base_name-${KERNEL_DTB_NAME}.$dtb_ext${KERNEL_DTB_BIN_EXT}
                                fi
-                               if [ -n "${KERNEL_DTB_LINK_NAME}" ]; then
-                                       ln -sf $type-$dtb_base_name.$dtb_ext${KERNEL_DTB_BIN_EXT} \
-                                               $deployDir/$type-$dtb_base_name-${KERNEL_DTB_LINK_NAME}.$dtb_ext${KERNEL_DTB_BIN_EXT}
-                               fi
                                if [ -e "${KERNEL_OUTPUT_DIR}/${type}.initramfs" ]; then
                                        cat ${KERNEL_OUTPUT_DIR}/${type}.initramfs \
                                                $deployDir/$dtb_base_name.$dtb_ext \
@@ -128,10 +121,26 @@ do_deploy:append() {
                                                ln -sf ${type}-${INITRAMFS_NAME}-$dtb_base_name.$dtb_ext${KERNEL_DTB_BIN_EXT} \
                                                        $deployDir/${type}-${INITRAMFS_NAME}-$dtb_base_name-${KERNEL_DTB_NAME}.$dtb_ext${KERNEL_DTB_BIN_EXT}
                                        fi
-                                       if [ -n "${KERNEL_DTB_LINK_NAME}" ]; then
-                                               ln -sf ${type}-${INITRAMFS_NAME}-$dtb_base_name.$dtb_ext${KERNEL_DTB_BIN_EXT} \
-                                                       $deployDir/${type}-${INITRAMFS_NAME}-$dtb_base_name-${KERNEL_DTB_LINK_NAME}.$dtb_ext${KERNEL_DTB_BIN_EXT}
-                                       fi
+                               fi
+                       fi
+               done
+       done
+}
+kernel_do_deploy_links:append() {
+       for dtbf in ${KERNEL_DEVICETREE}; do
+               dtb=`normalize_dtb "$dtbf"`
+               dtb_ext=${dtb##*.}
+               dtb_base_name=`basename $dtb .$dtb_ext`
+               if [ -n "${KERNEL_DTB_LINK_NAME}" ] ; then
+                       ln -vf $deployDir/$dtb_base_name.$dtb_ext $deployDir/$dtb_base_name-${KERNEL_DTB_LINK_NAME}.$dtb_ext
+               fi
+               for type in ${KERNEL_IMAGETYPE_FOR_MAKE}; do
+                       if [ "$type" = "zImage" ] && [ "${KERNEL_DEVICETREE_BUNDLE}" = "1" ] && [ -n "${KERNEL_DTB_LINK_NAME}" ]; then
+                               ln -vf $deployDir/$type-$dtb_base_name.$dtb_ext${KERNEL_DTB_BIN_EXT} \
+                                       $deployDir/$type-$dtb_base_name-${KERNEL_DTB_LINK_NAME}.$dtb_ext${KERNEL_DTB_BIN_EXT}
+                               if [ -e "${KERNEL_OUTPUT_DIR}/${type}.initramfs" ]; then
+                                       ln -vf $deployDir/${type}-${INITRAMFS_NAME}-$dtb_base_name.$dtb_ext${KERNEL_DTB_BIN_EXT} \
+                                               $deployDir/${type}-${INITRAMFS_NAME}-$dtb_base_name-${KERNEL_DTB_LINK_NAME}.$dtb_ext${KERNEL_DTB_BIN_EXT}
                                fi
                        fi
                done
index 7e30a5d47eaac97d34fce984eaeb5a60ef5e6c81..0ad200d9db00e35b58ae73649791148bfb636032 100644 (file)
@@ -837,7 +837,6 @@ do_kernel_generate_rsa_keys() {
 
 addtask kernel_generate_rsa_keys before do_assemble_fitimage after do_compile
 
-kernel_do_deploy[vardepsexclude] = "DATETIME"
 kernel_do_deploy:append() {
        # Update deploy directory
        if echo ${KERNEL_IMAGETYPES} | grep -wq "fitImage"; then
@@ -845,29 +844,39 @@ kernel_do_deploy:append() {
                if [ "${INITRAMFS_IMAGE_BUNDLE}" != "1" ]; then
                        bbnote "Copying fit-image.its source file..."
                        install -m 0644 ${B}/fit-image.its "$deployDir/fitImage-its-${KERNEL_FIT_NAME}.its"
-                       if [ -n "${KERNEL_FIT_LINK_NAME}" ] ; then
-                               ln -snf fitImage-its-${KERNEL_FIT_NAME}.its "$deployDir/fitImage-its-${KERNEL_FIT_LINK_NAME}"
-                       fi
-
                        bbnote "Copying linux.bin file..."
                        install -m 0644 ${B}/linux.bin $deployDir/fitImage-linux.bin-${KERNEL_FIT_NAME}${KERNEL_FIT_BIN_EXT}
-                       if [ -n "${KERNEL_FIT_LINK_NAME}" ] ; then
-                               ln -snf fitImage-linux.bin-${KERNEL_FIT_NAME}${KERNEL_FIT_BIN_EXT} "$deployDir/fitImage-linux.bin-${KERNEL_FIT_LINK_NAME}"
-                       fi
                fi
 
                if [ -n "${INITRAMFS_IMAGE}" ]; then
                        bbnote "Copying fit-image-${INITRAMFS_IMAGE}.its source file..."
                        install -m 0644 ${B}/fit-image-${INITRAMFS_IMAGE}.its "$deployDir/fitImage-its-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_NAME}.its"
+                       if [ "${INITRAMFS_IMAGE_BUNDLE}" != "1" ]; then
+                               bbnote "Copying fitImage-${INITRAMFS_IMAGE} file..."
+                               install -m 0644 ${B}/${KERNEL_OUTPUT_DIR}/fitImage-${INITRAMFS_IMAGE} "$deployDir/fitImage-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_NAME}${KERNEL_FIT_BIN_EXT}"
+                       fi
+               fi
+       fi
+}
+kernel_do_deploy_links:append() {
+       if echo ${KERNEL_IMAGETYPES} | grep -wq "fitImage"; then
+               if [ "${INITRAMFS_IMAGE_BUNDLE}" != "1" ]; then
+                       if [ -n "${KERNEL_FIT_LINK_NAME}" ] ; then
+                               ln -vf $deployDir/fitImage-its-${KERNEL_FIT_NAME}.its "$deployDir/fitImage-its-${KERNEL_FIT_LINK_NAME}"
+                       fi
                        if [ -n "${KERNEL_FIT_LINK_NAME}" ] ; then
-                               ln -snf fitImage-its-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_NAME}.its "$deployDir/fitImage-its-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_LINK_NAME}"
+                               ln -vf $deployDir/fitImage-linux.bin-${KERNEL_FIT_NAME}${KERNEL_FIT_BIN_EXT} "$deployDir/fitImage-linux.bin-${KERNEL_FIT_LINK_NAME}"
+                       fi
+               fi
+
+               if [ -n "${INITRAMFS_IMAGE}" ]; then
+                       if [ -n "${KERNEL_FIT_LINK_NAME}" ] ; then
+                               ln -vf $deployDir/fitImage-its-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_NAME}.its "$deployDir/fitImage-its-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_LINK_NAME}"
                        fi
 
                        if [ "${INITRAMFS_IMAGE_BUNDLE}" != "1" ]; then
-                               bbnote "Copying fitImage-${INITRAMFS_IMAGE} file..."
-                               install -m 0644 ${B}/${KERNEL_OUTPUT_DIR}/fitImage-${INITRAMFS_IMAGE} "$deployDir/fitImage-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_NAME}${KERNEL_FIT_BIN_EXT}"
                                if [ -n "${KERNEL_FIT_LINK_NAME}" ] ; then
-                                       ln -snf fitImage-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_NAME}${KERNEL_FIT_BIN_EXT} "$deployDir/fitImage-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_LINK_NAME}"
+                                       ln -vf $deployDir/fitImage-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_NAME}${KERNEL_FIT_BIN_EXT} "$deployDir/fitImage-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_LINK_NAME}"
                                fi
                        fi
                fi
index a76aaee5bac4393a187b8f2ec69a6588dcd52ee9..2b74028dd8d6125de3fd058f3b7f2afcd5251661 100644 (file)
@@ -820,9 +820,6 @@ kernel_do_deploy() {
                else
                        install -m 0644 ${KERNEL_OUTPUT_DIR}/$imageType $deployDir/$baseName${KERNEL_IMAGE_BIN_EXT}
                fi
-               if [ -n "${KERNEL_IMAGE_LINK_NAME}" ] ; then
-                       ln -sf $baseName${KERNEL_IMAGE_BIN_EXT} $deployDir/$imageType-${KERNEL_IMAGE_LINK_NAME}${KERNEL_IMAGE_BIN_EXT}
-               fi
                if [ "${KERNEL_IMAGETYPE_SYMLINK}" = "1" ] ; then
                        ln -sf $baseName${KERNEL_IMAGE_BIN_EXT} $deployDir/$imageType
                fi
@@ -837,10 +834,6 @@ kernel_do_deploy() {
                fi
                TAR_ARGS="$TAR_ARGS --owner=0 --group=0"
                tar $TAR_ARGS -cv -C ${D}${root_prefix} lib | gzip -9n > $deployDir/modules-${MODULE_TARBALL_NAME}.tgz
-
-               if [ -n "${MODULE_TARBALL_LINK_NAME}" ] ; then
-                       ln -sf modules-${MODULE_TARBALL_NAME}.tgz $deployDir/modules-${MODULE_TARBALL_LINK_NAME}.tgz
-               fi
        fi
 
        if [ ! -z "${INITRAMFS_IMAGE}" -a x"${INITRAMFS_IMAGE_BUNDLE}" = x1 ]; then
@@ -848,22 +841,42 @@ kernel_do_deploy() {
                        if [ "$imageType" = "fitImage" ] ; then
                                continue
                        fi
-                       initramfsBaseName=$imageType-${INITRAMFS_NAME}
-                       install -m 0644 ${KERNEL_OUTPUT_DIR}/$imageType.initramfs $deployDir/$initramfsBaseName${KERNEL_IMAGE_BIN_EXT}
-                       if [ -n "${INITRAMFS_LINK_NAME}" ] ; then
-                               ln -sf $initramfsBaseName${KERNEL_IMAGE_BIN_EXT} $deployDir/$imageType-${INITRAMFS_LINK_NAME}${KERNEL_IMAGE_BIN_EXT}
-                       fi
+                       install -m 0644 ${KERNEL_OUTPUT_DIR}/$imageType.initramfs $deployDir/$imageType-${INITRAMFS_NAME}${KERNEL_IMAGE_BIN_EXT}
                done
        fi
 }
 
-# We deploy to filenames that include PKGV and PKGR, read the saved data to
-# ensure we get the right values for both
-do_deploy[prefuncs] += "read_subpackage_metadata"
-
 addtask deploy after do_populate_sysroot do_packagedata
 
-EXPORT_FUNCTIONS do_deploy
+kernel_do_deploy_links() {
+       deployDir="${DEPLOY_DIR_IMAGE}"
+       if [ -n "${KERNEL_DEPLOYSUBDIR}" ]; then
+               deployDir="${DEPLOY_DIR_IMAGE}/${KERNEL_DEPLOYSUBDIR}"
+               mkdir "$deployDir"
+       fi
+
+       for imageType in ${KERNEL_IMAGETYPES} ; do
+               ln -vf $deployDir/$imageType-${KERNEL_IMAGE_NAME}.bin $deployDir/$imageType-${KERNEL_IMAGE_LINK_NAME}${KERNEL_IMAGE_BIN_EXT}
+       done
+
+       if [ ${MODULE_TARBALL_DEPLOY} = "1" -a -f $deployDir/modules-${MODULE_TARBALL_NAME}.tgz ] ; then
+               ln -vf $deployDir/modules-${MODULE_TARBALL_NAME}.tgz $deployDir/modules-${MODULE_TARBALL_LINK_NAME}.tgz
+       fi
+
+       if [ ! -z "${INITRAMFS_IMAGE}" -a "${INITRAMFS_IMAGE_BUNDLE}" = "1" ]; then
+               for imageType in ${KERNEL_IMAGETYPES} ; do
+                       if [ "$imageType" = "fitImage" ] ; then
+                               continue
+                       fi
+                       ln -vf $deployDir/$imageType-${INITRAMFS_NAME}.bin $deployDir/$imageType-${INITRAMFS_LINK_NAME}${KERNEL_IMAGE_BIN_EXT}
+               done
+       fi
+}
+do_deploy_links[prefuncs] += "read_subpackage_metadata"
+
+addtask deploy_links after do_deploy before do_build
+
+EXPORT_FUNCTIONS do_deploy do_deploy_links
 
 # Add using Device Tree support
 inherit kernel-devicetree
index ff32aac9023f35a2f1f50473ce34a05153e1f53d..0ee4008a653c91656b1a7cd19251ed95fd3d5a56 100644 (file)
@@ -178,5 +178,5 @@ python do_write_qemuboot_conf() {
     if qemuboot_link and qemuboot_link != qemuboot:
         if os.path.lexists(qemuboot_link):
            os.remove(qemuboot_link)
-        os.symlink(os.path.basename(qemuboot), qemuboot_link)
+        os.link(qemuboot, qemuboot_link)
 }
index 3d05ff3b28eeb083a828108116b13817ea0bb24f..4f4f4be54ee39af9d1ec9c7af6d1b97b4fe7a95e 100644 (file)
@@ -390,7 +390,7 @@ python write_image_manifest () {
         if manifest_link != manifest_name:
             if os.path.lexists(manifest_link):
                 os.remove(manifest_link)
-            os.symlink(os.path.basename(manifest_name), manifest_link)
+            os.link(manifest_name, manifest_link)
 }
 
 # Can be used to create /etc/timestamp during image construction to give a reasonably
@@ -463,7 +463,7 @@ python write_image_test_data() {
         if testdata_link != testdata_name:
             if os.path.lexists(testdata_link):
                 os.remove(testdata_link)
-            os.symlink(os.path.basename(testdata_name), testdata_link)
+            os.link(testdata_name, testdata_link)
 }
 write_image_test_data[vardepsexclude] += "TOPDIR"
 
index 5191d043030e35bddd3f50abc99a66d3541b8656..b87d56575590e621e3ee3f7cad6f0192dcebb8ba 100644 (file)
@@ -125,7 +125,7 @@ python () {
 def generate_json_report(d, out_path, link_path):
     if os.path.exists(d.getVar("CVE_CHECK_SUMMARY_INDEX_PATH")):
         import json
-        from oe.cve_check import cve_check_merge_jsons, update_symlinks
+        from oe.cve_check import cve_check_merge_jsons, update_links
 
         bb.note("Generating JSON CVE summary")
         index_file = d.getVar("CVE_CHECK_SUMMARY_INDEX_PATH")
@@ -143,12 +143,12 @@ def generate_json_report(d, out_path, link_path):
         with open(out_path, "w") as f:
             json.dump(summary, f, indent=2)
 
-        update_symlinks(out_path, link_path)
+        update_links(out_path, link_path)
 
 python cve_save_summary_handler () {
     import shutil
     import datetime
-    from oe.cve_check import update_symlinks
+    from oe.cve_check import update_links
 
     cve_tmp_file = d.getVar("CVE_CHECK_TMP_FILE")
 
@@ -162,7 +162,7 @@ python cve_save_summary_handler () {
     if os.path.exists(cve_tmp_file):
         shutil.copyfile(cve_tmp_file, cve_summary_file)
         cvefile_link = os.path.join(cvelogpath, cve_summary_name)
-        update_symlinks(cve_summary_file, cvefile_link)
+        update_links(cve_summary_file, cvefile_link)
         bb.plain("Complete CVE report summary created at: %s" % cvefile_link)
 
     if d.getVar("CVE_CHECK_FORMAT_JSON") == "1":
@@ -219,7 +219,7 @@ python cve_check_write_rootfs_manifest () {
     import shutil
     import json
     from oe.rootfs import image_list_installed_packages
-    from oe.cve_check import cve_check_merge_jsons, update_symlinks
+    from oe.cve_check import cve_check_merge_jsons, update_links
 
     if d.getVar("CVE_CHECK_COPY_FILES") == "1":
         deploy_file = d.getVar("CVE_CHECK_RECIPE_FILE")
@@ -274,7 +274,7 @@ python cve_check_write_rootfs_manifest () {
         with open(manifest_name, "w") as f:
             f.write(text_data)
 
-        update_symlinks(manifest_name, link_path)
+        update_links(manifest_name, link_path)
         bb.plain("Image CVE report stored in: %s" % manifest_name)
 
     if enable_json:
@@ -284,7 +284,7 @@ python cve_check_write_rootfs_manifest () {
         with open(manifest_name, "w") as f:
             json.dump(json_data, f, indent=2)
 
-        update_symlinks(manifest_name, link_path)
+        update_links(manifest_name, link_path)
         bb.plain("Image CVE JSON report stored in: %s" % manifest_name)
 }
 
index ed5c714cb8b95c93a0350a87c8d425b618976a03..c91516aab3bfd35205ee65bd77f5a940ed0199e3 100644 (file)
@@ -177,15 +177,15 @@ def cve_check_merge_jsons(output, data):
 
     output["package"].append(data["package"][0])
 
-def update_symlinks(target_path, link_path):
+def update_links(target_path, link_path):
     """
-    Update a symbolic link link_path to point to target_path.
+    Update a link link_path to point to target_path.
     Remove the link and recreate it if exist and is different.
     """
     if link_path != target_path and os.path.exists(target_path):
         if os.path.exists(os.path.realpath(link_path)):
             os.remove(link_path)
-        os.symlink(os.path.basename(target_path), link_path)
+        os.link(target_path, link_path)
 
 
 def convert_cve_version(version):