sous-chefs/nodejs

Please support nodejs 4.0

Closed this issue · 14 comments

Any update on this? I'm having the same problem.

I tried installing from binary but no joy.

Hi,

Have you try to override node['nodejs']['repo'] with correct path in your cookbook wrapper / environment / node?

If it's working we will see to update default value for all of us :)

This worked:

node['nodejs']['version'] = '4.1.0'
include_recipe "nodejs::nodejs_from_source"

Also had to update checksum:

            "nodejs" => {
                "version" => "4.1.0",
                "source" => {
                    "checksum" => "453005f64ee529f7dcf1237eb27ee2fa2415c49f5c9e7463e8b71fba61c5b408"
                }
            },

Can someone advice me where I am going wrong please?

My Vagrantfile contains this:

  config.vm.provision :chef_solo do |chef|
    chef.version = "11.12.8"

    chef.add_recipe "nodejs"
    chef.add_recipe "mongodb-debs"

    chef.json = {
        "nodejs" => {
            "version" => "4.1.0",
            "source" => {
                "checksum" => "453005f64ee529f7dcf1237eb27ee2fa2415c49f5c9e7463e8b71fba61c5b408"
            },
            ssl_verify_mode: :verify_peer
        },
    }

  end

but nodejs is version is still v0.10.40

@elliotlings
-can you ellaborate more? Did you get any error on chef run or what?

It turn out you need to specify installation method as well. By default it's picking package, where it should be source
Just add
['nodejs']['install_method'] = 'source'
and you're good to go.

https://github.com/redguide/nodejs/blob/master/attributes/default.rb#L20-L25

Can we close this one ?

Cant get source to compile on centos 6, anyone else having that issue?

@raymatos sort of, I'm on ubuntu 12.04...I can compile the default version of nodejs from this cookbook, 0.10.26, just fine but was having an issue when trying to compile version 4.2.4 of nodejs from source. I ended up getting an error that looked like:

================================================================================
             Error executing action `run` on resource 'execute[make /usr/local/nodejs-source-4.2.4]'
             ================================================================================

             Mixlib::ShellOut::ShellCommandFailed
             ------------------------------------
             Expected process to exit with [0], but received '2'
             ---- Begin output of make -j 1 ----
             STDOUT: make -C out BUILDTYPE=Release V=1
             make[1]: Entering directory `/usr/local/nodejs-source-4.2.4/out'
        g++  -I../deps/gtest -I../deps/gtest/include  -pthread -Wall -Wextra -Wno-unused-parameter -m64 -Wno-missing-field-initializers -O3 -ffunction-sections -fdata-sections -fno-omit-frame-pointer -fno-rtti -fno-exceptions -std=gnu++0x -MMD -MF /usr/local/nodejs-source-4.2.4/out/Release/.deps//usr/local/nodejs-source-4.2.4/out/Release/obj.target/gtest/deps/gtest/src/gtest-death-test.o.d.raw  -c -o /usr/local/nodejs-source-4.2.4/out/Release/obj.target/gtest/deps/gtest/src/gtest-death-test.o ../deps/gtest/src/gtest-death-test.cc
        g++  -I../deps/gtest -I../deps/gtest/include  -pthread -Wall -Wextra -Wno-unused-parameter -m64 -Wno-missing-field-initializers -O3 -ffunction-sections -fdata-sections -fno-omit-frame-pointer -fno-rtti -fno-exceptions -std=gnu++0x -MMD -MF /usr/local/nodejs-source-4.2.4/out/Release/.deps//usr/local/nodejs-source-4.2.4/out/Release/obj.target/gtest/deps/gtest/src/gtest-filepath.o.d.raw  -c -o /usr/local/nodejs-source-4.2.4/out/Release/obj.target/gtest/deps/gtest/src/gtest-filepath.o ../deps/gtest/src/gtest-filepath.cc
        g++  -I../deps/gtest -I../deps/gtest/include  -pthread -Wall -Wextra -Wno-unused-parameter -m64 -Wno-missing-field-initializers -O3 -ffunction-sections -fdata-sections -fno-omit-frame-pointer -fno-rtti -fno-exceptions -std=gnu++0x -MMD -MF /usr/local/nodejs-source-4.2.4/out/Release/.deps//usr/local/nodejs-source-4.2.4/out/Release/obj.target/gtest/deps/gtest/src/gtest-port.o.d.raw  -c -o /usr/local/nodejs-source-4.2.4/out/Release/obj.target/gtest/deps/gtest/src/gtest-port.o ../deps/gtest/src/gtest-port.cc
        g++  -I../deps/gtest -I../deps/gtest/include  -pthread -Wall -Wextra -Wno-unused-parameter -m64 -Wno-missing-field-initializers -O3 -ffunction-sections -fdata-sections -fno-omit-frame-pointer -fno-rtti -fno-exceptions -std=gnu++0x -MMD -MF /usr/local/nodejs-source-4.2.4/out/Release/.deps//usr/local/nodejs-source-4.2.4/out/Release/obj.target/gtest/deps/gtest/src/gtest-printers.o.d.raw  -c -o /usr/local/nodejs-source-4.2.4/out/Release/obj.target/gtest/deps/gtest/src/gtest-printers.o ../deps/gtest/src/gtest-printers.cc
        g++  -I../deps/gtest -I../deps/gtest/include  -pthread -Wall -Wextra -Wno-unused-parameter -m64 -Wno-missing-field-initializers -O3 -ffunction-sections -fdata-sections -fno-omit-frame-pointer -fno-rtti -fno-exceptions -std=gnu++0x -MMD -MF /usr/local/nodejs-source-4.2.4/out/Release/.deps//usr/local/nodejs-source-4.2.4/out/Release/obj.target/gtest/deps/gtest/src/gtest-test-part.o.d.raw  -c -o /usr/local/nodejs-source-4.2.4/out/Release/obj.target/gtest/deps/gtest/src/gtest-test-part.o ../deps/gtest/src/gtest-test-part.cc
        g++  -I../deps/gtest -I../deps/gtest/include  -pthread -Wall -Wextra -Wno-unused-parameter -m64 -Wno-missing-field-initializers -O3 -ffunction-sections -fdata-sections -fno-omit-frame-pointer -fno-rtti -fno-exceptions -std=gnu++0x -MMD -MF /usr/local/nodejs-source-4.2.4/out/Release/.deps//usr/local/nodejs-source-4.2.4/out/Release/obj.target/gtest/deps/gtest/src/gtest-typed-test.o.d.raw  -c -o /usr/local/nodejs-source-4.2.4/out/Release/obj.target/gtest/deps/gtest/src/gtest-typed-test.o ../deps/gtest/src/gtest-typed-test.cc
        g++  -I../deps/gtest -I../deps/gtest/include  -pthread -Wall -Wextra -Wno-unused-parameter -m64 -Wno-missing-field-initializers -O3 -ffunction-sections -fdata-sections -fno-omit-frame-pointer -fno-rtti -fno-exceptions -std=gnu++0x -MMD -MF /usr/local/nodejs-source-4.2.4/out/Release/.deps//usr/local/nodejs-source-4.2.4/out/Release/obj.target/gtest/deps/gtest/src/gtest.o.d.raw  -c -o /usr/local/nodejs-source-4.2.4/out/Release/obj.target/gtest/deps/gtest/src/gtest.o ../deps/gtest/src/gtest.cc
        g++  -I../deps/gtest -I../deps/gtest/include  -pthread -Wall -Wextra -Wno-unused-parameter -m64 -Wno-missing-field-initializers -O3 -ffunction-sections -fdata-sections -fno-omit-frame-pointer -fno-rtti -fno-exceptions -std=gnu++0x -MMD -MF /usr/local/nodejs-source-4.2.4/out/Release/.deps//usr/local/nodejs-source-4.2.4/out/Release/obj.target/gtest/deps/gtest/src/gtest_main.o.d.raw  -c -o /usr/local/nodejs-source-4.2.4/out/Release/obj.target/gtest/deps/gtest/src/gtest_main.o ../deps/gtest/src/gtest_main.cc
        rm -f /usr/local/nodejs-source-4.2.4/out/Release/obj.target/deps/gtest/libgtest.a && ar crs /usr/local/nodejs-source-4.2.4/out/Release/obj.target/deps/gtest/libgtest.a /usr/local/nodejs-source-4.2.4/out/Release/obj.target/gtest/deps/gtest/src/gtest-death-test.o /usr/local/nodejs-source-4.2.4/out/Release/obj.target/gtest/deps/gtest/src/gtest-filepath.o /usr/local/nodejs-source-4.2.4/out/Release/obj.target/gtest/deps/gtest/src/gtest-port.o /usr/local/nodejs-source-4.2.4/out/Release/obj.target/gtest/deps/gtest/src/gtest-printers.o /usr/local/nodejs-source-4.2.4/out/Release/obj.target/gtest/deps/gtest/src/gtest-test-part.o /usr/local/nodejs-source-4.2.4/out/Release/obj.target/gtest/deps/gtest/src/gtest-typed-test.o /usr/local/nodejs-source-4.2.4/out/Release/obj.target/gtest/deps/gtest/src/gtest.o /usr/local/nodejs-source-4.2.4/out/Release/obj.target/gtest/deps/gtest/src/gtest_main.o
        ln -f "/usr/local/nodejs-source-4.2.4/out/Release/obj.target/deps/gtest/libgtest.a" "/usr/local/nodejs-source-4.2.4/out/Release/libgtest.a" 2>/dev/null || (rm -rf "/usr/local/nodejs-source-4.2.4/out/Release/libgtest.a" && cp -af "/usr/local/nodejs-source-4.2.4/out/Release/obj.target/deps/gtest/libgtest.a" "/usr/local/nodejs-source-4.2.4/out/Release/libgtest.a")
        g++ '-DV8_TARGET_ARCH_X64' '-DENABLE_DISASSEMBLER' '-DV8_IMMINENT_DEPRECATION_WARNINGS' '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' -I../deps/v8  -pthread -Wall -Wextra -Wno-unused-parameter -m64 -B/usr/local/nodejs-source-4.2.4/third_party/binutils/Linux_x64/Release/bin -fno-strict-aliasing -m64 -O3 -ffunction-sections -fdata-sections -fno-omit-frame-pointer -fdata-sections -ffunction-sections -O3 -fno-rtti -fno-exceptions -std=gnu++0x -MMD -MF /usr/local/nodejs-source-4.2.4/out/Release/.deps//usr/local/nodejs-source-4.2.4/out/Release/obj.target/v8_base/deps/v8/src/accessors.o.d.raw  -c -o /usr/local/nodejs-source-4.2.4/out/Release/obj.target/v8_base/deps/v8/src/accessors.o ../deps/v8/src/accessors.cc
             make[1]: Leaving directory `/usr/local/nodejs-source-4.2.4/out'
             STDERR: In file included from ../deps/v8/src/v8.h:29:0,

             ../deps/v8/include/v8.h:469:1: error: expected unqualified-id before ‘using’
             ../deps/v8/include/v8.h:852:1: error: expected unqualified-id before ‘using’
             In file included from ../deps/v8/src/base/platform/platform.h:29:0,
                       from ../deps/v8/src/utils.h:18,
                       from ../deps/v8/src/v8.h:34,

             ../deps/v8/src/base/platform/mutex.h:36:13: error: variable ‘v8::base::Mutex v8::base::final’ has initializer but incomplete type
             ../deps/v8/src/base/platform/mutex.h:37:2: error: expected primary-expression before ‘public’
             ../deps/v8/src/base/platform/mutex.h:37:2: error: expected ‘}’ before ‘public’
             ../deps/v8/src/base/platform/mutex.h:37:2: error: expected ‘,’ or ‘;’ before ‘public’
             ../deps/v8/src/base/platform/mutex.h:39:11: error: expected constructor, destructor, or type conversion before ‘;’ token
             ../deps/v8/src/base/platform/mutex.h: In function ‘v8::base::NativeHandle& v8::base::native_handle()’:
             ../deps/v8/src/base/platform/mutex.h:63:12: error: ‘native_handle_’ was not declared in this scope
             ../deps/v8/src/base/platform/mutex.h: At global scope:
             ../deps/v8/src/base/platform/mutex.h:65:39: error: non-member function ‘const NativeHandle& v8::base::native_handle()’ cannot have cv-qualifier
             ../deps/v8/src/base/platform/mutex.h: In function ‘const NativeHandle& v8::base::native_handle()’:
             ../deps/v8/src/base/platform/mutex.h:65:39: error: new declaration ‘const NativeHandle& v8::base::native_handle()’
             ../deps/v8/src/base/platform/mutex.h:62:17: error: ambiguates old declaration ‘v8::base::NativeHandle& v8::base::native_handle()’
             ../deps/v8/src/base/platform/mutex.h:66:12: error: ‘native_handle_’ was not declared in this scope
             ../deps/v8/src/base/platform/mutex.h: At global scope:
             ../deps/v8/src/base/platform/mutex.h:69:2: error: expected unqualified-id before ‘private’
             ../deps/v8/src/base/platform/mutex.h:89:3: error: ‘friend’ used outside of class
             ../deps/v8/src/base/platform/mutex.h:91:3: error: expected unqualified-id before ‘const’
             ../deps/v8/src/base/platform/mutex.h:91:3: error: expected ‘)’ before ‘const’
             ../deps/v8/src/base/platform/mutex.h:91:3: error: ‘void v8::base::operator=(const v8::base::Mutex&)’ must be a nonstatic member function
             ../deps/v8/src/base/platform/mutex.h:104:9: error: ‘LazyStaticInstance’ does not name a type
             ../deps/v8/src/base/platform/mutex.h:130:22: error: variable ‘v8::RecursiveMutex v8::final’ has initializer but incomplete type
             ../deps/v8/src/base/platform/mutex.h:131:2: error: expected primary-expression before ‘public’
             ../deps/v8/src/base/platform/mutex.h:131:2: error: expected ‘}’ before ‘public’
             ../deps/v8/src/base/platform/mutex.h:131:2: error: expected ‘,’ or ‘;’ before ‘public’
             ../deps/v8/src/base/platform/mutex.h:133:20: error: expected constructor, destructor, or type conversion before ‘;’ token

             ../deps/v8/src/base/platform/mutex.h:157:3: error: ‘NativeHandle’ does not name a type
             ../deps/v8/src/base/platform/mutex.h:160:9: error: ‘NativeHandle’ does not name a type
             ../deps/v8/src/base/platform/mutex.h:164:2: error: expected unqualified-id before ‘private’
             ../deps/v8/src/base/platform/mutex.h:170:3: error: expected unqualified-id before ‘const’
             ../deps/v8/src/base/platform/mutex.h:170:3: error: expected ‘)’ before ‘const’
             ../deps/v8/src/base/platform/mutex.h:170:3: error: ‘void v8::operator=(const v8::RecursiveMutex&)’ must be a nonstatic member function
             ../deps/v8/src/base/platform/mutex.h:184:9: error: ‘LazyStaticInstance’ does not name a type
             ../deps/v8/src/base/platform/mutex.h:202:17: error: template declaration of ‘LockGuard final’
             ../deps/v8/src/base/platform/mutex.h:203:2: error: expected primary-expression before ‘public’
             ../deps/v8/src/base/platform/mutex.h:203:2: error: expected ‘}’ before ‘public’

             ../deps/v8/src/base/platform/mutex.h:207:2: error: expected unqualified-id before ‘private’
             ../deps/v8/src/base/platform/mutex.h:210:3: error: expected unqualified-id before ‘const’
             ../deps/v8/src/base/platform/mutex.h:210:3: error: expected ‘)’ before ‘const’
             ../deps/v8/src/base/platform/mutex.h:210:3: error: ‘void operator=(const LockGuard&)’ must be a nonstatic member function
             ../deps/v8/src/base/platform/mutex.h:211:1: error: expected declaration before ‘}’ token
             ../deps/v8/src/base/platform/mutex.h: In function ‘const NativeHandle& v8::base::native_handle()’:
             ../deps/v8/src/base/platform/mutex.h:67:3: warning: control reaches end of non-void function [-Wreturn-type]

             ../deps/v8/src/base/platform/mutex.h:64:3: warning: control reaches end of non-void function [-Wreturn-type]
             make[1]: *** [/usr/local/nodejs-source-4.2.4/out/Release/obj.target/v8_base/deps/v8/src/accessors.o] Error 1
             make: *** [node] Error 2
             ---- End output of make -j 1 ----
             Ran make -j 1 returned 2

The problem seems to be the version of gcc being used...as of today installing the gcc package from apt-get will get you version 4.6.3 (not sure what yum gets you but I'm assuming it's similar.) nodejs >4.2 needs gcc version >4.9 to compile correctly from what i can tell. Adding this to my chef cookbook installs the version of gcc that I need to get nodejs >4.2 compiling correctly.

In my attributes/default.rb:

default["nodejs"]["install_method"] = "source"
default["nodejs"]["version"] = "4.2.4"
default['nodejs']['source']['checksum'] = "4ee244ffede7328d9fa24c3024787e71225b7abaac49fe2b30e68b27460c10ec"

default["nodejs"]["npm"]["install_method"] = "source"

In my recipe that wraps the nodejs::default recipe:

#install software-properties-common and python-software-properties packages
#to get the add-apt-repository command used in the bash resource below
%w{software-properties-common python-software-properties}.each do |pkg|
  package pkg
end

#install gcc version 4.9 so nodejs 4.2 can compile correctly
bash "install_gcc_4.9" do 
  code <<-EOH
    sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
    sudo apt-get update
    sudo apt-get -y install gcc-4.9 g++-4.9
    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 50
    sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 50
  EOH
  not_if { `gcc -v 2&>1`.include?("4.9") }
end

include_recipe "nodejs"

I can confirm that changing the repo URL works:

"nodejs": {
     "engine": "node",
     "repo": "https://deb.nodesource.com/node_4.x"
}

The repo way works for me, except it automatically updates to the latest version. Does anybody have a way to install Node 4 from a binary and a locked version?

japel commented

I'm not able to build from source 4.4.2

Error executing action install_with_make on resource 'ark[nodejs-source]'
Chef::Exceptions::MultipleFailures
==> default: make[1]: Leaving directory /usr/local/nodejs-source-4.4.5/out' ==> default: STDERR: g++: internal compiler error: Killed (program cc1plus) ==> default: Please submit a full bug report, ==> default: with preprocessed source if appropriate. ==> default: See <file:///usr/share/doc/gcc-4.8/README.Bugs> for instructions. ==> default: make[1]: *** [/usr/local/nodejs-source-4.4.5/out/Release/obj.target/v8_base/deps/v8/src/api.o] Error 4 ==> default: make: *** [node] Error 2 ==> default: ---- End output of make -j 1 ---- ==> default: Ran make -j 1 returned 2 ==> default: * Mixlib::ShellOut::ShellCommandFailed occurred in delayed notification: execute[make install /usr/local/nodejs-source-4.4.5] (/tmp/vagrant-chef/5acaa85c83c30ef1f06b4322b852f0ee/cookbooks/ark/providers/default.rb line 318) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '2' ==> default: ---- Begin output of make install -j 1 ---- ==> default: STDOUT: make -C out BUILDTYPE=Release V=1 ==> default: make[1]: Entering directory/usr/local/nodejs-source-4.4.5/out'
==> default: g++ '-DV8_TARGET_ARCH_X64' '-DENABLE_DISASSEMBLER' '-DV8_IMMINENT_DEPRECATION_WARNINGS' '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' -I../deps/v8 -pthread -Wall -Wextra -Wno-unused-parameter -m64 -B/usr/local/nodejs-source-4.4.5/third_party/binutils/Linux_x64/Release/bin -fno-strict-aliasing -m64 -O3 -ffunction-sections -fdata-sections -fno-omit-frame-pointer -fdata-sections -ffunction-sections -O3 -fno-rtti -fno-exceptions -std=gnu++0x -MMD -MF /usr/local/nodejs-source-4.4.5/out/Release/.deps//usr/local/nodejs-source-4.4.5/out/Release/obj.target/v8_base/deps/v8/src/api.o.d.raw -c -o /usr/local/nodejs-source-4.4.5/out/Release/obj.target/v8_base/deps/v8/src/api.o ../deps/v8/src/api.cc
==> default: make[1]: Leaving directory `/usr/local/nodejs-source-4.4.5/out'
==> default: STDERR: g++: internal compiler error: Killed (program cc1plus)
==> default: Please submit a full bug report,
==> default: with preprocessed source if appropriate.
==> default: See file:///usr/share/doc/gcc-4.8/README.Bugs for instructions.
==> default: make[1]: *** [/usr/local/nodejs-source-4.4.5/out/Release/obj.target/v8_base/deps/v8/src/api.o] Error 4
==> default: make: *** [node] Error 2
==> default: ---- End output of make install -j 1 ----
==> default: Ran make install -j 1 returned 2

japel commented

A way to install form binary would be awesome

tas50 commented

Fixed in #143, but note that you need a modern distro with GCC 4.8+ in order to compile modern nodejs releases. They started using C++11 extensions.