我已成功创建并上传了一个快照包(教程很棒)。但是,我不知道在每个构建步骤中到底发生了什么,以及我如何利用它们。
这个过程似乎是 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
实现?
答案 0 :(得分:11)
作为一个新手,我会告诉你我从snapcraft.yaml文件开始,我 叫snapcraft,我得到了一个快照;一步到位。
这是公平的,如果你的快照相对简单,这可能就是你所需要的!但是在确定生命周期步骤时你是对的:它们按顺序排列;
拉
每个部分都会发生pull
步骤。这是使用source*
(source
,source-tag
等)属性的位置。如果source
指向git repo,它将克隆它等等。
构建
每个部分都会发生build
步骤。这是构建上一步中拉出的源的地方。这是在特定于部件的目录中完成的,因此它是独立发生的,但是如果您具有部件间依赖关系(使用after
关键字,它们可以针对暂存区域(“stage”目录)的内容进行构建)告诉snapcraft在构建依赖部分之前需要暂存依赖项。)
阶段
每个部分都会发生stage
步骤。这是第一次构成快照的所有不同部分实际上都放在同一区域(“stage”目录)中。如果多个部件提供具有不同内容的相同文件,Snapcraft不知道您想要哪个。 这是stage
关键字发挥作用的地方。您可以使用白色或黑名单来自零件的文件,以避免在将零件放在一起时发生冲突(或者出于任何其他原因,您可能不希望这些文件位于临时区域中)。
素
每个部分也会发生prime
步骤。这与stage
步骤非常相似,但文件进入启动区域而不是暂存区域。这是因为暂存区域可能包含构建相关部分所需的头文件和类似的东西,但是人们可能不希望这些文件在最终的快照中结束。 为此,您还有另一个名为prime
的过滤关键字,用于为来自该部分的文件创建白名单或黑名单。
对齐
snap
步骤不是每个部分。此步骤在所有部件都已准备就绪后运行,此时prime
目录包含作为快照运行所需的所有数据和元数据。这一步只是为你调用主目录上的mksquashfs
。
请注意,每个生命周期步骤都可以针对所有或单个部件单独运行,也可以进行清理。
snapcraft <step>
,例如snapcraft build
。snapcraft <step> <part>
snapcraft clean -s <step>
,例如snapcraft clean -s build
snapcraft clean <part> -s <step>
。我希望能回答你的问题。请注意stage
和prime
关键字在syntax docs中有所记录。