有没有办法回滚最近的升级,以便能够拥有一个功能正常的系统而无需重新安装?如果没有,哪种方式是建议将此作为首要想法的最佳途径?
我看到这个想法在brainstorm.ubuntu.com上被描述过,但感觉它已经死掉了...而且论坛上充满了升级破坏事例,所以我觉得需要对这个问题采取一些行动。 谢谢!
find /var/lib/dpkg/info/ -name \*.list -mtime -3 | sed 's#.list$##;s#.*/##'
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
sudo apt-get install PROGRAM=3.6.3
Package: program
Pin: version 3.6.3*
Pin-Priority: 1000
1.0.2g-1ubuntu4.12
,那该怎么办呢?尽管如此,它却不接受这个作为版本号。我想将版本从1.0.2g-1ubuntu4.13
降级到1.0.2g-1ubuntu4.12
。 - Csaba Tothfind /var/lib/dpkg/info/ -name \*.list -mtime -3 | sed 's#.list$##;s#.*/##'
中列出了80个软件包。现在重新安装整个系统比解决问题更容易些。 - tatsu/var/log/apt/history.log
来了解apt/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
通过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
开关并不是最好的选择,因为这样可以更好地控制过程(避免破坏依赖关系)。大多数人在进行一些验证时不会弄断手指。/var/log/dpkg.log
请问您的朋友可以检查最近更新/安装的软件包清单吗?
sudo apt-get -f install
在进行重大升级时,我使用Clonezilla克隆磁盘。将其刻录到CD上,准备好一台备用的(外部)硬盘,并按照Clonezilla LiveCD上的说明进行操作。选择partition-image
模式,这样可以节省空间。
如果你认为系统出了问题(或者想要恢复之前的更改),只需启动Clonezilla LiveCD,选择(外部)硬盘上的映像文件并进行恢复。由于这些映像文件是对磁盘上每个位的字面拷贝,所以根据磁盘速度和连接速度(通常是外部USB硬盘与计算机之间的连接)的不同,可能需要几个小时。
顺便说一下,这被称为备份方法。
你可以使用apt或dpkg轻松安装给定软件包的旧版本(降级)。问题在于找到旧版本的软件包,因为随着更新的推出,这些版本经常从存储库和镜像中消失。
如果你从安装光盘、过时的镜像或缓存中安装软件包,你还需要将其固定到旧版本,以防止升级直到你允许升级。这意味着你必须观察更新并测试它们,直到解决你的问题。当然,这是一个问题,因为同时(也许永远),你将被遗留下未修复的、可能存在安全问题的软件包。这意味着每个遇到某种系统问题的用户都将被留在某种随机状态,直到他们能够解决它。
所有软件也不具备向前兼容性,因此,当使用更高版本的配置文件或数据文件时,旧版本可能无法正确运行。显然,除非你也将所有用户数据回滚到升级之前的状态,否则这是不可能解决的。
如果有办法做到这一点,那将是很好的,但这是一个巨大的问题。任何认为有一种连贯解决方案的人应该撰写一个提案,并邀请评论,或者最好是制作一个概念验证解决方案(代码、脚本、文档)。恶意挑衅和抱怨是没有建设性的。
因为没有干净的技术解决方案,大多数软件都是以“只有前进的方式”开发(和集成)的。试图管理过时的版本只会浪费大家的时间。发现问题会尽快在新版本中修复。作为一个次要的解决方案,我希望能够在某个地方保留以前的软件包版本的存档,以便偶尔进行临时解决。timeshift
。