是否有一个工具甚至整个发行版支持在更新后回滚更改的包?
举个例子:我升级了软件包 A、B 和 C。在使用这些软件包几天后,我在 B 中遇到了一个破坏交易的错误。
虽然我会提交错误报告,但我还需要将 B 降级到以前的版本,以便我可以完成我要做的事情。同时,A 依赖于 B,因此也需要降级,但 C 独立于两者,因此可以保持当前版本。
有支持此功能的工具或发行版吗?
我知道大多数发行版都有一种降级软件包的方法,但这通常有点粗略,甚至不可能,因为以前的软件包已从存储库中删除,并且在某些情况下(例如在升级 X 服务器和 Mesa 后)它真的...... 。 凌乱的。
答案1
答案2
基于任何yum
基于分布的分布(例如红帽EL,中央操作系统等),您可以:
使用以下命令检查系统更改的历史记录
sudo yum history list
Loaded plugins: fastestmirror ID | Login user | Date and time | Action(s) | Altered ------------------------------------------------------------------------------ 10 | Administrator <admin> | 2016-03-08 09:08 | Install | 11 9 | Administrator <admin> | 2016-03-03 16:48 | Install | 1 8 | Administrator <admin> | 2016-03-03 16:09 | Install | 5 7 | Administrator <admin> | 2016-02-26 18:13 | Install | 1 6 | Administrator <admin> | 2016-02-26 15:12 | Install | 27 5 | Administrator <admin> | 2016-02-26 15:07 | Install | 1 4 | Administrator <admin> | 2016-02-26 15:05 | Install | 3 < 3 | Administrator <admin> | 2016-02-26 15:03 | Install | 1 > 2 | Administrator <admin> | 2016-02-26 15:01 | I, U | 49 1 | System <unset> | 2016-02-26 14:38 | Install | 296 history list
检查详细信息,使用
sudo yum history info 10
- 回滚到历史记录中的前一点,使用
sudo yum history rollback 9
警告
有一些明显的警告:
- 如果旧包不再可用,那么你就完蛋了(引用@vonbrand),
- 如果你在 yum 之外安装任何东西,你可能会打破历史记录。
在我的示例中,<
在具有 ID 的行4
(最后一列)中,意味着我无法回滚到该点之后。
sudo yum history rollback 2
Loaded plugins: fastestmirror
Transaction history is incomplete, before 4.
You can use 'history rollback force', to try anyway.
Error: Failed history rollback, incomplete
答案3
在开放SUSE你可以轻松使用带有 Btrfs 文件系统的 Snapper。
如果您使用标准安装期间的文件系统配置,默认情况下启用。
一旦启用 Snapper,它就与yast2
和完全集成zypper
。每次您安装或升级某些内容(或创建用户等)时,它都会创建文件系统快照。
要将系统回滚到之前的状态,您只需运行yast2 snapper
.
答案4
在 Fedora 中(我确信其他发行版也是如此),您可以要求返回到以前的版本:
dnf downgrade <packages>
为您提供软件包的倒数第二个版本,您可以通过以下方式请求特定版本:
dnf downgrade <package>.<version>
仅当软件包在存储库中仍然可用时,这才有效。无论如何,该功能并非闻所未闻。它有其障碍,如果升级的一部分是更改配置,则回滚不一定是确切的过去版本。