Update to rpm2cpio 1.4
It is now a thin shell script wrapper around bsdtar. OK sthen
This commit is contained in:
parent
3744c60790
commit
679a6d289d
@ -1,27 +1,21 @@
|
||||
# $OpenBSD: Makefile,v 1.16 2019/07/12 20:43:52 sthen Exp $
|
||||
# $OpenBSD: Makefile,v 1.17 2020/03/21 11:07:38 kn Exp $
|
||||
|
||||
COMMENT= rpm2cpio converter in Perl
|
||||
COMMENT= convert .rpm files to cpio format
|
||||
|
||||
DISTNAME= rpm2cpio-1.3
|
||||
DISTNAME= rpm2cpio-1.4
|
||||
CATEGORIES= converters archivers
|
||||
|
||||
REVISION= 2
|
||||
|
||||
HOMEPAGE= http://www.freebsd.org/cgi/cvsweb.cgi/ports/archivers/rpm2cpio/
|
||||
HOMEPAGE= https://svnweb.freebsd.org/ports/archivers/rpm2cpio/
|
||||
|
||||
# BSD
|
||||
PERMIT_PACKAGE= Yes
|
||||
|
||||
DISTFILES= # empty
|
||||
|
||||
RUN_DEPENDS= archivers/bzip2 \
|
||||
archivers/xz
|
||||
RUN_DEPENDS= archivers/libarchive>2.8
|
||||
|
||||
# don't extract, don't build. Install the script directly
|
||||
EXTRACT_ONLY= # empty
|
||||
NO_BUILD= Yes
|
||||
NO_TEST= Yes
|
||||
PKG_ARCH= *
|
||||
|
||||
do-install:
|
||||
${INSTALL_SCRIPT} ${FILESDIR}/rpm2cpio ${PREFIX}/bin
|
||||
|
@ -1,98 +1,15 @@
|
||||
#!/usr/bin/perl -w
|
||||
#!/bin/sh
|
||||
|
||||
# Copyright (C) 1997,1998,1999, Roger Espel Llima
|
||||
# Copyright (C) 2000, Sergey Babkin
|
||||
# Copyright (C) 2009, Alex Kozlov
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and any associated documentation files (the "Software"), to
|
||||
# deal in the Software without restriction, including without limitation the
|
||||
# rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# SOFTWARE'S COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE
|
||||
# NB! needs bsdtar/libarchive v2.8+
|
||||
|
||||
# (whew, that's done!)
|
||||
if [ $# -eq 0 -a ! -t 0 ]; then
|
||||
f=/dev/stdin
|
||||
elif [ $# -eq 1 ]; then
|
||||
f=$1
|
||||
else
|
||||
echo Usage: rpm2cpio [file.rpm]
|
||||
echo dumps the contents to stdout as a GNU cpio archive
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# why does the world need another rpm2cpio? because the existing one
|
||||
# won't build unless you have half a ton of things that aren't really
|
||||
# required for it, since it uses the same library used to extract RPM's.
|
||||
# in particular, it won't build on the HPsUX box i'm on.
|
||||
|
||||
use strict;
|
||||
|
||||
my ($f, $rpm, $filter) = ();
|
||||
|
||||
if ($#ARGV == -1) {
|
||||
$f = "STDIN";
|
||||
} elsif ($#ARGV == 0) {
|
||||
open($f, "< $ARGV[0]") or die "Can't read file $ARGV[0]\n";
|
||||
} else {
|
||||
print "rpm2cpio v1.3, perl version by orabidoo\n";
|
||||
print "use: rpm2cpio [file.rpm]\n";
|
||||
print "dumps the contents to stdout as a GNU cpio archive\n";
|
||||
exit 0;
|
||||
}
|
||||
|
||||
read $f, $rpm, 96;
|
||||
|
||||
my ($magic, $major, undef) = unpack("NCC", $rpm);
|
||||
|
||||
die "Not an RPM\n" if $magic != 0xedabeedb;
|
||||
die "Not a version 3 or 4 RPM\n" if $major != 3 and $major != 4;
|
||||
|
||||
read $f, $rpm, 16 or die "No header\n";
|
||||
while(1) {
|
||||
($magic, undef, my $sections, my $bytes) = unpack("N4", $rpm);
|
||||
my ($smagic, $smagic2) = unpack("nN", $rpm);
|
||||
|
||||
#printf(STDERR "0x%x 0x%x 0x%x 0x%x 0x%x\n",
|
||||
# tell($f)-16, $magic, $sections, $bytes, $smagic);
|
||||
|
||||
if ($smagic == 0x1f8b) {
|
||||
$filter = "gzip -cd";
|
||||
last;
|
||||
}
|
||||
# BZh
|
||||
if ($smagic == 0x425a and ($smagic2 & 0xff000000) == 0x68000000) {
|
||||
$filter = "bzip2 -cd";
|
||||
last;
|
||||
}
|
||||
# 0xFD, '7zXZ', 0x0
|
||||
if ($smagic == 0xfd37 and $smagic2 == 0x7a585a00) {
|
||||
$filter = "xz -cd";
|
||||
last;
|
||||
}
|
||||
# assume lzma if there is no sig
|
||||
if ($magic != 0x8eade801) {
|
||||
$filter = "lzma -cd";
|
||||
last;
|
||||
}
|
||||
|
||||
# skip the headers
|
||||
seek $f, 16 * $sections + $bytes, 1 or die "File is too small\n";
|
||||
do {
|
||||
read $f, $rpm, 1 or die "No header\n" ;
|
||||
} while(0 == unpack("C", $rpm));
|
||||
read $f, $rpm, 15, 1 or die "No header\n" ;
|
||||
}
|
||||
|
||||
open(ZCAT, "| $filter") or die "can't pipe to $filter\n";
|
||||
|
||||
while($rpm ne '') {
|
||||
print ZCAT $rpm;
|
||||
read $f, $rpm, 10240; # read in blocks
|
||||
}
|
||||
|
||||
close ZCAT;
|
||||
close $f;
|
||||
bsdtar cf - --format=newc @- < ${f}
|
||||
|
@ -1,4 +1,7 @@
|
||||
Rpm archives are actually cpio archive disguised behind another header.
|
||||
Convert .rpm files to cpio format.
|
||||
|
||||
Rpm2cpio is a simple perl filter that strips this header, without
|
||||
having to install the whole rpm program.
|
||||
Why does the world need another rpm2cpio? because the existing one
|
||||
won't build unless you have half a ton of things that aren't really
|
||||
required for it, since it uses the same library used to extract RPM's.
|
||||
|
||||
This version is just a tiny wrapper around bsdtar.
|
||||
|
Loading…
Reference in New Issue
Block a user