You can use rpm command (rpm command) itself to list the files inside a RPM package. rpm is a powerful Package Manager, which can be used to build, install, query, verify, update, and erase individual software packages.
To do that, you can use the rpm2cpio conversion tool. The rpm2cpio tool extracts the content of a source or binary RPM in the form of a CPIO, not a TAR, archive. The rpm2cpio output is written to the standard output and usually piped into the cpio command.
Debian and RPM packages don't contain source code, only the compiled result. However, you can fetch the source packages - SRPMS, or the Debian description, patch, and original tarball.
In some rare instances in which you can't use the RPM command to install the Linux Network License Manager [NLM], you can actually download the file on a Windows computer and use 7-zip to open and extract it.
Did you try the rpm2cpio
commmand? See the example below:
$ rpm2cpio php-5.1.4-1.esp1.x86_64.rpm | cpio -idmv
/etc/httpd/conf.d/php.conf
./etc/php.d
./etc/php.ini
./usr/bin/php
./usr/bin/php-cgi
etc
$ mkdir packagecontents; cd packagecontents
$ rpm2cpio ../foo.rpm | cpio -idmv
$ find .
For Reference: the cpio arguments are
-i = extract
-d = make directories
-m = preserve modification time
-v = verbose
I found the answer over here: lontar's answer
For those who do not have rpm2cpio, here is the ancient rpm2cpio.sh script that extracts the payload from a *.rpm package.
Reposted for posterity … and the next generation.
Invoke like this: ./rpm2cpio.sh .rpm | cpio -dimv
#!/bin/sh
pkg=$1
if [ "$pkg" = "" -o ! -e "$pkg" ]; then
echo "no package supplied" 1>&2
exit 1
fi
leadsize=96
o=`expr $leadsize + 8`
set `od -j $o -N 8 -t u1 $pkg`
il=`expr 256 \* \( 256 \* \( 256 \* $2 + $3 \) + $4 \) + $5`
dl=`expr 256 \* \( 256 \* \( 256 \* $6 + $7 \) + $8 \) + $9`
# echo "sig il: $il dl: $dl"
sigsize=`expr 8 + 16 \* $il + $dl`
o=`expr $o + $sigsize + \( 8 - \( $sigsize \% 8 \) \) \% 8 + 8`
set `od -j $o -N 8 -t u1 $pkg`
il=`expr 256 \* \( 256 \* \( 256 \* $2 + $3 \) + $4 \) + $5`
dl=`expr 256 \* \( 256 \* \( 256 \* $6 + $7 \) + $8 \) + $9`
# echo "hdr il: $il dl: $dl"
hdrsize=`expr 8 + 16 \* $il + $dl`
o=`expr $o + $hdrsize`
EXTRACTOR="dd if=$pkg ibs=$o skip=1"
COMPRESSION=`($EXTRACTOR |file -) 2>/dev/null`
if echo $COMPRESSION |grep -q gzip; then
DECOMPRESSOR=gunzip
elif echo $COMPRESSION |grep -q bzip2; then
DECOMPRESSOR=bunzip2
elif echo $COMPRESSION |grep -iq xz; then # xz and XZ safe
DECOMPRESSOR=unxz
elif echo $COMPRESSION |grep -q cpio; then
DECOMPRESSOR=cat
else
# Most versions of file don't support LZMA, therefore we assume
# anything not detected is LZMA
DECOMPRESSOR=`which unlzma 2>/dev/null`
case "$DECOMPRESSOR" in
/* ) ;;
* ) DECOMPRESSOR=`which lzmash 2>/dev/null`
case "$DECOMPRESSOR" in
/* ) DECOMPRESSOR="lzmash -d -c" ;;
* ) DECOMPRESSOR=cat ;;
esac
;;
esac
fi
$EXTRACTOR 2>/dev/null | $DECOMPRESSOR
Sometimes you can encounter an issue with intermediate RPM archive:
cpio: Malformed number
cpio: Malformed number
cpio: Malformed number
. . .
cpio: premature end of archive
That means it could be packed, these days it is LZMA2 compression as usual, by xz
:
rpm2cpio <file>.rpm | xz -d | cpio -idmv
otherwise you could try:
rpm2cpio <file>.rpm | lzma -d | cpio -idmv
Most distributions have installed the GUI app file-roller which unpacks tar, zip, rpm and many more.
file-roller --extract-here package.rpm
This will extract the contents in the current directory.
7-zip understands most kinds of archives, including rpm and the included cpio.
You can simply do tar -xvf <rpm file>
as well!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With