在过去的五年中,我经历了很多次:升级破坏了我的系统。每次遇到这种情况时,都必须重新安装整个系统,这确实很烦人。
有什么方法可以回滚最新的升级,以便无需重新安装即可拥有功能正常的系统?如果没有,那么建议将其作为头等大事的最佳方法是什么?
我看过在Brainstorm.ubuntu.com上描述了这个想法,但是感觉已经死了……而且论坛上充斥着许多升级实例,这就是为什么我觉得需要对此主题做一些事情的原因。谢谢!
在过去的五年中,我经历了很多次:升级破坏了我的系统。每次遇到这种情况时,都必须重新安装整个系统,这确实很烦人。
有什么方法可以回滚最新的升级,以便无需重新安装即可拥有功能正常的系统?如果没有,那么建议将其作为头等大事的最佳方法是什么?
我看过在Brainstorm.ubuntu.com上描述了这个想法,但是感觉已经死了……而且论坛上充斥着许多升级实例,这就是为什么我觉得需要对此主题做一些事情的原因。谢谢!
Answers:
在突触中,您至少可以控制最近的更新:文件菜单,历史记录。
(如果突触是可启动的,则系统已损坏)。因此,使用apt -...-命令恢复其更新,应该不会太困难。
我想命令行也有一个历史命令。
也许您必须删除整个软件包,然后安装特定版本。Afaik,可以安装特定版本,但是我从来不需要这样做。
查找最近3x24h安装的软件包:
find /var/lib/dpkg/info/ -name \*.list -mtime -3 | sed 's#.list$##;s#.*/##'
使用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
这里3.6.7和3.6.3。现在,您知道可以安装哪个较早版本(通常不是直接的先前版本):
sudo apt-get install PROGRAM=3.6.3
然后,您需要进行apt-pining,以防止将来进行更新:
在/etc/apt/preferences.d/(如果> = 10.4)中创建一个以您的程序命名的新文件,
Package: program
Pin: version 3.6.3*
Pin-Priority: 1000
1.0.2g-1ubuntu4.12
符合apt怎么办?它拒绝接受它作为版本号。我想将表格降级1.0.2g-1ubuntu4.13
至1.0.2g-1ubuntu4.12
find /var/lib/dpkg/info/ -name \*.list -mtime -3 | sed 's#.list$##;s#.*/##'
,重新安装整个系统的麻烦就少了
通常,您可以咨询/var/log/apt/history.log
apt / synaptic完成的更改。这只是一点取证和剪切/粘贴操作。
返回到系统仍然可以正常工作的日期。
首先将所有自此以来已安装的软件包打包,然后将它们放到卸载脚本中。脚本完成后,再次开始重新添加所有已删除的软件包。
一个例子:
logfile:
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
你可以看到
libfglrx-amdxvba1:amd64 libgl1-fglrx-glx:amd64 glx-alternative-fglrx:amd64 & libfglrx:amd64
由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
也许没有-y
开关就不是最好的主意-对过程进行更多控制(避免破坏依赖性)。你们大多数人在做一些验证“ y”时都不会断手指
在大多数情况下,可以通过这种方式进行回滚,但是如果依赖关系已被破坏,则可能会遇到更大的问题。
大多数情况下,如果系统损坏,则是内核问题。
只需启动一个较旧的内核,然后重新安装可能未正确更新的最新软件包(尤其是内核软件包)。一些注意事项:
/var/log/dpkg.log
是您的朋友,请检查最近更新/安装的软件包列表是什么
sudo apt-get -f install
大部分时间都能修复一半安装的软件包
不幸的是,目前尚无办法。文件系统级快照/回滚是即将推出的btrfs的功能之一,但是它有一种方法可以使功能变得完整且稳定,足以用作默认文件系统。
进行重大升级时,我使用Clonezilla克隆磁盘。将其刻录到CD上,具有备用(外部)HDD并按照Clonezilla LiveCD上的说明进行操作。选择partition-image
模式,这将使用最少的空间。
如果您认为自己的系统已损坏(或希望还原任何更改),只需在Clonezilla LiveCD中启动,在(外部)HDD上选择映像并还原即可。由于这些映像是磁盘上每个位的文字副本,因此可能要花费几个小时,具体取决于磁盘速度和连接速度(数据(通常是外部USB HDD)与计算机之间的连接)。
顺便说一句,这称为备份方法。
您可以使用apt或dpkg轻松安装给定软件包的旧版本(降级)。找到该软件包的较旧版本是个问题,因为随着更新的推出,这些软件包通常会从池中消失并镜像。
如果从安装CD或过期的镜像或高速缓存中安装软件包,则还需要将其固定在旧版本上,以便在允许之前不会对其进行升级。这意味着您必须注意更新并进行测试,直到问题解决。这当然是一个问题,因为与此同时(也许永远),您将获得未固定的,可能不安全的软件包。这意味着每个遇到某种系统问题的用户都将处于某种随机状态,直到他们可以解决它为止。
所有软件也不是向前兼容的,因此某些旧版本的软件在与较新的配置或数据文件配合使用时可能无法正常运行。显然,除非您也将所有用户数据回滚到升级之前的状态,否则这是无法解决的。
如果有一种方法可以做到这一点,那就太好了,但这是个很大的问题。任何认为有一个连贯的解决方案的人应该写一个建议并邀请评论,或者更好的是,提出一个概念证明解决方案(代码,脚本,文档)。拖曳和抱怨不是建设性的。
由于没有干净的技术解决方案,因此大多数软件的开发(和集成)都具有“前进的唯一途径”的思路。尝试管理过时的版本浪费了每个人的时间。发现的问题已在较新版本中尽快修复。作为一个较小的解决方案,我希望看到以前的软件包版本的档案保存在某个地方,以偶尔进行临时解决。
同时,您可以报告错误,并且不要指望一流的软件永远不会失败。一旦找到修复程序,则应在下一个更新中。开发人员(大多数情况下)是人,因此容易犯错误。电脑很杂乱,充满了疯狂的变化和细节。使用良好支持的组件和稳定的集成软件分发进行防御性维护的系统可以非常稳定,而不会因此变得不安全或不可升级。