Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Question: Offline installation #200

Closed
ikit opened this issue Feb 1, 2021 · 10 comments
Closed

Question: Offline installation #200

ikit opened this issue Feb 1, 2021 · 10 comments
Labels

Comments

@ikit
Copy link

ikit commented Feb 1, 2021

Hello,

I'm trying to install an application with SAP and node-rfc v2 on an offline virtual machine (windows server 2016) (no connexion to Internet but access to the artifactory of the enterprise).

I successfully installed windows-build-tools, cmake, and lot of dependencies, but I'm stuck with the following problem.

$ npm install

> [email protected] preinstall E:\GIT\XXXXXX\node_modules\node-rfc
> npm install cmake-js prebuild-install prebuild node-addon-api

npm WARN deprecated [email protected]: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated [email protected]: this library is no longer supported
npm notice created a lockfile as package-lock.json. You should commit this file.
+ [email protected]
+ [email protected]
+ [email protected]
+ [email protected]
added 252 packages from 241 contributors in 51.181s

3 packages are looking for funding
  run `npm fund` for details


> [email protected] install E:\GIT\XXXXXX\node_modules\node-rfc
> prebuild-install --tag-prefix -r napi || cmake-js rebuild
 
prebuild-install WARN This package does not support N-API version undefined
prebuild-install WARN install getaddrinfo EAI_AGAIN github.com
[
  'C:\\Program Files\\nodejs\\node.exe',
  'E:\\GIT\\XXXXXX\\node_modules\\node-rfc\\node_modules\\cmake-js\\bin\\cmake-js',
  'rebuild'
]
info TOOL Using Visual Studio 16 2019 generator.
info DIST Downloading distribution files.
http DIST       - https://nodejs.org/dist/v12.14.0/SHASUMS256.txt
ERR! OMG getaddrinfo ENOTFOUND nodejs.org
ERR! OMG getaddrinfo ENOTFOUND nodejs.org
npm WARN [email protected] requires a peer of class-transformer@^0.2.3 but none is installed. You must install peer dependencies yourself.
npm WARN [email protected] requires a peer of class-validator@^0.9.1 but none is installed. You must install peer dependencies yourself.
npm WARN [email protected] requires a peer of routing-controllers@^0.8.0 but none is installed. You must install peer dependencies yourself.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] install: `prebuild-install --tag-prefix -r napi || cmake-js rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\XXXXXX\AppData\Roaming\npm-cache\_logs\2021-02-01T13_44_59_311Z-debug.log```

Any idea to solve this problem ?
It is a development VM that why I'm trying to install all dependency and compiltation tools.
@bsrdjan
Copy link
Contributor

bsrdjan commented Feb 1, 2021

Please try with the latest node-rfc 2.4.0, not the 2.3.0 version.

Which is your node version?

The log shows 12.14, which is not supported. Should be at least 12.17: https://github.com/SAP/node-rfc/blob/master/package.json#L11

The reason is internally used N-API v6, available from 12.17: https://nodejs.org/api/n-api.html#n_api_n_api_version_matrix

@ikit
Copy link
Author

ikit commented Feb 2, 2021

I updated node to the last LTS version: 14.15.4.
updated packages so I'm now using node-rfc 2.4.0.

I also try this solution to have all packages and nm-cache on my vm.

The installation seems to wors fine. but I go the following error when I start the application:

$ npm run dev

> [email protected] dev E:\GIT\XXXXXX-api
> npm run start:dev


> [email protected] start:dev E:\GIT\XXXXXX-api
> cross-env NODE_ENV=development ts-node-dev src/api.ts

[INFO] 10:34:27 ts-node-dev ver. 1.1.1 (using ts-node ver. 9.1.1, typescript ver. 4.1.3)
info: Start API node process (ppid=10184) {"timestamp":"2021-02-02T09:34:35.167Z"}
info: WS Server has started on port 5011. {"timestamp":"2021-02-02T09:34:35.175Z"}
Error: The specified module could not be found.
\\?\E:\GIT\XXXXXX-api\node_modules\node-rfc\lib\binding\sapnwrfc.node

 The SAP NW RFC SDK could not be loaded, check the installation: https://github.com/SAP/node-rfc/blob/master/doc/installation.md#sap-nwrfc-sdk-installation
environment: {
  "platform": {
    "name": "win32",
    "arch": "x64",
    "release": "10.0.14393"
  },
  "env": {
    "SAPNWRFC_HOME": "C:\\nwrfcsdk",
    "RFC_INI": "",
    "nwrfcsdk_lib_on_path": true
  },
  "versions": {
    "node": "14.15.4",
    "v8": "8.4.371.19-node.17",
    "uv": "1.40.0",
    "zlib": "1.2.11",
    "brotli": "1.0.9",
    "ares": "1.16.1",
    "modules": "83",
    "nghttp2": "1.41.0",
    "napi": "7",
    "llhttp": "2.1.3",
    "openssl": "1.1.1i",
    "cldr": "37.0",
    "icu": "67.1",
    "tz": "2020a",
    "unicode": "13.0"
  }
}

    at Module._extensions..node (internal/modules/cjs/loader.js:1122:18)
    at Object.nodeDevHook [as .node] (E:\GIT\XXXXXX-api\node_modules\ts-node-dev\lib\hook.js:63:13)
    at Module.load (internal/modules/cjs/loader.js:928:32)
    at Function.Module._load (internal/modules/cjs/loader.js:769:14)
    at Module.require (internal/modules/cjs/loader.js:952:19)
    at require (internal/modules/cjs/helpers.js:88:18)
    at Object.<anonymous> (E:\GIT\XXXXXX-api\node_modules\node-rfc\src\ts\wrapper\noderfc-bindings.ts:66:23)
    at Module._compile (internal/modules/cjs/loader.js:1063:30)
    at Module._compile (E:\GIT\XXXXXX-api\node_modules\source-map-support\source-map-support.js:547:25)
    at Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
    at Object.nodeDevHook [as .js] (E:\GIT\XXXXXX-api\node_modules\ts-node-dev\lib\hook.js:63:13)
    at Module.load (internal/modules/cjs/loader.js:928:32)
    at Function.Module._load (internal/modules/cjs/loader.js:769:14)
    at Module.require (internal/modules/cjs/loader.js:952:19)
    at require (internal/modules/cjs/helpers.js:88:18)
    at Object.<anonymous> (E:\GIT\XXXXXX-api\node_modules\node-rfc\src\ts\index.ts:7:1)
[ERROR] 10:34:36 Error: The specified module could not be found.
\\?\E:\GIT\XXXXXX-api\node_modules\node-rfc\lib\binding\sapnwrfc.node

 The SAP NW RFC SDK could not be loaded, check the installation: https://github.com/SAP/node-rfc/blob/master/doc/installation.md#sap-nwrfc-sdk-installation
environment: {
  "platform": {
    "name": "win32",
    "arch": "x64",
    "release": "10.0.14393"
  },
  "env": {
    "SAPNWRFC_HOME": "C:\\nwrfcsdk",
    "RFC_INI": "",
    "nwrfcsdk_lib_on_path": true
  },
  "versions": {
    "node": "14.15.4",
    "v8": "8.4.371.19-node.17",
    "uv": "1.40.0",
    "zlib": "1.2.11",
    "brotli": "1.0.9",
    "ares": "1.16.1",
    "modules": "83",
    "nghttp2": "1.41.0",
    "napi": "7",
    "llhttp": "2.1.3",
    "openssl": "1.1.1i",
    "cldr": "37.0",
    "icu": "67.1",
    "tz": "2020a",
    "unicode": "13.0"
  }
}

But the sapnwrfc.node file exists at the expected location... and I try all tips on this page but I don't know what to do with these informations... something is wrong with my environment ?

$ findstr Patch %SAPNWRFC_HOME%\lib\sapnwrfc.dll
750 Patch Level 7

$ node -p "process.env".SAPNWRFC_HOME
C:\nwrfcsdk

$ npx envinfo --system --binaries
npx: installed 1 in 4.146s

  System:
    OS: Windows Server 2016 10.0.14393
    CPU: (2) x64 Intel(R) Xeon(R) Silver 4116 CPU @ 2.10GHz
    Memory: 3.25 GB / 8.00 GB
  Binaries:
    Node: 14.15.4 - C:\Program Files\nodejs\node.EXE
    npm: 6.14.10 - C:\Program Files\nodejs\npm.CMD

$ cd $SAPNWRFC_HOME/bin
$ ./rfcexec
Error: Not all mandatory parameters specified
        Please start the program in the following way:
        rfcexec -t -a <program ID> -g <gateway host> -x <gateway service>
                -f <file with list of allowed commands> -s <allowed Sys ID>
The options "-t" (trace), "-f" and "-s" are optional.

Below further optional parameters are listed. You can find their
documentation in sapnwrfc.ini:
-on_cce <0, 1, 2> (On Character Conversion Error)
-cfit (Conversion Fault Indicator Token - the substitute symbol used if on_cce=2)
-keepalive (Sets the keepalive option. Default is 0.)
-delta <0, 1> (default 1, i.e. use delta-manager)
-no_compression (table compression, default is 0, i.e. compression is on)

but running node -p "require('node-rfc')" return the above exception.

@ikit
Copy link
Author

ikit commented Feb 2, 2021

Maybe it could help: If I remove manually the node-rfc module and redo npm install I got following logs/warning

$ npm install

> [email protected] preinstall E:\GIT\XXXXXX-api\node_modules\node-rfc
> npm install cmake-js prebuild-install prebuild node-addon-api

npm WARN deprecated [email protected]: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated [email protected]: this library is no longer supported
npm notice created a lockfile as package-lock.json. You should commit this file.
+ [email protected]
+ [email protected]
+ [email protected]
+ [email protected]
added 252 packages from 241 contributors in 54.873s

9 packages are looking for funding
  run `npm fund` for details


> [email protected] install E:\GIT\XXXXXX-api\node_modules\node-rfc
> prebuild-install --tag-prefix -r napi || cmake-js rebuild

npm WARN [email protected] requires a peer of class-transformer@^0.2.3 but none is installed. You must install peer dependencies yourself.
npm WARN [email protected] requires a peer of class-validator@^0.9.1 but none is installed. You must install peer dependencies yourself.
npm WARN [email protected] requires a peer of routing-controllers@^0.8.0 but none is installed. You must install peer dependencies yourself.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})

added 1 package from 1 contributor in 64.46s

22 packages are looking for funding
  run `npm fund` for details

@bsrdjan
Copy link
Contributor

bsrdjan commented Feb 2, 2021

Warnings are uncritical but rfcexec test output is a good sign:

$ cd $SAPNWRFC_HOME/bin
$ ./rfcexec

It shows that correct NWRFC SDK is installed and $SAPNWRFC_HOME/lib folder is found on PATH.

Assuming the sapnwrfc.node is where it should be, possible reasons for not loading the NWRFC SDK could be access rights to C:\nwrfcsdk\lib for the user running the test or that C:\nwrfcsdk\lib is for some reason removed from PATH.

The PATH before loading can be traced by console.log() added in node_modules\node-rfc\lib\wrapper\noderfc-bindings.js:

console.log(process.env.PATH);
try {
    exports.noderfc_binding = noderfc_binding = require("../binding/sapnwrfc");
}

Assuming access rights are not a problem, could you please trace PATH before loading and check if C:\nwrfcsdk\lib folder is on PATH ?

There was a similar issue with installation on IIS #139

@ikit
Copy link
Author

ikit commented Feb 2, 2021

I added console.log(__dirname, process.env.PATH); to the ode_modules\node-rfc\lib\wrapper\noderfc-bindings.js.

All seems good in the PATH env, and actually I'm running the code with the dev account which is admin on the VM.

The output of the console.log:

__dirname= E:\GIT\XXXXXX-api\node_modules\node-rfc\lib\wrapper
PATH= [...]C:\Users\XXXXXX\AppData\Local\Programs\Microsoft VS Code\bin;C:\nwrfcsdk\lib;C:\Program Files\CMake\bin;C:\Users\XXXXXX\AppData\Roaming\npm

But I notice something weird, the path noticed in the exception is prefixed by \\?\ ... do you know if it's normal ?

Error: The specified module could not be found.
\\?\E:\GIT\XXXXXX-api\node_modules\node-rfc\lib\binding\sapnwrfc.node

@bsrdjan
Copy link
Contributor

bsrdjan commented Feb 2, 2021

\\?\ is normal, it comes like that from node stack. If I rename the sapnwrfc.dll to something else, the node -p "require('node-rfc')" fails with exactly the same error:

Error: The specified module could not be found.
\\?\C:\src\test-node\node_modules\node-rfc\lib\binding\sapnwrfc.node

Is SAP NWRFC SDK downloaded from the Service Portal and could it be that some SDK dll is missing in the lib folder? Does it look like this on your system:

PS C:\src\test-node> dir $env:SAPNWRFC_HOME/lib    

    Directory: C:\Tools\nwrfcsdk-pl6\lib

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----         2/5/2020   7:31 PM       20786176 icudt50.dll
-a----         2/5/2020   7:31 PM        1573888 icuin50.dll
-a----         2/5/2020   7:31 PM        1278976 icuuc50.dll
-a----         2/5/2020   7:39 PM          65024 libicudecnumber.dll
-a----         2/5/2020   7:39 PM         159744 libsapucum.dll
-a----         2/5/2020   7:42 PM          18764 libsapucum.lib
-a----         2/5/2020   7:52 PM        7157248 sapnwrfc.dll
-a----         2/5/2020   7:52 PM          81290 sapnwrfc.lib
-a----         2/5/2020   7:50 PM       17813504 sapnwrfc.pdb

Missing dll could why rfcexec works and the app not because app might require another dll later on.

To check what is exactly happening, could you please set the NLSUI_INIT_TRACE_LEVEL env variable to "high", reproduce the issue and attach the console output:

$env:NLSUI_INIT_TRACE_LEVEL="high"
node -p "require('node-rfc')"

@ikit
Copy link
Author

ikit commented Feb 2, 2021

I have exactly the same files in my C:\nwrfcsdk\lib directory.

By crawling the web I found the same explanation than you about the error:
Nodejs raise this error if the module (sapnwrfc.node) miss some dependencies.

The difficulty is to find whichs.
I try to set the NLSUI_INIT_TRACE_LEVEL to high and hight but I didn't get any additional log :( ...

I also try to check the sapnwrfc.node with dependencies walker, but I have hundreds of missing dlls ... and their names don't help me see if it's critical or not :/

@bsrdjan
Copy link
Contributor

bsrdjan commented Feb 2, 2021

When NLSUI_INIT_TRACE_LEVEL set to "high", the trace should be sent to console. Perhaps need to be set as system env var?

All prerequisites are mentioned here: https://github.com/SAP/node-rfc#windows and it could be that something is missing. Did you install the older version of C++ Redistributable required by SDK runtime?
https://www.microsoft.com/en-US/download/details.aspx?id=40784

The process monitor should otherwise help find the missing dependency: see #127 (comment)

@ikit
Copy link
Author

ikit commented Feb 3, 2021

I had to reinstall all the redistributable visual studio and now it works :D

thanks a lot for your help

@ikit ikit closed this as completed Feb 3, 2021
@bsrdjan
Copy link
Contributor

bsrdjan commented Feb 3, 2021

Welcome to the club, had to do it more than once :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants