NEWS

新闻

了解openKylin最新资讯,关注社区和产品动态。

NEWS

Learn about the latest news.

探索开明软件包:应用开发指南轻松掌握,快速上手!

2024-07-31 09:38:26

开明软件包格式,是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/shecho "Hello world, start your first kaiming app!"

        现在将其粘贴到一个空文件中并将其另存为hello.sh。


        4.配置源码所需清单

        这里以top.openkylin.Hello.yaml清单文件为例,文件内容:

          id: top.openkylin.Hello # 应用程序名branch: stable # 应用分支runtime: top.openkylin.Platform # 所需runtimeruntime-version: '2.0' # runtime版本sdk: top.openkylin.Sdk # 配套的SDKcommand: 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-builder  build   top.openkylin.Hello.yaml

            如果您想共享该应用程序,可以将其放入存储库中。通过将--repo参数传递给来kaiming-builder来完成:

              $ rm -rf build/ repo/ .kaiming-builder/ #第二次编译时需要,删除当前的编译目录、缓存和存储库repo$ kaiming-builder build --repo=repo top.openkylin.Hello.yaml

              openKylin(开放麒麟)

              此命令将构建清单中列出的每个模块并将其安装到本地存储库repo中。其中,生成的build目录是构建后的程序结构。如下图:

              openKylin(开放麒麟)

              我们可以看到,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 清单文件中的应用程序名
                openKylin(开放麒麟)


                2.运行应用程序

                接下来,通过以下命令来尝试运行该应用程序:

                  $ kaiming run top.openkylin.Hello

                  运行成功,终端输出:

                    Hello world, start your first kaiming app!

                    openKylin(开放麒麟)

                    以上是编译开明软件包格式的简单流程,各位小伙伴你学会了吗?更多内容,敬请期待。


                    • 开明命令使用手册:
                      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