Skip to contentSkip to conversation

Fix for unpacking deb files

PATCH New Paul Eggleton 1 participant 2 messages May 25, 2016

lore
Share & tools
lore
#0 lore raw

cover Fix for unpacking deb files

The following changes since commit d830dccf948d188492cecfcf2ff053f31740dc21:

classes/base.bbclass: Fix missing getVarFlag parameter (2016-05-24 15:55:01 +0100)

are available in the git repository at:

git://git.yoctoproject.org/poky-contrib paule/bb-deb
http://git.yoctoproject.org/cgit.cgi/poky-contrib/log/?h=paule/bb-deb

Paul Eggleton (1):
fetch2: fix unpacking of deb packages

 lib/bb/fetch2/__init__.py | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)
Signature · 1 line
2.5.5
#1 lore raw

PATCH 1/1 fetch2: fix unpacking of deb packages

deb packages in modern Debian versions have the data tarball compressed with xz rather than gzip, and thus explicitly extracting data.tar.gz fails. Unfortunately ar doesn't support wildcards matching items to extract, so we have to find out what the name of the file is first and then extract it, relying on tar to figure out how to unpack it based on the filename rather than doing it with pipes and making that determination ourselves.

---
 lib/bb/fetch2/__init__.py | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)
lib/bb/fetch2/__init__.py +12 -1
index 7d2f350..879a125 100644
@@ -1398,7 +1398,18 @@ class FetchMethod(object):
                 else:
                     cmd = 'rpm2cpio.sh %s | cpio -id' % (file)
             elif file.endswith('.deb') or file.endswith('.ipk'):
-                cmd = 'ar -p %s data.tar.gz | zcat | tar --no-same-owner -xpf -' % file
+                output = subprocess.check_output('ar -t %s' % file, preexec_fn=subprocess_setup, shell=True)
+                datafile = None
+                if output:
+                    for line in output.splitlines():
+                        if line.startswith('data.tar.'):
+                            datafile = line
+                            break
+                    else:
+                        raise UnpackError("Unable to unpack deb/ipk package - does not contain data.tar.* file", urldata.url)
+                else:
+                    raise UnpackError("Unable to unpack deb/ipk package - could not list contents", urldata.url)
+                cmd = 'ar x %s %s && tar --no-same-owner -xpf %s && rm %s' % (file, datafile, datafile, datafile)
             elif file.endswith('.tar.7z'):
                 cmd = '7z x -so %s | tar xf - ' % file
             elif file.endswith('.7z'):
Signature · 1 line
2.5.5