Open nervo opened 8 years ago
Intersting, i've rollbacked to node 4/npm 2.14.12, 'got the same kinf of error, but with a different character:
/usr/lib/ruby/2.1.0/json/common.rb:155:in `encode': "\xE2" on US-ASCII (Encoding::InvalidByteSequenceError)
from /usr/lib/ruby/2.1.0/json/common.rb:155:in `initialize'
from /usr/lib/ruby/2.1.0/json/common.rb:155:in `new'
from /usr/lib/ruby/2.1.0/json/common.rb:155:in `parse'
from /var/lib/gems/2.1.0/gems/fpm-1.4.0/lib/fpm/package/npm.rb:62:in `input'
from /var/lib/gems/2.1.0/gems/fpm-1.4.0/lib/fpm/command.rb:340:in `block in execute'
from /var/lib/gems/2.1.0/gems/fpm-1.4.0/lib/fpm/command.rb:339:in `each'
from /var/lib/gems/2.1.0/gems/fpm-1.4.0/lib/fpm/command.rb:339:in `execute'
from /var/lib/gems/2.1.0/gems/clamp-0.6.5/lib/clamp/command.rb:67:in `run'
from /var/lib/gems/2.1.0/gems/fpm-1.4.0/lib/fpm/command.rb:554:in `run'
from /var/lib/gems/2.1.0/gems/clamp-0.6.5/lib/clamp/command.rb:132:in `run'
from /var/lib/gems/2.1.0/gems/fpm-1.4.0/bin/fpm:8:in `<top (required)>'
from /usr/local/bin/fpm:23:in `load'
from /usr/local/bin/fpm:23:in `<main>'
It looks like the JSON output of npm was broken. It works for me in npm 3.7.3 so possibly fixed now. Since it works for me, can you run the npm ls --json --long --loglevel warn --global true --prefix /tmp/package-npm-staging20160223-8134-15n4d2k/usr --cache /tmp/package-npm-build20160223-8134-19rd88q/npm_cache
cmd with the appropriate prefix and cache paths? You'll see them in the output of the failed build (if it fails), in the last FPM log line before the stack trace. Debug in FPM will keep the directories around so you can run this safely. If it fails and you get some output from the above command, if we could get a paste of it here we can see what's invalid.
It looks like JSON validity bugs are common with npm though, either in packages.json
for specific projects, or npm validation itself.
I also saw this when running npm from a non-Unicode shell. If I set LANG=C
, I'll get the InvalidByteSequenceError. Using LANG=en_US.UTF-8
, on the other hand, works.
In the former case (actually from a Ruby script), npm's UTF-8 characters are escaped:
{:timestamp=>"2016-08-12T17:48:00.580674+0000", :message=>"Setting workdir", :workdir=>"/tmp", :level=>:info}
{:timestamp=>"2016-08-12T17:48:01.053978+0000", :message=>"Setting default npm install prefix", :prefix=>"/usr", :level=>:info}
{:timestamp=>"2016-08-12T17:48:04.130973+0000", :message=>"npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue", :level=>:info}
{:timestamp=>"2016-08-12T17:48:05.290023+0000", :message=>"npm WARN optional dep failed, continuing fsevents@1.0.14", :level=>:info}
{:timestamp=>"2016-08-12T17:48:08.254604+0000", :message=>"/tmp/package-npm-staging20160812-19899-12hf2eh/usr/bin/forever -> /tmp/package-npm-staging20160812-19899-12hf2eh/usr/lib/node_modules/forever/bin/forever", :level=>:info}
{:timestamp=>"2016-08-12T17:48:08.540381+0000", :message=>"forever@0.15.2 /tmp/package-npm-staging20160812-19899-12hf2eh/usr/lib/node_modules/forever", :level=>:info}
{:timestamp=>"2016-08-12T17:48:08.540505+0000", :message=>"\xE2\x94\x9C\xE2\x94\x80\xE2\x94\x80 object-assign@3.0.0", :level=>:info}
{:timestamp=>"2016-08-12T17:48:08.540569+0000", :message=>"\xE2\x94\x9C\xE2\x94\x80\xE2\x94\x80 path-is-absolute@1.0.0", :level=>:info}
{:timestamp=>"2016-08-12T17:48:08.540627+0000", :message=>"\xE2\x94\x9C\xE2\x94\x80\xE2\x94\x80 colors@0.6.2", :level=>:info}
{:timestamp=>"2016-08-12T17:48:08.540673+0000", :message=>"\xE2\x94\x9C\xE2\x94\x80\xE2\x94\x80 clone@1.0.2", :level=>:info}
{:timestamp=>"2016-08-12T17:48:08.540791+0000", :message=>"\xE2\x94\x9C\xE2\x94\x80\xE2\x94\x80 timespan@2.3.0", :level=>:info}
{:timestamp=>"2016-08-12T17:48:08.540835+0000", :message=>"\xE2\x94\x9C\xE2\x94\x80\xE2\x94\x80 optimist@0.6.1 (wordwrap@0.0.3, minimist@0.0.10)", :level=>:info}
{:timestamp=>"2016-08-12T17:48:08.540873+0000", :message=>"\xE2\x94\x9C\xE2\x94\x80\xE2\x94\x80 nssocket@0.5.3 (eventemitter2@0.4.14, lazy@1.0.11)", :level=>:info}
{:timestamp=>"2016-08-12T17:48:08.540911+0000", :message=>"\xE2\x94\x9C\xE2\x94\x80\xE2\x94\x80 cliff@0.1.10 (eyes@0.1.8, colors@1.0.3)", :level=>:info}
{:timestamp=>"2016-08-12T17:48:08.540949+0000", :message=>"\xE2\x94\x9C\xE2\x94\x80\xE2\x94\x80 prettyjson@1.1.3 (colors@1.1.2, minimist@1.2.0)", :level=>:info}
{:timestamp=>"2016-08-12T17:48:08.540986+0000", :message=>"\xE2\x94\x9C\xE2\x94\x80\xE2\x94\x80 winston@0.8.3 (cycle@1.0.3, async@0.2.10, eyes@0.1.8, stack-trace@0.0.9, isstream@0.1.2, pkginfo@0.3.1)", :level=>:info}
{:timestamp=>"2016-08-12T17:48:08.541027+0000", :message=>"\xE2\x94\x9C\xE2\x94\x80\xE2\x94\x80 utile@0.2.1 (async@0.2.10, deep-equal@1.0.1, ncp@0.4.2, i@0.3.5, mkdirp@0.5.1, rimraf@2.5.4)", :level=>:info}
{:timestamp=>"2016-08-12T17:48:08.541065+0000", :message=>"\xE2\x94\x9C\xE2\x94\x80\xE2\x94\x80 shush@1.0.0 (strip-json-comments@0.1.3, caller@0.0.1)", :level=>:info}
{:timestamp=>"2016-08-12T17:48:08.541123+0000", :message=>"\xE2\x94\x9C\xE2\x94\x80\xE2\x94\x80 nconf@0.6.9 (ini@1.3.4, async@0.2.9, optimist@0.6.0)", :level=>:info}
{:timestamp=>"2016-08-12T17:48:08.541161+0000", :message=>"\xE2\x94\x9C\xE2\x94\x80\xE2\x94\x80 flatiron@0.4.3 (director@1.2.7, optimist@0.6.0, prompt@0.2.14, broadway@0.3.6)", :level=>:info}
{:timestamp=>"2016-08-12T17:48:08.541215+0000", :message=>"\xE2\x94\x94\xE2\x94\x80\xE2\x94\x80 forever-monitor@1.6.0 (minimatch@2.0.10, ps-tree@0.0.3, broadway@0.3.6, chokidar@1.6.0)", :level=>:info}
In the latter case, Unicode gets preserved:
Setting workdir {:workdir=>"/tmp", :level=>:info}
Setting default npm install prefix {:prefix=>"/usr", :level=>:info}
npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue {:level=>:info}
npm WARN optional dep failed, continuing fsevents@1.0.14 {:level=>:info}
/tmp/package-npm-staging20160812-20415-35yesd/usr/bin/forever -> /tmp/package-npm-staging20160812-20415-35yesd/usr/lib/node_modules/forever/bin/forever {:level=>:info}
forever@0.15.2 /tmp/package-npm-staging20160812-20415-35yesd/usr/lib/node_modules/forever {:level=>:info}
+-- path-is-absolute@1.0.0 {:level=>:info}
+-- object-assign@3.0.0 {:level=>:info}
+-- colors@0.6.2 {:level=>:info}
+-- clone@1.0.2 {:level=>:info}
+-- timespan@2.3.0 {:level=>:info}
+-- optimist@0.6.1 (wordwrap@0.0.3, minimist@0.0.10) {:level=>:info}
+-- nssocket@0.5.3 (eventemitter2@0.4.14, lazy@1.0.11) {:level=>:info}
+-- prettyjson@1.1.3 (colors@1.1.2, minimist@1.2.0) {:level=>:info}
+-- cliff@0.1.10 (eyes@0.1.8, colors@1.0.3) {:level=>:info}
+-- winston@0.8.3 (cycle@1.0.3, async@0.2.10, eyes@0.1.8, stack-trace@0.0.9, isstream@0.1.2, pkginfo@0.3.1) {:level=>:info}
+-- shush@1.0.0 (strip-json-comments@0.1.3, caller@0.0.1) {:level=>:info}
+-- nconf@0.6.9 (ini@1.3.4, async@0.2.9, optimist@0.6.0) {:level=>:info}
+-- utile@0.2.1 (async@0.2.10, deep-equal@1.0.1, i@0.3.5, ncp@0.4.2, mkdirp@0.5.1, rimraf@2.5.4) {:level=>:info}
+-- flatiron@0.4.3 (director@1.2.7, optimist@0.6.0, prompt@0.2.14, broadway@0.3.6) {:level=>:info}
+-- forever-monitor@1.6.0 (minimatch@2.0.10, ps-tree@0.0.3, broadway@0.3.6, chokidar@1.6.0) {:level=>:info}
Setting from flags: epoch= {:level=>:info}
Setting from flags: iteration= {:level=>:info}
Setting from flags: version=0.15.2 {:level=>:info}
Converting npm to rpm {:level=>:info}
Removing excluded path {:path=>"etc", :matches=>"etc", :level=>:info}
Reading template {:path=>"/usr/local/share/gems/gems/fpm-1.6.2/templates/rpm.erb", :level=>:info}
Running rpmbuild {:args=>["rpmbuild", "-bb", "--define", "buildroot /tmp/package-rpm-build20160812-20415-1wywfzl/BUILD", "--define", "_topdir /tmp/package-rpm-build20160812-20415-1wywfzl", "--define", "_sourcedir /tmp/package-rpm-build20160812-20415-1wywfzl", "--define", "_rpmdir /tmp/package-rpm-build20160812-20415-1wywfzl/RPMS", "--define", "_tmppath /tmp", "/tmp/package-rpm-build20160812-20415-1wywfzl/SPECS/nodejs-forever.spec"], :level=>:info}
Executing(%prep): /bin/sh -e /tmp/rpm-tmp.lecZ20 {:level=>:info}
Executing(%build): /bin/sh -e /tmp/rpm-tmp.YdGGxD {:level=>:info}
Executing(%install): /bin/sh -e /tmp/rpm-tmp.yyZL4f {:level=>:info}
Processing files: nodejs-forever-0.15.2-1.x86_64 {:level=>:info}
Provides: nodejs-forever = 0.15.2-1 nodejs-forever(x86-64) = 0.15.2-1 {:level=>:info}
Requires(rpmlib): rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(CompressedFileNames) <= 3.0.4-1 {:level=>:info}
Wrote: /tmp/package-rpm-build20160812-20415-1wywfzl/RPMS/x86_64/nodejs-forever-0.15.2-1.x86_64.rpm {:level=>:info}
Executing(%clean): /bin/sh -e /tmp/rpm-tmp.EubPKw {:level=>:info}
I've tried the simple example i've found in many comments in fpm github repo:
Debian Jessie, Ruby 2.1.5p273, Npm 3.6.0
I've got the same "InvalidByteSequenceError" issue for npm package "rtail", for instance, but not for "lodash"