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

pcm*_*pcm 6 apt 12.04

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

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

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

例如,我在本地机器上看到有更新版本的 Flash 播放器。从历史上看,我遇到过很多关于闪存破坏的问题,所以我真的很担心在这个远程系统上盲目更新而无法将其恢复。

想法/建议?

Mar*_*ski 5

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

sudo apt-get update
sudo apt-get -V upgrade
Run Code Online (Sandbox Code Playgroud)

'-V' 标志显示附加信息。至于快照 - 你真的必须在这里推出自己的快照。

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

当然,ZFS 快照很稳定,但是 Linux 没有正式的、生产就绪的 ZFS 支持(是的,我知道zfsonlinux.org和 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
Run Code Online (Sandbox Code Playgroud)

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

lvchange -an /dev/vg0/root
Run Code Online (Sandbox Code Playgroud)


mik*_*ver 1

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

  2. 确保有可从中恢复的系统快照。无法滚动/掉落/行走/跳跃等返回命令apt-get

不更新 Adob​​e Flash 是一个坏主意,并且由于 Flash 通常不会破坏除自身以外的任何内容,因此我建议保持其更新,否则,完全删除它。