是否有任何方法可以回滚最新的升级?

分享于 

8分钟阅读

ubuntu

 

问题:

在过去的5年中,我多次发生了这种情况: 升级破坏了我的系统。 每次我遇到这种情况时,我都不得不重新安装整个系统,这真的很烦人。

是否有任何方法可以回滚最近的升级,以便能够不重新安装功能系统? 如果不是,那么最好的方法是把这作为一个最高优先级的想法?

我在 brainstorm.ubuntu.com, 中读到这个想法,但它觉得它死了。 论坛充分介绍了升级事件的例子,这就是为什么我觉得需要完成这个主题的原因。 谢谢!


回答 1:

在synaptics中,你至少可以控制最近更新的内容: 文件菜单,历史记录。

( 如果突触是可以启动的,系统崩溃)。 所以用 apt-。-command来恢复他们的更新不应该太难。

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

也许你必须删除整个包,并安装特定的版本。 ,可以安装一个特定版本,但我从没有必要这样做。

更新:查找如何处理 apt:

查找安装在最后 3 x24h中的软件包:


find/var/lib/dpkg/info/-name *.list -mtime -3 | sed 's#.list$##;s#.*/##' 



使用apt缓存策略,你可以看到程序的可用版本:


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



然后你需要进行适当的锁定,以防止将来的更新:

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


Package: program


Pin: version 3.6.3*


Pin-Priority: 1000




回答 2:

大多数情况下,你可以参考 /var/log/apt/history.log/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



你可以看到


libfglrx-amdxvba1:amd64 libgl1-fglrx-glx:amd64 glx-alternative-fglrx:amd64 & libfglrx:amd64 



通过突触安装,就像 libfglrx:amd64 被突触所移除。

我们进行了反转,所以首先删除新安装的软件包,然后添加已经删除的软件包。

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


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 switch - 有更多的控制进程( 避免损坏的依赖项)。 大多数人不会打断他们的手指,而做一些验证""

在大多数情况下,回滚是可以的,但是如果依赖关系已经断开,则可能会更大。


回答 3:

大多数情况下,如果系统被破坏,它是一个的内核问题。

简单引导一个旧内核并重新安装最近可能没有正确更新的最新软件包( 特别是内核软件包)。 注意:

 
/var/log/dpkg.log



 

你的朋友要检查最近更新/已经安装的软件包的列表


sudo apt-get -f install



大部分时间可以固定安装的软件包


回答 4:

不幸的是,还没有办法做到这一点。 文件系统 级快照/回滚是即将发生的一个特性,但它还有一种方法可以成为默认 文件系统。


回答 5:

在进行重大升级时,我使用 克隆磁盘。 将它刻录到光盘上,使用备用( 外部) 硬盘并按照Clonezilla上的指示操作。 选择 partition-image 模式,这将使用最小空间。

如果你认为已经破坏了系统( 或者希望还原任何更改),只需在Clonezilla中启动,在( 外部) 硬盘上选择映像并恢复它。 由于这些图像是磁盘上每位的文本副本,这可能需要几个小时,这取决于磁盘速度和连接速度( ( 数据之间的连接,通常是外部USB硬盘和计算机) )。

顺便说一下,这叫做备份方法。


回答 6:

你可以使用apt或者dpkg轻松安装一个给定软件包( 降级)的较老版本。 查找旧版本的软件包是问题,因为它们通常从池和镜像中消失。

如果你从安装CD或者过期的镜像或者缓存安装软件包,你还需要将它固定到旧版本。 也就是说你必须观察更新和测试,直到你的问题得到解决。 这当然是一个问题,因为( 也许永远) 同时会留下不固定的,可能不安全的包。 这意味着每个具有某种系统问题的用户都将在一些随机状态下留下来,直到他们。

所有软件也不是转向兼容的,所以一个旧版本的东西可以能很不正常。 显然,除非你还将所有用户数据回滚到升级之前的状态,这是不可能解决的。

如果有一种方法可以做到这一点,但是它是大量的问题。 任何认为有相干解决方案的人都应该写建议并邀请评论,更好的解决方案( 代码,脚本,文档)。 Trolling和抱怨不是 constructive。

由于没有清洁的技术解决方案,大多数软件都是( 并集成) 开发的"唯一的方法是"。 试图管理过时的版本是浪费大家的时间。 发现问题已经在较新版本中修复。 作为一个小的解决方案,我想看一下在某些时候保存在某个地方的一个。

同时你可以报告 Bug,不要期望流血边缘软件永远不会失败。 修复后,应在下一次更新中进行修复。 Devs是人类的( 大部分),因此容易出错。 计算机 are,充满了疯狂的细节和细节。 采用良好支持组件和稳定的集成软件分配的防护系统不不安全不可以升级。



相关文章