我不知道这是否是常识,但 RPM 支持在执行升级后回滚到以前的安装(例如,这会破坏某些东西)。您可以通过 rpm --repackage标志来生成一堆当前安装的文件的 RPM,这些文件将被更改。然后,您可以说“ rpm -Uvh --rollback '2 hours ago' ”并毫不费力地将您的机器回滚到 2 小时前。
我的问题是,有没有人在基于 Debian 的发行版中发现类似的东西?
我不知道这是否是常识,但 RPM 支持在执行升级后回滚到以前的安装(例如,这会破坏某些东西)。您可以通过 rpm --repackage标志来生成一堆当前安装的文件的 RPM,这些文件将被更改。然后,您可以说“ rpm -Uvh --rollback '2 hours ago' ”并毫不费力地将您的机器回滚到 2 小时前。
我的问题是,有没有人在基于 Debian 的发行版中发现类似的东西?
我不相信
aptitude
or有这样的选择apt-get
。但是,在/var/log/aptitudeaptitude
保留一个出色、清晰的日志。您可以使用它来尝试回滚。效果如何取决于具体情况。如果您只想删除一些已安装的软件包,那应该是微不足道的。但是,如果您已经升级(因为您遵循测试或不稳定,或者因为您安装了安全升级或点发布升级),那么事情会更复杂一些。您可以检查您的缓存中是否还有旧的 .deb,或者您可以访问Debian 快照。
如果你不使用,你可以在's log (at )
aptitude
中四处寻找,但我发现使用起来不太友好。dpkg
/var/log/dpkg.log
编辑现在我看这篇文章,有一点有点相似。您可以通过执行此序列来获取包的状态。首先获取当前包状态的列表:
然后稍后您可以使用该包列表回滚:
我已经使用这种方法重新安装,然后在机器上拥有当前的软件包集,并且运行良好。不过,同样,它的工作情况取决于您可以使用上一个包列表中的哪些包 - 无论是在您的缓存中还是在您的存储库中。
dpkg 或任何 apt 相关工具中没有这样的选项,有一个简单的原因可以解释这一点。安装包不仅是解包文件,而且是配置它们,这是通过运行与每个包关联的安装前/后安装/删除脚本来完成的。
恢复旧文件很容易,但撤消 postinst 脚本所做的事情要困难得多。理论上 dpkg 支持降级,因为它为脚本提供了所有必要的信息,以便它们可以检测到它们何时被降级,但实际上很少有软件包实现正确支持(并且 Debian 不正式支持降级)。
但是请注意,对于许多没有 postinst 脚本的简单软件包,降级效果很好。
apt-get
并可aptitude
用于强制安装旧版本,语法如下:因此,如果您记下所有随其版本安装的软件包,则在大多数情况下,您可以恢复以前的可用状态。
/var/log/dpkg.log
您还可以通过分析 dpkg 的日志(或 aptitude 的日志,如果您只使用aptitude
和不使用)来找出以前安装的版本apt-get
。遗憾的是,这不是 dpkg 或 apt 能够做到的。Debian 软件包并不是真的要降级,它不受支持或测试。当然没有快照支持。
但是,话虽如此,您可以手动完成。如果您查看 /var/log/dpkg.log,您会发现已发生的操作日志。这有点冗长,但是您应该能够获得已安装的先前版本的软件包的列表。假设它们在您的 sources.list 中配置的存储库中仍然可用,您应该能够:
如果它们在 repo 中不可用,您可能仍会在 /var/cache/apt/archives/ 中找到它们,或者您可以在某个地方找到它们可供下载,也许在另一个存储库中。获得软件包列表后,您可以运行:
然后您应该会发现您回到了之前安装的版本。你可能会发现有些东西不一样,比如配置。
有一种使用 LVM 创建快照的方法,但在现有安装上启用它并不是特别快速或容易。您可能必须重新安装系统并设置驱动器以使用 LVM。然后,您可以创建一个 LVM 快照、进行升级、测试它,然后如果您满意则删除该快照,或者如果您不满意则回滚到该快照。显然,自快照以来写入的任何数据以及包都将被删除。