GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie entpacke ich den Inhalt einer RPM?

Für diejenigen, die rpm2cpio nicht haben, hier ist das alte rpm2cpio.sh-Skript, das die Nutzdaten aus einem *.rpm-Paket extrahiert.

Reposted für die Nachwelt … und die nächste Generation.

Rufen Sie wie folgt auf:./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

Manchmal kann ein Problem mit dem RPM-Zwischenarchiv auftreten:

cpio:Fehlerhafte Nummer
cpio:Fehlerhafte Nummer
cpio:Fehlerhafte Nummer
. . .
cpio:vorzeitiges Ende des Archivs

Das heißt, es könnte gepackt werden, heutzutage ist es wie üblich LZMA2-Komprimierung, von xz :

rpm2cpio <file>.rpm | xz -d | cpio -idmv

Andernfalls könnten Sie Folgendes versuchen:

rpm2cpio <file>.rpm | lzma -d | cpio -idmv

$ mkdir packagecontents; cd packagecontents
$ rpm2cpio ../foo.rpm | cpio -idmv
$ find . 

Als Referenz:Die cpio-Argumente sind

-i = extract
-d = make directories
-m = preserve modification time
-v = verbose

Ich habe die Antwort hier drüben gefunden:lontar's answer


Haben Sie die rpm2cpio versucht Befehl? Siehe das Beispiel unten:

$ 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 

Linux
  1. Wie Linux auf den Mainframe kam

  2. Wie man RPM-Pakete baut

  3. So extrahieren Sie die tar.gz-Datei in Linux mithilfe der Befehlszeile

  4. So erstellen Sie ein Linux-RPM-Paket

  5. So extrahieren Sie das RPM-Paket, ohne es zu installieren

Verwendung des RPM-Befehls (mit Beispielen)

So listen Sie den Inhalt eines Pakets in Linux auf

So zeigen Sie den Inhalt eines Archivs oder einer komprimierten Datei unter Linux an

So installieren Sie Spotify auf Fedora 23 auf einfache Weise

So richten Sie den Pretty Hostnamen ein

So verwenden Sie den RPM-Befehl unter Linux