나는 rpm을 가지고 있고 그것을 tarball처럼 취급하고 싶다. 내용을 디렉토리로 추출하여 내용을 검사하고 싶습니다. 제거 된 패키지의 쿼리 명령에 익숙합니다. 나는 단순히 rpm의 내용 목록을 원하지 않습니다. 즉
$ rpm -qpl foo.rpm
rpm에 포함 된 여러 파일의 내용을 검사하고 싶습니다. rpm을 설치하고 싶지 않습니다. 또한 % post 섹션에서 추가 수정을 수행 할 수있는 rpms 기능과이를 확인하는 방법도 알고 있습니다. 즉
$ rpm -qp --scripts foo.rpm
그러나이 경우에는 걱정하지 않아도됩니다.
답변
당신은 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
답변
$ mkdir packagecontents; cd packagecontents
$ rpm2cpio ../foo.rpm | cpio -idmv
$ find .
참조 : cpio 인수는
-i = extract
-d = make directories
-m = preserve modification time
-v = verbose
나는 여기에서 답을 찾았습니다 : lontar ‘s answer
답변
rpm2cpio가없는 사람들을 위해 * .rpm 패키지에서 페이로드를 추출하는 고대 rpm2cpio.sh 스크립트가 있습니다.
후손과 다음 세대를 위해 다시 게시되었습니다.
다음과 같이 호출하십시오. ./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
답변
때때로 중간 RPM 아카이브에 문제가 발생할 수 있습니다.
cpio : 기형 번호
cpio : 기형 번호
cpio : 기형 번호
. . .
cpio : 아카이브의 조기 종료
즉, 평소와 같이 LZMA2 압축 방식으로 압축 할 수 있습니다 xz
.
rpm2cpio <file>.rpm | xz -d | cpio -idmv
그렇지 않으면 시도해 볼 수 있습니다.
rpm2cpio <file>.rpm | lzma -d | cpio -idmv
답변
대부분의 배포판은 tar, zip, rpm 등을 압축 해제 하는 GUI 앱 파일 롤러 를 설치했습니다 .
file-roller --extract-here package.rpm
현재 디렉토리의 내용을 추출합니다.