当前位置: 首页>>技术教程>>正文


如何从特定存储库中删除所有包?

,

问题描述

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

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

最佳解决办法

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

#!/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 }'

如果您需要独立于分支列出所有非特定服务器的软件包,请将next-to-last行替换为:

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

次佳解决办法

看看ppa-purge。

package-management,ubuntu

用法:

ppa-purge -purge <nameofppa> [-s hostserver]

Hostserver默认为ppa.launchpad.net

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

package-management,ubuntu

第三种解决办法

克服aptitudeppa-purge多重Bug

通常,由于Vadim RutkovskyTakkat具有explained,因此使用默认语法运行ppa-purge是删除PPA提供的所有程序包的有效方法,只要有可能,请将其正确降级到其他已配置软件源中提供的版本。

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

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

怎么做

这是语法:

sudo ppa-purge -i ppa:ppaowner/ppaname

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

  • ppaowner由PPA的所有者替换。

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

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

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

它被记录在哪里

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

ek@Del:~$ ppa-purge -h
Usage: sudo ppa-purge [options] <ppa:ppaowner>[/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对能力的反向偏好”有点神秘。通过查看the relevant piece of the source code(毕竟ppa-purge只是一个shell脚本),我们可以看到这意味着默认行为是更喜欢aptitudeapt-get,而-i标志会反转此首选项。

第四种办法

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

  1. 打开synaptic package manager。如果没有安装,请按以下方式安装:

    sudo apt-get install synaptic
    
  2. 打开时,单击down-left上的Origin按钮。它将列出top-left端的所有存储库。选择要删除其包的特定存储库。它将列出该存储库下的所有包。单击第一个字段i,e S或Installed Version字段以首先显示已安装的软件包。

  3. 现在选择要删除的所有包。标记删除的提示:

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

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

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

package-management,ubuntu

第五种办法

要至少找到它们,首先禁用PPA并运行apt-get update。然后安装apt-show-versions。然后,运行apt-show-versions | grep 'No available'将为您提供在配置的存储库中找不到的所有已安装软件包的列表。使用一些命令行魔法你可能只能剥离包名并将它们传递给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返回的列表并逐个删除它们。根据它找到的内容,这可能会因为依赖性而卸载意外的内容,因此请先检查它。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/3099.html,未经允许,请勿转载。