如何在更新 stage-packages/snapcraft.yaml 文件后提取/构建部件而不删除旧缓存,snapcraft?

如何在更新 stage-packages/snapcraft.yaml 文件后提取/构建部件而不删除旧缓存,snapcraft?

我正在编写一个 snapcraft 配方,我以为已经写完了,所以在基础目录中发出了 snapcraft 命令,结果生成了一个.snap文件。我安装并运行了该应用程序,结果返回了一些错误,例如 *lib missing 等。

我将该库添加到 snapcraft.yaml 文件中,并在基础目录中重新运行 snapcraft,结果又生成了一个.snap文件。我测试了它,但其中没有包含更改。

现在我不想清理该部分的整个拉取步骤,因为最好下载该单个库,而不是清理整个并重新下载整个缓存。

如果我针对该特定部分发出 snapcraft pull 命令,它会说already done,这意味着该工具无法识别用户在编辑 snapcraft 文件时所做的更改。

我能做些什么来完成工作或者该工具需要进一步的修复吗?

答案1

如您所知,您可以使用一组部件来告诉 snapcraft 如何构建。在每个部件上,您都可以选择使用stage-packages,这本质上是在说“这些 deb 的内容及其依赖项应该与此部件一起包含”。这些包可能只是运行时需要的一些数据或库,也可能是构建(甚至是拉取!)时需要的东西。为了启用在拉取或构建时需要的阶段包,snapcraft 会在步骤。这意味着,如果您将新的阶段包添加到已拉取的部分,则必须再次拉取它。

当然,snapcraft 应该知道你添加了一个 stage 包,这使得该部分的步骤已经过时。目前还没有(如您所指出的),但是将在 2.23 中

如果该部分实际上不需要阶段包(或仅在运行时需要)并且您确实不想重新拉(并重新构建)相关部分,则可以考虑将新的阶段包拆分到另一个独立的部分:

extra-debs:
  plugin: nil
  stage-packages: [foo]

相关内容