diff deux rpms? – Linux

Certaines modifications inconnues ont été apscopes à ma référence (java / C ++) et installées dans un nouveau rpm. Je voudrais un moyen de comparer le contenu de ce rpm avec un ancien pour voir les modifications apscopes. Est-ce possible?

S’il n’y a pas de moyen facile de le faire, y a-t-il un moyen d’obtenir une liste de contenu des noms de fichiers rpm organisée par date?

Si vous avez le fichier de package rpm précédent, vous pouvez le décompresser, par exemple en utilisant unrpm dans un répertoire temporaire et utiliser diff -r pour comparer les résultats.

Voici un exemple que j’ai fait pour illustrer deux versions de développement de 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 

et sortie (seul le diffstat est laissé, autre sortie supprimée):

  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(-) 

Vous pouvez bien entendu appliquer la même approche à deux packages RPM. la question fait apparaître que l’un est installé et que l’autre peut être accessible.

Essayez pkgdiff pour visualiser les différences entre les packages RPM:

 pkgdiff PKG-0.rpm PKG-1.rpm 

Si vous comparez SRC.RPM, l’outil extraira et comparera également l’archive interne (à moins que l’option -skip-subarchives ne soit définie).

entrer la description de l'image ici

entrer la description de l'image ici