事务性安装过程类似于 Unix/Linux 中的 Windows 安装程序

事务性安装过程类似于 Unix/Linux 中的 Windows 安装程序

Unix/Linux 中是否有类似 Windows 安装程序的事务性安装过程?

Makefile 或包管理器(例如 deb)等安装脚本通常只是直接复制文件来覆盖现有文件。

答案1

我完全不知道 Windows 安装程序工具的属性,但看看Nix 包管理器(和NixOS GNU/Linux 发行版围绕它构建)。它具有原子更新功能,因为它根本不会覆盖任何旧的内容。

另一种方法是使用文件系统快照支持,例如就像快照yum一样btrfs(还snapper在 OpenSUSE 上;dpkg也可以有前/后操作,所以我想这也可以用它来完成)。

编辑使用文件系统快照./configure && make && make install也是一种事务性的......

答案2

典型的包管理器确实会注意确保包已安装或未安装。通常会有一个过渡期,在此期间旧版本仍然安装,新文件已经解压,但名称不同。如果过渡期间系统崩溃,软件很有可能还能用;需要恢复安装命令才能完成安装。有一个时间窗口,在此期间一些新文件已经到位,一些旧文件仍然到位,但它很小。

另一方面,如果存在安装错误,则根据捕获错误的时间,即使新版本无法使用,程序也可能已切换到新版本。这在某种程度上是不可避免的:也许您只会发现新版本无法使用,因为您启动程序并打开现有文件,但无法正确解释它们。大多数 Linux 软件包管理器没有一种简单的方法来恢复升级:通常,您需要手动下载旧版本的软件包并强制安装。

当您使用 makefile 或等效文件安装从源代码编译的软件时,应将该软件安装在其自己的目录中。将每个版本安装在其自己的目录中,并在删除旧版本之前测试新版本。该程序可以从其安装目录立即使用,因此无需在旧版本和新版本之间进行切换:只需运行新版本即可。使用斯托或者X斯托在公共层次结构中创建符号链接,这样您就可以在您的PATH等等中拥有可执行文件;看跟踪程序

相关内容