Eclipse kura-通过Mqtt远程安装部署包失败

Eclipse kura-通过Mqtt远程安装部署包失败,eclipse,osgi,mqtt,kura,Eclipse,Osgi,Mqtt,Kura,我在远程安装部署包时遇到问题,以下是我在请求主题上发送的指标-$EDC/amir kura/test client/DEPLOY-V2/EXEC/download job.id=12345678910L dp.uri=file:/home/amir/Downloads/org.eclipse.kura.example.hello_osgi/resources/dp/hello_osgi.dp dp.name=hello_osgi dp.version=1.0.0 dp.download.prot

我在远程安装部署包时遇到问题,以下是我在请求主题上发送的指标-
$EDC/amir kura/test client/DEPLOY-V2/EXEC/download

job.id=12345678910L
dp.uri=file:/home/amir/Downloads/org.eclipse.kura.example.hello_osgi/resources/dp/hello_osgi.dp
dp.name=hello_osgi
dp.version=1.0.0
dp.download.protocol=HTTPS
dp.install.system.update=false
当我在
Notify
主题-
$EDC/amir kura/new-client/DEPLOY-V2/Notify/test-client/download上得到以下回复时,包成功下载

{dp.download.size=0, 
dp.download.progress=100, 
dp.download.status=COMPLETED, 
job.id=12345678910, 
client.id=test-client}
但是,安装失败了。下面是我的kura控制台-

15:06:07,357 [MQTT Call: test-client] INFO  CloudServiceImpl:440  - Message arrived on topic: $EDC/amir-kura/test-client/DEPLOY-V2/EXEC/download
15:06:07,382 [pool-2-thread-2] INFO  CloudDeploymentHandlerV2:459  - About to download and install package at URL file:/home/amir/Downloads/org.eclipse.kura.example.hello_osgi/resources/dp/hello_osgi.dp
15:06:07,382 [pool-2-thread-2] INFO  CloudDeploymentHandlerV2:468  - Downloading package from URL: file:/home/amir/Downloads/org.eclipse.kura.example.hello_osgi/resources/dp/hello_osgi.dp
15:06:07,387 [pool-12-thread-1] INFO  DataServiceImpl:441  - Storing message on topic :$EDC/#account-name/new-client/DEPLOY-V2/NOTIFY/test-client/download, priority: 1
15:06:07,389 [pool-12-thread-1] INFO  DataServiceImpl:444  - Stored message on topic :$EDC/#account-name/new-client/DEPLOY-V2/NOTIFY/test-client/download, priority: 1
15:06:07,402 [DataServiceImpl:Submit] INFO  MqttDataTransport:512  - Publishing message on topic: $EDC/amir-kura/new-client/DEPLOY-V2/NOTIFY/test-client/download with QoS: 1
15:06:07,403 [pool-12-thread-1] INFO  DownloadImpl:131  - Ready to install
15:06:07,405 [pool-2-thread-2] INFO  DataServiceImpl:441  - Storing message on topic :$EDC/#account-name/new-client/DEPLOY-V2/REPLY/REQUEST_M2UIS65D0O7DFILVRH9QF80QKE, priority: 1
15:06:07,423 [pool-2-thread-2] INFO  DataServiceImpl:444  - Stored message on topic :$EDC/#account-name/new-client/DEPLOY-V2/REPLY/REQUEST_M2UIS65D0O7DFILVRH9QF80QKE, priority: 1
15:06:07,430 [DataServiceImpl:Submit] INFO  MqttDataTransport:512  - Publishing message on topic: $EDC/amir-kura/new-client/DEPLOY-V2/REPLY/REQUEST_M2UIS65D0O7DFILVRH9QF80QKE with QoS: 0
!SESSION 2017-05-16 14:51:45.651 -----------------------------------------------
eclipse.buildId=unknown
java.version=1.8.0_121
java.vendor=Oracle Corporation
BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=en_IN
Command-line arguments:  -dev file:/home/amir/eclipse/workspaces/kura/.metadata/.plugins/org.eclipse.pde.core/Kura_Emulator_Linux/dev.properties -os linux -ws gtk -arch x86_64 -consoleLog -console

!ENTRY org.apache.felix.deploymentadmin 4 0 2017-05-16 15:06:07.499
!MESSAGE Stream does not contain a valid deployment package: missing manifest!
15:06:07,500 [pool-12-thread-1] INFO  InstallImpl:135  - Install failed!
15:06:07,509 [pool-12-thread-1] INFO  DataServiceImpl:441  - Storing message on topic :$EDC/#account-name/new-client/DEPLOY-V2/NOTIFY/test-client/install, priority: 1
15:06:07,535 [pool-12-thread-1] INFO  DataServiceImpl:444  - Stored message on topic :$EDC/#account-name/new-client/DEPLOY-V2/NOTIFY/test-client/install, priority: 1
15:06:07,550 [DataServiceImpl:Submit] INFO  MqttDataTransport:512  - Publishing message on topic: $EDC/amir-kura/new-client/DEPLOY-V2/NOTIFY/test-client/install with QoS: 1
15:06:07,684 [MQTT Call: test-client] INFO  DataServiceImpl:376  - Confirmed message ID: 1348 to store
15:06:07,935 [MQTT Call: test-client] INFO  DataServiceImpl:376  - Confirmed message ID: 1350 to store
根据错误,我正在发送一个无效的部署包,因为它缺少
清单
,但我已经创建了
.dp
文件,如中所述


我如何解决这个问题?似乎没有其他人遇到过这个问题

在构建部署包时,有两件事需要注意

  • 清单必须是DP文件(仅为ZIP文件)中的第一个条目
  • 包含的捆绑包的顺序很重要,它们必须以与清单中声明的顺序相同的顺序包含在DP中
  • 舱单作为第一项 MANIFEST.MF文件包含在
    META-INF/
    目录中。按照ZIP标准,您可以在文件中添加一个条目来创建目录,并在文件中添加第二个条目。这在DP格式中不受支持,因此您必须直接添加带有完整路径的文件,作为生成的DP文件的第一个条目

    例如,使用
    maven-antrun-plugin
    打包DP,您可以在
    命令上使用
    filesonly=“true”
    属性:

    <jar destfile="${basedir}/../you.final.dp_1.0.0.dp"
         manifest="${project.build.directory}/dp_stage/META-INF/MANIFEST.MF"
         includes="" filesonly="true">
        <filelist dir="${project.build.directory}/dp_stage/" files="${sortedFiles}"/>
    </jar>
    

    我在github上有一个个人网站,它可以做到这一点,请查看参考资料。


    我在@Amir comment之后添加了第二个答案。另一个答案没有解决实际问题,但在其他一些情况下可能会有所帮助

    我认为问题在于发送到
    DEPLOY-V2
    cloudlet的度量

    dp.uri=file:/home/amir/Downloads/org.eclipse.kura.example.hello_osgi/resources/dp/hello_osgi.dp
    dp.download.protocol=HTTPS
    
    通知中也有以下指示:

    dp.download.size=0
    
    URI表示它是本地文件系统上的一个文件,但协议表示使用HTTPS

    如果你看,你会读到的

    Kura 1.4.0引入了名为“DEPLOY-V2”的部署应用程序的新版本。引入的主要功能与包分发的不同方法相关:设备不接收MQTT消息中的包,而只接收下载请求,其中包含通过HTTP执行独立下载所需的所有信息
    dp.uri(字符串)。强制性的表示部署包的URI。 dp.download.protocol(字符串)必填项。指定用于下载捆绑包/shell脚本的协议。必须设置为HTTP或HTTPS


    您需要提供一个有效的HTTP URL以从中下载DP。

    仔细查看发现问题在于下载部署包,而不是安装。当我发送一个下载请求时,
    .dp
    文件应该从源
    URI
    下载到
    /tmp
    目录中,由于下载的文件是
    0字节
    ,因此该文件无法正确下载。当我从工作区粘贴
    .dp
    文件,然后发送安装请求时,
    .dp
    安装成功。那么,如何解决下载问题呢?@Amir我补充了第二个答案。这看起来像Kura的某个bug,因为它在明显不成功时报告成功。
    dp.download.size=0