Snap包:“staging”和“priming”步骤的目的是什么?

时间:2017-04-22 07:17:30

标签: snapcraft

我已成功创建并上传了一个快照包(教程很棒)。但是,我不知道在每个构建步骤中到底发生了什么,以及我如何利用它们。

这个过程似乎是 pull - >构建 - >阶段 - >素数 - >卡扣

根据我的观察,看来“pull”将文件放入parts/<part name>/src/文件夹,“build”将文件放入parts/<part name>/build/文件夹,“stage”将文件放入stage/文件夹并且“prime”将文件放在prime/parts/<part name>/install/文件夹中。

作为一个新手,我会告诉你我从一个snapcraft.yaml文件开始,我打电话给snapcraft然后我就快点了;一步到位的过程。我知道每个“部分”都有一个stage:prime:部分,但我不知道如何或为什么要利用这些步骤。我发现唯一有用的是install:以及$SNAPCRAFT_PART_INSTALL文件可用的snapcraft.yaml环境变量。

stage:prime:部分允许我执行哪些操作无法通过install:$SNAPCRAFT_PART_INSTALL实现?

1 个答案:

答案 0 :(得分:11)

  

作为一个新手,我会告诉你我从snapcraft.yaml文件开始,我   叫snapcraft,我得到了一个快照;一步到位。

这是公平的,如果你的快照相对简单,这可能就是你所需要的!但是在确定生命周期步骤时你是对的:它们按顺序排列;

  1. 每个部分都会发生pull步骤。这是使用source*sourcesource-tag等)属性的位置。如果source指向git repo,它将克隆它等等。

  2. 构建

    每个部分都会发生build步骤。这是构建上一步中拉出的源的地方。这是在特定于部件的目录中完成的,因此它是独立发生的,但是如果您具有部件间依赖关系(使用after关键字,它们可以针对暂存区域(“stage”目录)的内容进行构建)告诉snapcraft在构建依赖部分之前需要暂存依赖项。)

  3. 阶段

    每个部分都会发生stage步骤。这是第一次构成快照的所有不同部分实际上都放在同一区域(“stage”目录)中。如果多个部件提供具有不同内容的相同文件,Snapcraft不知道您想要哪个。 这是stage关键字发挥作用的地方。您可以使用白色或黑名单来自零件的文件,以避免在将零件放在一起时发生冲突(或者出于任何其他原因,您可能不希望这些文件位于临时区域中)。

  4. 每个部分也会发生prime步骤。这与stage步骤非常相似,但文件进入启动区域而不是暂存区域。这是因为暂存区域可能包含构建相关部分所需的头文件和类似的东西,但是人们可能不希望这些文件在最终的快照中结束。 为此,您还有另一个名为prime的过滤关键字,用于为来自该部分的文件创建白名单或黑名单。

  5. 对齐

    snap步骤不是每个部分。此步骤在所有部件都已准备就绪后运行,此时prime目录包含作为快照运行所需的所有数据和元数据。这一步只是为你调用主目录上的mksquashfs

  6. 请注意,每个生命周期步骤都可以针对所有或单个部件单独运行,也可以进行清理。

    • 针对所有部分运行特定步骤:snapcraft <step>,例如snapcraft build
    • 针对单个部分运行特定步骤:snapcraft <step> <part>
    • 清除所有部分的特定步骤:snapcraft clean -s <step>,例如snapcraft clean -s build
    • 清除单个部分的特定步骤:snapcraft clean <part> -s <step>

    我希望能回答你的问题。请注意stageprime关键字在syntax docs中有所记录。