Как я могу извлечь содержимое оборотах?
у меня есть RPM и я хочу относиться к нему как архив. Я хочу извлечь содержимое в каталог, чтобы я мог проверить содержимое. Я знаком с командами запроса удаленного пакета. Я не просто хочу список содержимого rpm. то есть
$ rpm -qpl foo.rpm
Я хочу проверить содержимое нескольких файлов, содержащихся в rpm. Я не хочу устанавливать rpm. Я также знаю о возможности RPM делать дополнительные модификации в %post разделы, и как их проверить. то есть
$ rpm -qp --scripts foo.rpm
однако в данном случае это меня не касается.
13 ответов:
вы пробовали
rpm2cpiocommmand? Смотрите пример ниже:$ 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
$ mkdir packagecontents; cd packagecontents $ rpm2cpio ../foo.rpm | cpio -idmv $ find .Для справки: аргументы cpio являются
-i = extract -d = make directories -m = preserve modification time -v = verboseЯ нашел ответ здесь: lontar по
для тех, у кого нет rpm2cpio, вот древний rpm2cpio.sh сценарий что извлекает полезные данные из *.rpm-пакет.
Перепечатано для потомков ... и следующего поколения.
вызвать вот так: ./rpm2cpio.sh .rpm | cpio-dimv
#!/bin/sh pkg= 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 \* + \) + \) + ` dl=`expr 256 \* \( 256 \* \( 256 \* + \) + \) + ` # 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 \* + \) + \) + ` dl=`expr 256 \* \( 256 \* \( 256 \* + \) + \) + ` # 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
иногда вы можете столкнуться с проблемой с промежуточным архивом RPM:
cpio: неправильное число
cpio: неправильное число
cpio: неправильное число
. . .
cpio: преждевременный конец архиваэто означает, что он может быть упакован, в эти дни это сжатие LZMA2, как обычно, по
xz:rpm2cpio <file>.rpm | xz -d | cpio -idmvв противном случае вы могли бы попробовать:
rpm2cpio <file>.rpm | lzma -d | cpio -idmv
большинство дистрибутивов установили графический интерфейс приложения file-roller который распаковывает tar, zip, rpm и многое другое.
file-roller --extract-here package.rpmЭто позволит извлечь содержимое в текущем каталоге.
мощный текстовый файловый менеджер mc (Midnight Commander, смутно напоминающий Norton Commander о старых временах DOS) имеет встроенную возможность проверки и распаковки .об / мин,.rpms файлы, просто "открыть".rpm (s) файл в mc и выберите
CONTENTS.cpio: для rpm вы получаете доступ к дереву установки, для RPM вы получаете доступ к нему .файл спецификации и все исходные пакеты.
для отладки / проверки Вашего rpm я предлагаю использовать красная линия который является java-программой
использование :
java -cp redline-1.2.1-jar-with-dependencies.jar org.redline_rpm.Scanner foo.rpm
в NixOS, есть
rpmextract. Это обертка вокруг rpm2cpio, точно так, как хотел @Alan Evangelista. https://github.com/NixOS/nixpkgs/tree/master/pkgs/tools/archivers/rpmextract
в openSUSE, по крайней мере,
unrpmкоманда поставляется сbuildпакета.в подходящем каталоге (потому что это архивная бомба):
unrpm file.rpm
скопировать .rpm-файл в отдельной папке, затем выполните следующую команду $ yourfile.rpm | cpio-idmv
тест " декомпрессия "терпит неудачу на CygWin, одной из самых потенциально полезных платформ для него, из-за проверки" grep "на" xz " с учетом регистра. Результатом проверки" сжатие: "является:
COMPRESSION='/dev/stdin: XZ compressed data'просто заменив 'команда grep -Q' с 'Команда grep -Q-я повсюду, кажется, чтобы решить проблему хорошо.
Я сделал несколько обновлений, в частности, добавив некоторые комментарии и используя "case" вместо сложенных операторов "if", и включил это исправление ниже
#!/bin/sh # # rpm2cpio.sh - extract 'cpio' contents of RPM # # Typical usage: rpm2cpio.sh rpmname | cpio -idmv # if [ "$# -ne 1" ]; then echo "Usage: file.rpm" 1>&2 exit 1 fi rpm="" 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 \* + \) + \) + ` dl=`expr 256 \* \( 256 \* \( 256 \* + \) + \) + ` # 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 \* + \) + \) + ` dl=`expr 256 \* \( 256 \* \( 256 \* + \) + \) + ` # 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
7-zip понимает большинство видов архивов, в том числе об / мин и включенных команды cpio.
Comments