有没有办法回滚最近的升级?

Mar*_*uiz 69 upgrade

在过去的 5 年里,这种情况在我身上发生过很多次:升级破坏了我的系统。每次遇到这种情况,都要重装整个系统,真的很烦。

有什么方法可以回滚最近的升级,以便无需重新安装即可拥有功能正常的系统?如果没有,建议将此作为首要想法的最佳方式是什么?

我在brainstorm.ubuntu.com 中读到了这个想法,但感觉它已经死了……而且论坛上到处都是升级破坏的例子,这就是为什么我觉得需要对这个话题做点什么。谢谢!

use*_*own 16

在突触中,您至少可以控制最近的更新:文件菜单、历史记录。

(如果突触可启动,则系统已损坏)。因此,使用 apt-...-command 来恢复他们的更新,应该不会太难。

我想命令行也有一个历史命令。

也许您必须删除整个软件包,然后安装特定版本。Afaik,可以安装特定版本,但我从未需要这样做。

更新:查找如何处理 apt:

查找最近 3x24 小时内安装的软件包:

find /var/lib/dpkg/info/ -name \*.list -mtime -3 | sed 's#.list$##;s#.*/##' 
Run Code Online (Sandbox Code Playgroud)

使用 apt-cache 策略,您可以看到程序的可用版本:

sudo apt-cache policy PROGRAM:
 *** 3.6.7+build3+nobinonly-0ubuntu0.10.04.1 0
        500 http://de.archive.ubuntu.com/ubuntu/ lucid-updates/main Packages
        500 http://security.ubuntu.com/ubuntu/ lucid-security/main Packages
        100 /var/lib/dpkg/status
     3.6.3+nobinonly-0ubuntu4 0
Run Code Online (Sandbox Code Playgroud)

这里 3.6.7 和 3.6.3 。现在您知道可能安装的是哪个早期版本(通常不是直接的前身):

sudo apt-get install PROGRAM=3.6.3
Run Code Online (Sandbox Code Playgroud)

然后你需要做一个 apt-pinning,以防止未来的更新:

在 /etc/apt/preferences.d/(如果 >= 10.4)中创建一个以您的程序命名的新文件,

Package: program
Pin: version 3.6.3*
Pin-Priority: 1000
Run Code Online (Sandbox Code Playgroud)


小智 8

大多数情况下,您可以咨询/var/log/apt/history.logapt/synaptic 所做的更改。这只是一个小法医和很多剪切/粘贴要做。

回到您的系统仍能正常工作的日期。

首先获取从那时起安装的所有软件包,并将它们放在一个卸载脚本中。脚本完成后,再次开始重新添加所有已删除的包。

示例案例:
日志文件:

Start-Date: 2014-05-28  21:28:11
Commandline: synaptic
Install: libfglrx-amdxvba1:amd64 (13.12-3kali1, automatic), libgl1-fglrx-glx:amd64 (13.12-3kali1), glx-alternative-fglrx:amd64 (0.4.1kali1, automatic), libfglrx:amd64 (13.12-3kali1, au$
Remove: fglrx-glx-ia32:amd64 (12-6+point-3)
End-Date: 2014-05-28  21:28:27
Run Code Online (Sandbox Code Playgroud)

你可以看到,

libfglrx-amdxvba1:amd64 libgl1-fglrx-glx:amd64 glx-alternative-fglrx:amd64 & libfglrx:amd64 
Run Code Online (Sandbox Code Playgroud)

由 Synaptic 安装。就像libfglrx:amd64被 Synaptic 删除一样。

我们采用相反的顺序,所以首先我们删除新安装的包,然后重新添加被删除的包。

这种情况下的工作命令可能如下所示:

sudo apt-get remove -y libfglrx-amdxvba1:amd64 libgl1-fglrx-glx:amd64 glx-alternative-fglrx:amd64 libfglrx:amd64 && sudo apt-get install -y libfglrx:amd64
Run Code Online (Sandbox Code Playgroud)

也许没有-y开关就不是最好的主意- 对过程有更多的控制(以避免破坏依赖关系)。你们中的大多数人在做一些验证“y”时都不会折断他们的手指

在大多数情况下,可以通过这种方式进行回滚,但是如果依赖关系已经被破坏 - 您可能会遇到更大的问题。


小智 7

大多数情况下,如果您的系统损坏,则是内核问题。

只需启动较旧的内核并重新安装可能未正确更新的最新软件包(尤其是内核软件包)。几点注意事项:

/var/log/dpkg.log
Run Code Online (Sandbox Code Playgroud)

是您的朋友检查最近更新/安装的软件包列表是什么

sudo apt-get -f install
Run Code Online (Sandbox Code Playgroud)

大多数时候可以修复半安装的软件包

  • 究竟如何“简单地”启动旧内核? (3认同)