AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 21436
Accepted
Coops
Coops
Asked: 2009-06-08 02:19:49 +0800 CST2009-06-08 02:19:49 +0800 CST 2009-06-08 02:19:49 +0800 CST

使用 Debian 进行事务和回滚

  • 772

我不知道这是否是常识,但 RPM 支持在执行升级后回滚到以前的安装(例如,这会破坏某些东西)。您可以通过 rpm --repackage标志来生成一堆当前安装的文件的 RPM,这些文件将被更改。然后,您可以说“ rpm -Uvh --rollback '2 hours ago' ”并毫不费力地将您的机器回滚到 2 小时前。

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

linux debian rpm
  • 3 3 个回答
  • 6276 Views

3 个回答

  • Voted
  1. Best Answer
    Telemachus
    2009-06-08T02:40:36+08:002009-06-08T02:40:36+08:00

    我不相信aptitudeor有这样的选择apt-get。但是,在/var/log/aptitudeaptitude保留一个出色、清晰的日志。您可以使用它来尝试回滚。

    效果如何取决于具体情况。如果您只想删除一些已安装的软件包,那应该是微不足道的。但是,如果您已经升级(因为您遵循测试或不稳定,或者因为您安装了安全升级或点发布升级),那么事情会更复杂一些。您可以检查您的缓存中是否还有旧的 .deb,或者您可以访问Debian 快照。

    如果你不使用,你可以在's log (at )aptitude中四处寻找,但我发现使用起来不太友好。dpkg/var/log/dpkg.log

    编辑现在我看这篇文章,有一点有点相似。您可以通过执行此序列来获取包的状态。首先获取当前包状态的列表:

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

    然后稍后您可以使用该包列表回滚:

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

    我已经使用这种方法重新安装,然后在机器上拥有当前的软件包集,并且运行良好。不过,同样,它的工作情况取决于您可以使用上一个包列表中的哪些包 - 无论是在您的缓存中还是在您的存储库中。

    • 6
  2. Raphaël Hertzog
    2009-06-08T05:51:08+08:002009-06-08T05:51:08+08:00

    dpkg 或任何 apt 相关工具中没有这样的选项,有一个简单的原因可以解释这一点。安装包不仅是解包文件,而且是配置它们,这是通过运行与每个包关联的安装前/后安装/删除脚本来完成的。

    恢复旧文件很容易,但撤消 postinst 脚本所做的事情要困难得多。理论上 dpkg 支持降级,因为它为脚本提供了所有必要的信息,以便它们可以检测到它们何时被降级,但实际上很少有软件包实现正确支持(并且 Debian 不正式支持降级)。

    但是请注意,对于许多没有 postinst 脚本的简单软件包,降级效果很好。apt-get并可aptitude用于强制安装旧版本,语法如下:

    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
    

    因此,如果您记下所有随其版本安装的软件包,则在大多数情况下,您可以恢复以前的可用状态。/var/log/dpkg.log 您还可以通过分析 dpkg 的日志(或 aptitude 的日志,如果您只使用aptitude和不使用)来找出以前安装的版本apt-get。

    • 1
  3. David Pashley
    2009-06-08T02:50:00+08:002009-06-08T02:50:00+08:00

    遗憾的是,这不是 dpkg 或 apt 能够做到的。Debian 软件包并不是真的要降级,它不受支持或测试。当然没有快照支持。

    但是,话虽如此,您可以手动完成。如果您查看 /var/log/dpkg.log,您会发现已发生的操作日志。这有点冗长,但是您应该能够获得已安装的先前版本的软件包的列表。假设它们在您的 sources.list 中配置的存储库中仍然可用,您应该能够:

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

    如果它们在 repo 中不可用,您可能仍会在 /var/cache/apt/archives/ 中找到它们,或者您可以在某个地方找到它们可供下载,也许在另一个存储库中。获得软件包列表后,您可以运行:

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

    然后您应该会发现您回到了之前安装的版本。你可能会发现有些东西不一样,比如配置。

    有一种使用 LVM 创建快照的方法,但在现有安装上启用它并不是特别快速或容易。您可能必须重新安装系统并设置驱动器以使用 LVM。然后,您可以创建一个 LVM 快照、进行升级、测试它,然后如果您满意则删除该快照,或者如果您不满意则回滚到该快照。显然,自快照以来写入的任何数据以及包都将被删除。

    • 0

相关问题

  • 多操作系统环境的首选电子邮件客户端

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve