OpenSUSE:查找没有存储库的所有包

OpenSUSE:查找没有存储库的所有包

我刚刚通过将所有存储库更改为目标 12.2(而不是 12.1),从 OpenSUSE 12.1 升级到 OpenSUSE 12.2。现在我已经升级了,我发现了一堆没有存储库*的软件包,其中YaST 软件管理器版本栏中用红色文本标记。我可以滚动浏览这些并删除每一个,但我想知道是否齐普搜索 ( zypper se) 或软件经理有什么方法可以同时定位/选择所有这些。

*- 这些包有一个存储库(OpenSUSE 12.1 等),但由于我用 12.2 存储库替换了这些存储库,它们不再具有存储库关联。这不会产生问题,因为 12.2 存储库应该包含运行系统所需的所有内容。

答案1

rpm -qa --qf '%-30{DISTRIBUTION} %{NAME}\n'| sort

为您提供软件包使用的所有存储库的列表。找到你不想要的那些留给读者作为练习。:-)

答案2

使用马丁的回答/guidance,我编写了一个快速脚本来删除一串包zremove.sh

#!/bin/sh

pkgs=""
while read line
do
        pkgs="$pkgs $line"
done

zypper rm $pkgs

注意到我的所有“没有存储库”的包都有一个分布开放SUSE 12.1在里面转速查询时,我发出此命令来查找并删除所有这些:

rpm -qa --qf '%{DISTRIBUTION} : %{NAME}\n' | grep "openSUSE 12.1 :" | sed 's/openSUSE 12.1 : //' | sudo zremove.sh

这通常不能回答如何在没有后备存储库的情况下查找所有包的问题,​​但它确实解决了我最初的问题。

答案3

Repository: @System当您对它们执行 a 操作时,将显示“丢失”其存储库或直接从 .rpm 文件安装的软件包zypper info。所以理论上应该可以用 a 找到它们,zypper packages --repo @System --installed-only但这在 libzypp 中仍然缺失(openSUSE Bug 770239 - “zypper pa”缺乏对 @System repo 的支持)。

作为一种解决方法,人们必须zypper info对每个已安装的软件包进行操作,并为那些拥有存储库的人进行过滤@System

rpm -qa --queryformat="%{n}\n" | while read p; do zypper info $p | grep -q '^Repository: @System' && echo $p; done

相当慢,但可以完成工作。

答案4

以下命令列出了所有已安装的软件包,这些软件包不再具有引用的存储库或rpm直接通过以下方式安装:

LC_ALL=C zypper pa --installed | awk '$0 ~ /^i/ && $3 == "@System" {print $5}'

相关内容