Подтвердить что ты не робот

Как извлечь содержимое rpm?

У меня есть rpm, и я хочу рассматривать его как tarball. Я хочу извлечь содержимое в каталог, чтобы я мог проверить содержимое. Я знаком с командами запросов на удаленный пакет. Мне не нужен список содержимого rpm. то есть.

$ rpm -qpl foo.rpm

Я хочу проверить содержимое нескольких файлов, содержащихся в rpm. Я не хочу устанавливать rpm. Я также знаю о возможности rpms делать дополнительные модификации в разделах% post и как их проверять. то есть.

$ rpm -qp --scripts foo.rpm

Однако в этом случае это меня не касается.

4b9b3361

Ответ 1

Вы попробовали комманду rpm2cpio? См. Пример ниже:

$ 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 

Ответ 2

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

Для справки: аргументы cpio

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

Я нашел ответ здесь: lontar answer

Ответ 3

Для тех, у кого нет rpm2cpio, вот древний rpm2cpio.sh script который извлекает полезную нагрузку из пакета *.rpm.

Отправлено для потомков... и следующего поколения.

Вызываем следующее:    . /rpm 2cpio.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

Ответ 4

Иногда вы можете столкнуться с проблемой с промежуточным архивом RPM:

cpio: неверное число
cpio: неверный номер
cpio: неверный номер
   ,.
cpio: преждевременный конец архива

Это означает, что он может быть упакован, в настоящее время это сжатие LZMA2, как обычно, на xz:

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

в противном случае вы могли бы попробовать:

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

Ответ 5

В большинстве дистрибутивов установлено графическое приложение file-roller, которое распаковывает tar, zip, rpm и многие другие.

file-roller --extract-here package.rpm

Это приведет к извлечению содержимого в текущем каталоге.

Ответ 6

Вы также можете просто сделать tar -xvf <rpm file>!

Ответ 7

Мощный текстовый файловый менеджер mc (Midnight Commander, смутно напоминающий команду Norton Commander из старых DOS) имеет встроенную возможность проверки и распаковки файлов .rpm и .rpms, просто "откройте" файл .rpm(s) в mc и выберите CONTENTS.cpio: для rpm вы получите доступ к дереву установки, для rpms вы получите доступ к файлу .spec и всем исходным пакетам.

Ответ 8

7-zip понимает большинство видов архивов, включая rpm и включенный cpio.

Ответ 9

Для отладки/проверки ваших rpm я предлагаю использовать redline, который представляет собой java-программу

Использование:

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

Загрузить: https://github.com/craigwblake/redline/releases

Ответ 11

Тест "DECOMPRESSION" терпит неудачу на CygWin, одной из наиболее полезных для него платформ, из-за проверки "grep" для "xz", чувствительной к регистру. Результат проверки "COMPRESSION:":

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

Просто замена grep -q на "grep -q -i" повсеместно помогает решить проблему.

Я сделал несколько обновлений, особенно добавляя некоторые комментарии и используя "случай" вместо уложенных "if" операторов, и включил это исправление ниже

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

Ответ 12

В OpenSuse, по крайней мере, команда unrpm поставляется с пакетом build.

В подходящей директории (потому что это архивная бомба):

unrpm file.rpm

Ответ 13

Скопируйте файл .rpm в отдельную папку, затем выполните следующую команду $ yourfile.rpm | cpio -idmv

Ответ 14

7-Zip умеет извлекать содержимое. Он работает так же, как файл tar.gz. Сжатый файл внутри сжатого файла.

В Windows 7 Pro с установленным 7-Zip:

Щелкните правой кнопкой мыши файл rpm. Наведите курсор мыши на 7-Zip в контекстном меню. Выберите извлечение в "имя файла".

Войдите в папку с именем файла.

Щелкните правой кнопкой мыши файл cpio. Наведите курсор мыши на 7-Zip в контекстном меню. Выберите извлечение в "имя файла".

Вы сделали. Папка с именем "filename" содержит извлеченное содержимое для проверки.

Я знаю, что вы, ребята из Linux, презираете, что все стало проще, но в конечном итоге, если вам придется потратить время на поиск решения простой проблемы, подобной этой; эта неэффективность стоит вам денег.

Учитывая тот факт, что вы, ребята из Linux, презираете эффективную простоту, я очень сомневаюсь, что версия 7-Zip для Linux будет делать то же самое точно так же.

Зачем делать это легко, если вы можете сделать глупость и заявить о себе как о гении в то же время?

Просто быть чистым; Я не фанат Windows. Я на самом деле смотрю на переход на Linux. Я просто не мог удержаться от возможности втирать в ваши лица то, что разработчики Windows считают здравым смыслом и лучшими практиками для разработчиков.

Просто будь рад, если я это опубликую, а рядом с тобой не стоит Марк Хармон; Специальный агент Леруа Джетро Гиббс сделал бы тебе пощечину за то, что не использовал свою голову.

Я не знаю, какое правило Гиббса это, но правило таково: Не усложняйте для себя вещи, чем они должны быть.

Теперь мы увидим, кому нужно взять отпуск. Береги себя!