将所有外部软件包降级为官方软件包

将所有外部软件包降级为官方软件包

假设我从外部 PPA 存储库安装了许多软件包,它们修改或替换了系统中现有的默认软件包。假设我从 apt-sources 中删除了这些 PPA,我不再记得它们的名称。那么我如何使用ppa-purge或将这些软件包降级为默认软件包呢?

有没有办法列出/找到所有从非 Ubuntu 软件存储库安装的软件包?然后我可以根据需要恢复到官方软件包。

答案1

你可以使用apt-forktracer

要安装它你必须先启用 Universe 存储库然后通过软件中心或使用命令进行安装sudo apt-get install apt-forktracer

以下是手册页的摘录:

apt-forktracer analyzes each installed package separately, reporting on the standard output these packages which are in a "non-standard" state. What "non-standard" means depends on the mode of program operation:

default (non-verbose) mode
    this state means packages in an incorrect state (e.g. no candidate version) or packages whose candidate version is different than the newest available official version.

verbose mode
    this state also includes packages whose installed version is different from the candidate version 

以下是默认输出的示例:

libavformat57 (7:3.1~~git20160413.62652~ubuntu14.04.1) [LP-PPA-motumedia-ffmpeg-daily: 7:3.1~~git20160413.62652~ubuntu14.04.1]
libavresample3 (7:3.1~~git20160413.62652~ubuntu14.04.1) [LP-PPA-motumedia-ffmpeg-daily: 7:3.1~~git20160413.62652~ubuntu14.04.1]
libavfilter6 (7:3.1~~git20160413.62652~ubuntu14.04.1) [LP-PPA-motumedia-ffmpeg-daily: 7:3.1~~git20160413.62652~ubuntu14.04.1]

有关详细信息,请参阅man apt-forktracer

现在我们知道了相关包的名称,我们可以删除(或清除它们)

其他方法@muru他的评论中的注释如下:

A)用于synaptic定位过时的软件包。

突触过时

然后你可以选择你想要的删除或完全删除如下所示:

突触移除

或者

B)使用aptitude

启动时aptitude选择操作->成为 root,输入密码后选择“过时的和本地创建的软件包”,如下所示:

aptitude-过时

导航到要删除的包,如下所示:

aptitude-remove

按下-键标记要删除的包。当您完成标记要删除的包后,按下 键删除g它们,或者如果您在标记时犯了错误,Ctrlu请撤消您对会话的更改。

资料来源:

https://manpages.debian.org/testing/apt-forktracer/apt-forktracer.8.en.html

http://aptitude.alioth.debian.org/doc/en/ch02s01s02.html

答案2

基于上述答案,我发现 forktracer 在这方面非常有用。在启用和禁用许多 PPA 后,这里有一种方法可以降级回“官方”版本。

首先,使用以下命令生成包列表apt-forktracer

apt-forktracer | grep Ubuntu: | sed 's/\([^ ]*\).*Ubuntu: \([^] ]*\).*/\1=\2/' > ubuntu-packages.list

表达式sed以您可以使用的方式对其进行格式化apt-get install

然后你只需将它们全部降级即可:

sudo apt-get install --mark-auto $(cat ubuntu-packages.list)

如果它打算删除危险的包,它会发出警告,但你在继续之前一定要检查它将删除的包列表。

在我的例子中,我必须进行编辑ubuntu-packages.list以删除降级,libcrypt1因为它会带来libc降级,而这不是我想要的。

相关内容