From: "Michał Górny" <mgorny@gentoo.org>
To: gentoo-dev@lists.gentoo.org
Cc: "Michał Górny" <mgorny@gentoo.org>
Subject: [gentoo-dev] [PATCH 15/15] unpacker.eclass: Unpack .deb packages on-the-fly as well
Date: Sun, 25 Sep 2022 20:23:17 +0200 [thread overview]
Message-ID: <20220925182317.1559529-16-mgorny@gentoo.org> (raw)
In-Reply-To: <20220925182317.1559529-1-mgorny@gentoo.org>
Signed-off-by: Michał Górny <mgorny@gentoo.org>
---
eclass/unpacker.eclass | 60 +++++++++++++++++++++++-------------------
1 file changed, 33 insertions(+), 27 deletions(-)
diff --git a/eclass/unpacker.eclass b/eclass/unpacker.eclass
index 100f11428622..3d23151b636e 100644
--- a/eclass/unpacker.eclass
+++ b/eclass/unpacker.eclass
@@ -273,33 +273,39 @@ unpack_deb() {
unpack_banner "${deb}"
- # on AIX ar doesn't work out as their ar used a different format
- # from what GNU ar (and thus what .deb files) produce
- if [[ -n ${EPREFIX} ]] ; then
- {
- read # global header
- [[ ${REPLY} = "!<arch>" ]] || die "${deb} does not seem to be a deb archive"
- local f timestamp uid gid mode size magic
- while read f timestamp uid gid mode size magic ; do
- [[ -n ${f} && -n ${size} ]] || continue # ignore empty lines
- # GNU ar uses / as filename terminator (and .deb permits that)
- f=${f%/}
- if [[ ${f} = "data.tar"* ]] ; then
- head -c "${size}" > "${f}"
- else
- head -c "${size}" > /dev/null # trash it
- fi
- done
- } < "${deb}"
- else
- $(tc-getBUILD_AR) x "${deb}" || die
- fi
-
- unpacker ./data.tar*
-
- # Clean things up #458658. No one seems to actually care about
- # these, so wait until someone requests to do something else ...
- rm -f debian-binary {control,data}.tar*
+ {
+ # on AIX ar doesn't work out as their ar used a different format
+ # from what GNU ar (and thus what .deb files) produce
+ if [[ -n ${EPREFIX} ]] ; then
+ {
+ read # global header
+ [[ ${REPLY} = "!<arch>" ]] || die "${deb} does not seem to be a deb archive"
+ local f timestamp uid gid mode size magic
+ while read f timestamp uid gid mode size magic ; do
+ [[ -n ${f} && -n ${size} ]] || continue # ignore empty lines
+ # GNU ar uses / as filename terminator (and .deb permits that)
+ f=${f%/}
+ if [[ ${f} = "data.tar"* ]] ; then
+ local decomp=$(_unpacker_get_decompressor "${f}")
+ head -c "${size}" | ${decomp:-cat}
+ assert "unpacking ${f} from ${deb} failed"
+ break
+ else
+ head -c "${size}" > /dev/null # trash it
+ fi
+ done
+ } < "${deb}"
+ else
+ local f=$(
+ $(tc-getBUILD_AR) t "${deb}" | grep ^data.tar
+ assert "data not found in ${deb}"
+ )
+ local decomp=$(_unpacker_get_decompressor "${f}")
+ $(tc-getBUILD_AR) p "${deb}" "${f}" | ${decomp:-cat}
+ assert "unpacking ${f} from ${deb} failed"
+ fi
+ } | tar --no-same-owner -x
+ assert "unpacking ${deb} failed"
}
# @FUNCTION: unpack_cpio
--
2.37.3
prev parent reply other threads:[~2022-09-25 18:27 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-25 18:23 [gentoo-dev] [PATCH 00/15] unpacker.eclass: Tests, bugfixes and GPKG support Michał Górny
2022-09-25 18:23 ` [gentoo-dev] [PATCH 01/15] eclass/tests: Add tests for unpacker.eclass Michał Górny
2022-09-25 18:23 ` [gentoo-dev] [PATCH 02/15] unpacker.eclass: Remove `-f` from zstd arguments Michał Górny
2022-09-25 18:23 ` [gentoo-dev] [PATCH 03/15] unpacker.eclass: Fix unpack_7z to respect the exit status Michał Górny
2022-09-25 18:23 ` [gentoo-dev] [PATCH 04/15] unpacker.eclass: Remove support for EAPI 5 Michał Górny
2022-09-25 18:23 ` [gentoo-dev] [PATCH 05/15] unpacker.eclass: Use bash substitution instead of tr for lowercase Michał Górny
2022-09-25 18:23 ` [gentoo-dev] [PATCH 06/15] unpacker.eclass: Use lowercase in unpacker_src_uri_depends Michał Górny
2022-09-25 21:04 ` John Helmert III
2022-09-25 21:06 ` John Helmert III
2022-09-25 18:23 ` [gentoo-dev] [PATCH 07/15] unpacker.eclass: Remove uppercase RAR/LHA variants Michał Górny
2022-09-25 18:23 ` [gentoo-dev] [PATCH 08/15] unpacker.eclass: Move decompressor recognition into a function Michał Górny
2022-09-25 18:23 ` [gentoo-dev] [PATCH 09/15] unpacker.eclass: Add support for .lz4 and .lzo compression Michał Górny
2022-09-25 18:23 ` [gentoo-dev] [PATCH 10/15] unpacker.eclass: Add on-the-fly .gpkg.tar unpacking support Michał Górny
2022-09-25 18:23 ` [gentoo-dev] [PATCH 11/15] sys-kernel/gentoo-kernel-bin: Use unpacker.eclass for .gpkg.tar Michał Górny
2022-09-25 18:23 ` [gentoo-dev] [PATCH 12/15] unpacker.eclass: decompress xz in parallel Michał Górny
2022-09-25 18:23 ` [gentoo-dev] [PATCH 13/15] unpacker.eclass: Support lbzip2 as parallel bz2 decompressor Michał Górny
2022-09-25 18:23 ` [gentoo-dev] [PATCH 14/15] unpacker.eclass: Fix handling GNU ar archives in hand-weaved impl Michał Górny
2022-09-25 18:23 ` Michał Górny [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220925182317.1559529-16-mgorny@gentoo.org \
--to=mgorny@gentoo.org \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox