質問: rpmの内容を抽出する方法 私はrpmを持っていて、私はそれをtarballのように扱いたいです。内容を調べられるように、内容をディレクトリに抽出したい。私は、アンインストールされたパッケージの問い合わせコマンドに精通しています。私は単純にrpmの内容のリストが欲しくない。すなわち.$ rpm -qpl foo.rpm rpmに含まれるいくつかのファイルの内容を調べたいです。 私はrpmをインストールしたくありません。%postセクションで追加の変更を行うことができるrpmの機能、そしてそれらをチェックする方法も知っています。すなわち.$ rpm -qp --scripts foo.rpm しかし、この場合それは私には関係ありません。
回答: 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