
# 制作插件包
1. 插件包制作。 
   1. 插件包格式要求如下： 插件包仅支持.tar.gz 、.tar或者 .zip格式。
      插件包结构如下：
      app.zip
      ├── \*\*\*\*.jar //可执行jar文件,必须
      ├── start.sh //启动脚本 必须文件 当前不提供参数方式启动
      └── stop.sh //停止脚本 非必须
      
   
   2. 构建插件包。 以monitor-app为例，在项目打包后得到monitor-app.jar
      在monitor-app.jar文件的同目录下创建start.sh,内容如下:
      ```
      function log(){
          echo "`date "+%Y-%m-%d %T"`: $1"
      }
      log "[INFO] start execut process."
      #调试时可打开，确认sdk需要的环境能被获取
      #echo "${device_id}" > test_enviroment.file
      pwd
      #更新环境变量，防止找不到java命令。
      source /etc/profile
      #运行文件在/var/IoTEdge/downloaded-job/run下面
      java -jar ./monitor-app.jar  > monitor_running.log  2>&1
      ```
      将monitor-app.jar和start.sh一起压缩得到monitor-app.zip。
      ![](https://support.huaweicloud.com/devg-iotedge/public_sys-resources/caution_3.0-zh-cn.png)
      1. 插件包升级时，会删除运行目录的所有文件，注意持久化文件的存储。插件包的运行路径为{installer_dir}/IoTEdge/downloaded-job/run/{moduleId}/{appVersion}/。
      
      2. 当前插件包的大小限制为最大500M。
      
      3. 程序内对于文件的访问使用相对目录访问（因为程序的安装目录是不确定的）。
      
      4. 程序不允许包含后台运行的程序，可以包含多级进程，所有程序均为start.sh的子进程。
      
      5. 进程压缩包命名规范：英文字母或者数字或者"_","." ，长度不超过64，不允许出现空格。
       
      ![](https://support.huaweicloud.com/devg-iotedge/public_sys-resources/note_3.0-zh-cn.png)
      1. 插件包为一层压缩结构，即插件包的压缩包解压之后直接为start.sh脚本所在目录的结构形式，不能多一层目录。
      
      2. start.sh脚本为必须脚本，启动时默认调用该脚本进行启动，当前支持root用户以及非root用户（固定为1000用户,非root需要确定是否能够成功依赖系统库）启动，用户可以在start.sh脚本中自由修改自己的启动方式以及环境变量的修改等。
      
      3. stop.sh为非必须的脚本，但是用户如果需要优雅停止的话，需要在该脚本中书写自己进程的停止方式（文件监控、接口调用等）。如果没有该脚本的话，默认对进程组先发送SIGTERM信号，如果进程组对该信号没有处理，达到最大等待时间则发送SIGKILL信号强制停止。整个停止的最大周期为10s。
        
   
   
   
   
2. 插件包上传。 
   1. 开通对象存储服务OBS。 进程包上传方式需要开通对象存储服务OBS，请参考[对象存储服务 OBS_快速入门](https://support.huaweicloud.com/qs-obs/obs_qs_0001.html)。
      
   
   2. 上传进程包。
      上传方式，请参照[对象存储服务(OBS)](https://console.huaweicloud.com/console/#/obs/manager/buckets)。
      ![](https://support.huaweicloud.com/devg-iotedge/public_sys-resources/caution_3.0-zh-cn.png)
      请设置桶策略为【公开读】，如未设置请前往"OBS首页 \> 单击桶ID \> 访问权限控制 \> 桶策略中设置"。
      
   
   
   
   
 
