如何从升级恢复到Proposed存储库?

我错误地启用了预发布更新(natty-proposed)存储库,然后升级了所有包。

我怎么撤消这个?

以下是来自@ enzotib说明的测试结果以及我的说明中的测试结果 。

这是从本地安装的软件包,建议和后向软件包恢复到稳定+更新通道的更通用的方法。 虽然其他答案是正确的并以类似的方式工作,但我认为这是一种更优雅的方法。

  1. 确保删除了/etc/apt/sources.list/etc/apt/sources.list.d/*文件中的-backports-backports条目。
  2. 添加apt-preferences文件,例如/etc/apt/preferences.d/99-back-to-stable-updates包含(在这里precise – 替换为您的版本):

     Package: * Pin: release a=precise Pin-Priority: 1001 Package: * Pin: release a=precise-updates Pin-Priority: 1001 Package: * Pin: release a=precise-security Pin-Priority: 1001 Package: * Pin: release a=precise-proposed Pin-Priority: -10 Package: * Pin: release a=precise-backports Pin-Priority: -10 

    这个大于1000的固定将使得强制降低该通道上的包,并且-backports-backports通道上的优先级<0将使删除任何其他包。

  3. 现在跑

     sudo apt-get update sudo apt-get dist-upgrade 

    检查拟议的解决方案是否会给你,如果你认为它没问题,那就接受它。 如果您需要检查降级的原因和版本,请使用apt-cache policy packagename进行检查,以查看可用的版本以及安装的候选版本。

  4. 再次删除/etc/apt/preferences.d/99-back-to-stable-updates文件,因为它不再需要了。

感谢mlind在Ubuntu论坛上为5年多以前的post提供了mlind – 但它今天帮助我很好。

此页面表明,通过利用高于1000的引脚优先级可能导致程序包降级这一事实,Apt固定可用于从整个存储库降级 。

因此,一种解决方案可能是暂时将所有包文件的默认优先级增加1000,除了来自natty-proposed存储库的那些优先级:

 apt-cache policy | awk ' /^ [0-9]+ / { p = $1; getline; r = $0; if (r !~ /a=natty-proposed/) p += 1000; print "Package: *\nPin: " r "\nPin-priority: " p "\n" } ' | sudo tee /etc/apt/preferences.d/downgrade-from-natty-proposed 

(注意:此方法无法增加其发布字段包含逗号的包文件的优先级 。请参阅此问题 。)

执行此操作后, apt-get --simulate upgrade可用于测试成功的降级检测。 在确认检测到正确的降级后, sudo apt-get upgrade应该是执行降级所需的全部内容。

降级完成后,使用“软件源”禁用预发布更新(natty-proposed)存储库,然后删除临时优先级增加:

 sudo rm /etc/apt/preferences.d/downgrade-from-natty-proposed 

最后,重新启动,以便所有正在运行的程序都是降级版本。

在synaptic中,您可以禁用建议的存储库并更新源。 然后你会看到比已更新的所有软件包都显示为本地安装(因为它们不再存在于repos中)。

现在你必须“降级”这些包。 逐个选择,在上面的菜单中选择:

 package > force version 

(或Control + E)

将出现一个带有可用选项的菜单。 我会为每个包选择较低的版本号。 如果你犯了一个错误,并且在正常的回购中有一个更新的版本,它将在以后的更新中解决。

嗯它有帮助。

编辑:

一个快速的解决方案是使用指向porposed存储库的purge-ppa命令,但不知道它是否适用于它们,我只用它来清除外部ppa并将软件包降级到官方的ubuntu版本。 在这种情况下我不会建议你这样做,也许有人知道这是否是一种安全的方法……

我找不到比以下更简单的解决方案。 但希望有人能得到更好的答案。

以下可执行降级的脚本

 #!/bin/bash # get a list of installed packages dpkg --get-selections | awk '{ print $1 }' > all-packages # run apt-cache policy on each of them, then elaborate with the awk script apt-cache policy $(old-versions # install previous version of packages sudo apt-get --simulate install $(< old-versions) 

名为get-prev-pkg-versawk脚本如下所示

 #!/usr/bin/awk -f /^[^ ]/ { package = $1 gsub(":", "", package) search_next = 0 } /^ [^ ]/ { installed = 0 version = $1 if (search_next == 1) { print package "=" version search_next = 0 } } /^ \*\*\* [^ ]/ { installed = 1 } /^ [^ ]/ { branch = $3 if (installed == 1 && branch ~ /proposed/) { search_next = 1 } installed = 0 } 

运行脚本时, 建议的 repo应该还没有被禁用。

请记住在两个脚本上设置可执行位。

这种方法的一个问题是所有降级的软件包都将手动安装(也是自动安装的软件包)。

为安全起见,请在bash脚本末尾的apt-get中添加--simulate选项。

可能不需要从natty-proposed恢复所有包:大多数包将很快通过natty-updates更新到相同的版本。

如果您对一个软件包有问题,可以使用darent方法恢复一个软件包(在禁用-proposed之后),或者您可以使用sudo aptitude install packagename/natty 。 但更重要的是,您应该针对包提交错误。 很少有人真正测试natty-proposed,如果出现回归(=新问题),他们肯定应该报告。 否则,他们可能会在所有ubuntu用户的更新中结束。 如果您有任何问题,请报告。