Use libLexActivator.so with alpine docker image

Hi,

I am using Alpine docker image for my nodejs application. I have added libLexActivator.so to application bundle but it fails to load with below error.
(node:7) UnhandledPromiseRejectionWarning: Error: Dynamic Linking Error: Error relocating ./libLexActivator.so: __rawmemchr: symbol not found

Does lexActivator supports usage in alpine linux? Please guide me on how to use libLexActivator.so in alpine.

Thanks!

Hi Mathew,

Alpine uses a different C library. Please find the custom build files for Alpine below:

Thanks!! Let me use this library and see.

Hi,

I am getting below error while using the above custom build shared to me
(node:6) UnhandledPromiseRejectionWarning: Error: Dynamic Symbol Retrieval Error: Symbol not found: GetLicenseMeterAttribute.
Please have a look.

Thanks!

Hi Mathew,

Please find attached the updated image.

Is there a plan to roll this into an official release? We are also trying to use Cryptlex in an environment which is using a .net Core application inside of an Alpine Linux docker image. At runtime, it does not find the required shared lib.

Hi Shane,

This has been part of the official build for a long time now. When you download LexActivator lib from dashboard, it contains a separate folder for musl (Alpine).

It is also included in the dotnet nuget package.

There seems to be issue with dotnet. It is loading the wrong .so file.

As a work around after dotnet build you need to copy

./bin/Debug/netcoreapp3.1/runtimes/linux-musl-x64/native/libLexActivator.so

to

./bin/Debug/netcoreapp3.1/runtimes/linux-x64/native/libLexActivator.so

We resolved it by adding curl during the docker build as its a dependency not in Alpine by default.

UnhandledPromiseRejectionWarning originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). A rejected promise is like an exception that bubbles up towards the application entry point and causes the root error handler to produce that output. It usually happens in async await functions, and there’s an easy fix.

const functionName = async (arguments) => {
  try {
  // Your code here
  } catch (error) {
  // Handle rejection here
  }
};

A nice way to wait for several Promises to resolve to use the Promise.all function. It expects an Array of Promises, and produces a Promise that resolves to an Array containing the values that the individual Promises resolved to. Furthermore, it only resolves after the last Promise resolves. If any of its input Promises rejects, then the entire Promise.all expression rejects as well. It effectively “runs” all of its input processes “at the same time”, emulating the classic “fork-join” pattern.