我有一个转速,我想把它当作一个 tarball。我想把内容提取到一个目录中,这样我就可以检查内容。我熟悉卸载包的查询命令。我不只是想要一个列表的内容转速。也就是说。
$ rpm -qpl foo.rpm
我想检查包含在 rpm 中的几个文件的内容。我不想安装转速。我也知道转速的能力,做额外的修改在% 后段,以及如何检查这些。也就是说。
$ rpm -qp --scripts foo.rpm
然而在这种情况下,这与我无关。
$ 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
$ 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
有时你可能会遇到中级 RPM 归档的问题:
畸形数字 畸形数字 畸形数字 . . . 存档的提前结束
这意味着它可以打包,这些天它是 LZMA2压缩像往常一样,由 xz:
xz
rpm2cpio <file>.rpm | xz -d | cpio -idmv
否则你可以试试:
rpm2cpio <file>.rpm | lzma -d | cpio -idmv
对于那些没有 rpm2cpio 的人,这里是古老的 rpm2cpio.sh 脚本 从 * . rpm 包中提取有效载荷。
转发给后代... 和下一代。
这样调用: ./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
由于“ xz”的“ grep”检查是区分大小写的,所以“ DECOMPRESION”测试在 CygWin 上失败,CygWin 是最有潜力的平台之一。检查的结果是:
COMPRESSION='/dev/stdin: XZ compressed data'
在任何地方用‘ grep-q-i’替换‘ 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: $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
你也可以简单地做 tar -xvf <rpm file>!
tar -xvf <rpm file>
为了调试/检查您的 rpm,我建议使用 红线,这是一个 Java 程序
用法:
java -cp redline-1.2.1-jar-with-dependencies.jar org.redline_rpm.Scanner foo.rpm
下载: https://github.com/craigwblake/redline/releases
至少在 OpenSuse 中,unrpm命令附带了 build包。
unrpm
build
在一个合适的目录中(因为这是一个归档炸弹) :
unrpm file.rpm
大多数发行版都安装了 GUI 应用程序 档案管理员,它可以解压 tar、 zip、 rpm 等等。
file-roller --extract-here package.rpm
这样可以提取工作目录里的东西。
强大的基于文本的文件管理器 McC(“午夜指挥官”,模糊地提醒诺顿Commander 以前的 DOS 时代)具有内置的检查和解包功能。转速和。Rpms 文件,只要“打开”。Mc 中的 rpm (s)文件,并选择 CONTENTS.cpio: 对于 rpm,您可以访问安装树,对于 rpm,您可以访问。Spec 文件和所有源代码包。
CONTENTS.cpio
在 NixOS 中,有 rpmextract,它是 rpm2cpio 的包装器,完全符合@Alan Evangelista 的要求。 Https://github.com/nixos/nixpkgs/tree/master/pkgs/tools/archivers/rpmextract
rpmextract
将. rpm 文件复制到一个单独的文件夹中,然后运行以下命令 $yourfile.rpm | cpio-idmv
7-zip 了解大多数类型的存档,包括 rpm 和包含的 cpio。
在 Manjaro 上使用 KDE,方舟可以处理它。
只要运行这个:
$rpm -ivh package_name.rpm
如果您没有超级用户权限,请使用 sudo -i命令,然后执行此命令。 如果你没有转速包,安装转速包。
sudo -i
如果您的系统已经安装了 rpm2archive,您可以运行:
rpm2archive
rpm2archive package.rpm
这会将 rpm 包转换成压缩的 tar 归档文件 package.rpm.tgz。现在您可以使用:
package.rpm.tgz
tar -xvf package.rpm.tgz
嗨,天使早些时候在他的评论中指出了这一点。
资料来源:
据报道: Https://bugzilla.redhat.com/show_bug.cgi?id=2058426
RHEL 9使用有效载荷压缩(zstd)
rpm2cpio foo.rpm | zstd -d | cpio -idmv