如何在 zypper 更新之前获取包更改

Posted

技术标签:

【中文标题】如何在 zypper 更新之前获取包更改【英文标题】:How to get package changes before update in zypper 【发布时间】:2018-01-29 21:19:49 【问题描述】:

对于zypper,是否存在来自 debian/ubuntu 的 apt-listchanges 功能的对应项?

目前我必须为每个更新的软件包手动执行以下操作:1)使用zypper 安装,2)使用rpm -q --changelog PACKAGE_NAME 检查更改,这与apt-listchanges 完成的便捷方式相去甚远.对我来说最重要的是,如何在安装之前进行更改(可能会中止)?

【问题讨论】:

我还是用yast2 online_update,没有这些问题。 【参考方案1】:

不使用 zypper,但如果您可以同时下载 rpm(旧版本和新版本),您可以使用 pkgdiff 来检查差异。

【讨论】:

【参考方案2】:

如果不下载单个包,我找不到查看对它所做的更改的方法。 OpenSUSE 在“补丁”中收集包,因为错误通常需要对多个包进行更改。要查看补丁中的内容:

使用zypper list-patches 获取可用补丁的名称/ID 使用zypper info -t patch $ID 获取有关补丁集的信息,其中$ID 是上一个命令输出的ID。

如果你想查看某个包,你可以使用zypper download下载它而不安装。之后,您可以使用rpm -q --changelog -p $PATH$PATH查看下载文件的更新日志。

【讨论】:

【参考方案3】:

(我不知道apt-listchanges 输出什么)

主要问题是从zypper 获得易于解析的输出。这并不完美,但它可能会让你上路:

首先从 zypper 输出中获取补丁的纯名称,省略标题和尾行:

zypper -t lp | awk -F'|' '/^---/  OK=1; next  OK && NF == 7  gsub(" ", "", $2); print $2 '

例如你可以得到:

openSUSE-2018-172
openSUSE-2018-175
openSUSE-2018-176
openSUSE-2018-178

然后将该输出再次输入zypper,如下所示:

zypper patch-info $(zypper -t lp | awk -F'|' '/^---/  OK=1; next  OK && NF == 7  gsub(" ", "", $2); print $2 ')

输出将包括这样的信息(为简洁起见被截断):

Summary     : Security update for ffmpeg     
Description :                                
    This update for ffmpeg fixes the following issues:

    Updated ffmpeg to new bugfix release 3.4.2

      * Fix integer overflows, multiplication overflows, undefined
        shifts, and verify buffer lengths.

【讨论】:

patch-info 并不是我要找的,因为它仅适用于“系统补丁”,例如,如果我运行 zypper patch-info 并看到包 caja 将被更新可以运行zypper patch-info package:caja,但是只会说版本过时了。 apt-listchanges 从 debian 服务器下载包更新日志并在实际安装之前显示它 好的,然后使用更适合您的答案(在否决后)。使用标准 RPM 存储库,您无法从 RPM 中单独下载更改日志,因为它们位于 RPM 中。

以上是关于如何在 zypper 更新之前获取包更改的主要内容,如果未能解决你的问题,请参考以下文章

SUSE Linux 的Zypper包管理器使用实例

SUSE Linux 的Zypper包管理器使用实例

zypper

zypper命令使用示例

SUSE Linux Enterprise Server15 12 这些操作系统哪里提供zypper源下载更新?

在 openSUSE 上安装最新的 Python