Bien que ce ne soit pas (encore) idéal, nous exécutons actuellement un script de construction via synology. Une partie de la construction consiste bien sûr à installer tous les packages. Cependant, à ce stade, de nombreuses erreurs se produisent.
Nous installons en utilisant:
npm ci --only=production
(même si les mêmes résultats avec npm install
). Et les erreurs suivantes se produisent:
npm WARN tar zlib: invalid distance too far back
(comme beaucoup, plusieurs fois) suivi quelque part avec:
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 ]
Comme on peut le voir dans le journal, je suis synology utilise le nœud 12.14 et npm 6.13. J'ai testé exactement les mêmes versions sur mon propre PC et là, cela fonctionne bien.
Qu'est-ce qui cause ce problème et peut-il être corrigé?
Je remplace donc le zlib 1.2.8 par un 1.2.11 alors npm fonctionne maintenant.
J'utilise le libz.so.1.2.11 vient d'entware, mais entware ne s'installe que dans/opt/lib donc je le copie dans/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
Je n'ai jamais mis à jour DSM, donc je pense que ça devrait aller.
Cela peut-il aider de changer temporairement la version du nœud? Cela fonctionne si les packages V12 et V8 sont installés.
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
Malheureusement, je ne suis pas autorisé à commenter, donc @StonyBoy: Vous pouvez copier le zlib depuis entware, par exemple. vers/volume1/etc/lib puis démarrez npm avec un script:
#!/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 $@
Cela évite ces réinstallations ennuyeuses ...
Il est très dangereux de changer les bibliothèques situées dans/lib ou/usr/lib (idem sur mon système). Je l'ai fait et cela a cassé le démarrage de mon Synology. Nécessaire pour restaurer le firmware et me coûte beaucoup de nerfs ...
Malheureusement, les bibliothèques entware ont cessé de fonctionner sur mon Synology RS816 (MARVELL Armada 385 88F6820, armv7l) depuis une mise à jour du firmware (je ne sais pas laquelle, pour le moment, j'ai 6.2.3-25426). Si j'essaye d'exécuter npm je reçois
error while loading shared libraries: /opt/lib/libz.so.1: internal error
Pas sûr, mais je pense que c'est parce que libz n'est pas lié statiquement et utilise /opt/lib/libc.so.6 et cela le casse en quelque sorte.
J'ai donc cherché un autre libz.so.1.2.11 et en ai trouvé un à optware-ng , copié celui-ci dans/usr/local/lib et créé un nouveau script npm. Sur mon RS816, npm est situé à /usr/local/bin
et a été lié symboliquement à ../lib/node_modules/npm/bin/npm-cli.js
. Le nouveau script npm est similaire à (Kein Admin) et ressemble à ceci:
#!/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 $@