如何从某个存储库中删除所有包?

为了从10.04平滑升级到10.10,我想删除所有不在默认存储库中的软件包(例如,铬PPA和第三方存储库)。 查找和删除这些包的最简单方法(最好是CLI)是什么?

编辑:这个问题不仅限于PPA,我也有一个x2go存储库,所以我正在寻找一个通用命令来删除属于某个存储库的包。 对于PPA, 如何删除 PPA的问题有很好的答案。

此脚本可以列出特定服务器/分支的所有包(修改两个声明的变量):

#!/bin/bash server="http://it.archive.ubuntu.com/ubuntu/" branch="maverick-updates/main" apt-cache policy $(dpkg -l | awk 'NR >= 6 { print $2 }') | awk -v server="$server" -v branch="$branch" \ '/^[^ ]/ { split($1, a, ":"); pkg = a[1] } nextline == 1 { nextline = 0; if ($2 == server && $3 == branch) print pkg } /\*\*\*/ { nextline = 1 }' 

如果您需要独立于分支列出不是来自特定服务器的所有软件包,请将下一个到最后一行替换为:

 nextline == 1 { nextline = 0; if ($2 != server) print pkg } 

查看ppa-purge 安装ppa-purge

用法:

 ppa-purge -purge  [-s hostserver] 

Hostserver默认为ppa.launchpad.net

以下是ppa-purge命令的联机帮助页的链接 Manpage图标 以供参考。

克服aptitudeppa-purge的Multiarch Bug

通常,正如Vadim Rutkovsky和Takkat所解释的那样 ,使用默认语法运行ppa-purge是删除PPA提供的所有包的有效方法,只要有可能,将它们适当地降级到其他配置软件源中提供的版本。

但是,正如Takkat指出的那样, bug 831768阻止了ppa-purge正常工作以删除多协议软件包(如64位系统上安装的32位软件包)。 这是因为aptitude无法处理多域包中的冲突依赖(这就是bug的内容),而ppa-purge的默认行为是使用aptitude来降级包。

幸运的是, ppa-purge接受-i标志,这使得它更喜欢apt-get to aptitude作为它的后端。 如错误报告中所述,使用apt-get是手动调用aptitude的有效替代方法,因此使用-i标志运行ppa-purge 应该是一种有效的解决方法,用于删除/降级PPA提供的所有包,包括multiarch包

怎么做

这是语法:

 sudo ppa-purge -i ppa: ppaowner / ppaname 

像往常一样(与不使用-i标志时相同):

  • ppaowner被PPA的所有者取代。
  • / ppaname是可选的。 如果存在,则ppaname将替换为PPA的名称。 如果没有,则默认为ppa

例如 ,假设我安装了qBittorrent的不稳定版本的PPA ,我想完全删除它,自动将qBittorrent降级为使用apt-get在幕后而不是aptitude通过我的其他软件源提供的任何版本。 然后我会跑:

 sudo ppa-purge -i ppa:hydr0g3n/qbittorrent-unstable 

它被记录在哪里

出于某种原因, ppa-purge的一些有用选项未在其手册页中记录 ,包括-i 。 但是你可以通过运行ppa-purge -h (或者只是没有参数的ppa-purge )来获取有关它们的信息:

 ek@Del:~$ ppa-purge -h Usage: sudo ppa-purge [options] [/ppaname] ppa-purge will reset all packages from a PPA to the standard versions released for your distribution. Options: -p [ppaname] PPA name to be disabled (default: ppa) -s [host] Repository server (default: ppa.launchpad.net) -d [distribution] Override the default distribution choice. -y Pass -y --force-yes to apt-get or -y to aptitude -i Reverse preference of apt-get upon aptitude. -h Display this help text Example usage commands: sudo ppa-purge xorg-edgers will remove https://launchpad.net/~xorg-edgers/+archive/ppa sudo ppa-purge -p xorg-testing sarvatt will remove https://launchpad.net/~sarvatt/+archive/xorg-testing sudo ppa-purge ppa:ubuntu-x-swat/x-updates will remove https://launchpad.net/~ubuntu-x-swat/+archive/x-updates Notice: If ppa-purge fails for some reason and you wish to try again, (For example: you left synaptic open while attempting to run it) simply uncomment the PPA from your sources, run apt-get update and try again. 

“反向偏好apt-get on aptitude”有点神秘。 通过查看源代码的相关部分 (毕竟ppa-purge只是一个shell脚本),我们可以看到这意味着默认行为是更喜欢aptitudeapt-get ,而-i标志反转这个偏爱。

要至少找到它们,首先要禁用PPA并运行apt-get update 。 然后安装apt-show-versions 。 运行apt-show-versions | grep 'No available' 然后, apt-show-versions | grep 'No available'将为您提供在配置的存储库中找不到的所有已安装软件包的列表。 使用一些命令行魔法,您可以只apt-get remove包名称并将它们传递给apt-get remove

  for i in `apt-show-versions | grep 'No available' | cut -d' ' -f 1` ; do sudo apt-get remove -y $i ; done 

请注意,这将通过apt-show-versions返回的列表并逐个删除它们。 根据它找到的内容,这可能会因为依赖性而卸载意外的内容,因此请先检查它。

这是GUI方法。 希望它对那些不喜欢CLI的人有所帮助。 步骤简单易懂。

  1. 打开synaptic包管理器 。 如果没有安装,请按以下方式安装:

     sudo apt-get install synaptic 
  2. 打开时,单击左下方的“ 原点”按钮。 它将列出左上角的所有存储库。 选择要删除其包的特定存储库。 它将列出该存储库下的所有包。 单击第一个字段i,e SInstalled Version字段以首先显示已安装的软件包。

  3. 现在选择要删除的所有包。

    标记删除的提示:

    1. 选择第一个包然后按住Shift键并再次选择最后一个包以选择全部。 然后右键单击方框并选择要删除的 标记标记为完全删除

    2. 或选择任何包,然后按Ctrl + A选择全部。 然后右键单击方框并选择标记进行删除标记为完全删除。

而已。 它将删除没有任何问题。 我还附上图片以使其更清晰。 希望它会有所帮助。 🙂

图片

我发现使用ppa-purge很困难。

在System下打开Synaptic Package Manager,然后选择Settings,Repositories。

删除你不想要的。

完成!