aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHauke Mehrtens <hauke@hauke-m.de>2021-10-03 14:29:19 +0200
committerHauke Mehrtens <hauke@hauke-m.de>2021-10-03 14:31:41 +0200
commitcceb71233f8e641d1d6ef0c151bc0560b44572da (patch)
treeacbbf821cb8d8e601d89319abc79e034db813292
parenta4f9ba323b64e124f1b6a1ac05a14454bc84c096 (diff)
downloadbackports-cceb71233f8e641d1d6ef0c151bc0560b44572da.tar.gz
backports: Add support deb with zstd compression
The recent mainline .deb files from Ubuntu are using zstd compression. The default python tarfile API does not support zstd compression. Use the zpystd package from pip to decompress the stream and then use tarfile to unpack it. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
-rwxr-xr-xdevel/backports-update-manager11
1 files changed, 9 insertions, 2 deletions
diff --git a/devel/backports-update-manager b/devel/backports-update-manager
index 4d63de8c..9177be76 100755
--- a/devel/backports-update-manager
+++ b/devel/backports-update-manager
@@ -5,6 +5,7 @@ from urllib.request import urlopen
from urllib.parse import urljoin
import tarfile, tempfile
import fileinput, subprocess
+from pyzstd import ZstdFile
source_dir = os.path.abspath(os.path.dirname(__file__))
sys.path.append(source_dir + '/../')
from lib import bpar as ar
@@ -541,8 +542,14 @@ class backport_kernel_updater:
sys.stdout.write("%s - extracting new %s ...\n" % (kver.get('ver'), target))
data, dpath = tempfile.mkstemp(prefix=tmp_prefix)
ar.print_data(target, data)
- tar = tarfile.open(name=dpath, mode='r')
- tar.extractall(path=tmpdir_path, members=bk_tar_members(tar))
+ try:
+ tar = tarfile.open(name=dpath, mode='r')
+ tar.extractall(path=tmpdir_path, members=bk_tar_members(tar))
+ except (tarfile.ReadError):
+ zstd_file = ZstdFile(dpath)
+ tar = tarfile.open(fileobj=zstd_file, mode='r')
+ tar.extractall(path=tmpdir_path, members=bk_tar_members(tar))
+ zstd_file.close()
os.unlink(dpath)
self.sanitize_and_install_kernel_dirs(tmpdir_path)