summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoshua Watt <JPEWhacker@gmail.com>2023-12-20 14:31:19 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2023-12-23 08:46:00 +0000
commitdf548e981da91e9028f54d0a7e6243d3ce9e3c80 (patch)
treef7d715ab8daf832c44115f37f85444ce2e29a88c
parentdfe9c45264924e0b6a7c3f9ce4574eb9fa554ccc (diff)
downloadpoky-df548e981da91e9028f54d0a7e6243d3ce9e3c80.tar.gz
ipk: Switch to using zstd compression
Converts IPK package generation to use zstd instead of xz. zstd has a much larger compression/speed tradeoff range allowing users to choose what suits them best, and fast decompression speeds. It also continues to support parallel compression as xz did. A new variable called ZSTD_DEFAULTS is provided to set the defaults for places that want to use zstd for compression; the zst image conversion command is also modified to use this. Finally, in order for this to function properly, opkg must include zstd support, so it is enabled all the time with no PACKAGECONFIG to turn it off. (From OE-Core rev: 1bc3e9bbaa670b6128c74c76b4b5264e60ce3463) Signed-off-by: Joshua Watt <JPEWhacker@gmail.com> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/classes-global/package_ipk.bbclass4
-rw-r--r--meta/classes-recipe/image_types.bbclass4
-rw-r--r--meta/conf/bitbake.conf4
-rw-r--r--meta/lib/oe/package_manager/ipk/__init__.py4
-rw-r--r--meta/recipes-devtools/opkg/opkg_0.6.2.bb6
5 files changed, 12 insertions, 10 deletions
diff --git a/meta/classes-global/package_ipk.bbclass b/meta/classes-global/package_ipk.bbclass
index 71ffdd522a..209568ae5f 100644
--- a/meta/classes-global/package_ipk.bbclass
+++ b/meta/classes-global/package_ipk.bbclass
@@ -15,7 +15,7 @@ IPKGCONF_SDK_TARGET = "${WORKDIR}/opkg-sdk-target.conf"
15PKGWRITEDIRIPK = "${WORKDIR}/deploy-ipks" 15PKGWRITEDIRIPK = "${WORKDIR}/deploy-ipks"
16 16
17# Program to be used to build opkg packages 17# Program to be used to build opkg packages
18OPKGBUILDCMD ??= 'opkg-build -Z xz -a "${XZ_DEFAULTS}"' 18OPKGBUILDCMD ??= 'opkg-build -Z zstd -a "${ZSTD_DEFAULTS}"'
19 19
20OPKG_ARGS += "--force_postinstall --prefer-arch-to-version" 20OPKG_ARGS += "--force_postinstall --prefer-arch-to-version"
21OPKG_ARGS += "${@['', '--no-install-recommends'][d.getVar("NO_RECOMMENDATIONS") == "1"]}" 21OPKG_ARGS += "${@['', '--no-install-recommends'][d.getVar("NO_RECOMMENDATIONS") == "1"]}"
@@ -277,7 +277,7 @@ addtask do_package_write_ipk_setscene
277 277
278python () { 278python () {
279 if d.getVar('PACKAGES') != '': 279 if d.getVar('PACKAGES') != '':
280 deps = ' opkg-utils-native:do_populate_sysroot virtual/fakeroot-native:do_populate_sysroot xz-native:do_populate_sysroot' 280 deps = ' opkg-utils-native:do_populate_sysroot virtual/fakeroot-native:do_populate_sysroot zstd-native:do_populate_sysroot'
281 d.appendVarFlag('do_package_write_ipk', 'depends', deps) 281 d.appendVarFlag('do_package_write_ipk', 'depends', deps)
282 d.setVarFlag('do_package_write_ipk', 'fakeroot', "1") 282 d.setVarFlag('do_package_write_ipk', 'fakeroot', "1")
283 283
diff --git a/meta/classes-recipe/image_types.bbclass b/meta/classes-recipe/image_types.bbclass
index d615b41ed1..3733bdfc20 100644
--- a/meta/classes-recipe/image_types.bbclass
+++ b/meta/classes-recipe/image_types.bbclass
@@ -63,8 +63,6 @@ ZIP_COMPRESSION_LEVEL ?= "-9"
637ZIP_COMPRESSION_METHOD ?= "BZip2" 637ZIP_COMPRESSION_METHOD ?= "BZip2"
647ZIP_EXTENSION ?= "7z" 647ZIP_EXTENSION ?= "7z"
65 65
66ZSTD_COMPRESSION_LEVEL ?= "-3"
67
68JFFS2_SUM_EXTRA_ARGS ?= "" 66JFFS2_SUM_EXTRA_ARGS ?= ""
69IMAGE_CMD:jffs2 = "mkfs.jffs2 --root=${IMAGE_ROOTFS} --faketime --output=${IMGDEPLOYDIR}/${IMAGE_NAME}.jffs2 ${EXTRA_IMAGECMD}" 67IMAGE_CMD:jffs2 = "mkfs.jffs2 --root=${IMAGE_ROOTFS} --faketime --output=${IMGDEPLOYDIR}/${IMAGE_NAME}.jffs2 ${EXTRA_IMAGECMD}"
70 68
@@ -337,7 +335,7 @@ CONVERSION_CMD:lz4 = "lz4 -9 -z -l ${IMAGE_NAME}.${type} ${IMAGE_NAME}.${type}.l
337CONVERSION_CMD:lzo = "lzop -9 ${IMAGE_NAME}.${type}" 335CONVERSION_CMD:lzo = "lzop -9 ${IMAGE_NAME}.${type}"
338CONVERSION_CMD:zip = "zip ${ZIP_COMPRESSION_LEVEL} ${IMAGE_NAME}.${type}.zip ${IMAGE_NAME}.${type}" 336CONVERSION_CMD:zip = "zip ${ZIP_COMPRESSION_LEVEL} ${IMAGE_NAME}.${type}.zip ${IMAGE_NAME}.${type}"
339CONVERSION_CMD:7zip = "7za a -mx=${7ZIP_COMPRESSION_LEVEL} -mm=${7ZIP_COMPRESSION_METHOD} ${IMAGE_NAME}.${type}.${7ZIP_EXTENSION} ${IMAGE_NAME}.${type}" 337CONVERSION_CMD:7zip = "7za a -mx=${7ZIP_COMPRESSION_LEVEL} -mm=${7ZIP_COMPRESSION_METHOD} ${IMAGE_NAME}.${type}.${7ZIP_EXTENSION} ${IMAGE_NAME}.${type}"
340CONVERSION_CMD:zst = "zstd -f -k -T0 -c ${ZSTD_COMPRESSION_LEVEL} ${IMAGE_NAME}.${type} > ${IMAGE_NAME}.${type}.zst" 338CONVERSION_CMD:zst = "zstd -f -k -c ${ZSTD_DEFAULTS} ${IMAGE_NAME}.${type} > ${IMAGE_NAME}.${type}.zst"
341CONVERSION_CMD:sum = "sumtool -i ${IMAGE_NAME}.${type} -o ${IMAGE_NAME}.${type}.sum ${JFFS2_SUM_EXTRA_ARGS}" 339CONVERSION_CMD:sum = "sumtool -i ${IMAGE_NAME}.${type} -o ${IMAGE_NAME}.${type}.sum ${JFFS2_SUM_EXTRA_ARGS}"
342CONVERSION_CMD:md5sum = "md5sum ${IMAGE_NAME}.${type} > ${IMAGE_NAME}.${type}.md5sum" 340CONVERSION_CMD:md5sum = "md5sum ${IMAGE_NAME}.${type} > ${IMAGE_NAME}.${type}.md5sum"
343CONVERSION_CMD:sha1sum = "sha1sum ${IMAGE_NAME}.${type} > ${IMAGE_NAME}.${type}.sha1sum" 341CONVERSION_CMD:sha1sum = "sha1sum ${IMAGE_NAME}.${type} > ${IMAGE_NAME}.${type}.sha1sum"
diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf
index 83b12cbc15..b3f1f18a0d 100644
--- a/meta/conf/bitbake.conf
+++ b/meta/conf/bitbake.conf
@@ -878,6 +878,10 @@ XZ_DEFAULTS[vardepsexclude] += "XZ_MEMLIMIT XZ_THREADS"
878ZSTD_THREADS ?= "${@oe.utils.cpu_count(at_least=2)}" 878ZSTD_THREADS ?= "${@oe.utils.cpu_count(at_least=2)}"
879ZSTD_THREADS[vardepvalue] = "1" 879ZSTD_THREADS[vardepvalue] = "1"
880 880
881ZSTD_COMPRESSION_LEVEL ?= "-3"
882ZSTD_DEFAULTS ?= "--threads=${ZSTD_THREADS} ${ZSTD_COMPRESSION_LEVEL}"
883ZSTD_DEFAULTS[vardepsexclude] = "ZSTD_THREADS"
884
881# Limit the number of threads that OpenMP libraries will use. Otherwise they 885# Limit the number of threads that OpenMP libraries will use. Otherwise they
882# may fallback to using all CPUs 886# may fallback to using all CPUs
883export OMP_NUM_THREADS = "${BB_NUMBER_THREADS}" 887export OMP_NUM_THREADS = "${BB_NUMBER_THREADS}"
diff --git a/meta/lib/oe/package_manager/ipk/__init__.py b/meta/lib/oe/package_manager/ipk/__init__.py
index e6f9c08e2b..8fcbad56aa 100644
--- a/meta/lib/oe/package_manager/ipk/__init__.py
+++ b/meta/lib/oe/package_manager/ipk/__init__.py
@@ -133,7 +133,7 @@ class OpkgDpkgPM(PackageManager):
133 tmp_dir = tempfile.mkdtemp() 133 tmp_dir = tempfile.mkdtemp()
134 current_dir = os.getcwd() 134 current_dir = os.getcwd()
135 os.chdir(tmp_dir) 135 os.chdir(tmp_dir)
136 data_tar = 'data.tar.xz' 136 data_tar = 'data.tar.zst'
137 137
138 try: 138 try:
139 cmd = [ar_cmd, 'x', pkg_path] 139 cmd = [ar_cmd, 'x', pkg_path]
@@ -505,6 +505,6 @@ class OpkgPM(OpkgDpkgPM):
505 "trying to extract the package." % pkg) 505 "trying to extract the package." % pkg)
506 506
507 tmp_dir = super(OpkgPM, self).extract(pkg, pkg_info) 507 tmp_dir = super(OpkgPM, self).extract(pkg, pkg_info)
508 bb.utils.remove(os.path.join(tmp_dir, "data.tar.xz")) 508 bb.utils.remove(os.path.join(tmp_dir, "data.tar.zst"))
509 509
510 return tmp_dir 510 return tmp_dir
diff --git a/meta/recipes-devtools/opkg/opkg_0.6.2.bb b/meta/recipes-devtools/opkg/opkg_0.6.2.bb
index b2e675ae48..71c0b44aed 100644
--- a/meta/recipes-devtools/opkg/opkg_0.6.2.bb
+++ b/meta/recipes-devtools/opkg/opkg_0.6.2.bb
@@ -8,7 +8,7 @@ LICENSE = "GPL-2.0-or-later"
8LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \ 8LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
9 file://src/opkg.c;beginline=4;endline=18;md5=d6200b0f2b41dee278aa5fad333eecae" 9 file://src/opkg.c;beginline=4;endline=18;md5=d6200b0f2b41dee278aa5fad333eecae"
10 10
11DEPENDS = "libarchive" 11DEPENDS = "libarchive zstd"
12 12
13PE = "1" 13PE = "1"
14 14
@@ -40,10 +40,10 @@ PACKAGECONFIG[gpg] = "--enable-gpg,--disable-gpg,\
40PACKAGECONFIG[curl] = "--enable-curl,--disable-curl,curl" 40PACKAGECONFIG[curl] = "--enable-curl,--disable-curl,curl"
41PACKAGECONFIG[ssl-curl] = "--enable-ssl-curl,--disable-ssl-curl,curl openssl" 41PACKAGECONFIG[ssl-curl] = "--enable-ssl-curl,--disable-ssl-curl,curl openssl"
42PACKAGECONFIG[sha256] = "--enable-sha256,--disable-sha256" 42PACKAGECONFIG[sha256] = "--enable-sha256,--disable-sha256"
43PACKAGECONFIG[zstd] = "--enable-zstd,--disable-zstd,zstd"
44PACKAGECONFIG[libsolv] = "--with-libsolv,--without-libsolv,libsolv" 43PACKAGECONFIG[libsolv] = "--with-libsolv,--without-libsolv,libsolv"
45 44
46EXTRA_OECONF:class-native = "--localstatedir=/${@os.path.relpath('${localstatedir}', '${STAGING_DIR_NATIVE}')} --sysconfdir=/${@os.path.relpath('${sysconfdir}', '${STAGING_DIR_NATIVE}')}" 45EXTRA_OECONF = "--enable-zstd"
46EXTRA_OECONF:append:class-native = " --localstatedir=/${@os.path.relpath('${localstatedir}', '${STAGING_DIR_NATIVE}')} --sysconfdir=/${@os.path.relpath('${sysconfdir}', '${STAGING_DIR_NATIVE}')}"
47 47
48do_install:append () { 48do_install:append () {
49 install -d ${D}${sysconfdir}/opkg 49 install -d ${D}${sysconfdir}/opkg