kura - сбой удаленной установки пакета развертывания через Mqtt

У меня проблемы с удаленной установкой пакета развертывания. Ниже приведены показатели, которые я отправляю в теме запроса. $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}

Но установка не удалась. Следующее - моя консоль Куры

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

По ошибке я отправляю неверный пакет развертывания, так как в нем отсутствует Manifest, но я создал .dp файл, как указано в примере Hello World.

Как мне это решить? Никто другой, кажется, не сталкивался с этой проблемой

2 ответа

Решение

Я добавляю второй ответ после комментария @Amir. Другой ответ не касается реальной проблемы, но может быть полезен в некоторых других случаях.

Я думаю, что проблема заключается в метриках, отправленных DEPLOY-V2 облачко.

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.

Если вы посмотрите документацию DEPLOY-V2, вы прочтете это

Kura 1.4.0 представляет новую версию приложения DEPLOY под названием "DEPLOY-V2". Основная введенная функция связана с другим подходом к распространению пакета: вместо получения пакета внутри сообщения MQTT устройство получает только запрос на загрузку со всей информацией, необходимой для независимой загрузки через HTTP.
дп.ури (Строка). Обязательный. Представляет URI пакета развертывания. dp.download.protocol (String) Обязательный. Определяет протокол, который будет использоваться для загрузки сценариев пакетов / оболочки. Должно быть установлено HTTP или HTTPS.

Вам необходимо предоставить действительный URL-адрес HTTP для загрузки DP.

При создании пакета развертывания необходимо учитывать две вещи.

  1. Манифест должен быть первой записью в файле DP (это просто ZIP-файл)
  2. Порядок включенных пачек имеет значение, они должны быть включены в ДП в том же порядке, как они заявлены в Манифесте

Манифест в качестве первой записи

Файл MANIFEST.MF включен в META-INF/ каталог. По стандарту ZIP вы можете добавить запись в файл для создания каталога и вторую запись с файлом. Это не поддерживается в формате DP, поэтому вы должны добавить непосредственно файл с полным путем в качестве самой первой записи в результирующий файл DP.

Например, используя maven-antrun-plugin для упаковки DP вы можете использовать filesonly="true" атрибут на <jar> команда:

<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>

Заказ комплектов

Если ваш пакет развертывания содержит более одного пакета, они должны быть включены в том же порядке, что и манифест. Вы можете использовать алфавитный порядок, который предсказуем и работает хорошо:-)
Скопируйте ваши JAR-файлы в папку и добавьте их в DP в отсортированном виде. Используя то же самое maven-antrun-plugin:

<copy file="${basedir}/../project/target/first.bundle_1.0.0.jar"
      todir="${project.build.directory}/dp_stage/bundles/" />

<copy file="${basedir}/../project2/target/second.bundle_1.0.0.jar"
      todir="${project.build.directory}/dp_stage/bundles/" />

<!-- Files MUST be included in the jar in the same order as they are declared in the DP MANIFEST.
    I used alphabetical order. -->
<!-- https://ant.apache.org/manual/Tasks/jar.html -->
<local name="sortedFiles"/>
<pathconvert property="sortedFiles" pathsep="${line.separator}">
    <sort>
        <fileset dir="${project.build.directory}/dp_stage/" includes="bundles/*"/>
    </sort>
</pathconvert>

У меня есть личный проект на GitHub, который делает именно это, посмотрите для справки.
POM который вызывает maven-antrun-plugin
Муравьиная задача построить ДП

Другие вопросы по тегам