如何从某个存储库中删除所有包?
为了从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 -purge [-s hostserver]
Hostserver默认为ppa.launchpad.net
。
以下是ppa-purge
命令的联机帮助页的链接 以供参考。
克服aptitude
的ppa-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脚本),我们可以看到这意味着默认行为是更喜欢aptitude
到apt-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的人有所帮助。 步骤简单易懂。
-
打开synaptic包管理器 。 如果没有安装,请按以下方式安装:
sudo apt-get install synaptic
-
打开时,单击左下方的“ 原点”按钮。 它将列出左上角的所有存储库。 选择要删除其包的特定存储库。 它将列出该存储库下的所有包。 单击第一个字段i,e S或Installed Version字段以首先显示已安装的软件包。
-
现在选择要删除的所有包。
标记删除的提示:
-
选择第一个包然后按住Shift键并再次选择最后一个包以选择全部。 然后右键单击方框并选择要删除的 标记或标记为完全删除 。
-
或选择任何包,然后按Ctrl + A选择全部。 然后右键单击方框并选择标记进行删除或标记为完全删除。
-
而已。 它将删除没有任何问题。 我还附上图片以使其更清晰。 希望它会有所帮助。 🙂
我发现使用ppa-purge很困难。
在System下打开Synaptic Package Manager,然后选择Settings,Repositories。
删除你不想要的。
完成!