比较两个rpms? – linux

对我的基线(java / C ++)进行了一些未知的更改,并以新的rpm安装。 我想要一个方法来比较这个rpm的内容与旧的看到所做的更改。 这可能吗?

如果没有简单的方法来做到这一点,有没有办法获得在其中按date组织的rpm文件名称的内容列表?

如果你有以前的rpm软件包文件,你可以把它解开,比如使用unrpm进入一个临时目录,使用diff -r比较结果。

下面是我在ncurses的两个开发版本之间进行说明的一个例子:

 #!/bin/sh failed() { echo "? $*" >&2 exit 1 } # get the package filename as parameter, defaulting to one used for example oldpkg=$(readlink -f "${1:-/tmp/ncurses6-6.0-20150926.x86_64.rpm}") pkgname=$(rpm -qip "$oldpkg" 2>/dev/null | awk '/^Name .*:/ { print $3; exit 0; }') [ -f "$oldpkg" ] || failed "no package file found: $oldpkg" [ -n "$pkgname" ] || failed "no package name found in $oldpkg" # The tags for this question are "linux" and "rpm", so mktemp and bash are assumed. tempdir=$(mktemp -d "${TMPDIR:-/tmp}/pkgcompare.XXXXXX") trap 'rm -rf "$tempdir"' EXIT ERR # Fedora sets CDPATH, which would echo (cancel that). unset CDPATH mkdir -p "$tempdir"/{new-version,old-version} cd "$tempdir/new-version" || exit # the query returns absolute pathnames beginning with "/" rpm -ql "$pkgname" | while : do read path [ -z "$path" ] && break [ -d "$path" ] && mkdir -p ".$path" [ -f "$path" ] && mkdir -p "./${path%/*}" [ -f "$path" ] && cp -p "$path" ".$path" done cd "$tempdir/old-version" || exit rpm2cpio "$oldpkg" | cpio -i -d 2>/dev/null cd $tempdir || exit # I would usually pipe this into diffstat, but you may want the actual diffs diff -r -u -N old-version new-version | diffstat 

和输出(只剩下diffstat ,其他输出被抑制):

  bin/ncursesw6-config | 2 +- include/ncursesw6/curses.h | 8 ++++---- include/ncursesw6/ncurses.h | 8 ++++---- lib64/libncurses++w6.so |binary lib64/libncurses++w6.so.6 |binary lib64/libncurses++w6.so.6.0 |binary lib64/libncursesw6.so |binary lib64/libncursesw6.so.6 |binary lib64/libncursesw6.so.6.0 |binary lib64/libtinfow6.so |binary lib64/libtinfow6.so.6 |binary lib64/libtinfow6.so.6.0 |binary lib64/pkgconfig/formw6.pc | 2 +- lib64/pkgconfig/menuw6.pc | 2 +- lib64/pkgconfig/ncurses++w6.pc | 2 +- lib64/pkgconfig/ncursesw6.pc | 2 +- lib64/pkgconfig/panelw6.pc | 2 +- lib64/pkgconfig/ticw6.pc | 2 +- lib64/pkgconfig/tinfow6.pc | 2 +- 19 files changed, 16 insertions(+), 16 deletions(-) 

你当然可以将相同的方法应用于两个rpm包; 这个问题很明显,一个是安装的,另一个是可以访问的。

尝试使用pkgdiff来显示RPM包之间的差异:

 pkgdiff PKG-0.rpm PKG-1.rpm 

如果比较SRC.RPM,那么该工具也将提取并比较内部压缩包(除非定义了-skip-subarchives选项)。

在这里输入图像描述

在这里输入图像描述