Azure / iot-edge-v1

Azure IoT Edge
http://azure.github.io/iot-edge/
Other
524 stars 258 forks source link

[V1] Java and Dot net core modules cannot run together on RPi or Linux #522

Open malichishti opened 6 years ago

malichishti commented 6 years ago

Hi,

I have been trying to cross compile V1 gateway for both Dot Net core and Java binding but Java bindings fail as they need a 32 bit jdk which cannot be installed on a 64 bit Linux. On the other hand Dot Net core sdk is not available on 32 bit Linux to build Dot Net core bindings.

Is there a way compile V1 gateway with both Dot Net core and Java binding for Raspberry Pi? Furthermore run a Gateway on RPi with both Java and Dot Net core modules linked to each other?

Regards, Ali

aribeironovaes commented 6 years ago

Hi Ali,

i haven't tried that, but I believe .NET Core is available for 32 bit (.NEt Core runs on Raspberry pi). The only thing that is not available for ARM 32 (or ARM Overall) is the SDK. That said, you can: 1-Have your .NET Runtime on the Raspberry pi; 2-Have your .NET Core Modules built on any machine and copied the binaries do Raspberry pi; 3-Have Java normally on Raspberry pi.

Have you tried that?

Let us know,

Angelo Ribeiro.

On Mon, Feb 19, 2018 at 10:06 PM, malichishti notifications@github.com wrote:

Hi,

I have been trying to cross compile V1 gateway for both Dot Net core and Java binding but Java bindings fail as they need a 32 bit jdk which cannot be installed on a 64 bit Linux. On the other hand Dot Net core sdk is not available on 32 bit Linux to build Dot Net core bindings.

Is there a way compile V1 gateway with both Dot Net core and Java binding for Raspberry Pi? Furthermore run a Gateway on RPi with both Java and Dot Net core modules linked to each other?

Regards, Ali

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/Azure/iot-edge/issues/522, or mute the thread https://github.com/notifications/unsubscribe-auth/AI75b8iWk8719_YRmfFJhA0gipdCyk13ks5tWmDZgaJpZM4SLdir .

--

Angelo Ribeiro Msc - Federal University of Pernambuco Team in Training Alumni Triple Crowned! :)

malichishti commented 6 years ago

Hi @aribeironovaes ,

You are correct dot net core SDK is not available for 32 bit which is needed for the first step above "deploying the runtime on Raspberry Pi" as the runtime has to be built or cross compiled with both --enable-dotnet-core-binding --enable-java-binding flags. That is only possible if 32 bit jdk and dot net core sdk are available together.

I have so far tried aziotbld/raspberrypi-c docker image to cross compile, it works fine for dotnetcore bindings as it is 64bit but fails for java binding with error below: image

Which i believe is a 32 bit jdk not being available problem.

aribeironovaes commented 6 years ago

I will take a look tomorrow, but i have a quick question.

If you don’t mix them, does it work?

So were you able to run gateway v1 with dotnet core on arm and gateway v1 with java on arm?

Sent from my phone

On Feb 19, 2018, at 10:39 PM, malichishti notifications@github.com wrote:

Hi @aribeironovaes ,

It might be the runtime and not the sdk which is available for 32 bit as i could not find any package sources other than amd64 here

The first step of deploying the runtime on Raspberry Pi is a problem - The runtime has to be built or cross compiled with both --enable-dotnet-core-binding --enable-java-binding flags. That is only possible if 32 bit jdk is available.

I have so far tried aziotbld/raspberrypi-c docker image to cross compile, it works fine for dotnetcore bindings as it is 64bit but fails for java binding with error below:

Which i believe is a 32 bit jdk not being available problem.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

malichishti commented 6 years ago

gateway v1 with dot net core on arm Yes it works gateway v1 with java on arm Have not tried yet

They have to be built together otherwise the gateway does not recognise the module loaders i.e. if i build for dot net core bindings and then just copy the java binding from npm The gateway does not recognise the java loader and an error which is roughly like "cannot find java loader among the default loaders" is thrown [as per my understanding it happens because gateway was not built with java bindings]

aribeironovaes commented 6 years ago

I know that they have to be built together, but if you are having failures o java, how do you know the failures are due to java built together with .net core or just because java binding is jot working on arm?

It is why i suggest to make them work separately before trying to put them together.

Thanks

Angelo Ribeiro

Sent from my phone

On Feb 19, 2018, at 10:54 PM, malichishti notifications@github.com wrote:

gateway v1 with dot net core on arm Yes gateway v1 with java on arm Have not tried yet

They have to be built together otherwise the gateway does not recognise the module loaders i.e. if i build for dot net core bindings and then just copy the java binding from npm The gateway does not recognise the java loader and an error which is roughly like "cannot find java loader among the default loaders" [as per my understanding it happens because gateway was not built with java bindings]

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

aribeironovaes commented 6 years ago

But i Think i am understanding your scenario. For java you “have” do cross plat buil in 32bit linux and for .net you have to Crossbuild in 64bit linux.

Is that accurate?

The error you showed was trying to build in a 64 bit linux. If you try on a 32bit linux what happens? In what point of the build it fail?

Ps. For . Net if the scrips build gateway but fail to build modules, you can just use the gateway built in a 32 bits linux and modules built in a 64 bit linux

Makes sense?

Not ideal, but it would be a problem to follow up with .net core or java to get their tools fixed/supported on the same platform.

Let me know if this work around works.

Angelo Ribeiro

Sent from my phone

On Feb 19, 2018, at 10:54 PM, malichishti notifications@github.com wrote:

gateway v1 with dot net core on arm Yes gateway v1 with java on arm Have not tried yet

They have to be built together otherwise the gateway does not recognise the module loaders i.e. if i build for dot net core bindings and then just copy the java binding from npm The gateway does not recognise the java loader and an error which is roughly like "cannot find java loader among the default loaders" [as per my understanding it happens because gateway was not built with java bindings]

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

malichishti commented 6 years ago

But i Think i am understanding your scenario. For java you “have” do cross plat buil in 32bit linux and for .net you have to Crossbuild in 64bit linux.

Is that accurate?

Yes, that is exactly what my problem is.

Workaround

I'm not worried about the modules, i build them separately anyway. I only need the Gateway and its bindings, but i doubt i can build them from a 32 bit Linux.