diff --git a/.gitignore b/.gitignore index 8de318a..f97cbbf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ Berksfile.lock Gemfile.lock *.swp +*.bak diff --git a/attributes/default.rb b/attributes/default.rb index 80a32f5..511a018 100644 --- a/attributes/default.rb +++ b/attributes/default.rb @@ -18,11 +18,14 @@ default['rstudio']['cran']['packages'] = [] # RStudio Server +default['rstudio']['server']['base_download_url'] = 'http://download2.rstudio.org' default['rstudio']['server']['www_port'] = '8787' default['rstudio']['server']['www_address'] = '127.0.0.1' default['rstudio']['server']['ld_library_path'] = '' default['rstudio']['server']['r_binary_path'] = '' default['rstudio']['server']['user_group'] = '' +default['rstudio']['server']['version'] = '0.98.507' +default['rstudio']['server']['arch'] = node['kernel']['machine'] =~ /x86_64/ ? "amd64" : "i386" # RStudio Session default['rstudio']['session']['timeout'] = '30' diff --git a/recipes/server.rb b/recipes/server.rb index bef50a9..62b747e 100644 --- a/recipes/server.rb +++ b/recipes/server.rb @@ -1,42 +1,60 @@ -# Set up the package repository. -case node["platform"].downcase -when "ubuntu", "debian" - include_recipe "apt" - - apt_repository "rstudio-cran" do - uri node['rstudio']['apt']['uri'] - keyserver node['rstudio']['apt']['keyserver'] - key node['rstudio']['apt']['key'] - distribution "#{node['lsb']['codename']}/" - end - - package "r-base" do - action :install - end - - package "rstudio-server" do - action :install - end -end - -service "rstudio-server" do - provider Chef::Provider::Service::Upstart - supports :start => true, :stop => true, :restart => true - action :start -end - -template "/etc/rstudio/rserver.conf" do - source "etc/rstudio/rserver.conf.erb" - mode 0644 - owner "root" - group "root" - notifies :restart, "service[rstudio-server]" -end - -template "/etc/rstudio/rsession.conf" do - source "etc/rstudio/rsession.conf.erb" - mode 0644 - owner "root" - group "root" - notifies :restart, "service[rstudio-server]" -end +# Set up the package repository. +case node['platform_family'].downcase +when "debian" + include_recipe "apt" + + apt_repository "rstudio-cran" do + uri node['rstudio']['apt']['uri'] + keyserver node['rstudio']['apt']['keyserver'] + key node['rstudio']['apt']['key'] + distribution "#{node['lsb']['codename']}/" + end + + package "r-base" do + action :install + end + + package "libssl0.9.8" do + action :install + end + + Chef::Log.info('Retrieving RStudio Server file.') + remote_rstudio_server_file = "#{node['rstudio']['server']['base_download_url']}/rstudio-server-#{node['rstudio']['server']['version']}-#{node['rstudio']['server']['arch']}.deb" + local_rstudio_server_file = "#{Chef::Config[:file_cache_path]}/rstudio-server-#{node['rstudio']['server']['version']}-#{node['rstudio']['server']['arch']}.deb" + remote_file local_rstudio_server_file do + source remote_rstudio_server_file + action :create_if_missing + not_if { ::File.exists?('/etc/init/shiny-server.conf') } + end + + Chef::Log.info('Installing RStudio Server via dpkg.') + dpkg_package "rstudio-server" do + source local_rstudio_server_file + action :install + end + +when "rhel" + Chef::Application.fatal!("Redhat based platforms are not yet supported") +end + +service "rstudio-server" do + provider Chef::Provider::Service::Upstart + supports :start => true, :stop => true, :restart => true + action :start +end + +template "/etc/rstudio/rserver.conf" do + source "etc/rstudio/rserver.conf.erb" + mode 0644 + owner "root" + group "root" + notifies :restart, "service[rstudio-server]" +end + +template "/etc/rstudio/rsession.conf" do + source "etc/rstudio/rsession.conf.erb" + mode 0644 + owner "root" + group "root" + notifies :restart, "service[rstudio-server]" +end