#container #run-time #embedded-linux #file-format #northstar #applications #npk

app northstar-sextant

Northstar 是一个针对嵌入式系统的 Linux 容器运行时

10 个不稳定版本 (4 个重大更改)

0.9.1 2023年11月29日
0.9.0 2023年10月19日
0.8.3 2023年8月22日
0.8.1 2023年5月10日
0.5.0 2022年7月5日

#251嵌入式开发

每月下载量 38 次

Apache-2.0

490KB
11K SLoC

Sextant - 用于处理 northstar NPK 容器的工具

Northstar 容器以 NPK 文件格式分发。

NPK 文件包含容器的应用程序逻辑以及挂载和运行容器所需的数据文件。为了便于创建、检查和修改 NPK,northstar 提供了 northstar-sextant 命令行工具。

打包未签名 NPK

使用 pack 命令(来自 northstar-sextant)创建(打包)NPK。它需要以下输入

  1. 描述 NPK 的清单文件。
  2. 包含运行时所需文件的根目录。

打包过程中,文件夹的内容将被复制到 squashfs 映像中,当容器运行时,northstar 运行时会挂载该映像。

例如,以下命令打包了 hello-world 示例容器

$ target/debug/northstar-sextant pack \
--manifest examples/container/hello-world/manifest.yaml \
--root target/release/hello-world \
--out target/northstar/repository

northstar-sextant pack 的输出是单个 NPK 文件

$ ls target/northstar/repository
hello-world-0.0.1.npk

打包已签名 NPK

NPK 可以使用 Ed25519 签名。如果运行时配置为检查 NPK 签名,则缺少或无效签名的容器将被拒绝。要打包 hello-world 示例容器的签名版本,必须提供私钥

$ target/debug/northstar-sextant pack \
--manifest examples/container/hello-world/manifest.yaml \
--root target/release/hello-world \
--key ./examples/keys/northstar.key \
--out target/northstar/repository

生成仓库密钥

要使用 northstar-sextant 签名 NPK,需要一个合适的密钥对。可以使用 northstar-sextant gen-key 命令生成。以下调用在当前目录中创建了一个新的密钥对(repokey.keyrepokey.pub

target/debug/northstar-sextant gen-key --name repokey --out .

私钥 repokey.key 可用于签名 NPK,而公钥 repokey.pub 则由 northstar 运行时用于验证 NPK。

解包 NPK

NPK文件是ZIP文件,其中包含 squashfs映像等元素,该映像将在运行时挂载。为了提取外部的ZIP文件和内部的映像,可以使用 unpack 命令,该命令属于 northstar-sextant

要解包 hello-world 示例容器,可以使用 northstar-sextant unpack

$ target/debug/northstar-sextant unpack \
--npk ./target/northstar/repository/hello-world-0.0.1.npk \
--out ./hello-world-container

解包的容器可以在输出目录中找到。

$ ls hello-world-container
fs.img  manifest.yaml  signature.yaml  squashfs-root

squashfs-root 目录包含 fs.img squashfs映像的解包内容。

$ ls hello-world-container/squashfs-root/
dev  hello-world  lib  lib64  proc  system

我们可以看到 hello-world 二进制文件以及 manifest.yaml 中提到的空挂载点。

检查NPK文件

要获取已打包NPK的信息,northstar-sextant提供了inspect命令。

使用默认设置检查NPK

不使用任何额外参数检查NPK将显示以下信息

  • NPK中包含的文件列表
  • manifest.yaml的内容
  • signature.yaml的内容
  • 存储在NPK中的压缩squashfs映像(fs.img)中的文件列表

可以使用以下命令检查 hello-world 示例容器

$ northstar-sextant inspect target/northstar/repository/hello-0.0.1.npk
...

使用 --short 参数检查NPK

为了便于将检查作为脚本的一部分执行多个容器,inspect 命令具有 --short 参数。它将检查输出压缩成一行,包含以下信息

  • 容器名称
  • 容器版本
  • NPK格式版本
  • 是否为资源容器

使用 --short 标志检查 hello-world 示例容器会得到以下输出

$ northstar-sextant inspect --short hello-world-0.0.1.npk 
name: hello-world, version: 0.0.1, NPK version: 0.0.2, resource container: no

依赖项

~15–28MB
~478K SLoC