これは理想的ではありませんが(まだ)、現在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でまったく同じバージョンでテストしましたが、スムーズに動作します。
これは何が原因で、修正できますか?
そのため、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をアップグレードすることはないので、問題ないはずです。
ノードのバージョンを一時的に切り替えるのに役立ちますか?これは、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 $@
これにより、面倒な再インストールを回避できます...
/ 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 $@