GNU/Linux >> Tutoriels Linux >  >> Linux

Comment extraire le contenu d'un rpm ?

Pour ceux qui n'ont pas rpm2cpio, voici l'ancien script rpm2cpio.sh qui extrait la charge utile d'un package *.rpm.

Republié pour la postérité… et la prochaine génération.

Invoquez comme ceci :./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

Parfois, vous pouvez rencontrer un problème avec l'archive RPM intermédiaire :

cpio :numéro malformé
cpio :numéro malformé
cpio :numéro malformé
. . .
cpio :fin d'archive prématurée

Cela signifie qu'il pourrait être compressé, ces jours-ci c'est la compression LZMA2 comme d'habitude, par xz :

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

sinon tu peux essayer :

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

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

Pour référence :les arguments cpio sont

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

J'ai trouvé la réponse ici :la réponse de lontar


Avez-vous essayé le rpm2cpio commande ? Voir l'exemple ci-dessous :

$ 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. Comment Linux est arrivé sur le mainframe

  2. Comment créer des paquets rpm

  3. Comment extraire uniquement le contenu brut d'une section ELF ?

  4. Comment connaître la valeur de la macro intégrée dans RPM ?

  5. Comment afficher le contenu du fichier de manière récursive ?

Comment utiliser la commande RPM (avec exemples)

Comment lister le contenu d'un paquet sous Linux

Comment afficher le contenu d'une archive ou d'un fichier compressé sous Linux

Comment installer Spotify sur Fedora 23 en toute simplicité

Comment configurer le joli nom d'hôte

Comment utiliser la commande RPM sous Linux