Приложение NodeJS в OpenShift: /lib64/libz.so.1: версия `ZLIB_1.2.9 'не найдена - PullRequest
0 голосов
/ 01 июля 2018

Я новичок в Stackoverflow, так что "привет" всем!

Я также новичок в развертывании в OpenShift Online (бесплатная стартовая учетная запись). Я сталкиваюсь со следующей ошибкой при развертывании личного приложения NodeJS, требующего резкого пакета NPM (https://www.npmjs.com/package/sharp).

Приложение представляет собой «бинарную сборку» (https://docs.openshift.com/container-platform/3.6/dev_guide/dev_tutorials/binary_builds.html) непосредственно из локального репозитория Git. При запуске сборки я получаю следующий вывод (начальные, соответствующие строки):

Receiving source from STDIN as archive ...
Pulling image "docker-registry.default.svc:5000/openshift/nodejs@sha256:0486de81685b610e47314d8b100c4cfae65edb3294d02f0a29ea57408e171fb6" ...
---> Installing application source ...
---> Installing all dependencies

> sharp@0.20.5 install /opt/app-root/src/node_modules/sharp
> (node install/libvips && node install/dll-copy && prebuild-install) || (node-gyp rebuild && node install/dll-copy)

info sharp Downloading https://github.com/lovell/sharp-libvips/releases/download/v8.6.1/libvips-8.6.1-linux-x64.tar.gz
prebuild-install WARN install /lib64/libz.so.1: version `ZLIB_1.2.9' not found (required by /opt/app-root/src/node_modules/sharp/build/Release/../../vendor/lib/libpng16.so.16)
...

Сборка завершается и автоматически запускает новое развертывание, которое не запускается, конечно:

Environment: 
    DEV_MODE=false
    NODE_ENV=production
    DEBUG_PORT=5858
Launching via npm...
npm info it worked if it ends with ok
npm info using npm@5.6.0
npm info using node@v8.9.4
...
> node app.js

module.js:672
  return process.dlopen(module, path._makeLong(filename));
                 ^

Error: /lib64/libz.so.1: version `ZLIB_1.2.9' not found (required by /opt/app-root/src/node_modules/sharp/build/Release/../../vendor/lib/libpng16.so.16)
    at Object.Module._extensions..node (module.js:672:18)
    at Module.load (module.js:556:32)
    at tryModuleLoad (module.js:499:12)
    at Function.Module._load (module.js:491:3)
    at Module.require (module.js:587:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/opt/app-root/src/node_modules/sharp/lib/constructor.js:10:15)
    at Module._compile (module.js:643:30)
    at Object.Module._extensions..js (module.js:654:10)
    at Module.load (module.js:556:32)
    at tryModuleLoad (module.js:499:12)
    at Function.Module._load (module.js:491:3)
    at Module.require (module.js:587:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/opt/app-root/src/node_modules/sharp/lib/index.js:3:15)
    at Module._compile (module.js:643:30)

Я нашел несколько обсуждений этой ошибки в контексте Electron (https://github.com/lovell/sharp/issues/892) или когда также используется node-canvas (чего я не делаю; https://github.com/lovell/sharp/issues/843). Мне трудно извлечь информация, относящаяся к моему делу, так как я также не знаком с докерами и т. д.

Точно установленный пакет на моем локальном компьютере (Ubuntu 16.04), и, следовательно, приложение работает нормально. Я также попытался явно указать sharp в качестве первой строки в моем основном файле app.js, что не помогло.

Мы ценим любую помощь, спасибо!

Редактировать 2 июля : Из вышеупомянутого обсуждения, связанного с Электроном, я взял идею установить env-переменную

LD_PRELOAD="/opt/app-root/src/node_modules/sharp/vendor/lib/libz.so"

в среде сборки для приложения NodeJS в OpenShift. Журнал сборки изменился следующим образом:

Receiving source from STDIN as archive ...
Pulling image "docker-registry.default.svc:5000/openshift/nodejs@sha256:0486de81685b610e47314d8b100c4cfae65edb3294d02f0a29ea57408e171fb6" ...
ERROR: ld.so: object '/opt/app-root/src/node_modules/sharp/vendor/lib/libz.so' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/opt/app-root/src/node_modules/sharp/vendor/lib/libz.so' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/opt/app-root/src/node_modules/sharp/vendor/lib/libz.so' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/opt/app-root/src/node_modules/sharp/vendor/lib/libz.so' from LD_PRELOAD cannot be preloaded: ignored.
---> Installing application source ...
ERROR: ld.so: object '/opt/app-root/src/node_modules/sharp/vendor/lib/libz.so' from LD_PRELOAD cannot be preloaded: ignored.
---> Installing all dependencies
ERROR: ld.so: object '/opt/app-root/src/node_modules/sharp/vendor/lib/libz.so' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/opt/app-root/src/node_modules/sharp/vendor/lib/libz.so' from LD_PRELOAD cannot be preloaded: ignored.

> sharp@0.20.5 install /opt/app-root/src/node_modules/sharp
> (node install/libvips && node install/dll-copy && prebuild-install) || (node-gyp rebuild && node install/dll-copy)

ERROR: ld.so: object '/opt/app-root/src/node_modules/sharp/vendor/lib/libz.so' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/opt/app-root/src/node_modules/sharp/vendor/lib/libz.so' from LD_PRELOAD cannot be preloaded: ignored.
info sharp Downloading https://github.com/lovell/sharp-libvips/releases/download/v8.6.1/libvips-8.6.1-linux-x64.tar.gz 
added 170 packages in 19.982s

Предупреждение во время сборки исчезло, но приложение по-прежнему не запускается с той же ошибкой, что и раньше. (И да, я загружаю резким, как первое, в основном app.js.)

Не могу ли я как-то напрямую сказать NodeJS (в основном app.js), чтобы отдать предпочтение какому-либо пути (или библиотеке)?

1 Ответ

0 голосов
/ 05 июля 2018

К настоящему времени я решил проблему. Добавление переменной LD_PRELOAD в среду сборки и развертывания не помогло. Однако это сработало, как только я изменил стартовый скрипт npm, добавив переменную перед запуском приложения:

"start": "LD_PRELOAD='/opt/app-root/src/node_modules/sharp/vendor/lib/libz.so' node app.js"

Мне по-прежнему нужна первая информация в моем основном файле app.js; не проверял, действительно ли это необходимо.

...