我怎样才能从升级恢复到建议的存储库?

我怎样才能从升级恢复到建议的存储库?

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

我怎样才能撤销此操作?

这里有检测结果@enzotib 的说明检测结果我的指示

答案1

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

  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 将使 apt 强制降级该频道的软件包,并且优先级 < 0 的-proposed-backports频道也将删除任何其他软件包。

  3. 现在运行

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

    检查 apt 给您的建议解决方案,如果您认为没问题,请接受它。如果您需要检查降级的原因以及要降级到哪个版本,请检查以apt-cache policy packagename查看有哪些版本可用以及 apt 决定安装哪个版本。

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

感谢mlindUbuntu 论坛提供的关于固定的灵感他的帖子从五年多前开始 - 但今天它帮助了我很多。

答案2

这一页建议使用 Apt pinning 来降级整个存储库,方法是利用引脚优先级高于 1000 可能会导致封装降级

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

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 提议)存储库,然后删除临时优先级增加:

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

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

答案3

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

以下脚本可以执行降级

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

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

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

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

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

答案4

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

现在你必须“降级”这些软件包。逐个选择,然后在上方菜单中选择:

package > force version

(或 Control+E)

会出现一个菜单,其中列出了可用的选项。我会为每个包选择较低的版本号。如果你犯了错误,而正常的仓库中有更新的版本,那么这个问题会在以后的更新中得到解决。

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

相关内容