GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara mengekstrak isi rpm?

Bagi mereka yang tidak memiliki rpm2cpio, berikut adalah skrip rpm2cpio.sh kuno yang mengekstrak muatan dari paket *.rpm.

Diposting ulang untuk anak cucu … dan generasi berikutnya.

Aktifkan seperti ini:./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

Terkadang Anda dapat mengalami masalah dengan arsip RPM perantara:

cpio:Nomor salah
cpio:Nomor salah
cpio:Nomor salah
. . .
cpio:akhir prematur dari arsip

Artinya bisa dikemas, hari ini kompresi LZMA2 seperti biasa, dengan xz :

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

jika tidak, Anda dapat mencoba:

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

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

Untuk Referensi:argumen cpio adalah

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

Saya menemukan jawabannya di sini:jawaban lontar


Apakah Anda mencoba rpm2cpio perintah? Lihat contoh di bawah:

$ 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. Bagaimana Linux datang ke mainframe

  2. Cara membuat paket rpm

  3. Bagaimana cara mendapatkan konten halaman web dalam variabel Shell?

  1. Cara Mengekstrak File tar.gz di Linux dengan Menggunakan Command Line

  2. Cara membuat paket RPM Linux

  3. Bagaimana cara menghapus konten file dari baris perintah?

  1. Cara mengekstrak paket RPM tanpa menginstalnya

  2. Bagaimana cara mengekstrak hanya konten mentah dari bagian ELF?

  3. Bagaimana cara mengetahui nilai built-in macro di RPM?