Skip to content

Commit

Permalink
install node from packages
Browse files Browse the repository at this point in the history
  • Loading branch information
smith committed Feb 29, 2012
1 parent a764bdb commit c0912fc
Show file tree
Hide file tree
Showing 4 changed files with 105 additions and 47 deletions.
10 changes: 7 additions & 3 deletions README.rdoc
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
= DESCRIPTION:

Installs Node.JS from source.
Installs Node.JS.

= REQUIREMENTS:

Expand All @@ -22,12 +22,16 @@ Opscode cookbooks (http://github.com/opscode/cookbooks/tree/master)

= USAGE:

Include the nodejs recipe to install node from source on your system:
Include the nodejs recipe to install node on your system:

include_recipe "nodejs"

Include the nodejs recipe to install node from source on your system:

include_recipe "nodejs::source"

Include the npm recipe to install npm:

include_recipe "nodejs::npm"

= LICENSE and AUTHOR:
Expand Down
3 changes: 2 additions & 1 deletion metadata.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
description "Installs/Configures nodejs"
long_description IO.read(File.join(File.dirname(__FILE__), 'README.rdoc'))
version "0.6.11"
recipe "nodejs", "Installs Node.JS from source"
recipe "nodejs", "Installs Node.JS"
recipe "nodejs::source", "Installs Node.JS from source"
recipe "nodejs::npm", "Installs npm - a package manager for node"

depends "build-essential"
76 changes: 33 additions & 43 deletions recipes/default.rb
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
#
# Author:: Marius Ducea (marius@promethost.com)
# Author:: Nathan L Smith (nlloyds@gmail.com)
# Cookbook Name:: nodejs
# Recipe:: default
#
# Copyright 2010, Promet Solutions
# Copyright 2012, Cramer Development, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
Expand All @@ -18,46 +18,36 @@
# limitations under the License.
#

include_recipe "build-essential"

case node[:platform]
when "centos","redhat","fedora"
package "openssl-devel"
when "debian","ubuntu"
package "libssl-dev"
end

nodejs_tar = "node-v#{node[:nodejs][:version]}.tar.gz"
nodejs_tar_path = nodejs_tar

if node[:nodejs][:version].split('.')[1].to_i >= 5
nodejs_tar_path = "v#{node[:nodejs][:version]}/#{nodejs_tar_path}"
end

remote_file "/usr/local/src/#{nodejs_tar}" do
source "http://nodejs.org/dist/#{nodejs_tar_path}"
checksum node[:nodejs][:checksum]
mode 0644
end

# --no-same-owner required overcome "Cannot change ownership" bug
# on NFS-mounted filesystem
execute "tar --no-same-owner -zxf #{nodejs_tar}" do
cwd "/usr/local/src"
creates "/usr/local/src/node-v#{node[:nodejs][:version]}"
end

bash "compile node.js" do
cwd "/usr/local/src/node-v#{node[:nodejs][:version]}"
code <<-EOH
./configure --prefix=#{node[:nodejs][:dir]} && \
make
EOH
creates "/usr/local/src/node-v#{node[:nodejs][:version]}/node"
end

execute "nodejs make install" do
command "make install"
cwd "/usr/local/src/node-v#{node[:nodejs][:version]}"
not_if {File.exists?("#{node[:nodejs][:dir]}/bin/node") && `#{node[:nodejs][:dir]}/bin/node --version`.chomp == "v#{node[:nodejs][:version]}" }
when 'centos', 'redhat', 'scientific'
file = '/usr/local/src/nodejs-stable-release.noarch.rpm'

remote_file file do
source 'http://nodejs.tchol.org/repocfg/el/nodejs-stable-release.noarch.rpm'
action :create_if_missing
end

yum_package 'nodejs-stable-release' do
source file
options '--nogpgcheck'
end

%w{ nodejs nodejs-compat-symlinks npm }.each do |pkg|
package pkg
end
when 'ubuntu'
apt_repository 'node.js' do
uri 'http://ppa.launchpad.net/chris-lea/node.js/ubuntu'
distribution node['lsb']['codename']
components ['main']
keyserver "keyserver.ubuntu.com"
key "C7917B12"
action :add
end

%w{ nodejs npm }.each do |pkg|
package pkg
end
else
include_recipe 'nodejs::source'
end
63 changes: 63 additions & 0 deletions recipes/source.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
#
# Author:: Marius Ducea (marius@promethost.com)
# Cookbook Name:: nodejs
# Recipe:: default
#
# Copyright 2010, Promet Solutions
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

include_recipe "build-essential"

case node[:platform]
when "centos","redhat","fedora"
package "openssl-devel"
when "debian","ubuntu"
package "libssl-dev"
end

nodejs_tar = "node-v#{node[:nodejs][:version]}.tar.gz"
nodejs_tar_path = nodejs_tar

if node[:nodejs][:version].split('.')[1].to_i >= 5
nodejs_tar_path = "v#{node[:nodejs][:version]}/#{nodejs_tar_path}"
end

remote_file "/usr/local/src/#{nodejs_tar}" do
source "http://nodejs.org/dist/#{nodejs_tar_path}"
checksum node[:nodejs][:checksum]
mode 0644
end

# --no-same-owner required overcome "Cannot change ownership" bug
# on NFS-mounted filesystem
execute "tar --no-same-owner -zxf #{nodejs_tar}" do
cwd "/usr/local/src"
creates "/usr/local/src/node-v#{node[:nodejs][:version]}"
end

bash "compile node.js" do
cwd "/usr/local/src/node-v#{node[:nodejs][:version]}"
code <<-EOH
./configure --prefix=#{node[:nodejs][:dir]} && \
make
EOH
creates "/usr/local/src/node-v#{node[:nodejs][:version]}/node"
end

execute "nodejs make install" do
command "make install"
cwd "/usr/local/src/node-v#{node[:nodejs][:version]}"
not_if {File.exists?("#{node[:nodejs][:dir]}/bin/node") && `#{node[:nodejs][:dir]}/bin/node --version`.chomp == "v#{node[:nodejs][:version]}" }
end

0 comments on commit c0912fc

Please sign in to comment.