7

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

这个过程似乎是pull -> build -> stage -> prime -> snap

根据我的观察,似乎“pull”将文件放入文件parts/<part name>/src/夹,“build”将文件放入文件parts/<part name>/build/夹,“stage”将文件放入文件stage/夹,“prime”将文件放入prime/andparts/<part name>/install/文件夹。

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

stage:和部分允许我做哪些prime:不能用install:and实现的事情$SNAPCRAFT_PART_INSTALL

4

1 回答 1

13

作为一个新手,我会告诉你我从一个 snapcraft.yaml 文件开始,我调用 snapcraft 并得到一个快照;一步过程。

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

  1. pull步骤按零件进行。这是使用source*( source,source-tag等) 属性的地方。如果source指向一个 git repo,它会克隆它,等等。

  2. 建造

    build步骤按零件进行。这是构建上一步中提取的源的位置。这是在特定于部件的目录中完成的,因此它是孤立发生的,但如果您有部件间依赖关系(使用after关键字告诉 snapcraft在构建依赖部分之前需要暂存依赖项)。

  3. 阶段

    stage步骤按零件进行。这是组成快照的所有不同部分第一次实际放置在同一区域(“阶段”目录)中。如果多个部分提供具有不同内容的同一个文件,Snapcraft 不知道您想要哪一个。这就是stage关键字发挥作用的地方。您可以将来自零件的文件列入白名单或黑名单,以避免在将零件暂存在一起时发生冲突(或出于任何其他原因,您可能不希望将这些文件放在暂存区域中)。

  4. 主要的

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

  5. 折断

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

请注意,这些生命周期步骤中的每一个都可以针对所有或单个部件单独运行,并且也可以进行清洁。

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

我希望这回答了你的问题。有关更多信息,请查看Snapcraft 生命周期文档。和关键字还在部件元数据文档stage中进一步解释。prime

于 2017-04-22T17:51:34.443 回答