it-swarm.com.de

Wie extrahiere ich den Inhalt einer Drehzahl?

Ich habe ein U/min und möchte es wie ein Tarball behandeln. Ich möchte den Inhalt in ein Verzeichnis extrahieren, damit ich den Inhalt überprüfen kann. Ich bin mit den Abfragebefehlen eines deinstallierten Pakets vertraut. Ich möchte nicht einfach eine Liste des Inhalts der RPM. d.h.

$ rpm -qpl foo.rpm

Ich möchte den Inhalt mehrerer Dateien überprüfen, die im RPM enthalten sind. Ich möchte das RPM nicht installieren. Ich kenne auch die Fähigkeit von RPMS, zusätzliche Modifikationen in den% post-Abschnitten vorzunehmen, und darüber, wie ich diese prüfen kann. d.h.

$ rpm -qp --scripts foo.rpm

In diesem Fall ist mir das aber egal.

124
Jeff Sheffield

Haben Sie den Befehl rpm2cpio ausprobiert? 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 
160
linux_fanatic
$ mkdir packagecontents; cd packagecontents
$ rpm2cpio ../foo.rpm | cpio -idmv
$ find . 

Zur Information: die Argumente von cpio sind

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

Ich habe die Antwort hier gefunden: Lontars Antwort

61
Jeff Sheffield

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

Für die Nachwelt… und für die nächste Generation neu aufgestellt.

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
28
Jeff Johnson

Manchmal kann es zu Problemen mit dem RPM-Zwischenarchiv kommen:

cpio: Missgebildete Nummer
cpio: Missgebildete Nummer
cpio: Missgebildete Nummer
. . .
cpio: vorzeitiges Archivende 

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

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

sonst könntest du versuchen:

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

Die meisten Distributionen haben die GUI-App file-roller installiert, die tar, Zip, rpm und viele mehr entpackt.

file-roller --extract-here package.rpm

Dadurch werden die Inhalte im aktuellen Verzeichnis extrahiert.

5
erik

Der leistungsstarke, textbasierte Dateimanager mc (Midnight Commander, der Norton Commander vage an alte DOS-Zeiten erinnert) verfügt über die integrierte Funktion zum Überprüfen und Entpacken von .rpm- und .rpms-Dateien. Öffnen Sie die .rpm-Datei einfach (s) Datei innerhalb von mc und wählen Sie CONTENTS.cpio: Für ein RPM erhalten Sie Zugriff auf den Installationsbaum. Für ein RPM erhalten Sie Zugriff auf die SPEC-Datei und alle Quellpakete.

4
Davide Cesari

Sie können auch einfach tar -xvf <rpm file> tun!

2
Melissa

Um Ihr RPM zu debuggen oder zu überprüfen, schlage ich vor, redline zu verwenden, ein Java-Programm

Verwendungszweck :

Java -cp redline-1.2.1-jar-with-dependencies.jar org.redline_rpm.Scanner foo.rpm

Download: https://github.com/craigwblake/redline/releases

2

In NixOS gibt es rpmextract. Es ist ein Wrapper für rpm2cpio, genau wie @Alan Evangelista es wollte . https://github.com/NixOS/nixpkgs/tree/master/pkgs/tools/archivers/rpmextract

1
user7610

7-Zip versteht die meisten Arten von Archiven, einschließlich RPM und dem mitgelieferten cpio.

1
Jan Hudec

Zumindest in OpenSuse wird der Befehl unrpm mit dem Paket build geliefert.

In einem geeigneten Verzeichnis (weil dies eine Archivbombe ist):

unrpm file.rpm
0
user2394284

Kopieren Sie die RPM-Datei in einen separaten Ordner und führen Sie den folgenden Befehl aus $ Yourfile.rpm | cpio -idmv

0
apurbojha

Der Test "DECOMPRESSION" schlägt auf CygWin, einer der potentiell nützlichsten Plattformen dafür, fehl, weil die "grep" -Prüfung auf "xz" die Groß- und Kleinschreibung berücksichtigt. Das Ergebnis der Prüfung "COMPRESSION:" lautet:

COMPRESSION='/dev/stdin: XZ compressed data'

Das einfache Ersetzen von 'grep -q' durch 'grep -q -i' scheint das Problem zu lösen.

Ich habe ein paar Updates vorgenommen, insbesondere einige Kommentare hinzugefügt und "case" anstelle von gestapelten "if" -Anweisungen verwendet, und diesen Fix unten hinzugefügt

#!/bin/sh
#
# rpm2cpio.sh - extract 'cpio' contents of RPM
#
# Typical usage: rpm2cpio.sh rpmname | cpio -idmv
#

if [ "$# -ne 1" ]; then
    echo "Usage: $0 file.rpm" 1>&2
    exit 1
fi

rpm="$1"
if [ -e "$rpm" ]; then
    echo "Error: missing $rpm"
fi


leadsize=96
o=`expr $leadsize + 8`
set `od -j $o -N 8 -t u1 $rpm`
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 $rpm`
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=$rpm ibs=$o skip=1"

COMPRESSION=`($EXTRACTOR |file -) 2>/dev/null`
DECOMPRESSOR="cat"

case $COMPRESSION in
    *gzip*|*GZIP*)
        DECOMPRESSOR=gunzip
        ;;
    *bzip2*|*BZIP2*)
        DECOMPRESSOR=bunzip2
        ;;
    *xz*|*XZ*)
        DECOMPRESSOR=unxz
        ;;
    *cpio*|*cpio*)
        ;;
    *)
        # 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="$DECOMPRESSOR"
                ;;
            *)
                DECOMPRESSOR=`which lzmash 2>/dev/null`
                case "$DECOMPRESSOR" in
                    /* )
                        DECOMPRESSOR="lzmash -d -c"
                        ;;
                    *  )
                        echo "Warning: DECOMPRESSOR not found, assuming 'cat'" 1>&2
                        ;;
                esac
                ;;
        esac
esac

$EXTRACTOR 2>/dev/null | $DECOMPRESSOR
0