软件包规范
通过 Armory 管理软件包时,软件包的名称、版本号、平台架构、配置文件和目录结构等必须满足相关规范。本节主要介绍软件包的具体规范及其配置方法。
名称规范
完整的软件包名称由命名空间(namespace)和软件包名(package-name)组成,格式为:@namespace/package-name。为确保软件包的可用性和可维护性,软件包名称需满足以下规范:
- 命名空间(namespace)只能由小写字母、数字和特殊字符“-”、“_”组成,不能包含空格,且长度不能超过 30 个字符。
- 软件包名(package-name)只能由小写字母、数字和特殊字符“-”、“_”组成,不能包含空格,且长度不能超过 50 个字符。
- 为了提高软件包的辨识度,并帮助用户快速了解软件包的内容,软件包名应体现其功能或用途,多个单词之间可以用“-”连接,如 armory-cli。
- 软件包名称中不应该包含版本号信息,版本号应在 armory.json 的 version 字段中定义。
名称说明符
包名称说明符(Package name specifier 简称package-spec
)用于唯一标识制品仓库中的软件包或其版本。它通常包括命名空间、包名、版本号或标签。通过package-spec
,可以在制品仓库中精确定位和管理不同的软件包及其版本。支持的格式如下:
[<@namespace/>]<package-name>
:指定软件包名称。[<@namespace/>]<package-name>@<tag>
:指定软件包标签。[<@namespace/>]<package-name>@<version>
:指定软件包版本。
其中<@namespace/>
为可选项,未指定时默认为 global(全局包)。
版本号规范
为了确保 Armory 软件仓库的健康、可靠和安全性,每次发布新版软件包时,版本号须遵循 Semantic Versioning 语义化版本规范,以便用户更好地掌握每个版本软件包的变化和兼容性。推荐的软件包版本号命名规则如下表所示。
代码状态 | 产品阶段 | 版本号命名规则 | 版本号示例 |
---|---|---|---|
首次发布 | 新产品 | 采用 X.Y.Z 格式,其中 X 为主版本号、Y 为次版本号、Z 为修订号 | 1.0.0 |
向后兼容的错误修复 | 补丁版本 | 修订号 Z 的数值递增 | 1.0.1 |
向后兼容的新功能 | 小版本 | 次版本号 Y 的数值递增,并将修订号 Z 重置为零 | 1.1.0 |
不支持向后兼容性的更改 | 主要版本 | 主版本号 X 的数值递增,并将次版本号 Y 和修订号 Z 重置为零 | 2.0.0 |
平台架构规范
Armory 支持管理多种平台和架构的软件包。为确保软件包搜索和依赖检测的一致性,名称和架构需遵循以下规范:
- 平台名称不区分大小写。
- 架构名称只能由小写字母、数字和连接符“-”组成,且长度不超过 20 个字符。在 Armory 中配置架构名称时,需将架构名称转化为小写,并将下划线(_)替换为连接符(-)。例如,X86_64 应写为 x86-64。
具体平台和架构名称,请参见下表中的命名规则。注意:每个平台支持的架构类型包括但不限于以下列举的内容:
平台名称 | 平台别名 | 架构名称 |
---|---|---|
Windows | win | noarch、arm64、x86-64 ... |
macOS | mac | noarch、arm64、x86-64 ... |
Linux | - | noarch、arm64、x86-64 ... |
SylixOS | - | noarch、arm64-generic、x86-64 ... 更多关于 SylixOS 架构类型请参见 SylixOS 架构清单 |
Generic | - | noarch |
SylixOS 架构清单
SylixOS 平台支持的架构名称映射到 Armory 中的架构命名如下表所示:
SylixOS 架构名称 | 对应 Armory 中的架构名称 |
---|---|
ARM_920T | arm-920t |
ARM_V7A | arm-v7a |
ARM64_GENERIC | arm64-generic |
MIPS32_R2 | mips32-r2 |
MIPS32 | mips32 |
MIPS64_LS3A | mips64-ls3a |
MIPS64_R2 | mips64-r2 |
MIPS64 | mips64 |
PPC_E500V1 | ppc-e500v1 |
PPC_E500V2 | ppc-e500v2 |
PPC_E6500 | ppc-e6500 |
PPC_750 | ppc-750 |
PPC_464FP | ppc-464fp |
x86_PENTIUM | x86-pentium |
X86_64 | x86-64 |
TI_C6000 | ti-c6000 |
SPARC_LEON3 | sparc-leon3 |
SPARC_V8 | sparc-v8 |
SPARC_V9 | sparc-v9 |
RISCV_GC32 | riscv-gc32 |
RISCV_GC64 | riscv-gc64 |
CSKY_CK803 | csky-ck803 |
CSKY_CK807 | csky-ck807 |
CSKY_CK810 | csky-ck810 |
CSKY_CK860 | csky-ck860 |
LOONGARCH32 | loongarch32 |
LOONGARCH64_LASX | loongarch64-lasx |
LOONGARCH64_LSX | loongarch64-lsx |
LOONGARCH64 | loongarch64 |
SW6B | sw6b |
armory.json 规范
发布到 Armory 仓库的软件包,必须包含 armory.json 配置文件,您可以参考 创建软件包,自动创建一个符合 目录结构规范 的软件包,并参考如下示例定义 armory.json,以便快速发布软件包。以下是 armory.json 参考示例及其参数说明:
{
"name": "@armory/armory-cli",
"version": "1.0.0",
"author": "acoinfo",
"description": "Armory 是一款跨平台和架构的软件包管理工具,支持 Windows、macOS 和 Linux 平台的多种架构",
"labels": [
"armory",
"client",
"repository",
],
"platforms": [
{
"name": "Windows",
"arch": "x86-64",
"minSupportedVersion": "Windows 8.1+",
"baseDir": "windows/x86-64",
"files": [
"armory-win-x64.exe",
"base/",
"base/src",
"./bin/armory.js"
]
},
{
"name": "Windows",
"arch": "arm64",
"minSupportedVersion": "Windows 10+",
"baseDir": "windows/arm64",
"files": [
"armory-win-arm64.zip",
]
},
{
"name": "Linux",
"arch": "arm64",
"minSupportedVersion": "Linux 7, Ubuntu 14.04, Debian jessie, other distros with glibc >= 2.17",
"baseDir": "linux/arm64",
"files": [
"armory-1.0.0-linux"
]
},
{
"name": "macOS",
"arch": "noarch",
"minSupportedVersion": "macOS 11.0+",
"baseDir": "macos",
"files": [
"armory-1.0.0-macos"
]
}
],
"dependencies":[
{
"name": "@armory/armory-cli",
"version": "1.3.0"
},
{
"name": "cloudnative_lab/armory-client",
"version": "1.2.0"
}
],
"ignore": [
"windows/x86-64/.ide",
"windows/arm64/test",
"linux/arm64/node_modules",
"linux/arm64/*.ts",
"macos/.metadata/"
],
"installable": false
}
各参数说明如下:
参数 | 字段类型 | 是否必填 | 说明 |
---|---|---|---|
name | string | 是 | 完整的软件包名称,命名时须遵循 名称规范。例如 @armory/armory-cli,其中 armory 为空间名称,armory-cli 为软件包名称。如果不指定命名空间,则默认为 global 全局空间 |
version | string | 是 | 软件包版本,版本号定义规则请参见 版本号规范 |
author | string | 否 | 软件包的作者信息,长度不能超过 50 个字符 |
description | string | 否 | 软件包描述信息,可以用一句话概括此软件的概念、功能等信息,长度不能超过 200 个字符 |
labels | array | 否 | 软件包标签,支持配置多个标签,每个标签不能超过 20 个字符,标签总数不超过 50 个。配置标签后可以通过标签信息搜索软件包 |
platforms | array | 是 | 配置不同平台和架构的软件包文件,至少需要配置一个平台和架构的文件,支持配置多个,具体可支持的平台和架构请参见 平台架构规范。各字段说明如下:
baseDir 仅用于组织本地目录结构,Armory 不会将其应用为软件包文件的实际路径。在 Web 端软件包文件视图和 安装软件包 过程中,仅使用files 中配置的路径。而在发布和下载软件包时,则保留用户配置的files + baseDir 组合路径 |
dependencies | array | 否 | 配置软件包依赖,所依赖的软件包必须已在对应仓库发布,支持配置多个依赖包。每个依赖包的字段说明如下:
|
ignore | array | 否 | 配置软件包的忽略文件,以排除 files 中不需要发布的文件,ignore 可以配置多项,并遵循 .gitignore 规范。配置 ignore 的注意事项如下:
|
installable | boolean | 否 | 指定软件包版本是否支持安装。可选值:true(支持安装) 或 false(不支持安装),默认值为 false 注意:在配置 installable 时,必须使用布尔值 true 或false ,而非字符串"true" 或"false" 。例如,应配置为"installable": true ,而不是"installable": "true" |
目录结构规范
为确保软件包发布的规范性和可行性,建议参考 创建软件包 自动生成符合规范的目录结构,并按需将待发布的软件包文件集放置在根目录下。此外,您也可以手动创建一个以软件包名称命名的文件夹,该文件夹应包含以下内容:
- 包含待发布的软件包文件集合,可以是具体的文件或文件夹。如果涉及多平台多架构,建议将具体的包文件放置在以平台和架构命名的文件夹中。
- 必须包含一个名称为 armory.json 的配置文件,用于发布软件包,并配置待发布软件包的详细信息,如软件包名称、版本、描述、检索标签、包资源路径等。
- 建议包含 README 文件,用于详细描述软件包的编译、安装、配置、使用指导和更新日志等对用户有用的必要信息,README 文件的后缀必须为“.md”或“.txt”,且必须将其放置在软件包根目录下。
- 如果 README 文件中有引用图片资源,建议将图片放置在软件包根目录的“assets/image”路径下。
下面以 armory-cli 软件包为例介绍软件包的目录结构及相关要求:
|-- armory-cli
|-- assets
|-- image
|-- macos.png
|-- windows.png
|-- armory.json
|-- README.md
|-- windows
|-- x86-64
|-- armory-win-x64.exe
|-- arm64
|-- armory-win-arm64
|-- linux
|-- x86-64
|-- armory-linux-x64
|-- mocos
|-- arm64
|-- armory-macos
目录结构说明如下:
文件名 | 是否必配 | 说明 |
---|---|---|
armory-cli | 是 | 软件包根目录,对应软件包名称,用于存放待发布的软件包的所有资源文件,名称支持自定义 |
assets | 否 | 静态资源文件目录,用于存放软件包 README 文件中引用的图片资源,资源文件须存放在 image 文件夹中。如果没有图片资源,可以不包含此目录 |
armory.json | 是 | 发布软件包的必备配置文件,用于配置待发布的软件包的详细信息,包括软件包名称、版本、描述、检索标签和包资源路径等,具体配置要求请参见 armory.json 规范。名称固定为 armory.json,不支持自定义 |
READEME.md | 否 | 软件包概述文件,用于定义软件的概念、功能、使用指导和更新日志等概述性信息。此文件可选,其注意事项如下:
|
windows/x86-64/armory-win-x64.exe windows/arm64/armory-win-arm64.exe linux/x86-64/armory-linux-x64 macos/arm64/armory-macos | 是 | 待发布的软件包文件集合,支持配置多个文件或文件夹。您可以选择将所有文件打包为 注意:若软件包需要安装到远程 SylixOS 计算机,则无论是通过压缩包还是直接发布文件,所有包文件都必须存放在 SylixOS 系统根目录下的默认内置文件夹中,如 /etc 、/lib 、/user 等。有关 SylixOS 内置文件夹的详细说明,请参见 ROOT 文件系统。您可以参考 SylixOS 安装包配置示例 进行配置 |
SylixOS 安装包配置示例
Armory 支持对远程 SylixOS 计算机上的软件包进行管理,提供安装、升级、卸载和查看已安装包列表等功能。为确保 SylixOS 安装包能成功发布到 Armory 并顺利安装到远程 SylixOS 计算机,建议您参考以下目录结构和 armory.json 配置示例进行配置。
目录结构配置示例
Armory 支持灵活配置待安装的软件包。您可以选择将所有文件打包为.tar.gz
或.tgz
格式进行发布安装,也可以将文件以零散文件或文件夹的方式直接发布。下面重点介绍两种安装包目录结构配置示例,关于各目录结构的详细说明请参见 目录结构规范 中的目录结构说明表。
方式一:将所有文件打包为.tar.gz
或.tgz
发布(推荐)
|-- example-app1
|-- armory.json
|-- README.md
|-- assets
|-- image
|-- sylixos.png
|-- example-app1-sylixos-arm64-generic-v1.0.0-dev.tar.gz
|-- example-app1-sylixos-x86-64-v1.0.0-dev.tar.gz
方式二:直接以零散文件或文件夹的方式发布
|-- example-app2
|-- armory.json
|-- README.md
|-- assets
|-- image
|-- sylixos.png
|-- arm64
|-- ect
|-- example-app2
|-- config.yaml
|-- lib
|-- example-app2.so
|-- user
|-- bin
|-- example-app2
|-- sylixos
|-- x86-64
|-- ect
|-- example-app2
|-- config.yaml
|-- lib
|-- example-app2.so
|-- user
|-- bin
|-- example-app2
armory.json 配置示例
下面将结合上述 目录结构配置示例,重点介绍两种目录结构对应的 armory.json 文件配置示例,关于各字段的详细说明请参见 armory.json 规范 中的各参数说明表。
示例一:.tar.gz
或.tgz
压缩包发布的 armory.json 配置示例
{
"name": "@sylixos-middleware/example-app1",
"version": "1.0.0",
"author": "acoinfo",
"description": "SylixOS 安装包配置示例",
"labels": [
"armory",
"SylixOS",
"remote",
],
"platforms": [
{
"name": "SylixOS",
"arch": "arm64-generic",
"minSupportedVersion": "SylixOS 3.6.4",
"files": [
"example-app1-sylixos-arm64-generic-v1.0.0-dev.tar.gz"
]
},
{
"name": "SylixOS",
"arch": "x86-64",
"minSupportedVersion": "SylixOS 3.6.4",
"files": [
"example-app1-sylixos-x86-64-v1.0.0-dev.tar.gz"
]
}
],
"dependencies": [],
"ignore": [],
"installable": true
}
示例二:零散文件或文件夹发布的 armory.json 配置示例
{
"name": "@sylixos-middleware/example-app2",
"version": "1.0.0",
"author": "acoinfo",
"description": "SylixOS 安装包配置示例",
"labels": [
"armory",
"SylixOS",
"remote",
],
"platforms": [
{
"name": "SylixOS",
"arch": "arm64-generic",
"minSupportedVersion": "SylixOS 3.6.4",
"baseDir": "sylixos/arm64",
"files": [
"etc",
"lib",
"usr"
]
},
{
"name": "SylixOS",
"arch": "x86-64",
"minSupportedVersion": "SylixOS 3.6.4",
"baseDir": "sylixos/x86-64",
"files": [
"etc",
"lib",
"usr"
]
},
],
"dependencies": [],
"ignore": [],
"installable": true
}