开明软件包格式,是openKylin社区Kaiming SIG为应对传统包格式存在的系统与应用无明确界限、发行版碎片化、兼容性等问题而开发的一款全新软件包格式,满足ISV(Independent Software Vendors)应用发布和应用独立发布需求,并支持沙箱隔离,允许共享部分基础库,为主要Linux桌面提供原生集成。
一、开明软件包框架结构
开明软件包主要包括部署文件(deploy)、应用数据(files)、元数据文件(matedata),导出文件(exports)四部分:
-
部署文件:存放开明包安装来源、安装大小、版本、安装时间等信息
-
应用数据:应用本身二进制、动态库、配置文件等
-
元数据文件:包含运行时依赖、扩展依赖、权限信息、二进制命令、环境变量等内容
-
导出文件:针对应用,主要包含desktop、icon、dbus.service等对外暴露的文件
开明软件包运行过程,首先解析元数据文件,获取到应用运行所需的上下文内容,然后通过mount namespace和bind mount构建应用运行的rootfs,通过xdg-dbus-proxy进行dbus转发,最后chroot进入rootfs环境执行二进制命令启动应用。接下来请跟随文章教程完成您的第一个开明包构建和安装运行。
二、开明命令介绍
以下是部分开明软件包使用命令介绍,更多命令详情可参考文末链接:开明命令使用手册。
-
kaiming install :安装开明应用
-
kaiming export :离线导出开明应用
-
kaiming list:列出所有已安装的应用
-
kaiming run:运行一个已安装的开明应用
-
kaiming enter :进入运行沙箱内部环境
-
kaiming uninstall:卸载开明应用
-
......
三、编译程序
1.安装开明命令包和开明编译包
$ sudo apt install kaiming kaiming-builder
其中,kaiming ( >= 0.15.9 ) 是包管理器客户端,提供了相关开明命令,用于管理开明包格式应用的安装、卸载、运行、更新、信息查看等操作。kaiming-builder提供了开明包对应的编译命令,可以将您的源码编译成开明软件包格式。
2.安装runtime和配套的SDK
开明包要求每个应用程序指定一个依赖的runtime。runtime由SDK和Platform组成,SDK在应用编译和调试时使用,Platform在应用执行时使用。在编译应用程序时,需要先将runtime下载到本地:
$ sudo kaiming install top.openkylin.Sdk top.openkylin.Platform# 默认编译所需最小的runtime
3.创建应用程序
进入您的项目根目录,这里我们采用一个简单的脚本案例来说明。
#!/bin/sh
echo "Hello world, start your first kaiming app!"
现在将其粘贴到一个空文件中并将其另存为hello.sh。
4.配置源码所需清单
这里以top.openkylin.Hello.yaml清单文件为例,文件内容:
id: top.openkylin.Hello # 应用程序名branch: stable # 应用分支runtime: top.openkylin.Platform # 所需runtime
runtime-version: '2.0' # runtime版本
sdk: top.openkylin.Sdk # 配套的SDK
command: hello.sh # runtime执行的命令
modules: # 编译模块
- name: hello # 模块名称
buildsystem: simple # 使用的构建系统。如autotools、cmake、meson、simple、qmake等
build-commands: # 在构建期间运行的一组命令
- install -D hello.sh /app/bin/hello.sh # 执行 install 命令将hello.sh 安装到可执行目录
sources: # 包含一个指向源码指针,它们可以有多种类型,通过type属性来区分。
- type: file # 本地源码类型
path: hello.sh # 和type格式对齐,表示将复制到源目录的本地文件的路径
举例程序较为简单,在更复杂的应用程序中,清单将列出多个模块。由于yaml清单涉及内容较多,关于yaml清单的详细描述请参考官方文档说明(链接附在文末)。
5.构建应用程序
使用命令kaiming-builder来进行软件包编译:
kaiming-builderbuild top.openkylin.Hello.yaml
如果您想共享该应用程序,可以将其放入存储库中。通过将--repo参数传递给来kaiming-builder来完成:
$ rm -rf build/ repo/ .kaiming-builder/ #第二次编译时需要,删除当前的编译目录、缓存和存储库repo
$ kaiming-builder build --repo=repo top.openkylin.Hello.yaml
此命令将构建清单中列出的每个模块并将其安装到本地存储库repo中。其中,生成的build目录是构建后的程序结构。如下图:
我们可以看到,hello.sh是在 files/bin/hello.sh下,这种情况就是正确编译结果,之后会通过kaiming install安装到系统的指定位置/opt/kaiming中。到这里,恭喜您已完成一个应用程序制作!
四、测试运行
1.安装应用程序
现在我们准备添加刚刚创建的存储库并安装应用程序。通过kaiming install命令完成,要验证构建后的包是否可以成功安装,请运行以下命令:
$ sudo kaiming install --repo=repo top.openkylin.Hello # top.openkylin.Hello 为 top.openkylin.Hello.yaml 清单文件中的应用程序名
2.运行应用程序
接下来,通过以下命令来尝试运行该应用程序:
$ kaiming run top.openkylin.Hello
运行成功,终端输出:
Hello world, start your first kaiming app!
以上是编译开明软件包格式的简单流程,各位小伙伴你学会了吗?更多内容,敬请期待。
-
开明命令使用手册:
https://gitee.com/openkylin/community/blob/master/sig/KaiMing/%E5%BC%80%E6%98%8E%E7%94%A8%E6%88%B7%E6%93%8D%E4%BD%9C%E6%89%8B%E5%86%8C/%E5%BC%80%E6%98%8E%E5%91%BD%E4%BB%A4%E4%BD%BF%E7%94%A8%E6%89%8B%E5%86%8C/README.md#/openkylin/community/blob/master/sig/KaiMing/%E5%BC%80%E6%98%8E%E7%94%A8%E6%88%B7%E6%93%8D%E4%BD%9C%E6%89%8B%E5%86%8C/%E5%BC%80%E6%98%8E%E5%91%BD%E4%BB%A4%E4%BD%BF%E7%94%A8%E6%89%8B%E5%86%8C/installation.md -
yaml清单说明:
https://gitee.com/openkylin/community/blob/master/sig/KaiMing/%E5%BC%80%E6%98%8E%E7%94%A8%E6%88%B7%E6%93%8D%E4%BD%9C%E6%89%8B%E5%86%8C/%E5%BC%80%E6%98%8E%E7%BC%96%E5%8C%85%E6%89%8B%E5%86%8C/manifest.md