Subject: [bug#32095] [PATCH 2/2] gnu: node: Update to 10.6.0.

From: Marius Bakke <[email-masked]>
Date: Fri, 07 Sep 2018 13:21:07 +0200

Hello!

Mathieu Lirzin <[email-masked]> writes:

> Hello,
>
> [email-masked] (Ludovic Courtès) writes:
>
>> Mathieu Lirzin <[email-masked]> skribis:
>>
>>> * gnu/packages/node.scm (node): Update to 10.6.0.
>>
>> I have it fail its tests like this:
>>
>> Building addon in /tmp/guix-build-node-10.6.0.drv-0/node-v10.6.0/test/addons/load-long-path
>> Building addon in /tmp/guix-build-node-10.6.0.drv-0/node-v10.6.0/test/addons/make-callback
>> Building addon in /tmp/guix-build-node-10.6.0.drv-0/node-v10.6.0/test/addons/make-callback-domain-warning
>> /tmp/guix-build-node-10.6.0.drv-0/node-v10.6.0/tools/build-addons.js:58
>> main(process.argv[3]).catch((err) => setImmediate(() => { throw err; }));
>>                                                           ^
>>
>> Error: Command failed: /tmp/guix-build-node-10.6.0.drv-0/node-v10.6.0/out/Release/node /tmp/guix-build-node-10.6.0.drv-0/node-v10.6.0/deps/npm/node_modules/node-gyp/bin/node-gyp.js rebuild --directory=/tmp/guix-build-node-10.6.0.drv-0/node-v10.6.0/test/addons/buffer-free-callback
>> Traceback (most recent call last):
>>   File "/tmp/guix-build-node-10.6.0.drv-0/node-v10.6.0/deps/npm/node_modules/node-gyp/gyp/gyp_main.py", line 13, in <module>
>>     import gyp
>>   File "/tmp/guix-build-node-10.6.0.drv-0/node-v10.6.0/deps/npm/node_modules/node-gyp/gyp/pylib/gyp/__init__.py", line 8, in <module>
>>     import gyp.input
>> EOFError: EOF read where object expected
>>
>>     at ChildProcess.exithandler (child_process.js:291:12)
>>     at ChildProcess.emit (events.js:182:13)
>>     at maybeClose (internal/child_process.js:961:16)
>>     at Process.ChildProcess._handle.onexit (internal/child_process.js:248:5)
>> make[1]: *** [Makefile:345: test/addons/.buildstamp] Error 1
>> make: *** [Makefile:266: test] Error 2
>>
>> Does this test pass for you?
>
> I am pretty confident it worked before sending the patch.  But now it
> fails with some crypto related errors during ‘make -s jstest’.
>
> --8<---------------cut here---------------start------------->8---
> === release test-crypto-scrypt ===
> Path: parallel/test-crypto-scrypt
> /tmp/guix-build-node-10.6.0.drv-0/node-v10.6.0/test/common/index.js:752
>         throw new assert.AssertionError({
>         ^
>
> AssertionError [ERR_ASSERTION]: Input A expected to strictly equal input B:
> + expected - actual ... Lines skipped
>
>   Comparison {
> -   message: 'error:060B50AC:digital envelope routines:EVP_PBE_scrypt:memory limit exceeded',
> +   code: 'ERR_CRYPTO_SCRYPT_INVALID_PARAMETER',
> +   message: 'Invalid scrypt parameter',
>     type: [Function: Error] {
> ...
>     }
>   }
>     at new AssertionError (internal/assert.js:268:11)
>     at Object.innerFn (/tmp/guix-build-node-10.6.0.drv-0/node-v10.6.0/test/common/index.js:752:15)
>     at expectedException (assert.js:489:19)
>     at expectsError (assert.js:577:16)
>     at Function.throws (assert.js:608:3)
>     at Object.expectsError (/tmp/guix-build-node-10.6.0.drv-0/node-v10.6.0/test/common/index.js:764:12)
>     at Object.<anonymous> (/tmp/guix-build-node-10.6.0.drv-0/node-v10.6.0/test/parallel/test-crypto-scrypt.js:126:10)
>     at Module._compile (internal/modules/cjs/loader.js:689:30)
>     at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
>     at Module.load (internal/modules/cjs/loader.js:599:32)
> Command: out/Release/node /tmp/guix-build-node-10.6.0.drv-0/node-v10.6.0/test/parallel/test-crypto-scrypt.js
> === release test-tls-passphrase ===
> Path: parallel/test-tls-passphrase
> assert.js:578
>     throw actual;
>     ^
>
> Error: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt
>     at Object.createSecureContext (_tls_common.js:144:17)
>     at Object.exports.connect (_tls_wrap.js:1119:48)
>     at /tmp/guix-build-node-10.6.0.drv-0/node-v10.6.0/test/parallel/test-tls-passphrase.js:228:7
>     at getActual (assert.js:497:5)
>     at Function.throws (assert.js:608:24)
>     at Object.<anonymous> (/tmp/guix-build-node-10.6.0.drv-0/node-v10.6.0/test/parallel/test-tls-passphrase.js:227:8)
>     at Module._compile (internal/modules/cjs/loader.js:689:30)
>     at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
>     at Module.load (internal/modules/cjs/loader.js:599:32)
>     at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
> Command: out/Release/node /tmp/guix-build-node-10.6.0.drv-0/node-v10.6.0/test/parallel/test-tls-passphrase.js
> === release test-tls-server-verify ===
> Path: parallel/test-tls-server-verify
> 0 0   connecting with agent1
> 0 1   connecting with agent2
> 0 2   connecting with agent3
> 0 3   connecting with nocert
> 1 0   connecting with agent1
> 1 1   connecting with agent2
> 1 2   connecting with agent3
> 1 3   connecting with nocert
> 2 0   connecting with agent1
> 2 1   connecting with agent2
> 2 2   connecting with agent3
> 2 3   connecting with nocert
> 3 0   connecting with agent1
> 3 1   connecting with agent2
> 3 2   connecting with agent3
> 3 3   connecting with nocert
> 4 0   connecting with agent1
> 4 1   connecting with agent2
> 4 2   connecting with agent3
> 4 3   connecting with nocert
> 5 0   connecting with agent1
> 5 1   connecting with agent2
> 5 2   connecting with agent3
> 5 3   connecting with agent4
> 5 4   connecting with nocert
> 0 Running 'Do not request certs. Everyone is unauthorized.'
> 0 - unauthed connection: null
> 0 - unauthed connection: null
> 0 - unauthed connection: null
> 0 0   * unauthed
> 0 1   * unauthed
> 0 2   * unauthed
> 0 - unauthed connection: null
> 0 3   * unauthed
> 1 Running 'Allow both authed and unauthed connections with CA1'
> 1 - authed connection: agent1
> 1 - unauthed connection: DEPTH_ZERO_SELF_SIGNED_CERT
> 1 - unauthed connection: UNABLE_TO_VERIFY_LEAF_SIGNATURE
> 1 0   * authed
> 1 1   * unauthed
> 1 2   * unauthed
> 1 - unauthed connection: UNABLE_TO_GET_ISSUER_CERT
> 1 3   * unauthed
> 2 Running 'Do not request certs at connection. Do that later'
> 2 - connected, renegotiating
> 2 - authed connection: agent1
> 2 0   * authed
> 2 - unauthed connection: null
> 2 1   * unauthed
> 2 - unauthed connection: null
> 2 2   * unauthed
> 2 - unauthed connection: null
> 2 3   * unauthed
> 3 Running 'Allow only authed connections with CA1'
> 3 - authed connection: agent1
> 3 0   * authed
> 4 Running 'Allow only authed connections with CA1 and CA2'
> 4 - authed connection: agent1
> 4 0   * authed
> 4 - authed connection: agent3
> 4 2   * authed
> 5 Running 'Allow only certs signed by CA2 but not in the CRL'
> assert.js:79
>   throw new AssertionError(obj);
>   ^
>
> AssertionError [ERR_ASSERTION]: 5 2 agent3 rejected, but should NOT have been
>     at ChildProcess.<anonymous> (/tmp/guix-build-node-10.6.0.drv-0/node-v10.6.0/test/parallel/test-tls-server-verify.js:232:14)
>     at ChildProcess.emit (events.js:182:13)
>     at Process.ChildProcess._handle.onexit (internal/child_process.js:237:12)
> Command: out/Release/node /tmp/guix-build-node-10.6.0.drv-0/node-v10.6.0/test/parallel/test-tls-server-verify.js
> [18:56|% 100|+ 2306|-   3]: Done
> make[1]: *** [Makefile:256: jstest] Error 1
> make: *** [Makefile:270: test] Error 2
> --8<---------------cut here---------------end--------------->8---
>
> I have tried to build 10.9.0 which has been released and the test suite
> fails because of network access.
>
> --8<---------------cut here---------------start------------->8---
> make -s build-addons
>   touch d9f90e808e8e700c15c35c2d7be302e61a333778.intermediate
>   touch 6843310704f7b860e12805ed03c0ca2ab1bcdadb.intermediate
>   LD_LIBRARY_PATH=/tmp/guix-build-node-10.9.0.drv-0/node-v10.9.0/out/Release/lib.host:/tmp/guix-build-node-10.9.0.drv-0/node-v10.9.0/out/Release/lib.target:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH; cd ../.; mkdir -p /tmp/guix-build-node-10.9.0.drv-0/node-v10.9.0/out/Release/obj/gen/src/node/inspector/protocol; python tools/inspector_protocol/CodeGenerator.py --jinja_dir tools/inspector_protocol/.. --output_base "/tmp/guix-build-node-10.9.0.drv-0/node-v10.9.0/out/Release/obj/gen/src/" --config "/tmp/guix-build-node-10.9.0.drv-0/node-v10.9.0/out/Release/obj/gen/node_protocol_config.json"
>   LD_LIBRARY_PATH=/tmp/guix-build-node-10.9.0.drv-0/node-v10.9.0/out/Release/lib.host:/tmp/guix-build-node-10.9.0.drv-0/node-v10.9.0/out/Release/lib.target:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH; cd ../deps/v8/gypfiles; mkdir -p /tmp/guix-build-node-10.9.0.drv-0/node-v10.9.0/out/Release/obj/gen/src/inspector/protocol /tmp/guix-build-node-10.9.0.drv-0/node-v10.9.0/out/Release/obj/gen/include/inspector; python ../third_party/inspector_protocol/CodeGenerator.py --jinja_dir ../third_party --output_base "/tmp/guix-build-node-10.9.0.drv-0/node-v10.9.0/out/Release/obj/gen/src/inspector" --config ../src/inspector/inspector_protocol_config.json
>   touch f70a2bc83365ae821b54e7787433d4a600b5cf5e.intermediate
>   LD_LIBRARY_PATH=/tmp/guix-build-node-10.9.0.drv-0/node-v10.9.0/out/Release/lib.host:/tmp/guix-build-node-10.9.0.drv-0/node-v10.9.0/out/Release/lib.target:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH; cd ../deps/v8/gypfiles; mkdir -p /tmp/guix-build-node-10.9.0.drv-0/node-v10.9.0/out/Release/obj/gen/torque-generated; "/tmp/guix-build-node-10.9.0.drv-0/node-v10.9.0/out/Release/torque" ../src/builtins/base.tq ../src/builtins/array.tq ../src/builtins/typed-array.tq -o "/tmp/guix-build-node-10.9.0.drv-0/node-v10.9.0/out/Release/obj/gen/torque-generated"
> npm ERR! code ENOTFOUND
> npm ERR! errno ENOTFOUND
> npm ERR! network request to https://registry.npmjs.org/rehype-raw failed, reason: getaddrinfo ENOTFOUND registry.npmjs.org registry.npmjs.org:443
> npm ERR! network This is a problem related to network connectivity.
> npm ERR! network In most cases you are behind a proxy or have bad network settings.
> npm ERR! network 
> npm ERR! network If you are behind a proxy, please make sure that the
> npm ERR! network 'proxy' config is set properly.  See: 'npm help config'
> make[1]: *** [Makefile:1075: tools/doc/node_modules] Error 1
> make: *** [Makefile:271: test] Error 2
>
> Test suite failed, dumping logs.
> --8<---------------cut here---------------end--------------->8---
>
> Anyway I am giving up.
>
> Sorry for the delay.

I was able to build node on 'core-updates' with this patch:

From 3f745249f965dce2bc36abc21095b75bb902d11a Mon Sep 17 00:00:00 2001
From: Marius Bakke <[email-masked]>
Date: Thu, 23 Aug 2018 14:54:32 +0200
Subject: [PATCH] gnu: node: Update to 10.9.0.

* gnu/packages/node.scm (node): Update to 10.9.0.
[source](uri): Use ".xz" tarball.
[arguments]: Set #:test-target.
[inputs]: Change OPENSSL to OPENSSL-NEXT.
---
 gnu/packages/node.scm | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/gnu/packages/node.scm b/gnu/packages/node.scm
index d1de7a536..046c61c6d 100644
--- a/gnu/packages/node.scm
+++ b/gnu/packages/node.scm
@@ -44,14 +44,14 @@
 (define-public node
   (package
     (name "node")
-    (version "9.11.1")
+    (version "10.9.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://nodejs.org/dist/v" version
-                                  "/node-v" version ".tar.gz"))
+                                  "/node-v" version ".tar.xz"))
               (sha256
                (base32
-                "1vjh9zvw7wkdz6b0l99ya7mqjk0l8lbg9isr1q8rxwp400dhkk32"))
+                "00hdachbmcf9pyd1iksprsi5mddwp6z59mb3lr81z8ynfbmzhzni"))
               (modules '((guix build utils)))
               (snippet
                `(begin
@@ -82,6 +82,9 @@
                            "--shared-zlib"
                            "--without-snapshot"
                            "--with-intl=system-icu")
+       ;; Run only the CI tests.  The default check target requires additional
+       ;; add-ons from NPM not distributed with the source.
+       #:test-target "test-ci-js"
        #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'patch-files
@@ -169,7 +172,7 @@
        ("icu4c" ,icu4c)
        ("libuv" ,libuv)
        ("nghttp2" ,nghttp2 "lib")
-       ("openssl" ,openssl)
+       ("openssl" ,openssl-next)
        ("zlib" ,zlib)))
     (synopsis "Evented I/O for V8 JavaScript")
     (description "Node.js is a platform built on Chrome's JavaScript runtime
-- 
2.18.0

I did not push it yet because I was hoping someone with more knowledge
of node internals knew what's up with the NPM requirement (and forgot to
ping this bug!).

On 'master', I think this also requires a newer version of 'libuv'.  Can
you try it Mathieu?