descomprimir linux package rpm system-administration

linux - descomprimir - ¿Cómo extraigo el contenido de un rpm?



descomprimir rpm centos 7 (12)

¡También puede hacer tar -xvf <rpm file> también!

Tengo un rpm y quiero tratarlo como un tarball. Quiero extraer los contenidos en un directorio para poder inspeccionar los contenidos. Estoy familiarizado con los comandos de consulta de un paquete desinstalado. No quiero simplemente una lista de los contenidos de las rpm. es decir

$ rpm -qpl foo.rpm

Quiero inspeccionar el contenido de varios archivos contenidos en las rpm. No quiero instalar las rpm. También estoy al tanto de la capacidad de rpms para hacer modificaciones adicionales en las secciones de% post, y cómo verificarlas. es decir

$ rpm -qp --scripts foo.rpm

Sin embargo, en este caso, eso no me concierne.


¿Has rpm2cpio el rpm2cpio rpm2cpio? Vea el ejemplo a continuación:

$ 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


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

cpio: número mal formado
cpio: número mal formado
cpio: número mal formado
. . .
cpio: final prematuro del archivo

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

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

de lo contrario, podrías intentarlo:

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


Copie el archivo .rpm en una carpeta separada y luego ejecute el siguiente comando $ yourfile.rpm | cpio -idmv


El poderoso administrador de archivos basado en texto mc (Midnight Commander, recordando vagamente al Norton Commander de los viejos tiempos de DOS) tiene la capacidad incorporada de inspeccionar y desempacar archivos .rpm y .rpms, simplemente "abre" el archivo .rpm (s) dentro de mc y seleccione CONTENTS.cpio : para un rpm, obtiene acceso al árbol de instalación, para un rpms, obtiene acceso al archivo .spec y a todos los paquetes fuente.



En OpenSuse al menos, el comando unrpm viene con el paquete de build .

En un directorio adecuado (porque esta es una bomba de archivo):

unrpm file.rpm


La mayoría de las distribuciones han instalado el rodillo de archivos de la aplicación GUI que descomprime tar, zip, rpm y muchos más.

file-roller --extract-here package.rpm

Esto extraerá los contenidos en el directorio actual.


La prueba "DECOMPRESSION" falla en CygWin, una de las plataformas potencialmente más potentes para ella, debido a la comprobación "grep" de "xz" que distingue entre mayúsculas y minúsculas. El resultado de la comprobación de "COMPRESIÓN:" es:

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

Simplemente reemplazar ''grep -q'' con ''grep -q -i'' en todas partes parece resolver bien el problema.

He hecho algunas actualizaciones, particularmente agregando algunos comentarios y usando "caso" en lugar de declaraciones "si" apiladas, e incluí esa corrección a continuación

#!/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


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

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

Invoque de esta manera: ./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



$ 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