web-dev-qa-db-ja.com

Synologyのnpmインストールでzlib無効距離エラーが発生する

これは理想的ではありませんが(まだ)、現在Synologyを通じてビルドスクリプトを実行しています。ビルドの一部はもちろんすべてのパッケージをインストールすることです。ただし、この時点で多くのエラーが発生します。

以下を使用してインストールします。

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 ]

ログからわかるように、私はSynologyでノード12.14とnpm 6.13を使用しています。私は自分のPCでまったく同じバージョンでテストしましたが、スムーズに動作します。

これは何が原因で、修正できますか?

4
paul23

そのため、1.2.8 zlibを1.2.11に置き換えれば、npmが機能するようになります。

Entwareのlibz.so.1.2.11を使用していますが、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をアップグレードすることはないので、問題ないはずです。

2
Sam Nya

ノードのバージョンを一時的に切り替えるのに役立ちますか?これは、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

残念ながらコメントは許可されていないので、@ StonyBoy:entwareからzlibをコピーできます。/volume1/etc/libに移動し、スクリプトでnpmを開始します。

#!/bin/bash
LD_LIBRARY_PATH=/volume1/etc/lib:/usr/local/lib:/usr/lib:/lib:/lib/security
export LD_LIBRARY_PATH
exec /usr/local/bin/npm $@

これにより、面倒な再インストールを回避できます...

1
Kein Admin

/ libまたは/ usr/lib(私のシステムでも同じ)にあるlibを変更することは非常に危険です。私はそれをしました、そしてそれは私のSynologyの起動を壊しました。ファームウェアを復元する必要があり、神経質になりました...

残念ながら、ファームウェアのアップデート以降、entware libsはSynology RS816(MARVELL Armada 385 88F6820、armv7l)で機能しなくなりました(現在、私は6.2.3-25426を持っています)。 npmを実行しようとすると、

error while loading shared libraries: /opt/lib/libz.so.1: internal error

確かではありませんが、それはlibzが静的にリンクされておらず、/ opt/lib/libc.so.6を使用しているためであると思います。

だから私は別のlibz.so.1.2.11を検索し、 optware-ng でそれを見つけ、それを/ usr/local/libにコピーして、新しいnpmスクリプトを作成しました。私のRS816では、npmは/usr/local/binにあり、../lib/node_modules/npm/bin/npm-cli.jsにシンボリックリンクされていました。新しいnpmスクリプトは(Kein Admin)に似ており、次のようになります。

#!/bin/sh
# fix npm WARN tar zlib: invalid distance too far back
# using libz 1.2.11 from optware-ng located at /usr/local/lib
export LD_LIBRARY_PATH=/usr/local/lib:/lib
/usr/local/lib/node_modules/npm/bin/npm-cli.js $@
0
acoder