Jef*_*eld 135 linux system-administration rpm package
我有一个rpm,我想把它当作一个tarball.我想将内容提取到一个目录中,以便我可以检查内容.我熟悉已卸载软件包的查询命令.我不只是想要一个rpm的内容列表.即
$ rpm -qpl foo.rpm
Run Code Online (Sandbox Code Playgroud)
我想检查rpm中包含的几个文件的内容.我不想安装rpm.我也知道rpms能够在%post部分中进行额外的修改,以及如何检查这些修改.即
$ rpm -qp --scripts foo.rpm
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,我并不担心.
小智 171
你试过这个命令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
Run Code Online (Sandbox Code Playgroud)
Jef*_*eld 63
$ mkdir packagecontents; cd packagecontents
$ rpm2cpio ../foo.rpm | cpio -idmv
$ find .
Run Code Online (Sandbox Code Playgroud)
供参考:cpio参数是
-i = extract
-d = make directories
-m = preserve modification time
-v = verbose
Run Code Online (Sandbox Code Playgroud)
我在这里找到了答案:lontar的回答
小智 30
对于那些没有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
Run Code Online (Sandbox Code Playgroud)
roo*_*ook 24
有时您可能会遇到中间RPM存档的问题:
cpio:格式错误的数字
cpio:格式错误的数字
cpio:格式错误的数字
...
cpio:存档过早结束
这意味着它可以被打包,这些天它像往常一样是LZMA2压缩,通过xz:
rpm2cpio <file>.rpm | xz -d | cpio -idmv
Run Code Online (Sandbox Code Playgroud)
否则你可以尝试:
rpm2cpio <file>.rpm | lzma -d | cpio -idmv
Run Code Online (Sandbox Code Playgroud)
大多数发行版都安装了GUI app file-roller,它可以解压缩tar,zip,rpm等等.
file-roller --extract-here package.rpm
Run Code Online (Sandbox Code Playgroud)
这将提取当前目录中的内容.
正如此处报道的: https ://bugzilla.redhat.com/show_bug.cgi?id=2058426
RHEL 9 使用有效负载压缩 (zstd)
rpm2cpio foo.rpm | zstd -d | cpio -idmv
Run Code Online (Sandbox Code Playgroud)
小智 5
你也可以简单地做tar -xvf <rpm file>!
小智 5
强大的基于文本的文件管理器mc(Midnight Commander,模糊地提醒旧 DOS 时代的 Norton Commander)具有检查和解包 .rpm 和 .rpms 文件的内置功能,只需“打开”.rpm(s) 文件在 mc 中并选择CONTENTS.cpio:对于 rpm,您可以访问安装树,对于 rpm,您可以访问 .spec 文件和所有源包。
| 归档时间: |
|
| 查看次数: |
171763 次 |
| 最近记录: |