您将如何测试包管理器将安装的可用目录?

您将如何测试包管理器将安装的可用目录?

我正在尝试为具有多个依赖项的系统制作一些安装脚本,并且在进行任何实际安装之前,我已经弄清楚如何使用--dry-run包管理器(在本例中为 Ubuntu )。apt

但是,安装软件包后,需要复制某些配置文件。在提交安装之前,我将如何检查这一点以确保目标可用?

我不想执行脚本来部分安装东西并使系统处于不可预测的状态,但如果涉及的包不存在,配置目录也不存在供我检查。

假设我想复制到base.confto /etc/package/system/,但/etc/package/根本不存在。如果目标配置错误(例如拼写错误sytem),则在复制过程中安装包后会出错,这可能是已复制的多个配置文件之一,所以我没有办法“回滚”可以这么说。我的最终目标是安装过程不会留下部分复制的文件。

失败场景是需要复制多个文件时。如果有 3 个文件要复制,并且第 3 个文件的目标配置错误,它仍会复制前 2 个文件,并在第 3 个文件时出错。残留文件将在下次运行时导致进一步的错误。

PS:我怀疑我可能需要创建一个真正的包来处理依赖项,但所需的复杂性和时间要高得多,我现在不想投资。

答案1

您可以提前检查包的内容,甚至无需下载它们;请参阅apt-file及其list命令。

然而,这永远不会给你一个完整的画面,并且你无法在不安装任意包的情况下构建它所做的更改的完整画面:包可以提供执行其他更改的维护者脚本。这意味着包可以创建一个目录,而从包的元数据中看不到这一点,并且您只能通过分析维护者脚本来找到它,并考虑到它们的所有副作用以及包的依赖项的副作用。

在你的场景中,我怀疑你需要一个两阶段的方法:

  • 使用包管理系统安装您需要的所有包;
  • 检查您对生成的目录布局和安装的文件的所有期望,以及
    • 如果满足您的期望,请将所有其他文件复制到位;
    • 如果不是,请清除您安装的所有软件包(这样--autoremove所有自动安装的依赖项也会被删除)。

相关内容