如何从命令行回滚 apt-get 升级?

如何从命令行回滚 apt-get 升级?

我远程管理 12.04 LTS 桌面,并会定期执行 sudo apt-get update sudo apt-get upgrade

但是,如果升级安装了某些导致系统问题的东西,我想将其回滚到以前的版本。

  1. 有没有办法知道哪些项目将升级,以及升级的版本?
  2. 升级完成后,有没有办法恢复以前的版本(及其所有依赖项)。

例如,我在本地机器上看到 Flash Player 有更新版本。从历史上看,我遇到过许多 Flash 破坏问题,所以我真的很担心在这个远程系统上盲目更新而无法撤消。

有什么想法/建议吗?

答案1

您可以使用以下命令显示将要升级的软件包和版本变更:

sudo apt-get update
sudo apt-get -V upgrade

“-V”标志会显示附加信息。至于快照 - 您确实必须自己动手。

我最喜欢的回滚功能方法是在 Linux 上使用带快照的 LVM - 但上次我检查时,自动回滚到所选快照没有任何进展。从那时起,这种情况可能已经发生了变化(我很高兴有人能纠正我),但您始终可以使用root=/dev/vg0/root-snap内核参数(例如)进行启动,然后使用 rsync 将快照同步/dev/vg0/root-snap到原始卷/dev/vg0/root,然后丢弃快照。不是理想的,但可以自动化。

当然,ZFS 快照很棒,但是 Linux 上没有官方的、可用于生产的 ZFS 支持(是的,我知道linux之家和 ZFS-FUSE),所以除非您只是玩玩,否则这对您来说并不是一个可行的选择。

更新:看来我们现在可以回滚(用 LVM2 的说法就是合并)快照。因此,对于 LVM2,更新将采用以下形式:

  1. 创建根 LV 的 5GB 快照:

    lvcreate -s /dev/vg0/root -L5G -n root-snap

  2. 更新包(如上)。

  3. 如果有必要,请运行以下命令回滚:

    lvconvert --merge /dev/vg0/root-snap

由于 /dev/vg0/root(原始 LV)已打开,lvconvert 将通知您,在下次激活此卷时,/dev/vg0/root 将回滚到 /dev/vg0/root-snap。当您运行

lvchange -ay /dev/vg0/root

当此 LV 关闭时,即在下次启动时或运行后:

lvchange -an /dev/vg0/root

答案2

  1. 运行sudo apt-get update && sudo apt-get -s dist-upgrade以查看将要安装和更新的内容(dist-upgrade不会执行发布升级!)。该命令是试运行,因此实际上没有安装任何内容。

  2. 确保有系统快照恢复。无法通过滚动/跌倒/行走/跳跃/等方式恢复命令apt-get

不更新 Adob​​e Flash 是馊主意,而且由于 Flash 通常不会破坏其自身以外的任何东西,我建议保持其更新,否则,彻底删除它。

相关内容