npm install -g apiconnect fails in Docker container (RHEL8)

628 Views Asked by At

I need to build a container based on RHEL 8 and then install LoopBack and IBM ApiConnect.

  • Run a container with the RedHat Enterprise Linux 8
docker run -it --name api-framework-rhel8 -v ~/api-framework-rhel8:/api-framework-rhel8 registry.access.redhat.com/ubi8/ubi:8.1 bash
  • Installing Node.js (v12) into the container
curl -sL https://rpm.nodesource.com/setup_12.x | bash -

yum install -y nodejs
  • Install development tools to build native addons
yum install gcc-c++ make

yum install python38

yum install python27
  • Use alternatives to map python to python2 (or python3) - Tried both and both failed during api-connect install.
alternatives --set python /usr/bin/python2
  • Install LoopBack
npm install -g loopback-cli

Install ApiConnect

npm install -g --unsafe-perm=true --allow-root apiconnect

However, this fails with the error message (from the console, 2 sets):

gyp: [Errno 2] No such file or directory while executing command '['python', './generate_build_id.py']' in binding.gyp while trying to load binding.gyp
gyp ERR! configure error 
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onCpExit (/usr/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:351:16)
gyp ERR! stack     at ChildProcess.emit (events.js:315:20)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:275:12)
gyp ERR! System Linux 4.19.76-linuxkit
gyp ERR! command "/usr/bin/node" "/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /usr/lib/node_modules/apiconnect/node_modules/appmetrics
gyp ERR! node -v v12.18.4
gyp ERR! node-gyp -v v5.1.0
gyp ERR! not ok 

Note that python2 and python3 are installed under /usr/bin and accessible from the container, however, python can not be called.

The second set of errors from the console:

Error: [email protected] install: `node extract_all_binaries.js || node-gyp rebuild`
error code ELIFECYCLE
error errno 1
error [email protected] install: `node extract_all_binaries.js || node-gyp rebuild`
error Exit status 1
error Failed at the [email protected] install script.
error This is probably not a problem with npm. There is likely additional logging output above.
2

There are 2 best solutions below

0
On

I noticed that you're using Node.js 12.x. The apiconnect toolkit only supports Node.js 10.x.

I tried most of the steps in your question, but switched to Node 10, and that seemed to resolve the issue.

Also, be sure to install python27 and run alternatives --set python /usr/bin/python2 as you mentioned.

Here's the complete Dockerfile I used:

FROM registry.access.redhat.com/ubi8/ubi:8.1

RUN yum update -y && \
    yum install -y python27 gcc-c++ make

RUN alternatives --set python /usr/bin/python2

RUN curl -sL https://rpm.nodesource.com/setup_10.x | bash - && \
    yum install -y nodejs

RUN npm i -g --unsafe-perm=true apiconnect

CMD ["bash"]
0
On

This Node version worked for me: node-v8.8.1