diff --git a/apache2/recipes/mod_rails.rb b/apache2/recipes/mod_rails.rb index 58251affa..c3f65961a 100644 --- a/apache2/recipes/mod_rails.rb +++ b/apache2/recipes/mod_rails.rb @@ -24,12 +24,23 @@ include_recipe "passenger" -template "#{node[:apache][:dir]}/mods-available/passenger.load" do - cookbook "passenger" - source "passenger.load.erb" - owner "root" - group "root" - mode 0755 +if platform?("centos","redhat") and dist_only? + package "mod_passenger" do + notifies :run, resources(:execute => "generate-module-list"), :immediately + end + + file "#{node[:apache][:dir]}/conf.d/mod_passenger.conf" do + action :delete + backup false + end +else + template "#{node[:apache][:dir]}/mods-available/passenger.load" do + cookbook "passenger" + source "passenger.load.erb" + owner "root" + group "root" + mode 0755 + end end template "#{node[:apache][:dir]}/mods-available/passenger.conf" do @@ -40,4 +51,4 @@ mode 0755 end -apache_module "passenger" \ No newline at end of file +apache_module "passenger" diff --git a/chef/attributes/chef.rb b/chef/attributes/chef.rb index ed146d224..aea330d14 100644 --- a/chef/attributes/chef.rb +++ b/chef/attributes/chef.rb @@ -20,3 +20,4 @@ chef Mash.new unless attribute?("chef") chef[:path] = "/srv/chef" unless chef.has_key?(:path) +chef[:run_path] = "/var/run/chef" unless chef.has_key?(:run_path) diff --git a/chef/attributes/indexer.rb b/chef/attributes/indexer.rb new file mode 100644 index 000000000..9549e8ae0 --- /dev/null +++ b/chef/attributes/indexer.rb @@ -0,0 +1 @@ +chef[:indexer_log] = "/var/log/chef/indexer.log" unless chef.has_key?(:indexer_log) diff --git a/chef/recipes/client.rb b/chef/recipes/client.rb index 371538eb7..9d50d17a8 100644 --- a/chef/recipes/client.rb +++ b/chef/recipes/client.rb @@ -19,10 +19,17 @@ # See the License for the specific language governing permissions and # limitations under the License. -include_recipe "runit" +# no runit here! +if ! platform?("centos","redhat") + include_recipe "runit" +end -gem_package "chef" do - version node[:chef][:client_version] +if platform?("centos","redhat") and dist_only? + package "rubygem-chef" +else + gem_package "chef" do + version node[:chef][:client_version] + end end group "chef" do @@ -38,6 +45,17 @@ shell "/bin/bash" end +if platform?("centos","redhat") and dist_only? + template "/etc/init.d/chef-client" do + owner "chef" + mode 0755 + source "chef-client.init.erb" + action :create + backup false + end +end + + directory "/etc/chef" do owner "chef" group "chef" @@ -63,10 +81,10 @@ mode "644" end -directory "/var/chef" do +directory node[:chef][:run_path] do owner "chef" group "chef" - mode 0775 + mode "755" end execute "Register client node with Chef Server" do @@ -81,4 +99,11 @@ # File.exists?("#{node[:chef][:path]}/cache/registration") } end -runit_service "chef-client" +if platform?("centos","redhat") and dist_only? + service "chef-client" do + supports [ :restart, :reload, :status ] + action [ :enable, :start ] + end +else + runit_service "chef-client" +end diff --git a/chef/recipes/server.rb b/chef/recipes/server.rb index 6a950c451..1237fa451 100644 --- a/chef/recipes/server.rb +++ b/chef/recipes/server.rb @@ -19,7 +19,12 @@ # See the License for the specific language governing permissions and # limitations under the License. -include_recipe "runit" +include_recipe "packages" + +# no runit here! +if ! platform?("centos","redhat") + include_recipe "runit" +end case node[:platform] when "ubuntu" @@ -30,8 +35,8 @@ if node[:platform_version].to_f >= 5.0 include_recipe "couchdb" end -# when "centos","redhat","fedora" -# include_recipe "couchdb" +when "centos","redhat","fedora" + include_recipe "couchdb" end include_recipe "stompserver" @@ -40,14 +45,34 @@ include_recipe "apache2::mod_rails" include_recipe "chef::client" -gem_package "chef-server" do - version node[:chef][:server_version] -end +if platform?("centos","redhat") and dist_only? + package "rubygem-chef-server" + package "rubygem-chef-server-slice" + + template "/etc/init.d/chef-indexer" do + owner "chef" + mode 0755 + source "chef-indexer.init.erb" + action :create + backup false + end -if node[:chef][:server_version] >= "0.5.7" - gem_package "chef-server-slice" do + template "/etc/chef/indexer.rb" do + owner "chef" + mode 0644 + source "indexer.conf.erb" + action :create + end +else + gem_package "chef-server" do version node[:chef][:server_version] end + + if node[:chef][:server_version] >= "0.5.7" + gem_package "chef-server-slice" do + version node[:chef][:server_version] + end + end end template "/etc/chef/server.rb" do @@ -88,7 +113,14 @@ not_if { File.exists?("/etc/chef/certificates/#{node[:chef][:server_fqdn]}.pem") } end -runit_service "chef-indexer" +if platform?("centos","redhat") and dist_only? + service "chef-indexer" do + supports [ :restart, :reload, :status ] + action [ :enable, :start ] + end +else + runit_service "chef-indexer" +end template "#{node[:chef][:server_path]}/config.ru" do source "config.ru.erb" diff --git a/chef/templates/default/chef-client.init.erb b/chef/templates/default/chef-client.init.erb new file mode 100644 index 000000000..084e31da2 --- /dev/null +++ b/chef/templates/default/chef-client.init.erb @@ -0,0 +1,69 @@ +#!/bin/bash +# Startup script for chef-client. This version is deployed by chef itself. +# +# chkconfig: - 98 02 +# description: Client component of the Chef systems integration framework. +# processname: chef-client +# +# pidfile: <%= @node[:chef][:run_path] %>/chef-client.pid + +# Source function library +. /etc/init.d/functions + +prog="chef-client" +pidfile=<%= @node[:chef][:run_path] %>/chef-client.pid +lockfile=/var/lock/subsys/$prog +config=/etc/chef/client.rb + +start() { + echo -n "Starting $prog:" + daemon chef-client -d -c "$config" -i <%= @node[:chef][:client_interval] %> -s <%= @node[:chef][:client_splay] %> -L <%= @node[:chef][:client_log] %> "&>/dev/null" + RETVAL=$? + echo + [ $RETVAL -eq 0 ] && touch ${lockfile} + return $RETVAL +} + +stop() { + echo -n "Stopping $prog: " + if [ -f $pidfile ]; then + killproc chef-client + RETVAL=$? + if [ $RETVAL -ne 0 ]; then + failure; + fi; + else + RETVAL=1 + failure; + fi + rm -f $lockfile + echo + return $RETVAL +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart) + stop + start + ;; + condrestart) + if [ -f $lockfile ]; then + stop + start + fi + ;; + status) + status chef-client + ;; + *) + echo "Usage: $0 {start|stop|restart|condrestart|status}" + exit 1 +esac + +exit $RETVAL diff --git a/chef/templates/default/chef-indexer.init.erb b/chef/templates/default/chef-indexer.init.erb new file mode 100644 index 000000000..42731e4d1 --- /dev/null +++ b/chef/templates/default/chef-indexer.init.erb @@ -0,0 +1,71 @@ +#!/bin/bash +# Startup script for chef-indexer. This version is deployed by chef itself. +# +# chkconfig: - 75 25 +# description: Server component of the Chef systems integration framework. +# processname: chef-indexer +# +# pidfile: <%= @node[:chef][:run_path] %>/chef-indexer.pid + +# Source function library +. /etc/init.d/functions + +prog="chef-indexer" +pidfile=<%= @node[:chef][:run_path] %>/chef-client.pid +lockfile=/var/lock/subsys/$prog +config=/etc/chef/indexer.rb +user="chef" +group="chef" + +start() { + echo -n "Starting $prog:" + daemon chef-indexer -d -c "$config" -u "$user" -g "$group" -L <%= @node[:chef][:indexer_log] %> "&>/dev/null" + RETVAL=$? + echo + [ $RETVAL -eq 0 ] && touch ${lockfile} + return $RETVAL +} + +stop() { + echo -n "Stopping $prog: " + if [ -f $pidfile ]; then + killproc chef-indexer + RETVAL=$? + if [ $RETVAL -ne 0 ]; then + failure; + fi; + else + RETVAL=1 + failure; + fi + rm -f $lockfile + echo + return $RETVAL +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart) + stop + start + ;; + condrestart) + if [ -f $lockfile ]; then + stop + start + fi + ;; + status) + status chef-indexer + ;; + *) + echo "Usage: $0 {start|stop|restart|condrestart|status}" + exit 1 +esac + +exit $RETVAL diff --git a/chef/templates/default/client.rb.erb b/chef/templates/default/client.rb.erb index dfae3c731..261afc802 100644 --- a/chef/templates/default/client.rb.erb +++ b/chef/templates/default/client.rb.erb @@ -16,4 +16,6 @@ search_url "https://<%= @node[:chef][:server_fqdn] %>" file_store_path "<%= @node[:chef][:path] %>/file_store" file_cache_path "<%= @node[:chef][:path] %>/cache" +pid_file "<%= @node[:chef][:run_path] %>/chef-client.pid" + Chef::Log::Formatter.show_time = true diff --git a/chef/templates/default/indexer.conf.erb b/chef/templates/default/indexer.conf.erb new file mode 100644 index 000000000..c0e7840e4 --- /dev/null +++ b/chef/templates/default/indexer.conf.erb @@ -0,0 +1,11 @@ +# +# Chef Indxer Config File +# +# Dynamically generated by Chef - local modifications will be replaced +# + +search_index_path "<%= @node[:chef][:path] %>/search_index" + +pid_file "<%= @node[:chef][:run_path] %>/chef-indexer.pid" + +Chef::Log::Formatter.show_time = false diff --git a/packages/attributes/packages.rb b/packages/attributes/packages.rb new file mode 100644 index 000000000..cb1e3349b --- /dev/null +++ b/packages/attributes/packages.rb @@ -0,0 +1,5 @@ +packages Mash.new unless attribute?("packages") + +# Toggle for recipes to determine if we should rely on distribution packages +# or gems. +packages[:dist_only] = false unless packages.has_key?(:dist_only) diff --git a/packages/libraries/packages.rb b/packages/libraries/packages.rb new file mode 100644 index 000000000..a8ac477d5 --- /dev/null +++ b/packages/libraries/packages.rb @@ -0,0 +1,9 @@ +# Yay for helpers! + +class Chef + class Recipe + def dist_only? + @node[:packages][:dist_only] + end + end +end diff --git a/packages/recipes/default.rb b/packages/recipes/default.rb new file mode 100644 index 000000000..e69de29bb diff --git a/passenger/recipes/default.rb b/passenger/recipes/default.rb index bc5848616..9e4f0c96a 100644 --- a/passenger/recipes/default.rb +++ b/passenger/recipes/default.rb @@ -22,8 +22,16 @@ # See the License for the specific language governing permissions and # limitations under the License. +include_recipe "packages" include_recipe "ruby" +if platform?("centos","redhat") and dist_only? + # just the gem, we'll install the apache module within apache2 + package "rubygem-passenger" + + return +end + %w{ apache2-prefork-dev libapr1-dev }.each do |pkg| package pkg do action :upgrade diff --git a/stompserver/recipes/default.rb b/stompserver/recipes/default.rb index 105254195..03d91820b 100644 --- a/stompserver/recipes/default.rb +++ b/stompserver/recipes/default.rb @@ -17,10 +17,23 @@ # See the License for the specific language governing permissions and # limitations under the License. +include_recipe "packages" + +if platform?("centos","redhat") and dist_only? + package "rubygem-stompserver" + + service "stompserver" do + supports [ :restart, :reload, :status ] + action [ :enable, :start ] + end + + return +end + include_recipe "runit" gem_package "stompserver" do action :install end -runit_service "stompserver" \ No newline at end of file +runit_service "stompserver"