Snap 包:"staging" 和 "priming" 步骤的目的是什么?
Snap packages: What is the purpose of the "staging" and "priming" steps?
我已经成功创建并上传了一个快照包(教程很棒)。但是,我想知道在每个构建步骤中到底发生了什么,以及我如何利用它们。
过程好像是pull -> build -> stage -> prime -> snap.
据我观察,似乎 "pull" 将文件放入 parts/<part name>/src/
文件夹,"build" 将文件放入 parts/<part name>/build/
文件夹,"stage" 将文件放入在 stage/
文件夹中,"prime" 将文件放入 prime/
和 parts/<part name>/install/
文件夹中。
作为新手,我会告诉你我从一个 snapcraft.yaml
文件开始,我调用 snapcraft
然后我得到了一个快照;一个步骤的过程。我知道每个 "part" 都有一个 stage:
和 prime:
部分,但我不知道如何或为什么要利用这些步骤。我发现唯一有用的是 install:
以及 snapcraft.yaml
文件可用的 $SNAPCRAFT_PART_INSTALL
环境变量。
stage:
和 prime:
部分允许我做哪些 install:
和 $SNAPCRAFT_PART_INSTALL
无法实现的事情?
As a novice, I would tell you I start with a snapcraft.yaml file, I
call snapcraft and I get a snap; a one step process.
这很公平,如果您的快照相对简单,这可能就是您所需要的!但是您在确定生命周期步骤时是正确的:它们是按顺序排列的;
拉
pull
这一步发生在每个部分。这是使用 source*
(source
、source-tag
等)属性的地方。如果 source
指向 git 存储库,它将克隆它,等等
建造
build
这一步发生在每个部分。这是构建上一步中拉取的源代码的地方。这是在特定于部分的目录中完成的,因此它是独立发生的,但是如果您具有部分间依赖性(使用 after
关键字告诉 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>
。
我希望这回答了你的问题。有关详细信息,请参阅 Snapcraft lifecycle documentation. The stage
and prime
keywords are also further explained in the parts metadata 文档。
我已经成功创建并上传了一个快照包(教程很棒)。但是,我想知道在每个构建步骤中到底发生了什么,以及我如何利用它们。
过程好像是pull -> build -> stage -> prime -> snap.
据我观察,似乎 "pull" 将文件放入 parts/<part name>/src/
文件夹,"build" 将文件放入 parts/<part name>/build/
文件夹,"stage" 将文件放入在 stage/
文件夹中,"prime" 将文件放入 prime/
和 parts/<part name>/install/
文件夹中。
作为新手,我会告诉你我从一个 snapcraft.yaml
文件开始,我调用 snapcraft
然后我得到了一个快照;一个步骤的过程。我知道每个 "part" 都有一个 stage:
和 prime:
部分,但我不知道如何或为什么要利用这些步骤。我发现唯一有用的是 install:
以及 snapcraft.yaml
文件可用的 $SNAPCRAFT_PART_INSTALL
环境变量。
stage:
和 prime:
部分允许我做哪些 install:
和 $SNAPCRAFT_PART_INSTALL
无法实现的事情?
As a novice, I would tell you I start with a snapcraft.yaml file, I call snapcraft and I get a snap; a one step process.
这很公平,如果您的快照相对简单,这可能就是您所需要的!但是您在确定生命周期步骤时是正确的:它们是按顺序排列的;
拉
pull
这一步发生在每个部分。这是使用source*
(source
、source-tag
等)属性的地方。如果source
指向 git 存储库,它将克隆它,等等建造
build
这一步发生在每个部分。这是构建上一步中拉取的源代码的地方。这是在特定于部分的目录中完成的,因此它是独立发生的,但是如果您具有部分间依赖性(使用after
关键字告诉 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>
。
我希望这回答了你的问题。有关详细信息,请参阅 Snapcraft lifecycle documentation. The stage
and prime
keywords are also further explained in the parts metadata 文档。