Empact-deprec 1.99.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +170 -0
- data/COPYING +19 -0
- data/LICENSE +339 -0
- data/README +136 -0
- data/THANKS +5 -0
- data/bin/depify +133 -0
- data/docs/ANNOUNCE.deprec2 +47 -0
- data/docs/README.install +88 -0
- data/docs/README.nagios +28 -0
- data/docs/README.rails +20 -0
- data/docs/README.svn +31 -0
- data/docs/ROADMAP.txt +74 -0
- data/docs/deprec-1.x/deprec-1.x.quickstart +50 -0
- data/docs/deprec-1.x/notes.txt +12 -0
- data/docs/deprec_banner.gif +0 -0
- data/lib/deprec.rb +8 -0
- data/lib/deprec/capistrano_extensions.rb +378 -0
- data/lib/deprec/recipes.rb +40 -0
- data/lib/deprec/recipes/aoe.rb +117 -0
- data/lib/deprec/recipes/apache.rb +179 -0
- data/lib/deprec/recipes/ar_sendmail.rb +65 -0
- data/lib/deprec/recipes/canonical.rb +57 -0
- data/lib/deprec/recipes/deprec.rb +155 -0
- data/lib/deprec/recipes/deprecated.rb +71 -0
- data/lib/deprec/recipes/example.rb +115 -0
- data/lib/deprec/recipes/git.rb +168 -0
- data/lib/deprec/recipes/gitosis.rb +47 -0
- data/lib/deprec/recipes/god.rb +107 -0
- data/lib/deprec/recipes/heartbeat.rb +138 -0
- data/lib/deprec/recipes/iptables.rb +53 -0
- data/lib/deprec/recipes/logrotate.rb +51 -0
- data/lib/deprec/recipes/lvm.rb +20 -0
- data/lib/deprec/recipes/memcached.rb +102 -0
- data/lib/deprec/recipes/mongrel.rb +209 -0
- data/lib/deprec/recipes/monit.rb +130 -0
- data/lib/deprec/recipes/mysql.rb +115 -0
- data/lib/deprec/recipes/nagios.rb +302 -0
- data/lib/deprec/recipes/network.rb +84 -0
- data/lib/deprec/recipes/nginx.rb +154 -0
- data/lib/deprec/recipes/ntp.rb +96 -0
- data/lib/deprec/recipes/php.rb +99 -0
- data/lib/deprec/recipes/postfix.rb +105 -0
- data/lib/deprec/recipes/rails.rb +302 -0
- data/lib/deprec/recipes/ruby.rb +66 -0
- data/lib/deprec/recipes/sphinx.rb +83 -0
- data/lib/deprec/recipes/ssh.rb +93 -0
- data/lib/deprec/recipes/svn.rb +169 -0
- data/lib/deprec/recipes/swiftiply.rb +108 -0
- data/lib/deprec/recipes/thin.rb +201 -0
- data/lib/deprec/recipes/trac.rb +277 -0
- data/lib/deprec/recipes/ubuntu.rb +20 -0
- data/lib/deprec/recipes/users.rb +90 -0
- data/lib/deprec/recipes/utils.rb +39 -0
- data/lib/deprec/recipes/xen.rb +259 -0
- data/lib/deprec/templates/aoe/aoe-init +55 -0
- data/lib/deprec/templates/aoe/fence_aoemask +351 -0
- data/lib/deprec/templates/apache/httpd-vhost-app.conf.erb +144 -0
- data/lib/deprec/templates/apache/httpd.conf +465 -0
- data/lib/deprec/templates/apache/index.html.erb +37 -0
- data/lib/deprec/templates/apache/master.css +72 -0
- data/lib/deprec/templates/ar_sendmail/logrotate.conf.erb +9 -0
- data/lib/deprec/templates/ar_sendmail/monit.conf.erb +5 -0
- data/lib/deprec/templates/coraid/aoe-init +55 -0
- data/lib/deprec/templates/deprec/caprc.erb +14 -0
- data/lib/deprec/templates/god/god-init-script +71 -0
- data/lib/deprec/templates/god/god-notifications +0 -0
- data/lib/deprec/templates/god/god_mongrel.erb +81 -0
- data/lib/deprec/templates/god/god_mysql.erb +50 -0
- data/lib/deprec/templates/god/god_nginx.erb +61 -0
- data/lib/deprec/templates/god/god_thin.erb +80 -0
- data/lib/deprec/templates/heartbeat/authkeys.erb +2 -0
- data/lib/deprec/templates/heartbeat/ha.cf.erb +15 -0
- data/lib/deprec/templates/heartbeat/haresources.erb +1 -0
- data/lib/deprec/templates/iptables/iptables.up.erb +41 -0
- data/lib/deprec/templates/logrotate/logrotate.conf.erb +32 -0
- data/lib/deprec/templates/memcached/memcached-init-script +65 -0
- data/lib/deprec/templates/memcached/memcached.conf.erb +46 -0
- data/lib/deprec/templates/mongrel/logrotate.conf.erb +11 -0
- data/lib/deprec/templates/mongrel/mongrel_cluster-init-script +54 -0
- data/lib/deprec/templates/mongrel/mongrel_cluster.logrotate.d +14 -0
- data/lib/deprec/templates/mongrel/mongrel_cluster.yml.erb +10 -0
- data/lib/deprec/templates/mongrel/monit.conf.erb +17 -0
- data/lib/deprec/templates/monit/monit-init-script +104 -0
- data/lib/deprec/templates/monit/monitrc.erb +227 -0
- data/lib/deprec/templates/monit/nothing +0 -0
- data/lib/deprec/templates/mysql/create_databases.sql +20 -0
- data/lib/deprec/templates/mysql/database.yml.prod +6 -0
- data/lib/deprec/templates/mysql/database.yml.stage +6 -0
- data/lib/deprec/templates/mysql/my.cnf.erb +140 -0
- data/lib/deprec/templates/mysql/sphinx.conf.prod +542 -0
- data/lib/deprec/templates/mysql/sphinx.conf.stage +542 -0
- data/lib/deprec/templates/nagios/cgi.cfg.erb +321 -0
- data/lib/deprec/templates/nagios/commands.cfg.erb +240 -0
- data/lib/deprec/templates/nagios/contacts.cfg.erb +75 -0
- data/lib/deprec/templates/nagios/hosts.cfg.erb +70 -0
- data/lib/deprec/templates/nagios/htpasswd.users +1 -0
- data/lib/deprec/templates/nagios/localhost.cfg.erb +157 -0
- data/lib/deprec/templates/nagios/nagios.cfg.erb +1274 -0
- data/lib/deprec/templates/nagios/nagios_apache_vhost.conf.erb +45 -0
- data/lib/deprec/templates/nagios/nrpe.cfg.erb +208 -0
- data/lib/deprec/templates/nagios/nrpe.xinetd.erb +16 -0
- data/lib/deprec/templates/nagios/resource.cfg.erb +34 -0
- data/lib/deprec/templates/nagios/services.cfg.erb +7 -0
- data/lib/deprec/templates/nagios/templates.cfg.erb +190 -0
- data/lib/deprec/templates/nagios/timeperiods.cfg.erb +94 -0
- data/lib/deprec/templates/network/hostname.erb +1 -0
- data/lib/deprec/templates/network/hosts.erb +2 -0
- data/lib/deprec/templates/network/interfaces.erb +18 -0
- data/lib/deprec/templates/nginx/logrotate.conf.erb +13 -0
- data/lib/deprec/templates/nginx/mime.types.erb +70 -0
- data/lib/deprec/templates/nginx/nginx-init-script +62 -0
- data/lib/deprec/templates/nginx/nginx.conf.erb +53 -0
- data/lib/deprec/templates/nginx/nginx.logrotate.d +12 -0
- data/lib/deprec/templates/nginx/nothing.conf +1 -0
- data/lib/deprec/templates/nginx/rails_nginx_vhost.conf.erb +45 -0
- data/lib/deprec/templates/ntp/ntp.conf.erb +42 -0
- data/lib/deprec/templates/postfix/aliases.erb +3 -0
- data/lib/deprec/templates/postfix/dynamicmaps.cf.erb +8 -0
- data/lib/deprec/templates/postfix/main.cf.erb +41 -0
- data/lib/deprec/templates/postfix/master.cf.erb +77 -0
- data/lib/deprec/templates/rails/database.yml.erb +6 -0
- data/lib/deprec/templates/sphinx/monit.conf.erb +5 -0
- data/lib/deprec/templates/ssh/ssh_config.erb +50 -0
- data/lib/deprec/templates/ssh/sshd_config.erb +78 -0
- data/lib/deprec/templates/subversion/svn.apache.vhost.erb +43 -0
- data/lib/deprec/templates/swiftiply/swiftiply-init-script +61 -0
- data/lib/deprec/templates/swiftiply/swiftiply.yml.erb +11 -0
- data/lib/deprec/templates/thin/thin-init-script +51 -0
- data/lib/deprec/templates/thin/thin.yml.erb +11 -0
- data/lib/deprec/templates/trac/apache_vhost.conf.erb +24 -0
- data/lib/deprec/templates/trac/nginx_vhost.conf.erb +26 -0
- data/lib/deprec/templates/trac/trac.ini.erb +169 -0
- data/lib/deprec/templates/trac/trac_deprec.png +0 -0
- data/lib/deprec/templates/trac/tracd-init.erb +43 -0
- data/lib/deprec/templates/trac/users.htdigest.erb +0 -0
- data/lib/deprec/templates/xen/15-disable-hwclock +40 -0
- data/lib/deprec/templates/xen/network-bridge-wrapper +3 -0
- data/lib/deprec/templates/xen/xen-tools.conf.erb +220 -0
- data/lib/deprec/templates/xen/xend-config.sxp.erb +195 -0
- data/lib/deprec/templates/xen/xend-init.erb +69 -0
- data/lib/deprec/templates/xen/xendomains.erb +137 -0
- data/lib/deprec/templates/xen/xm.tmpl.erb +85 -0
- data/lib/vmbuilder_plugins/all.rb +20 -0
- data/lib/vmbuilder_plugins/apt.rb +93 -0
- data/lib/vmbuilder_plugins/emerge.rb +76 -0
- data/lib/vmbuilder_plugins/gem.rb +90 -0
- data/lib/vmbuilder_plugins/std.rb +203 -0
- metadata +207 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# Copyright 2006-2008 by Mike Bailey. All rights reserved.
|
|
2
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
|
3
|
+
|
|
4
|
+
# Set the value if not already set
|
|
5
|
+
# This method is accessible to all recipe files
|
|
6
|
+
def self.default(name, *args, &block)
|
|
7
|
+
unless exists?(name)
|
|
8
|
+
set(name, *args, &block)
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Deprec checks here for local versions of config templates before it's own
|
|
13
|
+
set :local_template_dir, File.join('config','templates')
|
|
14
|
+
|
|
15
|
+
# The following two Constants contain details of the configuration
|
|
16
|
+
# files used by each service. They're used when generating config
|
|
17
|
+
# files from templates and when configs files are pushed out to servers.
|
|
18
|
+
#
|
|
19
|
+
# They are populated by the recipe file for each service
|
|
20
|
+
#
|
|
21
|
+
SYSTEM_CONFIG_FILES = {} # e.g. httpd.conf
|
|
22
|
+
PROJECT_CONFIG_FILES = {} # e.g. projectname-httpd-vhost.conf
|
|
23
|
+
|
|
24
|
+
# For each service, the details of the file to download and options
|
|
25
|
+
# to configure, build and install the service
|
|
26
|
+
SRC_PACKAGES = {}
|
|
27
|
+
|
|
28
|
+
# Server options
|
|
29
|
+
CHOICES_WEBSERVER = [:nginx, :apache, :none]
|
|
30
|
+
CHOICES_APPSERVER = [:mongrel, :webrick, :none]
|
|
31
|
+
CHOICES_DATABASE = [:mysql, :postgres, :none]
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
# Server defaults
|
|
35
|
+
default :web_server_type, :apache
|
|
36
|
+
default :app_server_type, :mongrel
|
|
37
|
+
default :db_server_type, :mysql
|
|
38
|
+
|
|
39
|
+
default(:web_server_type) do
|
|
40
|
+
Capistrano::CLI.ui.choose do |menu|
|
|
41
|
+
CHOICES_WEBSERVER.each {|c| menu.choice(c)}
|
|
42
|
+
menu.header = "select webserver type"
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
default(:app_server_type) do
|
|
47
|
+
Capistrano::CLI.ui.choose do |menu|
|
|
48
|
+
CHOICES_APPSERVER.each {|c| menu.choice(c)}
|
|
49
|
+
menu.header = "select application server type"
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
default(:db_server_type) do
|
|
54
|
+
Capistrano::CLI.ui.choose do |menu|
|
|
55
|
+
CHOICES_DATABASE.each {|c| menu.choice(c)}
|
|
56
|
+
menu.header = "select database server type"
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
default(:application) do
|
|
61
|
+
Capistrano::CLI.ui.ask "enter name of project(no spaces)" do |q|
|
|
62
|
+
q.validate = /^[0-9a-z_]*$/
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
default(:domain) do
|
|
67
|
+
Capistrano::CLI.ui.ask "enter domain name for project" do |q|
|
|
68
|
+
q.validate = /^[0-9a-z_\.]*$/
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
default(:repository) do
|
|
73
|
+
Capistrano::CLI.ui.ask "enter repository URL for project" do |q|
|
|
74
|
+
# q.validate = //
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# some tasks run commands requiring special user privileges on remote servers
|
|
79
|
+
# these tasks will run the commands with:
|
|
80
|
+
# :invoke_command "command", :via => run_method
|
|
81
|
+
# override this value if sudo is not an option
|
|
82
|
+
# in that case, your use will need the correct privileges
|
|
83
|
+
default :run_method, 'sudo'
|
|
84
|
+
|
|
85
|
+
default(:backup_dir) { '/var/backups'}
|
|
86
|
+
|
|
87
|
+
# XXX rails deploy stuff
|
|
88
|
+
default(:deploy_to) { File.join( %w(/ var www apps) << application ) }
|
|
89
|
+
default(:current_path) { File.join(deploy_to, "current") }
|
|
90
|
+
default(:shared_path) { File.join(deploy_to, "shared") }
|
|
91
|
+
|
|
92
|
+
# XXX more rails deploy stuff?
|
|
93
|
+
|
|
94
|
+
default :user, ENV['USER'] # user who is deploying
|
|
95
|
+
default :group, 'deploy' # deployment group
|
|
96
|
+
default(:group_src) { group } # group ownership for src dir
|
|
97
|
+
default :src_dir, '/usr/local/src' # 3rd party src on servers lives here
|
|
98
|
+
default(:web_server_aliases) { domain.match(/^www/) ? [] : ["www.#{domain}"] }
|
|
99
|
+
|
|
100
|
+
# XXX for some reason this is causing "before deprec:rails:install" to be executed twice
|
|
101
|
+
# on :load, 'deprec:connect_canonical_tasks'
|
|
102
|
+
|
|
103
|
+
namespace :deprec do
|
|
104
|
+
|
|
105
|
+
task :connect_canonical_tasks, :hosts => 'localhost' do
|
|
106
|
+
# link application specific recipes into canonical task names
|
|
107
|
+
# e.g. deprec:web:restart => deprec:nginx:restart
|
|
108
|
+
metaclass = class << self; self; end
|
|
109
|
+
[:web, :app, :db].each do |server|
|
|
110
|
+
server_type = send("#{server}_server_type")
|
|
111
|
+
if server_type != :none
|
|
112
|
+
metaclass.send(:define_method, server) { namespaces[server] }
|
|
113
|
+
self.namespaces[server] = deprec.send(server_type)
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
task :dump do
|
|
119
|
+
require 'yaml'
|
|
120
|
+
y variables
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
task :setup_src_dir do
|
|
124
|
+
deprec2.groupadd(group_src)
|
|
125
|
+
deprec2.add_user_to_group(user, group_src)
|
|
126
|
+
deprec2.create_src_dir
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# Download all packages used by deprec to your local host.
|
|
130
|
+
# You can then push them to /usr/local/src on target hosts
|
|
131
|
+
# to save time and bandwidth rather than repeatedly downloading
|
|
132
|
+
# from the distribution sites.
|
|
133
|
+
task :update_src do
|
|
134
|
+
SRC_PACKAGES.each{|key, src_package|
|
|
135
|
+
current_dir = Dir.pwd
|
|
136
|
+
system "cd src/ && test -f #{src_package[:filename]} || wget --quiet --timestamping #{src_package[:url]}"
|
|
137
|
+
system "cd #{current_dir}"
|
|
138
|
+
}
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
# todo
|
|
142
|
+
#
|
|
143
|
+
# Copy files from src/ to /usr/local/src/ on remote hosts
|
|
144
|
+
task :push_src do
|
|
145
|
+
SRC_PACKAGES.each do |key, src_package|
|
|
146
|
+
file = File.join('src', src_package[:filename])
|
|
147
|
+
if File.exists?(file)
|
|
148
|
+
std.su_put(File.read(file), "#{src_dir}/#{src_package[:filename]}", '/tmp/')
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Copyright 2006-2008 by Mike Bailey. All rights reserved.
|
|
2
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
|
3
|
+
|
|
4
|
+
# deprecated tasks from deprec1
|
|
5
|
+
# we're now using namespaces and some different naming conventions
|
|
6
|
+
|
|
7
|
+
# XXX use deprecated function to generate these dynamically
|
|
8
|
+
|
|
9
|
+
deprec2_isnt_backwards_compatible = <<-EOF
|
|
10
|
+
|
|
11
|
+
You've installed deprec2 but seem to be using a deprec1 command.
|
|
12
|
+
|
|
13
|
+
You have two options:
|
|
14
|
+
|
|
15
|
+
- install deprec-1.9.x and continue using deprec1
|
|
16
|
+
|
|
17
|
+
Instructions are available at http://www.deprec.org/
|
|
18
|
+
|
|
19
|
+
- use deprec2
|
|
20
|
+
|
|
21
|
+
EOF
|
|
22
|
+
|
|
23
|
+
cap2_warning = <<-EOF
|
|
24
|
+
|
|
25
|
+
You're using Capistrano 2 but using a deprecated cap1 command.
|
|
26
|
+
|
|
27
|
+
EOF
|
|
28
|
+
|
|
29
|
+
task :setup_admin_account do
|
|
30
|
+
puts deprec2_isnt_backwards_compatible
|
|
31
|
+
puts " Replace 'cap setup_admin_account' with 'cap deprec:users:add'"
|
|
32
|
+
puts
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
task :change_root_password do
|
|
36
|
+
puts deprec2_isnt_backwards_compatible
|
|
37
|
+
puts " Replace 'cap change_root_password' with 'cap deprec:users:passwd'"
|
|
38
|
+
puts
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
task :setup_ssh_keys do
|
|
42
|
+
puts deprec2_isnt_backwards_compatible
|
|
43
|
+
puts " Replace 'cap setup_ssh_keys' with 'cap deprec:ssh:setup_keys'"
|
|
44
|
+
puts
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
task :install_rails_stack do
|
|
48
|
+
puts deprec2_isnt_backwards_compatible
|
|
49
|
+
puts " Replace 'cap install_rails_stack' with 'cap deprec:rails:install_rails_stack'"
|
|
50
|
+
puts
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
task :setup do
|
|
54
|
+
puts deprec2_isnt_backwards_compatible
|
|
55
|
+
puts " Replace 'cap setup' with 'cap deploy:setup'"
|
|
56
|
+
puts
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
task :restart_apache do
|
|
60
|
+
puts deprec2_isnt_backwards_compatible
|
|
61
|
+
puts " Replace 'cap restart_apache' with 'cap deprec:apache:restart'"
|
|
62
|
+
puts
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
task :show_tasks do
|
|
66
|
+
puts deprec2_isnt_backwards_compatible
|
|
67
|
+
puts " Replace 'cap show-tasks' with 'cap -T'"
|
|
68
|
+
puts
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
end
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# Copyright 2006-2008 by Mike Bailey. All rights reserved.
|
|
2
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
|
3
|
+
namespace :deprec do
|
|
4
|
+
namespace :example do
|
|
5
|
+
|
|
6
|
+
SRC_PACKAGES[:example] = {
|
|
7
|
+
:filename => 'example-1.2.3.tar.gz',
|
|
8
|
+
:md5sum => "d050a49bd72222ec21c6bb593b3473a5d example-1.2.3.tar.gz",
|
|
9
|
+
:dir => 'example-1.2.3',
|
|
10
|
+
:url => "http://www.example.org/dist/example/example-1.2.3.tar.gz",
|
|
11
|
+
:unpack => "tar zxf example-1.2.3.tar.gz;",
|
|
12
|
+
:configure => %w(
|
|
13
|
+
./configure
|
|
14
|
+
--enable-mods-shared=all
|
|
15
|
+
--enable-proxy
|
|
16
|
+
;
|
|
17
|
+
).reject{|arg| arg.match '#'}.join(' '),
|
|
18
|
+
:make => 'make;',
|
|
19
|
+
:install => 'make install;',
|
|
20
|
+
:post_install => 'install -b support/apachectl /etc/init.d/httpd;'
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
desc "Install example"
|
|
24
|
+
task :install, :roles => :web do
|
|
25
|
+
install_deps
|
|
26
|
+
deprec2.download_src(SRC_PACKAGES[:example], src_dir)
|
|
27
|
+
deprec2.install_from_src(SRC_PACKAGES[:example], src_dir)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
task :install_deps do
|
|
31
|
+
apt.install( {:base => %w(build-essential zlib1g-dev)}, :stable )
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
SYSTEM_CONFIG_FILES[:example] = [
|
|
35
|
+
|
|
36
|
+
{:template => "example.conf.erb",
|
|
37
|
+
:path => '/etc/example/example.conf',
|
|
38
|
+
:mode => 0755,
|
|
39
|
+
:owner => 'root:root'}
|
|
40
|
+
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
PROJECT_CONFIG_FILES[:example] = [
|
|
44
|
+
|
|
45
|
+
{:template => "example.conf.erb",
|
|
46
|
+
:path => 'conf/example.conf',
|
|
47
|
+
:mode => 0755,
|
|
48
|
+
:owner => 'root:root'}
|
|
49
|
+
]
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
desc "Generate configuration file(s) for XXX from template(s)"
|
|
53
|
+
task :config_gen do
|
|
54
|
+
config_gen_system
|
|
55
|
+
config_gen_project
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
task :config_gen_system do
|
|
59
|
+
SYSTEM_CONFIG_FILES[:example].each do |file|
|
|
60
|
+
deprec2.render_template(:example, file)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
task :config_gen_project do
|
|
65
|
+
PROJECT_CONFIG_FILES[:example].each do |file|
|
|
66
|
+
deprec2.render_template(:example, file)
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
desc 'Deploy configuration files(s) for XXX'
|
|
71
|
+
task :config, :roles => :web do
|
|
72
|
+
config_system
|
|
73
|
+
config_project
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
task :config_system, :roles => :web do
|
|
77
|
+
deprec2.push_configs(:example, SYSTEM_CONFIG_FILES[:example])
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
task :config_project, :roles => :web do
|
|
81
|
+
deprec2.push_configs(:example, PROJECT_CONFIG_FILES[:example])
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
task :start, :roles => :web do
|
|
86
|
+
send(run_method, "/etc/init.d/example reload")
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
task :stop, :roles => :web do
|
|
90
|
+
send(run_method, "/etc/init.d/example reload")
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
task :restart, :roles => :web do
|
|
94
|
+
send(run_method, "/etc/init.d/example restart")
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
task :reload, :roles => :web do
|
|
98
|
+
send(run_method, "/etc/init.d/example reload")
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
task :activate, :roles => :web do
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
task :deactivate, :roles => :web do
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
task :backup, :roles => :web do
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
task :restore, :roles => :web do
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# Copyright 2006-2008 by Mike Bailey. All rights reserved.
|
|
2
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
|
3
|
+
namespace :deprec do
|
|
4
|
+
namespace :git do
|
|
5
|
+
|
|
6
|
+
set :git_user, 'git'
|
|
7
|
+
set :git_group, 'git'
|
|
8
|
+
set :git_keys_file, '/home/git/.ssh/authorized_keys'
|
|
9
|
+
set :git_root, '/var/git'
|
|
10
|
+
|
|
11
|
+
SRC_PACKAGES[:git] = {
|
|
12
|
+
:filename => 'git-1.5.5.4.tar.gz',
|
|
13
|
+
:md5sum => "8255894042c8a6db07227475b8b4622f git-1.5.5.4.tar.gz",
|
|
14
|
+
:dir => 'git-1.5.5.4',
|
|
15
|
+
:url => "http://kernel.org/pub/software/scm/git/git-1.5.5.4.tar.gz",
|
|
16
|
+
:unpack => "tar zxf git-1.5.5.4.tar.gz;",
|
|
17
|
+
:configure => %w(
|
|
18
|
+
./configure
|
|
19
|
+
;
|
|
20
|
+
).reject{|arg| arg.match '#'}.join(' '),
|
|
21
|
+
:make => 'make;',
|
|
22
|
+
:install => 'make install;'
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
desc "Install git"
|
|
26
|
+
task :install do
|
|
27
|
+
install_deps
|
|
28
|
+
deprec2.download_src(SRC_PACKAGES[:git], src_dir)
|
|
29
|
+
deprec2.install_from_src(SRC_PACKAGES[:git], src_dir)
|
|
30
|
+
# create_git_root
|
|
31
|
+
# create_git_user
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# install dependencies for nginx
|
|
35
|
+
task :install_deps do
|
|
36
|
+
apt.install( {:base => %w(zlib1g-dev gettext)}, :stable )
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
desc "Grant user ssh access to git"
|
|
40
|
+
task :add_user do
|
|
41
|
+
default(:target_user) {
|
|
42
|
+
Capistrano::CLI.ui.ask "Add git keys for which user?" do |q|
|
|
43
|
+
q.default = user
|
|
44
|
+
end
|
|
45
|
+
}
|
|
46
|
+
if target_user == user
|
|
47
|
+
unless ssh_options[:keys]
|
|
48
|
+
puts <<-ERROR
|
|
49
|
+
|
|
50
|
+
Error!
|
|
51
|
+
|
|
52
|
+
You need to define the name of your SSH key(s)
|
|
53
|
+
e.g. ssh_options[:keys] = %w(/Users/your_username/.ssh/id_rsa)
|
|
54
|
+
|
|
55
|
+
You can put this in your .caprc file in your home directory.
|
|
56
|
+
|
|
57
|
+
ERROR
|
|
58
|
+
exit
|
|
59
|
+
end
|
|
60
|
+
keys = ssh_options[:keys].collect{|key| File.read(key+'.pub')}.join("\n")
|
|
61
|
+
else
|
|
62
|
+
key_file = "config/ssh/authorized_keys/#{target_user}"
|
|
63
|
+
if File.readable?(key_file)
|
|
64
|
+
keys = File.read(key_file)
|
|
65
|
+
else
|
|
66
|
+
puts "Error! Could not find file '#{key_file}'"
|
|
67
|
+
exit
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
deprec2.mkdir(File.dirname(git_keys_file), :mode => 0700, :owner => git_user, :group => git_group, :via => :sudo)
|
|
72
|
+
std.su_put(keys, "#{git_keys_file}-#{target_user}", '/tmp', :mode => 0600 )
|
|
73
|
+
regenerate_authorized_keys
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
task :del_user do
|
|
77
|
+
users = user_list
|
|
78
|
+
default(:target_user) {
|
|
79
|
+
Capistrano::CLI.ui.choose do |q|
|
|
80
|
+
users.each {|user| q.choice user}
|
|
81
|
+
end
|
|
82
|
+
}
|
|
83
|
+
puts "Select a user to remove git access from."
|
|
84
|
+
sudo "rm #{git_keys_file}-#{target_user}"
|
|
85
|
+
regenerate_authorized_keys
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
task :list_users do
|
|
89
|
+
users = user_list
|
|
90
|
+
puts "Git users:"
|
|
91
|
+
puts users.join("\n")
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
task :create_remote do
|
|
95
|
+
|
|
96
|
+
# Create local git repo if missing
|
|
97
|
+
if ! File.directory?('.git')
|
|
98
|
+
system('git init')
|
|
99
|
+
create_gitignore
|
|
100
|
+
create_files_in_empty_dirs
|
|
101
|
+
system("git add . && git commit -m 'initial import'")
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# Push to remote git repo
|
|
105
|
+
hostname = capture "echo $CAPISTRANO:HOST$"
|
|
106
|
+
system "git remote add origin git@#{hostname.chomp}:#{application}"
|
|
107
|
+
system "git push origin master:refs/heads/master"
|
|
108
|
+
|
|
109
|
+
puts
|
|
110
|
+
puts "New remote Git repo: #{git_user}@#{hostname.chomp}:#{application}"
|
|
111
|
+
puts
|
|
112
|
+
|
|
113
|
+
# Probably want to add this to .git/config
|
|
114
|
+
#
|
|
115
|
+
puts 'Add the following to .git/config'
|
|
116
|
+
puts '[branch "master"]'
|
|
117
|
+
puts ' remote = origin'
|
|
118
|
+
puts ' merge = refs/heads/master'
|
|
119
|
+
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
task :create_gitignore do
|
|
123
|
+
system("echo '.DS_Store' >> .gitignore") # files sometimes created by OSX
|
|
124
|
+
system("echo 'log/*' >> .gitignore") if File.directory?('log')
|
|
125
|
+
system("echo 'tmp/**/*' >> .gitignore") if File.directory?('tmp')
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
task :create_files_in_empty_dirs do
|
|
129
|
+
%w(log tmp).each { |dir|
|
|
130
|
+
system("touch #{dir}/.gitignore") if File.directory?(dir)
|
|
131
|
+
}
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# Returns an array of users who have ssh access to git account
|
|
135
|
+
# Warning: Capistrano's capture only checks first server in list
|
|
136
|
+
# so keep them all in sync or act on one git repo only
|
|
137
|
+
task :user_list do
|
|
138
|
+
result = capture "ls #{git_keys_file}-* | perl -pi -e 's/.*#{File.basename(git_keys_file)}-//'", :via => :sudo
|
|
139
|
+
result.split("\n")
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
# Create root dir for git repositories
|
|
143
|
+
task :create_git_root do
|
|
144
|
+
deprec2.mkdir(git_root, :mode => 02775, :owner => git_user, :group => git_group, :via => :sudo)
|
|
145
|
+
sudo "chmod -R g+w #{git_root}"
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
# task :create_git_user do
|
|
149
|
+
# deprec2.groupadd(git_group)
|
|
150
|
+
# deprec2.useradd(git_user, :group => git_group, :shell => '/usr/local/bin/git-shell')
|
|
151
|
+
# # Set the primary group for the git user (in case user already existed
|
|
152
|
+
# # when previous command was run)
|
|
153
|
+
# sudo "usermod --gid #{git_group} #{git_user}"
|
|
154
|
+
# sudo "passwd --unlock #{git_user}"
|
|
155
|
+
# end
|
|
156
|
+
|
|
157
|
+
# regenerate git authorized keys file from users file in same dir
|
|
158
|
+
task :regenerate_authorized_keys do
|
|
159
|
+
sudo "echo '' > #{git_keys_file}"
|
|
160
|
+
sudo "for file in `ls #{git_keys_file}-*`; do cat $file >> #{git_keys_file}; echo \"\n\" >> #{git_keys_file} ; done"
|
|
161
|
+
sudo "chown #{git_user}.#{git_group} #{git_keys_file}"
|
|
162
|
+
sudo "chmod 0600 #{git_keys_file}"
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
end
|