@@ -101,6 +101,7 @@ TESTIMAGEDEPENDS += "${@bb.utils.contains('IMAGE_PKGTYPE', 'rpm', 'dnf-native:do
TESTIMAGEDEPENDS += "${@bb.utils.contains('IMAGE_PKGTYPE', 'rpm', 'createrepo-c-native:do_populate_sysroot', '', d)}"
TESTIMAGEDEPENDS += "${@bb.utils.contains('IMAGE_PKGTYPE', 'ipk', 'opkg-utils-native:do_populate_sysroot package-index:do_package_index', '', d)}"
TESTIMAGEDEPENDS += "${@bb.utils.contains('IMAGE_PKGTYPE', 'deb', 'apt-native:do_populate_sysroot package-index:do_package_index', '', d)}"
+TESTIMAGEDEPENDS += "${@oe.utils.ifelse(d.getVar('IMAGE_PKGTYPE') == 'rpm' and ('dnf' in d.getVar('TEST_SUITES') or 'auto' in d.getVar('TEST_SUITES')), 'packagefeed-core-rpmtest:do_packagefeed', '')}"
TESTIMAGELOCK = "${TMPDIR}/testimage.lock"
TESTIMAGELOCK:qemuall = ""
@@ -251,7 +252,7 @@ def testimage_main(d):
if (d.getVar('IMAGE_PKGTYPE') == 'rpm'
and ('dnf' in d.getVar('TEST_SUITES') or 'auto' in d.getVar('TEST_SUITES'))):
- create_rpm_index(d)
+ copy_rpm_repos(d)
logger = make_logger_bitbake_compatible(logging.getLogger("BitBake"))
pn = d.getVar("PN")
@@ -459,55 +460,13 @@ def get_runtime_paths(d):
paths.append(path)
return paths
-def create_index(arg):
- import subprocess
+def copy_rpm_repos(d):
+ rpm_dir = os.path.join(d.getVar('DEPLOY_DIR_FEED'), 'rpm', 'packagefeed-core-rpmtest')
+ idx_path = os.path.join(d.getVar('WORKDIR'), 'oe-testimage-repo')
- index_cmd = arg
- try:
- bb.note("Executing '%s' ..." % index_cmd)
- result = subprocess.check_output(index_cmd,
- stderr=subprocess.STDOUT,
- shell=True)
- result = result.decode('utf-8')
- except subprocess.CalledProcessError as e:
- return("Index creation command '%s' failed with return code "
- '%d:\n%s' % (e.cmd, e.returncode, e.output.decode("utf-8")))
- if result:
- bb.note(result)
- return None
-
-def create_rpm_index(d):
- import glob
- # Index RPMs
- rpm_createrepo = bb.utils.which(os.getenv('PATH'), "createrepo_c")
- index_cmds = []
- archs = (d.getVar('ALL_MULTILIB_PACKAGE_ARCHS') or '').replace('-', '_')
-
- for arch in archs.split():
- rpm_dir = os.path.join(d.getVar('DEPLOY_DIR_RPM'), arch)
- idx_path = os.path.join(d.getVar('WORKDIR'), 'oe-testimage-repo', arch)
-
- if not os.path.isdir(rpm_dir):
- continue
-
- lockfilename = os.path.join(d.getVar('DEPLOY_DIR_RPM'), 'rpm.lock')
- lf = bb.utils.lockfile(lockfilename, False)
- oe.path.copyhardlinktree(rpm_dir, idx_path)
- # Full indexes overload a 256MB image so reduce the number of rpms
- # in the feed by filtering to specific packages needed by the tests.
- package_list = glob.glob(idx_path + "*/*.rpm")
-
- for pkg in package_list:
- if not os.path.basename(pkg).startswith(("dnf-test-", "busybox", "update-alternatives", "libc6", "musl")):
- bb.utils.remove(pkg)
-
- bb.utils.unlockfile(lf)
- cmd = '%s --update -q %s' % (rpm_createrepo, idx_path)
-
- # Create repodata
- result = create_index(cmd)
- if result:
- bb.fatal('%s' % ('\n'.join(result)))
+ oe.path.copyhardlinktree(rpm_dir, idx_path)
+ # Test cases assume only arch directories and not a top-level repodata next to them.
+ oe.path.remove("%s/repodata" % idx_path)
def package_extraction(d, test_suites):
from oeqa.utils.package_manager import find_packages_to_extract
new file mode 100644
@@ -0,0 +1,12 @@
+SUMMARY = "Package feed containing the packages needed for dnf testing of rpm based testimages."
+
+inherit packagefeed
+
+RDEPENDS:${PN} += " \
+ busybox \
+ update-alternatives \
+ glibc \
+ dnf \
+"
+
+SKIP_RECIPE[packagefeed-core-rpmtest] ?= "${@bb.utils.contains('PACKAGE_CLASSES', 'package_rpm', '', 'is intended only for tests where PACKAGE_CLASSES includes package_rpm.', d)}"
To test the new packagefeed.bbclass, the testimage case for testing on rpm images has been updated to use a newly added packagefeed (packagefeed-core-rpmtest) instead of manually moving the feeds from DEPLOY_DIR_RPM, removing unwanted packages, and building the indexes manually. The new logic creates the feed in DEPLOY_DIR_FEED_RPM via building the packagefeed and links to it from the location expected for the tests to run. The resulting feed is technically bigger than before but is still smaller than creating a feed with all packages present in DEPLOY_DIR_RPM without the manual removal step. These changes were tested against testimage runs of the following images: - core-image-minimal - core-image-full-cmdline - core-image-sato - core-image-sato-sdk Signed-off-by: Charlie Johnston <charlie.johnston@ni.com> --- meta/classes-recipe/testimage.bbclass | 57 +++---------------- .../packagefeeds/packagefeed-core-rpmtest.bb | 12 ++++ 2 files changed, 20 insertions(+), 49 deletions(-) create mode 100644 meta/recipes-core/packagefeeds/packagefeed-core-rpmtest.bb