答案1
这是将本地安装的软件包、建议的软件包和反向移植的软件包恢复到稳定+更新频道的更通用的方法。虽然其他答案是正确的,并且工作方式类似,但我认为这是一种更优雅的方法。
- 确保您删除了和文件中的
-proposed
或的条目。-backports
/etc/apt/sources.list
/etc/apt/sources.list.d/*
添加一个 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
频道也将删除任何其他软件包。现在运行
sudo apt-get update sudo apt-get dist-upgrade
检查 apt 给您的建议解决方案,如果您认为没问题,请接受它。如果您需要检查降级的原因以及要降级到哪个版本,请检查以
apt-cache policy packagename
查看有哪些版本可用以及 apt 决定安装哪个版本。再次删除该
/etc/apt/preferences.d/99-back-to-stable-updates
文件,因为不再需要它。
感谢mlind
Ubuntu 论坛提供的关于固定的灵感他的帖子从五年多前开始 - 但今天它帮助了我很多。
答案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 版本。在这种情况下,我不建议您这样做,也许有人知道这是否是一种安全的方法……