npm установка по синологии дает zlib ошибку неверного расстояния - PullRequest
3 голосов
/ 18 февраля 2020

Ну, хотя это не идеально (пока), мы в настоящее время запускаем скрипт сборки через синологию. Конечно, частью сборки является установка всех пакетов. Однако в этот момент происходит много ошибок.

Мы устанавливаем, используя:

npm ci --only=production (хотя те же результаты с npm install). И происходят следующие ошибки:

npm WARN tar zlib: invalid distance too far back

(как много, много раз), где-то с:

291 verbose stack ZlibError: zlib: invalid distance too far back
291 verbose stack     at Unzip.write (/usr/local/lib/node_modules/npm/node_modules/minizlib/index.js:147:22)
291 verbose stack     at Unpack.write (/usr/local/lib/node_modules/npm/node_modules/tar/lib/parse.js:313:19)
291 verbose stack     at PassThrough.ondata (_stream_readable.js:727:22)
291 verbose stack     at PassThrough.emit (events.js:210:5)
291 verbose stack     at addChunk (_stream_readable.js:309:12)
291 verbose stack     at readableAddChunk (_stream_readable.js:290:11)
291 verbose stack     at PassThrough.Readable.push (_stream_readable.js:224:10)
291 verbose stack     at PassThrough.Transform.push (_stream_transform.js:150:32)
291 verbose stack     at PassThrough.afterTransform (_stream_transform.js:94:10)
291 verbose stack     at PassThrough._transform (_stream_passthrough.js:44:3)
291 verbose stack     at PassThrough.Transform._read (_stream_transform.js:189:10)
291 verbose stack     at PassThrough.Transform._write (_stream_transform.js:177:12)
291 verbose stack     at doWrite (_stream_writable.js:431:12)
291 verbose stack     at writeOrBuffer (_stream_writable.js:415:5)
291 verbose stack     at PassThrough.Writable.write (_stream_writable.js:305:11)
291 verbose stack     at PassThrough.ondata (_stream_readable.js:727:22)
292 verbose cwd /volume1/docker/builder/dockers/allsports.app/allsports.app.nginx/javascript
293 verbose Linux 3.10.105
294 verbose argv "/volume1/@appstore/Node.js_v12/usr/local/bin/node" "/usr/local/bin/npm" "ci"
295 verbose node v12.14.0
296 verbose npm  v6.13.4
297 error code Z_DATA_ERROR
298 error errno -3
299 error zlib: invalid distance too far back
300 verbose exit [ -3, true ]

Как видно из журнала, я использую синологию с использованием узла 12.14 и npm 6,13. Я тестировал с точно такими же версиями на своем собственном p c, и там все работает гладко.

Что вызывает это, и можно ли это исправить?

Ответы [ 3 ]

5 голосов
/ 26 февраля 2020

Система Zlib 1.2.8 (как включена в текущую версию DSM от Synology) не работает с npm в Node v12 или v10, как отмечено в https://github.com/nodejs/node/issues/22839#issuecomment -474484250

Предыдущие версии Synology Node (например, v8) не имеют этой проблемы, и npm работает нормально. Я только что столкнулся с этой ошибкой (npm не может сделать что-нибудь полезным) с Node v12 на моей Synology, и возврат к Node v8 действительно устраняет проблему go.

Одним из вариантов может быть создание более нового zlib из исходного кода с использованием Entware, но я читал, что поддержка Synology отказывается даже касаться системы с ipkg / Optware / Entware. список изменений для Zlib указывает на ряд улучшений переносимости в 1.2.9, но я не уверен, что простая замена системы zlib вызовет проблемы с другим программным обеспечением в системе.

В целом Если ваш скрипт сборки может обрабатывать Node 8 (который, к сожалению, только что получил EOL), я бы остановился на этом. В противном случае официальный / поддерживаемый ответ, вероятно, должен ждать обновления для DSM от Synology.

1 голос
/ 19 марта 2020

Поэтому я заменяю 1.2.8 zlib на 1.2.11, тогда npm работает.

Я использую libz.so.1.2.11, поставляемый из entware, но entware устанавливается только в / opt / lib, поэтому я копирую его в / lib

rm /lib/libz.so.1.2.8
rm /lib/libz.so.1
rm /lib/libz.so

cp /opt/lib/libz.so.1.2.11 /lib/
chmod +x /lib/libz.so.1.2.11
ln -s /lib/libz.so.1.2.11 /lib/libz.so.1
ln -s /lib/libz.so.1.2.11 /lib/libz.so

Я никогда не обновляю DSM, поэтому думаю, что все должно быть в порядке.

0 голосов
/ 08 мая 2020

Может ли это помочь временно переключить версию узла? Это работает, если у вас установлены пакеты V12 и V8.

sudo -i 
nvm ls # all installed versions
nvm set 8.9.4
node --version
npm --version
# do things with v8
nvm set 12.14.0
...