如何从升级还原到建议的存储库?


Answers:


24

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

  1. 请确保您删除的条目-proposed-backports在你/etc/apt/sources.list/etc/apt/sources.list.d/*文件。
  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的固定将使该通道上的软件包降级,而-proposed-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年前钉住他的帖子的这种奉献-但是今天它对我的帮助很大。


我想它也应该与debian一起使用。不幸的是,它对我没有任何帮助:/
迈克尔

@Michael 1)Debian没有提议的正式仓库的概念。2)这个站点是关于Ubuntu的,而不是Debian。我建议您在Unix.SE上问一个新问题。
gertvdijk

此解决方案也适用于“ xenial”版本!(当然,在用文件中的xenial替换精确后)非常感谢!
morhook '16

4

该页面建议利用引脚优先级高于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应该执行降级。

降级完成后,请使用软件源禁用预发行更新(建议的)存储库,然后删除临时的优先级提高:

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

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


1
有趣的解决方案,可能是比我的解决方案更好,更通用的解决方案。顺便说一下,降级包的数量是相同的,这证实了这两种方法的正确性。
enzotib

2

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

以下脚本可以执行降级

#!/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 $(<all-packages) |
  ./get-prev-pkg-vers >old-versions

# install previous version of packages
sudo apt-get --simulate install $(< old-versions)

awk脚本,命名get-prev-pkg-vers为如下

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

运行脚本时,建议的存储库应该尚未被禁用。

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

这种方法的问题是,所有降级的软件包都将导致手动安装(也包括那些自动安装的软件包)。

为了安全起见,请将--simulate选项添加到apt-getbash脚本的末尾。


2

可能不需要从natty-proposed恢复所有软件包:无论如何,大多数软件包都将很快通过natty-updates更新到相同版本。

如果您对一个软件包有疑问,可以使用darent提出的方法(禁用-proposed后)还原一个软件包,也可以使用sudo aptitude install packagename/natty。但更重要的是,您应该针对该程序包提交错误。很少有人实际测试过提议的问题,如果发生回归(=新问题),则一定要进行报告。否则,它们可能最终会出现在所有ubuntu用户的更新中。因此,如果您有任何问题,请报告。


1

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

现在,您必须“降级”那些软件包。一一选择,然后在上方菜单中选择:

package > force version

(或Control + E)

将出现一个带有可用选项的菜单。我会为每个软件包选择较低的版本号。如果您输入有误,并且正常存储库中有较新版本,它将在以后的更新中解决。

一种快速的解决方案是使用指向已放置的存储库的purge-ppa命令,但不知道它是否适用于它们,我只用它来将外部ppa的软件包降级并降级为正式的ubuntu版本。在这种情况下,我不建议您这样做,也许有人知道这是否安全。


最后一段仅是推测,因此应该是对该问题的评论或进行了适当的研究。
Karl Richter

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.