与Debian交易和回滚

我不知道这是否是常识,但是RPM在执行升级后(例如破坏了某些东西)支持回滚到以前的安装。 你可以通过rpm –repackage标志来生成一堆当前安装的RPM文件,它将会改变。 之后,您可以在2小时前说出“ rpm -Uvh -rollback ”,然后轻松地将您的机器回滚到2小时前的状态。

我的问题是,有没有人在基于Debian的发行版中find类似的东西?

我不相信有这样一个select与aptitudeapt-get 。 然而, aptitude会保留一个优秀的,明确的日志/ var / log / aptitude 。您可以使用它来尝试回滚。

这将取决于具体的情况。 如果你只是想删除你已经安装的一些软件包,它应该是微不足道的。 但是,如果您已经升级(或者因为您正在进行testing或者不稳定,或者因为您安装了安全升级或点发布升级),那么情况会更复杂一些。 您可以检查您的caching中是否仍有较旧的.deb,或者您可以访问Debian快照 。

如果你不使用aptitude ,你可以在dpkg的日志里(在/var/log/dpkg.log )查找,但是我觉得这样做很不友好。

编辑现在我看看这篇文章,有一点是相似的。 你可以通过这个顺序来得到你的包的状态。 首先获取当前包状态列表:

 dpkg --get-selections "*" > my_packages-datestamp 

然后稍后可以使用该软件包列表进行回滚:

 dpkg --set-selections < my_packages-datestamp apt-get -u dselect-upgrade 

我已经使用这种方法重新安装,然后确切地在机器上的当前套件,它运作良好。 不过,再次说明,它的运行效果取决于以前软件包列表中的哪些软件包可供您使用 – 无论是在caching还是在您的回购站中。

dpkg中没有这样的选项,或者任何与apt相关的工具,这里有个简单的解释。 安装软件包不仅可以解压缩文件,还可以对其进行configuration,这可以通过运行与每个软件包关联的前/后安装/删除脚本来完成。

恢复旧文件很容易,但撤消postinst脚本所做的更加困难。 理论上dpkg支持降级,因为它给脚本提供了所有必要的信息,所以他们可以检测到降级的时间,但实际上很less有包实现支持正确(而Debian不支持官方降级)。

但是请注意,对于许多没有postinst脚本的简单软件包,降级的效果非常好。 apt-getaptitude可以用来强制安装老版本的语法如下:

 aptitude install foo/testing # Downgrade a package to testing if you run unstable aptitude install foo=1.2-3 # Downgrade to 1.2-3 if you run a higher version 

所以,如果你记下所有与他们的版本一起安装的软件包,大多数情况下可以恢复以前的状态。 你也可以通过分析dpkg的日志/var/log/dpkg.log (或aptitude的日志,如果你只使用aptitude而不是apt-get )来find以前安装的版本。

可悲的是,这不是dpkg或apt能够做到的。 Debian软件包并不是真的被降级,它不被支持或testing。 当然没有快照支持。

不过,话虽如此,你可以亲自去做。 如果你查看/var/log/dpkg.log,你会发现已经发生的操作的日志。 这有点冗长,但你应该能够得到已经安装的软件包以前版本的列表。 假设它们仍然可以在您的sources.list中configuration的存储库中使用,那么您应该能够:

  #apt-get install foo = 1.2 bar = 3.4-5 

如果它们在回购中不可用,那么您仍然可以在/ var / cache / apt / archives /中find它们,或者您可能能够find它们可以在某处(可能在另一个存储库中)下载。 一旦你有你的软件包列表,你可以运行:

  #dpkg -i foo_1.2_amd64.deb bar_3.4-5_all.deb 

你应该会发现你已经回到之前安装的版本。 你可能会发现有些东西是不一样的,比如configuration。

有一种使用LVM创build快照的方法,但是在现有的安装上这不是特别快速或容易启用的。 您可能需要重新安装系统并设置驱动器以使用LVM。 然后,您可以创build一个LVM快照,执行升级,testing它,然后在快乐的情况下移除快照,如果不快照则移回快照。 很明显,自从快照以来所写的任何数据都将被删除以及软件包。