Message ID | 20230526140640.30724-1-aplanas@suse.com |
---|---|
State | New |
Headers | show |
Series | rpm2cpio.sh: update to the last 4.x version | expand |
This seems to regress building ctapi-common recipe from meta-oe https://errors.yoctoproject.org/Errors/Details/705227/ On Fri, May 26, 2023 at 7:06 AM Alberto Planas via lists.openembedded.org <aplanas=suse.com@lists.openembedded.org> wrote: > > From: Alberto Planas <aplanas@suse.com> > > openSUSE RPMs are compressing the RPM payload using zstd, that > correspond to the magic ID 0x28, 0xb5, 0x2f. > > This patch update the script to the last version from the rpm project, > and add support to this compression format, and extract the cpio payload > using the "unzstd" binary. > > Signed-off-by: Alberto Planas <aplanas@suse.com> > --- > scripts/rpm2cpio.sh | 30 ++++++++++++++++++++---------- > 1 file changed, 20 insertions(+), 10 deletions(-) > mode change 100755 => 100644 scripts/rpm2cpio.sh > > diff --git a/scripts/rpm2cpio.sh b/scripts/rpm2cpio.sh > old mode 100755 > new mode 100644 > index 2034373fe4..8199b43784 > --- a/scripts/rpm2cpio.sh > +++ b/scripts/rpm2cpio.sh > @@ -7,7 +7,7 @@ fatal() { > } > > pkg="$1" > -[ -n "$pkg" -a -e "$pkg" ] || > +[ -n "$pkg" ] && [ -e "$pkg" ] || > fatal "No package supplied" > > _dd() { > @@ -16,14 +16,23 @@ _dd() { > } > > calcsize() { > + > + case "$(_dd $1 bs=4 count=1 | tr -d '\0')" in > + "$(printf '\216\255\350')"*) ;; # '\x8e\xad\xe8' > + *) fatal "File doesn't look like rpm: $pkg" ;; > + esac > + > offset=$(($1 + 8)) > > local i b b0 b1 b2 b3 b4 b5 b6 b7 > > i=0 > while [ $i -lt 8 ]; do > - b=$(_dd $(($offset + $i)) bs=1 count=1; echo X) > - b=${b%X} > + # add . to not loose \n > + # strip \0 as it gets dropped with warning otherwise > + b="$(_dd $(($offset + $i)) bs=1 count=1 | tr -d '\0' ; echo .)" > + b=${b%.} # strip . again > + > [ -z "$b" ] && > b="0" || > b="$(exec printf '%u\n' "'$b")" > @@ -35,7 +44,7 @@ calcsize() { > offset=$(($offset + $rsize)) > } > > -case "$(_dd 0 bs=8 count=1)" in > +case "$(_dd 0 bs=4 count=1 | tr -d '\0')" in > "$(printf '\355\253\356\333')"*) ;; # '\xed\xab\xee\xdb' > *) fatal "File doesn't look like rpm: $pkg" ;; > esac > @@ -46,10 +55,11 @@ sigsize=$rsize > calcsize $(($offset + (8 - ($sigsize % 8)) % 8)) > hdrsize=$rsize > > -case "$(_dd $offset bs=3 count=1)" in > - "$(printf '\102\132')"*) _dd $offset | bzip2 -d ;; # '\x42\x5a' > - "$(printf '\037\213')"*) _dd $offset | gunzip ;; # '\x1f\x8b' > - "$(printf '\375\067')"*) _dd $offset | xzcat ;; # '\xfd\x37' > - "$(printf '\135\000')"*) _dd $offset | unlzma ;; # '\x5d\x00' > - *) fatal "Unrecognized rpm file: $pkg" ;; > +case "$(_dd $offset bs=2 count=1 | tr -d '\0')" in > + "$(printf '\102\132')") _dd $offset | bunzip2 ;; # '\x42\x5a' > + "$(printf '\037\213')") _dd $offset | gunzip ;; # '\x1f\x8b' > + "$(printf '\375\067')") _dd $offset | xzcat ;; # '\xfd\x37' > + "$(printf '\135')") _dd $offset | unlzma ;; # '\x5d\x00' > + "$(printf '\050\265')") _dd $offset | unzstd ;; # '\x28\xb5' > + *) fatal "Unrecognized payload compression format in rpm file: $pkg" ;; > esac > -- > 2.40.1 > > > -=-=-=-=-=-=-=-=-=-=-=- > Links: You receive all messages sent to this group. > View/Reply Online (#181772): https://lists.openembedded.org/g/openembedded-core/message/181772 > Mute This Topic: https://lists.openembedded.org/mt/99150379/1997914 > Group Owner: openembedded-core+owner@lists.openembedded.org > Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [raj.khem@gmail.com] > -=-=-=-=-=-=-=-=-=-=-=- >
> From: Khem Raj <raj.khem@gmail.com> > This seems to regress building ctapi-common recipe from meta-oe > https://errors.yoctoproject.org/Errors/Details/705227/ /bin/sh: line 1: TOPDIR/sources/poky/scripts/rpm2cpio.sh: Permission denied >> mode change 100755 => 100644 scripts/rpm2cpio.sh Indeed. Thanks, good catch. I will update it.
diff --git a/scripts/rpm2cpio.sh b/scripts/rpm2cpio.sh old mode 100755 new mode 100644 index 2034373fe4..8199b43784 --- a/scripts/rpm2cpio.sh +++ b/scripts/rpm2cpio.sh @@ -7,7 +7,7 @@ fatal() { } pkg="$1" -[ -n "$pkg" -a -e "$pkg" ] || +[ -n "$pkg" ] && [ -e "$pkg" ] || fatal "No package supplied" _dd() { @@ -16,14 +16,23 @@ _dd() { } calcsize() { + + case "$(_dd $1 bs=4 count=1 | tr -d '\0')" in + "$(printf '\216\255\350')"*) ;; # '\x8e\xad\xe8' + *) fatal "File doesn't look like rpm: $pkg" ;; + esac + offset=$(($1 + 8)) local i b b0 b1 b2 b3 b4 b5 b6 b7 i=0 while [ $i -lt 8 ]; do - b=$(_dd $(($offset + $i)) bs=1 count=1; echo X) - b=${b%X} + # add . to not loose \n + # strip \0 as it gets dropped with warning otherwise + b="$(_dd $(($offset + $i)) bs=1 count=1 | tr -d '\0' ; echo .)" + b=${b%.} # strip . again + [ -z "$b" ] && b="0" || b="$(exec printf '%u\n' "'$b")" @@ -35,7 +44,7 @@ calcsize() { offset=$(($offset + $rsize)) } -case "$(_dd 0 bs=8 count=1)" in +case "$(_dd 0 bs=4 count=1 | tr -d '\0')" in "$(printf '\355\253\356\333')"*) ;; # '\xed\xab\xee\xdb' *) fatal "File doesn't look like rpm: $pkg" ;; esac @@ -46,10 +55,11 @@ sigsize=$rsize calcsize $(($offset + (8 - ($sigsize % 8)) % 8)) hdrsize=$rsize -case "$(_dd $offset bs=3 count=1)" in - "$(printf '\102\132')"*) _dd $offset | bzip2 -d ;; # '\x42\x5a' - "$(printf '\037\213')"*) _dd $offset | gunzip ;; # '\x1f\x8b' - "$(printf '\375\067')"*) _dd $offset | xzcat ;; # '\xfd\x37' - "$(printf '\135\000')"*) _dd $offset | unlzma ;; # '\x5d\x00' - *) fatal "Unrecognized rpm file: $pkg" ;; +case "$(_dd $offset bs=2 count=1 | tr -d '\0')" in + "$(printf '\102\132')") _dd $offset | bunzip2 ;; # '\x42\x5a' + "$(printf '\037\213')") _dd $offset | gunzip ;; # '\x1f\x8b' + "$(printf '\375\067')") _dd $offset | xzcat ;; # '\xfd\x37' + "$(printf '\135')") _dd $offset | unlzma ;; # '\x5d\x00' + "$(printf '\050\265')") _dd $offset | unzstd ;; # '\x28\xb5' + *) fatal "Unrecognized payload compression format in rpm file: $pkg" ;; esac