我正在编写一个 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]