Answers:
这是从本地安装的软件包,建议的软件包和向后移植软件包恢复到稳定+更新通道的更通用的方法。尽管其他答案是正确的,并且以类似的方式起作用,但我认为这是一种更为优雅的方法。
-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的固定将使该通道上的软件包降级,而-proposed
和-backports
通道上的优先级<0则也将删除所有其他软件包。
现在运行
sudo apt-get update
sudo apt-get dist-upgrade
检查建议的解决方案是否会给您,如果您认为还可以,请接受。如果您需要检查将其降级到哪个版本以及将其降级到哪个版本,请与apt-cache policy packagename
一起查看以查看可用的版本以及易于决定安装的版本。
/etc/apt/preferences.d/99-back-to-stable-updates
再次删除该文件,因为不再需要它。
感谢mlind
在Ubuntu论坛上对5年前钉住他的帖子的这种奉献-但是今天它对我的帮助很大。
该页面建议利用引脚优先级高于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
最后,重新启动,以便所有正在运行的程序均为降级版本。
我找不到比以下方法更简单的解决方案。希望有人能提供更好的答案。
以下脚本可以执行降级
#!/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-get
bash脚本的末尾。
在突触中,您可以禁用建议的存储库并更新源。然后,您将看到比已更新的所有软件包都显示为本地安装(因为它们不再位于存储库中)。
现在,您必须“降级”那些软件包。一一选择,然后在上方菜单中选择:
package > force version
(或Control + E)
将出现一个带有可用选项的菜单。我会为每个软件包选择较低的版本号。如果您输入有误,并且正常存储库中有较新版本,它将在以后的更新中解决。
一种快速的解决方案是使用指向已放置的存储库的purge-ppa命令,但不知道它是否适用于它们,我只用它来将外部ppa的软件包降级并降级为正式的ubuntu版本。在这种情况下,我不建议您这样做,也许有人知道这是否安全。
我建议提供一个功能,proposed
以一个等效ppa-purge
于https://bugs.launchpad.net/ubuntu/+source/software-properties/+bug/1810499的简单维护命令来降级所有软件包,因为此处的帖子似乎仍代表系统状态。
“提议”-明白吗?