From 865a22644098a53b378f7bc3e76bf24955e1ccd6 Mon Sep 17 00:00:00 2001 From: David Abdurachmanov Date: Mon, 30 Nov 2020 13:56:47 +0200 Subject: [PATCH] Add zstd support and fix exlinux for riscv64 Signed-off-by: David Abdurachmanov --- appliance-tools-add-zstd.patch | 87 ++++++++++++++++++++++++++++++++++ appliance-tools.spec | 15 +++++- riscv-fix-extlinux-conf.patch | 15 ++++++ 3 files changed, 116 insertions(+), 1 deletion(-) create mode 100644 appliance-tools-add-zstd.patch create mode 100644 riscv-fix-extlinux-conf.patch diff --git a/appliance-tools-add-zstd.patch b/appliance-tools-add-zstd.patch new file mode 100644 index 0000000..e76f1ee --- /dev/null +++ b/appliance-tools-add-zstd.patch @@ -0,0 +1,87 @@ +diff --git a/appcreate/appliance.py b/appcreate/appliance.py +index c6706cb..dc49bcb 100644 +--- a/appcreate/appliance.py ++++ b/appcreate/appliance.py +@@ -47,7 +47,7 @@ class ApplianceImageCreator(ImageCreator): + + """ + +- def __init__(self, ks, name, disk_format, vmem, vcpu, releasever=None, no_compress=False): ++ def __init__(self, ks, name, disk_format, vmem, vcpu, releasever=None, no_compress=False, zstd=False, zstd_level=None): + """Initialize a ApplianceImageCreator instance. + + This method takes the same arguments as ImageCreator.__init__() +@@ -60,6 +60,8 @@ class ApplianceImageCreator(ImageCreator): + self.__disks = {} + self.__disk_format = disk_format + self.__compress = not no_compress ++ self.__zstd = zstd ++ self.__zstd_level = zstd_level + + #appliance parameters + self.vmem = vmem +@@ -657,14 +659,32 @@ class ApplianceImageCreator(ImageCreator): + dst = "%s/%s-%s.%s" % (self._outdir, self.name, name, self.__disk_format) + + if self.__compress: +- # Compress with xz using 16 MiB block size for seekability +- rc = subprocess.call(["xz", "-z", "--block-size=16777216", "-T 0", src]) +- if rc == 0: +- logging.debug("compression successful") +- if rc != 0: +- raise CreatorError("Unable to compress disk to %s" % self.__disk_format) +- src = "%s.xz" % (src) +- dst = "%s.xz" % (dst) ++ logging.debug("compressing disk image") ++ if self.__zstd: ++ logging.debug("using zstd for compression") ++ # Compress with zstd using 16MiB blocks size (for future seekability) ++ zstd_cmd = ["zstd", "-z", "--block-size=16777216", "-T0"] ++ # Use custom compression level if specified ++ if self.__zstd_level: ++ zstd_cmd.append("-%s" % self.__zstd_level) ++ zstd_cmd.append(src) ++ rc = subprocess.call(zstd_cmd) ++ if rc == 0: ++ logging.debug("compression successful") ++ if rc != 0: ++ raise CreatorError("Unable to compress disk to %s, command: %s" % (self.__disk_format, zstd_cmd)) ++ src = "%s.zst" % (src) ++ dst = "%s.zst" % (dst) ++ else: ++ logging.debug("using xz for compression") ++ # Compress with xz using 16 MiB block size for seekability ++ rc = subprocess.call(["xz", "-z", "--block-size=16777216", "-T 0", src]) ++ if rc == 0: ++ logging.debug("compression successful") ++ if rc != 0: ++ raise CreatorError("Unable to compress disk to %s" % self.__disk_format) ++ src = "%s.xz" % (src) ++ dst = "%s.xz" % (dst) + + logging.debug("moving %s to %s" % (src, dst)) + shutil.move(src, dst) +diff --git a/tools/appliance-creator b/tools/appliance-creator +index eef1ede..6a0cf1c 100755 +--- a/tools/appliance-creator ++++ b/tools/appliance-creator +@@ -61,6 +61,10 @@ def parse_options(args): + help="Disk format (default: raw)") + appopt.add_option("", "--no-compress", action="store_true", dest="no_compress", default=False, + help="Avoid compressing the image") ++ appopt.add_option("", "--zstd", action="store_true", dest="zstd", default=False, ++ help="Compress the image using zstd instead of xz") ++ appopt.add_option("", "--zstd-level", type="int", dest="zstd_level", ++ help="Compress using specified compression level for zstd") + parser.add_option_group(appopt) + + +@@ -134,7 +138,7 @@ def main(): + if options.name: + name = options.name + +- creator = appcreate.ApplianceImageCreator(ks, name, options.disk_format, options.vmem, options.vcpu, releasever=options.version, no_compress=options.no_compress) ++ creator = appcreate.ApplianceImageCreator(ks, name, options.disk_format, options.vmem, options.vcpu, releasever=options.version, no_compress=options.no_compress, zstd=options.zstd, zstd_level=options.zstd_level) + creator.tmpdir = options.tmpdir + creator.checksum = options.checksum + diff --git a/appliance-tools.spec b/appliance-tools.spec index efa0bae..fc9c881 100644 --- a/appliance-tools.spec +++ b/appliance-tools.spec @@ -21,12 +21,20 @@ Name: appliance-tools Summary: Tools for building Appliances Version: 011.1 -Release: 1%{?dist} +Release: 1.0.riscv64%{?dist} License: GPLv2 URL: https://pagure.io/appliance-tools Source0: https://releases.pagure.org/%{name}/%{name}-%{version}.tar.bz2 +# NOT upstream +# Add support for zstd compression instead of xz (optional) +Patch0010: appliance-tools-add-zstd.patch + +# NOT upstream +# Fix extlinux configuration file for RISC-V (riscv64) +Patch0011: riscv-fix-extlinux-conf.patch + # Ensure system deps are installed (rhbz#1409536) Requires: python%{python_pkgversion}-imgcreate %{?min_imgcrate_evr:>= %{min_imgcreate_evr}} Requires: python%{python_pkgversion}-progress @@ -35,6 +43,7 @@ Requires: curl rsync kpartx Requires: zlib Requires: qemu-img Requires: xz +Requires: zstd %if 0%{?fedora} Requires: btrfs-progs %endif @@ -73,6 +82,10 @@ rm -rf %{buildroot}%{_datadir}/doc/%{name} %{python_sitelib}/ec2convert/ %changelog +* Mon Nov 30 2020 David Abdurachmanov - 011.1-1.0.riscv64 +- Fix extlinux configuration for RISC-V (riscv64) +- Add support for zstd compression for images (optional) + * Thu Aug 27 2020 Neal Gompa - 011.1-1 - Update to 011.1 release diff --git a/riscv-fix-extlinux-conf.patch b/riscv-fix-extlinux-conf.patch new file mode 100644 index 0000000..99f6055 --- /dev/null +++ b/riscv-fix-extlinux-conf.patch @@ -0,0 +1,15 @@ +diff --git a/appcreate/appliance.py b/appcreate/appliance.py +index dc49bcb..f65d12a 100644 +--- a/appcreate/appliance.py ++++ b/appcreate/appliance.py +@@ -362,9 +362,7 @@ class ApplianceImageCreator(ImageCreator): + for v in versions: + extlinux += "label %s (%s)\n" % (self.name, v) + extlinux += "\tkernel %s/vmlinuz-%s\n" % (prefix, v) +- extlinux += "\tappend ro root=%s %s\n" % (rootdev, options) +- if 'extlinux-bootloader' in packages: +- extlinux += "\tfdtdir %s/dtb-%s/\n" % (prefix, v) ++ extlinux += "\taddappend ro root=%s %s\n" % (rootdev, options) + extlinux += "\tinitrd %s/%s-%s.img\n\n" % (prefix, initrd, v) + +