GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo extraigo el contenido de un rpm?

Para aquellos que no tienen rpm2cpio, aquí está el antiguo script rpm2cpio.sh que extrae la carga útil de un paquete *.rpm.

Publicado para la posteridad... y la próxima generación.

Invoque así:./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

A veces puede encontrar un problema con el archivo RPM intermedio:

cpio:Número malformado
cpio:Número malformado
cpio:Número malformado
. . .
cpio:finalización prematura del archivo

Eso significa que podría estar empaquetado, en estos días es compresión LZMA2 como de costumbre, por xz :

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

de lo contrario, podría intentar:

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

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

Para referencia:los argumentos cpio son

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

Encontré la respuesta aquí:la respuesta de lontar


¿Probaste el rpm2cpio? comando? Vea el siguiente ejemplo:

$ 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. Cómo llegó Linux al mainframe

  2. Cómo construir paquetes rpm

  3. ¿Cómo extraer solo el contenido sin procesar de una sección ELF?

  4. ¿Cómo saber el valor de la macro incorporada en RPM?

  5. ¿Cómo borrar el contenido de un archivo desde la línea de comando?

Cómo usar el comando RPM (con ejemplos)

Cómo enumerar el contenido de un paquete en Linux

Cómo ver el contenido de un archivo o archivo comprimido en Linux

Cómo instalar Spotify en Fedora 23 de forma sencilla

Cómo configurar el nombre de host bonito

Cómo usar el comando RPM en Linux