Commit d935d3c75737bd07d69f6502d5ca1afc0fccd9f1
Exists in
master
and in
17 other branches
Merge branch 'runit' into 'master'
Runit
Showing
13 changed files
with
620 additions
and
0 deletions
Show diff stats
config/projects/gitlab.rb
files/gitlab-cookbooks/dna.json
| ... | ... | @@ -0,0 +1,11 @@ |
| 1 | +maintainer "GitLab.com" | |
| 2 | +maintainer_email "support@gitlab.com" | |
| 3 | +license "MIT" | |
| 4 | +description "Install and configure GitLab from Omnibus" | |
| 5 | +long_description "Install and configure GitLab from Omnibus" | |
| 6 | +version "0.0.1" | |
| 7 | +recipe "gitlab", "Configures GitLab from Omnibus" | |
| 8 | + | |
| 9 | +supports "ubuntu" | |
| 10 | + | |
| 11 | +depends "runit" | ... | ... |
| ... | ... | @@ -0,0 +1 @@ |
| 1 | +include_recipe "runit" | ... | ... |
| ... | ... | @@ -0,0 +1,228 @@ |
| 1 | +Description | |
| 2 | +=========== | |
| 3 | + | |
| 4 | +Installs runit and provides `runit_service` definition for managing new | |
| 5 | +services under runit. | |
| 6 | + | |
| 7 | +This cookbook does not use runit to replace system init, nor are there | |
| 8 | +plans to do so. | |
| 9 | + | |
| 10 | +For more information about runit: | |
| 11 | + | |
| 12 | +* http://smarden.org/runit/ | |
| 13 | + | |
| 14 | +Changes | |
| 15 | +======= | |
| 16 | + | |
| 17 | +## v0.14.2 | |
| 18 | + | |
| 19 | +Roadmap | |
| 20 | +------- | |
| 21 | + | |
| 22 | +* [CHEF-154] - implement lwrp for runit service | |
| 23 | + | |
| 24 | +Requirements | |
| 25 | +============ | |
| 26 | + | |
| 27 | +## Platform: | |
| 28 | + | |
| 29 | +* Debian/Ubuntu | |
| 30 | +* Gentoo | |
| 31 | + | |
| 32 | +Attributes | |
| 33 | +========== | |
| 34 | + | |
| 35 | +See `attributes/default.rb` for defaults. | |
| 36 | + | |
| 37 | +* `node['runit']['sv_bin']` - Full path to the `sv` binary. | |
| 38 | +* `node['runit']['chpst_bin']` - Full path to the `chpst` binary. | |
| 39 | +* `node['runit']['service_dir']` - Full path to the default "services" | |
| 40 | + directory where enabled services are linked. | |
| 41 | +* `node['runit']['sv_dir']` - Full path to the directory where the | |
| 42 | + service lives, which gets linked to `service_dir`. | |
| 43 | + | |
| 44 | +Recipes | |
| 45 | +======= | |
| 46 | + | |
| 47 | +default | |
| 48 | +------- | |
| 49 | + | |
| 50 | +Installs and sets up runit on the system. Assumes a package | |
| 51 | +installation, so native package must exist. This recipe will make sure | |
| 52 | +that the runsvdir process gets started, ensures that inittab is | |
| 53 | +updated with the SV entry. The package will be preseeded on | |
| 54 | +ubuntu/debian signal init, otherwise the appropriate action is chosen | |
| 55 | +to notify the runsvdir command. | |
| 56 | + | |
| 57 | +Older versions of Ubuntu (<= 10.04) are supported, but support may be | |
| 58 | +removed in a future version. | |
| 59 | + | |
| 60 | +Definitions | |
| 61 | +=========== | |
| 62 | + | |
| 63 | +The definition in this cookbook will be deprecated by an LWRP in a | |
| 64 | +future version. See __Roadmap__. | |
| 65 | + | |
| 66 | +runit\_service | |
| 67 | +-------------- | |
| 68 | + | |
| 69 | +This definition includes `recipe[runit]` to ensure it is installed | |
| 70 | +first. As LWRPs cannot use `include_recipe`, this will not be | |
| 71 | +available in future versions, so runit will need to be in a role or | |
| 72 | +node run list. | |
| 73 | + | |
| 74 | +Sets up a new service to be managed and supervised by runit. It will | |
| 75 | +be created in the `node['runit']['sv_dir']` unless otherwise specified | |
| 76 | +in the `directory` parameter (see below). | |
| 77 | + | |
| 78 | +### Parameters: | |
| 79 | + | |
| 80 | +* `name` - Name of the service. This will be used in the template file | |
| 81 | + names (see __Usage__), as well as the name of the service resource | |
| 82 | + created in the definition. | |
| 83 | +* `directory` - the directory where the service's configuration and | |
| 84 | + scripts should be located. Default is `node['runit']['sv_dir']`. | |
| 85 | +* `only_if` - unused, will be removed in a future version (won't be | |
| 86 | + present in lwrp). Default is false. | |
| 87 | +* `finish_script` - if true, a finish script should be created. | |
| 88 | + Default is false. For more information see: [Description of runsv](http://smarden.org/runit/runsv.8.html). | |
| 89 | +* `control` - Array of signals to create a control directory with | |
| 90 | + control scripts (e.g., `sv-SERVICE-control-SIGNAL.erb`, where | |
| 91 | + SERVICE is the name parameter for the service name, and SIGNAL is | |
| 92 | + the Unix signal to send. Default is an empty array. For more | |
| 93 | + information see: | |
| 94 | + [Customize Control](http://smarden.org/runit/runsv.8.html) | |
| 95 | +* `run_restart` - if true, the service resource will subscribe to | |
| 96 | + changes to the run script and restart itself when it is modified. | |
| 97 | + Default is true. | |
| 98 | +* `active_directory` - used for user-specific services. Default is | |
| 99 | + `node['runit']['service_dir']`. | |
| 100 | +* `owner` - userid of the owner for the service's files, and should be | |
| 101 | + used in the run template with chpst to ensure the service runs as | |
| 102 | + that user. Default is root. | |
| 103 | +* `group` - groupid of the group for the service's files, and should | |
| 104 | + be used in the run template with chpst to ensure the service runs as | |
| 105 | + that group. Default is root. | |
| 106 | +* `template_name` - specify an alternate name for the templates | |
| 107 | + instead of basing them on the name parameter. Default is the name parameter. | |
| 108 | +* `start_command` - The command used to start the service in | |
| 109 | + conjunction with the `sv` command and the `service_dir` name. | |
| 110 | + Default is `start`. | |
| 111 | +* `stop_command` - The command used to stop the service in conjunction | |
| 112 | + with the `sv` command and the `service_dir` name. Default is `stop`. | |
| 113 | +* `restart_command` - The command used to restart the service in | |
| 114 | + conjunction with the `sv` command and the `service_dir` name. You | |
| 115 | + may need to modify this to send an alternate signal to restart the | |
| 116 | + service depending on the nature of the process. Default is `restart` | |
| 117 | +* `status_command` - The command used to check status for the service in | |
| 118 | + conjunction with the `sv` command and the `service_dir` name. This | |
| 119 | + is used by chef when checking the current resource state in managing | |
| 120 | + the service. Default is `status`. | |
| 121 | +* `options` - a Hash of variables to pass into the run and log/run | |
| 122 | + templates with the template resource `variables` parameter. | |
| 123 | + Available inside the template(s) as `@options`. Default is an empty Hash. | |
| 124 | +* `env` - | |
| 125 | + | |
| 126 | +### Examples: | |
| 127 | + | |
| 128 | +Create templates for `sv-myservice-run.erb` and | |
| 129 | +`sv-myservice-log-run.erb` that have the commands for starting | |
| 130 | +myservice and its logger. | |
| 131 | + | |
| 132 | + runit_service "myservice" | |
| 133 | + | |
| 134 | +See __Usage__ for expanded examples. | |
| 135 | + | |
| 136 | +Resources/Providers | |
| 137 | +=================== | |
| 138 | + | |
| 139 | +None yet. See __Roadmap__. | |
| 140 | + | |
| 141 | +Usage | |
| 142 | +===== | |
| 143 | + | |
| 144 | +To get runit installed on supported platforms, use `recipe[runit]`. | |
| 145 | +Once it is installed, use the `runit_service` definition to set up | |
| 146 | +services to be managed by runit. Do note that once | |
| 147 | +[CHEF-154](http://tickets.opscode.com/browse/CHEF-154) is implemented, | |
| 148 | +some of the usage/implementation here will change. In order to use the | |
| 149 | +`runit_service` definition, two templates must be created for the | |
| 150 | +service, `cookbook_name/templates/default/sv-SERVICE-run.erb` and | |
| 151 | +`cookbook_name/templates/default/sv-SERVICE-log-run.erb`. Replace | |
| 152 | +`SERVICE` with the name of the service you're managing. For more usage, | |
| 153 | +see __Examples__. | |
| 154 | + | |
| 155 | +Examples | |
| 156 | +-------- | |
| 157 | + | |
| 158 | +We'll set up `chef-client` to run as a service under runit, such as is | |
| 159 | +done in the `chef-client` cookbook. This example will be more simple | |
| 160 | +than in that cookbook. First, create the required run template, | |
| 161 | +`chef-client/templates/default/sv-chef-client-run.erb`. | |
| 162 | + | |
| 163 | + #!/bin/sh | |
| 164 | + exec 2>&1 | |
| 165 | + exec /usr/bin/env chef-client -i 1800 -s 30 | |
| 166 | + | |
| 167 | +Then create the required log/run template, | |
| 168 | +`chef-client/templates/default/sv-chef-client-run.erb`. | |
| 169 | + | |
| 170 | + #!/bin/sh | |
| 171 | + exec svlogd -tt ./main | |
| 172 | + | |
| 173 | +__Note__ This will cause output of the running process to go to | |
| 174 | +`/etc/sv/chef-client/log/main/current`. | |
| 175 | + | |
| 176 | +Finally, set up the service in the `chef-client` recipe with: | |
| 177 | + | |
| 178 | + runit_service "chef-client" | |
| 179 | + | |
| 180 | +Next, let's set up memcached with some additional options. First, the | |
| 181 | +`memcached/templates/default/sv-memcached-run.erb` template: | |
| 182 | + | |
| 183 | + #!/bin/sh | |
| 184 | + exec 2>&1 | |
| 185 | + exec chpst -u <%= @options[:user] %> /usr/bin/memcached -v -m <%= @options[:memory] %> -p <%= @options[:port] %> | |
| 186 | + | |
| 187 | +Note that the script uses chpst (which comes with runit) to set the | |
| 188 | +user option, then starts memcached on the specified memory and port | |
| 189 | +(see below). | |
| 190 | + | |
| 191 | +The log/run template, | |
| 192 | +`memcached/templates/default/sv-memcached-log-run.erb`: | |
| 193 | + | |
| 194 | + #!/bin/sh | |
| 195 | + exec svlogd -tt ./main | |
| 196 | + | |
| 197 | +Finally, the `runit_service` in our recipe: | |
| 198 | + | |
| 199 | + runit_service "memcached" do | |
| 200 | + options({ | |
| 201 | + :memory => node[:memcached][:memory], | |
| 202 | + :port => node[:memcached][:port], | |
| 203 | + :user => node[:memcached][:user]}.merge(params) | |
| 204 | + ) | |
| 205 | + end | |
| 206 | + | |
| 207 | +This is where the user, port and memory options used in the run | |
| 208 | +template are used. | |
| 209 | + | |
| 210 | +License and Author | |
| 211 | +================== | |
| 212 | + | |
| 213 | +Author:: Adam Jacob <adam@opscode.com> | |
| 214 | +Author:: Joshua Timberman <joshua@opscode.com> | |
| 215 | + | |
| 216 | +Copyright:: 2008-2011, Opscode, Inc | |
| 217 | + | |
| 218 | +Licensed under the Apache License, Version 2.0 (the "License"); | |
| 219 | +you may not use this file except in compliance with the License. | |
| 220 | +You may obtain a copy of the License at | |
| 221 | + | |
| 222 | + http://www.apache.org/licenses/LICENSE-2.0 | |
| 223 | + | |
| 224 | +Unless required by applicable law or agreed to in writing, software | |
| 225 | +distributed under the License is distributed on an "AS IS" BASIS, | |
| 226 | +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| 227 | +See the License for the specific language governing permissions and | |
| 228 | +limitations under the License. | ... | ... |
| ... | ... | @@ -0,0 +1,24 @@ |
| 1 | +# | |
| 2 | +# Cookbook Name:: runit | |
| 3 | +# Attribute File:: sv_bin | |
| 4 | +# | |
| 5 | +# Copyright 2008-2009, Opscode, Inc. | |
| 6 | +# | |
| 7 | +# Licensed under the Apache License, Version 2.0 (the "License"); | |
| 8 | +# you may not use this file except in compliance with the License. | |
| 9 | +# You may obtain a copy of the License at | |
| 10 | +# | |
| 11 | +# http://www.apache.org/licenses/LICENSE-2.0 | |
| 12 | +# | |
| 13 | +# Unless required by applicable law or agreed to in writing, software | |
| 14 | +# distributed under the License is distributed on an "AS IS" BASIS, | |
| 15 | +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| 16 | +# See the License for the specific language governing permissions and | |
| 17 | +# limitations under the License. | |
| 18 | +# | |
| 19 | + | |
| 20 | +default[:runit][:sv_bin] = "/opt/gitlab/embedded/bin/sv" | |
| 21 | +default[:runit][:chpst_bin] = "/opt/gitlab/embedded/bin/chpst" | |
| 22 | +default[:runit][:service_dir] = "/opt/gitlab/service" | |
| 23 | +default[:runit][:sv_dir] = "/opt/gitlab/sv" | |
| 24 | + | ... | ... |
files/gitlab-cookbooks/runit/definitions/runit_service.rb
0 → 100644
| ... | ... | @@ -0,0 +1,193 @@ |
| 1 | +# | |
| 2 | +# Cookbook Name:: runit | |
| 3 | +# Definition:: runit_service | |
| 4 | +# | |
| 5 | +# Copyright 2008-2009, Opscode, Inc. | |
| 6 | +# | |
| 7 | +# Licensed under the Apache License, Version 2.0 (the "License"); | |
| 8 | +# you may not use this file except in compliance with the License. | |
| 9 | +# You may obtain a copy of the License at | |
| 10 | +# | |
| 11 | +# http://www.apache.org/licenses/LICENSE-2.0 | |
| 12 | +# | |
| 13 | +# Unless required by applicable law or agreed to in writing, software | |
| 14 | +# distributed under the License is distributed on an "AS IS" BASIS, | |
| 15 | +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| 16 | +# See the License for the specific language governing permissions and | |
| 17 | +# limitations under the License. | |
| 18 | +# | |
| 19 | + | |
| 20 | +define :runit_service, :directory => nil, :only_if => false, :finish_script => false, :control => [], :run_restart => true, :active_directory => nil, :init_script_template => nil, :owner => "root", :group => "root", :template_name => nil, :start_command => "start", :stop_command => "stop", :restart_command => "restart", :status_command => "status", :options => Hash.new, :env => Hash.new, :action => :enable, :down => false do | |
| 21 | + | |
| 22 | + include_recipe "runit" | |
| 23 | + | |
| 24 | + params[:directory] ||= node[:runit][:sv_dir] | |
| 25 | + params[:active_directory] ||= node[:runit][:service_dir] | |
| 26 | + params[:template_name] ||= params[:name] | |
| 27 | + | |
| 28 | + sv_dir_name = "#{params[:directory]}/#{params[:name]}" | |
| 29 | + service_dir_name = "#{params[:active_directory]}/#{params[:name]}" | |
| 30 | + params[:options].merge!(:env_dir => "#{sv_dir_name}/env") unless params[:env].empty? | |
| 31 | + | |
| 32 | + case params[:action] | |
| 33 | + when :enable | |
| 34 | + | |
| 35 | + | |
| 36 | + directory sv_dir_name do | |
| 37 | + owner params[:owner] | |
| 38 | + group params[:group] | |
| 39 | + mode 0755 | |
| 40 | + action :create | |
| 41 | + end | |
| 42 | + | |
| 43 | + directory "#{sv_dir_name}/log" do | |
| 44 | + owner params[:owner] | |
| 45 | + group params[:group] | |
| 46 | + mode 0755 | |
| 47 | + action :create | |
| 48 | + end | |
| 49 | + | |
| 50 | + directory "#{sv_dir_name}/log/main" do | |
| 51 | + owner params[:owner] | |
| 52 | + group params[:group] | |
| 53 | + mode 0755 | |
| 54 | + action :create | |
| 55 | + end | |
| 56 | + | |
| 57 | + template "#{sv_dir_name}/run" do | |
| 58 | + owner params[:owner] | |
| 59 | + group params[:group] | |
| 60 | + mode 0755 | |
| 61 | + source "sv-#{params[:template_name]}-run.erb" | |
| 62 | + cookbook params[:cookbook] if params[:cookbook] | |
| 63 | + if params[:options].respond_to?(:has_key?) | |
| 64 | + variables :options => params[:options] | |
| 65 | + end | |
| 66 | + end | |
| 67 | + | |
| 68 | + template "#{sv_dir_name}/log/run" do | |
| 69 | + owner params[:owner] | |
| 70 | + group params[:group] | |
| 71 | + mode 0755 | |
| 72 | + source "sv-#{params[:template_name]}-log-run.erb" | |
| 73 | + cookbook params[:cookbook] if params[:cookbook] | |
| 74 | + if params[:options].respond_to?(:has_key?) | |
| 75 | + variables :options => params[:options] | |
| 76 | + end | |
| 77 | + end | |
| 78 | + | |
| 79 | + if params[:down] | |
| 80 | + file "#{sv_dir_name}/down" do | |
| 81 | + mode "0644" | |
| 82 | + end | |
| 83 | + else | |
| 84 | + file "#{sv_dir_name}/down" do | |
| 85 | + action :delete | |
| 86 | + end | |
| 87 | + end | |
| 88 | + | |
| 89 | + unless params[:env].empty? | |
| 90 | + directory "#{sv_dir_name}/env" do | |
| 91 | + mode 0755 | |
| 92 | + action :create | |
| 93 | + end | |
| 94 | + | |
| 95 | + params[:env].each do |var, value| | |
| 96 | + file "#{sv_dir_name}/env/#{var}" do | |
| 97 | + content value | |
| 98 | + end | |
| 99 | + end | |
| 100 | + end | |
| 101 | + | |
| 102 | + if params[:finish_script] | |
| 103 | + template "#{sv_dir_name}/finish" do | |
| 104 | + owner params[:owner] | |
| 105 | + group params[:group] | |
| 106 | + mode 0755 | |
| 107 | + source "sv-#{params[:template_name]}-finish.erb" | |
| 108 | + cookbook params[:cookbook] if params[:cookbook] | |
| 109 | + if params[:options].respond_to?(:has_key?) | |
| 110 | + variables :options => params[:options] | |
| 111 | + end | |
| 112 | + end | |
| 113 | + end | |
| 114 | + | |
| 115 | + unless params[:control].empty? | |
| 116 | + directory "#{sv_dir_name}/control" do | |
| 117 | + owner params[:owner] | |
| 118 | + group params[:group] | |
| 119 | + mode 0755 | |
| 120 | + action :create | |
| 121 | + end | |
| 122 | + | |
| 123 | + params[:control].each do |signal| | |
| 124 | + template "#{sv_dir_name}/control/#{signal}" do | |
| 125 | + owner params[:owner] | |
| 126 | + group params[:group] | |
| 127 | + mode 0755 | |
| 128 | + source "sv-#{params[:template_name]}-control-#{signal}.erb" | |
| 129 | + cookbook params[:cookbook] if params[:cookbook] | |
| 130 | + if params[:options].respond_to?(:has_key?) | |
| 131 | + variables :options => params[:options] | |
| 132 | + end | |
| 133 | + end | |
| 134 | + end | |
| 135 | + end | |
| 136 | + | |
| 137 | + if params[:init_script_template] | |
| 138 | + template "/opt/gitlab/init/#{params[:name]}" do | |
| 139 | + owner params[:owner] | |
| 140 | + group params[:group] | |
| 141 | + mode 0755 | |
| 142 | + source params[:init_script_template] | |
| 143 | + if params[:options].respond_to?(:has_key?) | |
| 144 | + variables :options => params[:options] | |
| 145 | + end | |
| 146 | + end | |
| 147 | + else | |
| 148 | + if params[:active_directory] == node[:runit][:service_dir] | |
| 149 | + link "/opt/gitlab/init/#{params[:name]}" do | |
| 150 | + to node[:runit][:sv_bin] | |
| 151 | + end | |
| 152 | + end | |
| 153 | + end | |
| 154 | + | |
| 155 | + unless node[:platform] == "gentoo" | |
| 156 | + link service_dir_name do | |
| 157 | + to sv_dir_name | |
| 158 | + end | |
| 159 | + end | |
| 160 | + | |
| 161 | + ruby_block "supervise_#{params[:name]}_sleep" do | |
| 162 | + block do | |
| 163 | + Chef::Log.debug("Waiting until named pipe #{sv_dir_name}/supervise/ok exists.") | |
| 164 | + until ::FileTest.pipe?("#{sv_dir_name}/supervise/ok") do | |
| 165 | + sleep 1 | |
| 166 | + Chef::Log.debug(".") | |
| 167 | + end | |
| 168 | + end | |
| 169 | + not_if { FileTest.pipe?("#{sv_dir_name}/supervise/ok") } | |
| 170 | + end | |
| 171 | + | |
| 172 | + service params[:name] do | |
| 173 | + control_cmd = node[:runit][:sv_bin] | |
| 174 | + if params[:owner] | |
| 175 | + control_cmd = "#{node[:runit][:chpst_bin]} -u #{params[:owner]} #{control_cmd}" | |
| 176 | + end | |
| 177 | + provider Chef::Provider::Service::Simple | |
| 178 | + supports :restart => true, :status => true | |
| 179 | + start_command "#{control_cmd} #{params[:start_command]} #{service_dir_name}" | |
| 180 | + stop_command "#{control_cmd} #{params[:stop_command]} #{service_dir_name}" | |
| 181 | + restart_command "#{control_cmd} #{params[:restart_command]} #{service_dir_name}" | |
| 182 | + status_command "#{control_cmd} #{params[:status_command]} #{service_dir_name}" | |
| 183 | + if params[:run_restart] && OmnibusHelper.should_notify?(params[:name]) | |
| 184 | + subscribes :restart, resources(:template => "#{sv_dir_name}/run"), :delayed | |
| 185 | + end | |
| 186 | + action :nothing | |
| 187 | + end | |
| 188 | + when :disable | |
| 189 | + link service_dir_name do | |
| 190 | + action :delete | |
| 191 | + end | |
| 192 | + end | |
| 193 | +end | ... | ... |
files/gitlab-cookbooks/runit/files/default/gitlab-runsvdir.conf
0 → 100644
| ... | ... | @@ -0,0 +1,10 @@ |
| 1 | +start on runlevel [2345] | |
| 2 | +stop on shutdown | |
| 3 | +respawn | |
| 4 | +post-stop script | |
| 5 | + # To avoid stomping on runsv's owned by a different runsvdir | |
| 6 | + # process, kill any runsv process that has been orphaned, and is | |
| 7 | + # now owned by init (process 1). | |
| 8 | + pkill -HUP -P 1 runsv$ | |
| 9 | +end script | |
| 10 | +exec /opt/gitlab/embedded/bin/runsvdir-start | ... | ... |
| ... | ... | @@ -0,0 +1,37 @@ |
| 1 | +maintainer "Opscode, Inc." | |
| 2 | +maintainer_email "cookbooks@opscode.com" | |
| 3 | +license "Apache 2.0" | |
| 4 | +description "Installs runit and provides runit_service definition" | |
| 5 | +version "0.14.2" | |
| 6 | + | |
| 7 | +recipe "runit", "Installs and configures runit" | |
| 8 | + | |
| 9 | +%w{ ubuntu debian gentoo }.each do |os| | |
| 10 | + supports os | |
| 11 | +end | |
| 12 | + | |
| 13 | +attribute "runit", | |
| 14 | + :display_name => "Runit", | |
| 15 | + :description => "Hash of runit attributes", | |
| 16 | + :type => "hash" | |
| 17 | + | |
| 18 | +attribute "runit/sv_bin", | |
| 19 | + :display_name => "Runit sv bin", | |
| 20 | + :description => "Location of the sv binary", | |
| 21 | + :default => "/usr/bin/sv" | |
| 22 | + | |
| 23 | +attribute "runit/chpst_bin", | |
| 24 | + :display_name => "Runit chpst bin", | |
| 25 | + :description => "Location of the chpst binary", | |
| 26 | + :default => "/usr/bin/chpst" | |
| 27 | + | |
| 28 | +attribute "runit/service_dir", | |
| 29 | + :display_name => "Runit service directory", | |
| 30 | + :description => "Symlinks to services managed under runit", | |
| 31 | + :default => "/etc/service" | |
| 32 | + | |
| 33 | +attribute "runit/sv_dir", | |
| 34 | + :display_name => "Runit sv directory", | |
| 35 | + :description => "Location of services managed by runit", | |
| 36 | + :default => "/etc/sv" | |
| 37 | + | ... | ... |
| ... | ... | @@ -0,0 +1,32 @@ |
| 1 | +# | |
| 2 | +# Cookbook Name:: runit | |
| 3 | +# Recipe:: default | |
| 4 | +# | |
| 5 | +# Copyright 2008-2010, Opscode, Inc. | |
| 6 | +# | |
| 7 | +# Licensed under the Apache License, Version 2.0 (the "License"); | |
| 8 | +# you may not use this file except in compliance with the License. | |
| 9 | +# You may obtain a copy of the License at | |
| 10 | +# | |
| 11 | +# http://www.apache.org/licenses/LICENSE-2.0 | |
| 12 | +# | |
| 13 | +# Unless required by applicable law or agreed to in writing, software | |
| 14 | +# distributed under the License is distributed on an "AS IS" BASIS, | |
| 15 | +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| 16 | +# See the License for the specific language governing permissions and | |
| 17 | +# limitations under the License. | |
| 18 | +# | |
| 19 | + | |
| 20 | +# TODO: This needs RHEL support | |
| 21 | +case node["platform"] | |
| 22 | +when "ubuntu" | |
| 23 | + include_recipe "runit::upstart" | |
| 24 | +when "redhat","centos","rhel","scientific" | |
| 25 | + if node['platform_version'] =~ /^6/ | |
| 26 | + include_recipe "runit::upstart" | |
| 27 | + else | |
| 28 | + include_recipe "runit::sysvinit" | |
| 29 | + end | |
| 30 | +else | |
| 31 | + include_recipe "runit::sysvinit" | |
| 32 | +end | ... | ... |
| ... | ... | @@ -0,0 +1,29 @@ |
| 1 | +# | |
| 2 | +# Cookbook Name:: runit | |
| 3 | +# Recipe:: sysvinit | |
| 4 | +# | |
| 5 | +# Copyright 2011, Opscode, Inc. | |
| 6 | +# | |
| 7 | +# Licensed under the Apache License, Version 2.0 (the "License"); | |
| 8 | +# you may not use this file except in compliance with the License. | |
| 9 | +# You may obtain a copy of the License at | |
| 10 | +# | |
| 11 | +# http://www.apache.org/licenses/LICENSE-2.0 | |
| 12 | +# | |
| 13 | +# Unless required by applicable law or agreed to in writing, software | |
| 14 | +# distributed under the License is distributed on an "AS IS" BASIS, | |
| 15 | +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| 16 | +# See the License for the specific language governing permissions and | |
| 17 | +# limitations under the License. | |
| 18 | +# | |
| 19 | + | |
| 20 | +# We assume you are sysvinit | |
| 21 | +svdir_line = 'CS:123456:respawn:/opt/gitlab/embedded/bin/runsvdir-start' | |
| 22 | +execute "echo '#{svdir_line}' >> /etc/inittab" do | |
| 23 | + not_if "grep '#{svdir_line}' /etc/inittab" | |
| 24 | + notifies :run, "execute[init q]", :immediately | |
| 25 | +end | |
| 26 | + | |
| 27 | +execute "init q" do | |
| 28 | + action :nothing | |
| 29 | +end | ... | ... |
| ... | ... | @@ -0,0 +1,47 @@ |
| 1 | +# | |
| 2 | +# Cookbook Name:: runit | |
| 3 | +# Recipe:: default | |
| 4 | +# | |
| 5 | +# Copyright 2008-2010, Opscode, Inc. | |
| 6 | +# | |
| 7 | +# Licensed under the Apache License, Version 2.0 (the "License"); | |
| 8 | +# you may not use this file except in compliance with the License. | |
| 9 | +# You may obtain a copy of the License at | |
| 10 | +# | |
| 11 | +# http://www.apache.org/licenses/LICENSE-2.0 | |
| 12 | +# | |
| 13 | +# Unless required by applicable law or agreed to in writing, software | |
| 14 | +# distributed under the License is distributed on an "AS IS" BASIS, | |
| 15 | +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| 16 | +# See the License for the specific language governing permissions and | |
| 17 | +# limitations under the License. | |
| 18 | +# | |
| 19 | + | |
| 20 | +# Ensure the previous named iteration of the system job is nuked | |
| 21 | +execute "initctl stop gitlab-runsvdir" do | |
| 22 | + only_if "initctl status gitlab-runsvdir | grep start" | |
| 23 | + retries 30 | |
| 24 | +end | |
| 25 | +file "/etc/init/gitlab-runsvdir.conf" do | |
| 26 | + action :delete | |
| 27 | +end | |
| 28 | + | |
| 29 | +cookbook_file "/etc/init/gitlab-runsvdir.conf" do | |
| 30 | + owner "root" | |
| 31 | + group "root" | |
| 32 | + mode "0644" | |
| 33 | + source "gitlab-runsvdir.conf" | |
| 34 | +end | |
| 35 | + | |
| 36 | +# Keep on trying till the job is found :( | |
| 37 | +execute "initctl status gitlab-runsvdir" do | |
| 38 | + retries 30 | |
| 39 | +end | |
| 40 | + | |
| 41 | +# If we are stop/waiting, start | |
| 42 | +# | |
| 43 | +# Why, upstart, aren't you idempotent? :( | |
| 44 | +execute "initctl start gitlab-runsvdir" do | |
| 45 | + only_if "initctl status gitlab-runsvdir | grep stop" | |
| 46 | + retries 30 | |
| 47 | +end | ... | ... |
files/gitlab-cookbooks/solo.rb