跳到正文
ApuOS产品文档
目录
本页目录

SPKG格式、签名与权限规范

SPKG不是普通tar包改后缀。整个文件由压缩USTAR、UTF-8 JSON签名区、4字节小端签名区长度和8字节magic组成;末尾12字节固定。先分离签名尾部,再校验压缩段与归档,不能把整个文件直接交给通用tar或zstd解压器。

[zstd USTAR][signature JSON][signature JSON length:u32 LE][SPKGv1\r\n]

归档与大小

压缩段最多64MiB,解压USTAR最多128MiB,签名区最多16KiB,最多10000条目,manifest最多64KiB。拒绝符号链接、硬链接、设备、FIFO、稀疏文件、GNU/PAX扩展、重复成员、遍历和文件/目录冲突。路径只使用规定的ASCII字符且最多100字节;不接受绝对路径、父目录、反斜杠或空段。 归档文件mode只能为0644或0755,目录为0755。归档uid/gid为0仅用于可复现元数据,不表示以root执行。打包器排序路径并归零uid/gid/mtime;bin和scripts按工具规则处理为可执行,其他文件为0644。

摘要与签名

所有JSON层级拒绝重复键。签名区只允许format_version、payload_size、sha256、key_id、signature五项;payload_size和sha256描述压缩USTAR,仓库索引中的sha256则描述整个.spkg,二者不可混淆。key_id是外部受信任32字节公钥的SHA-256。 Ed25519签名消息为ASCII APUOS-SPKG-V1、单个NUL、压缩段32字节原始摘要、8字节小端压缩长度及64字节ASCII key_id。签名绑定内容、长度和签名者;不靠JSON键排序验证。未签名开发包的key_id和signature必须同时为null,生产安装不能自动接受。

权限与生命周期

原生1.0只声明network:bind、network:outbound、filesystem:read、filesystem:read_write等规范权限,监听端口为1024—65535并与bind声明配对。声明权限不会授予全盘、sudo、磁盘格式化、驱动安装或修改宿主的能力。 原生生命周期只允许pre-install.sh、install.sh、post-install.sh、pre-uninstall.sh、uninstall.sh、start.sh、stop.sh、upgrade.sh等固定名称;工具不会执行它们。执行器的身份、超时、隔离及失败恢复仍属于后续原生运行时合同。SPKG1.1官方模块不执行任何包内Shell、原生程序或生命周期脚本。完整逐字规范见SPKG-SPEC.md。

最近更新 ApuOS · 你的数据,你的空间。