Empact-deprec 1.99.21

Sign up to get free protection for your applications and to get access to all the features.
Files changed (148) hide show
  1. data/CHANGELOG +170 -0
  2. data/COPYING +19 -0
  3. data/LICENSE +339 -0
  4. data/README +136 -0
  5. data/THANKS +5 -0
  6. data/bin/depify +133 -0
  7. data/docs/ANNOUNCE.deprec2 +47 -0
  8. data/docs/README.install +88 -0
  9. data/docs/README.nagios +28 -0
  10. data/docs/README.rails +20 -0
  11. data/docs/README.svn +31 -0
  12. data/docs/ROADMAP.txt +74 -0
  13. data/docs/deprec-1.x/deprec-1.x.quickstart +50 -0
  14. data/docs/deprec-1.x/notes.txt +12 -0
  15. data/docs/deprec_banner.gif +0 -0
  16. data/lib/deprec.rb +8 -0
  17. data/lib/deprec/capistrano_extensions.rb +378 -0
  18. data/lib/deprec/recipes.rb +40 -0
  19. data/lib/deprec/recipes/aoe.rb +117 -0
  20. data/lib/deprec/recipes/apache.rb +179 -0
  21. data/lib/deprec/recipes/ar_sendmail.rb +65 -0
  22. data/lib/deprec/recipes/canonical.rb +57 -0
  23. data/lib/deprec/recipes/deprec.rb +155 -0
  24. data/lib/deprec/recipes/deprecated.rb +71 -0
  25. data/lib/deprec/recipes/example.rb +115 -0
  26. data/lib/deprec/recipes/git.rb +168 -0
  27. data/lib/deprec/recipes/gitosis.rb +47 -0
  28. data/lib/deprec/recipes/god.rb +107 -0
  29. data/lib/deprec/recipes/heartbeat.rb +138 -0
  30. data/lib/deprec/recipes/iptables.rb +53 -0
  31. data/lib/deprec/recipes/logrotate.rb +51 -0
  32. data/lib/deprec/recipes/lvm.rb +20 -0
  33. data/lib/deprec/recipes/memcached.rb +102 -0
  34. data/lib/deprec/recipes/mongrel.rb +209 -0
  35. data/lib/deprec/recipes/monit.rb +130 -0
  36. data/lib/deprec/recipes/mysql.rb +115 -0
  37. data/lib/deprec/recipes/nagios.rb +302 -0
  38. data/lib/deprec/recipes/network.rb +84 -0
  39. data/lib/deprec/recipes/nginx.rb +154 -0
  40. data/lib/deprec/recipes/ntp.rb +96 -0
  41. data/lib/deprec/recipes/php.rb +99 -0
  42. data/lib/deprec/recipes/postfix.rb +105 -0
  43. data/lib/deprec/recipes/rails.rb +302 -0
  44. data/lib/deprec/recipes/ruby.rb +66 -0
  45. data/lib/deprec/recipes/sphinx.rb +83 -0
  46. data/lib/deprec/recipes/ssh.rb +93 -0
  47. data/lib/deprec/recipes/svn.rb +169 -0
  48. data/lib/deprec/recipes/swiftiply.rb +108 -0
  49. data/lib/deprec/recipes/thin.rb +201 -0
  50. data/lib/deprec/recipes/trac.rb +277 -0
  51. data/lib/deprec/recipes/ubuntu.rb +20 -0
  52. data/lib/deprec/recipes/users.rb +90 -0
  53. data/lib/deprec/recipes/utils.rb +39 -0
  54. data/lib/deprec/recipes/xen.rb +259 -0
  55. data/lib/deprec/templates/aoe/aoe-init +55 -0
  56. data/lib/deprec/templates/aoe/fence_aoemask +351 -0
  57. data/lib/deprec/templates/apache/httpd-vhost-app.conf.erb +144 -0
  58. data/lib/deprec/templates/apache/httpd.conf +465 -0
  59. data/lib/deprec/templates/apache/index.html.erb +37 -0
  60. data/lib/deprec/templates/apache/master.css +72 -0
  61. data/lib/deprec/templates/ar_sendmail/logrotate.conf.erb +9 -0
  62. data/lib/deprec/templates/ar_sendmail/monit.conf.erb +5 -0
  63. data/lib/deprec/templates/coraid/aoe-init +55 -0
  64. data/lib/deprec/templates/deprec/caprc.erb +14 -0
  65. data/lib/deprec/templates/god/god-init-script +71 -0
  66. data/lib/deprec/templates/god/god-notifications +0 -0
  67. data/lib/deprec/templates/god/god_mongrel.erb +81 -0
  68. data/lib/deprec/templates/god/god_mysql.erb +50 -0
  69. data/lib/deprec/templates/god/god_nginx.erb +61 -0
  70. data/lib/deprec/templates/god/god_thin.erb +80 -0
  71. data/lib/deprec/templates/heartbeat/authkeys.erb +2 -0
  72. data/lib/deprec/templates/heartbeat/ha.cf.erb +15 -0
  73. data/lib/deprec/templates/heartbeat/haresources.erb +1 -0
  74. data/lib/deprec/templates/iptables/iptables.up.erb +41 -0
  75. data/lib/deprec/templates/logrotate/logrotate.conf.erb +32 -0
  76. data/lib/deprec/templates/memcached/memcached-init-script +65 -0
  77. data/lib/deprec/templates/memcached/memcached.conf.erb +46 -0
  78. data/lib/deprec/templates/mongrel/logrotate.conf.erb +11 -0
  79. data/lib/deprec/templates/mongrel/mongrel_cluster-init-script +54 -0
  80. data/lib/deprec/templates/mongrel/mongrel_cluster.logrotate.d +14 -0
  81. data/lib/deprec/templates/mongrel/mongrel_cluster.yml.erb +10 -0
  82. data/lib/deprec/templates/mongrel/monit.conf.erb +17 -0
  83. data/lib/deprec/templates/monit/monit-init-script +104 -0
  84. data/lib/deprec/templates/monit/monitrc.erb +227 -0
  85. data/lib/deprec/templates/monit/nothing +0 -0
  86. data/lib/deprec/templates/mysql/create_databases.sql +20 -0
  87. data/lib/deprec/templates/mysql/database.yml.prod +6 -0
  88. data/lib/deprec/templates/mysql/database.yml.stage +6 -0
  89. data/lib/deprec/templates/mysql/my.cnf.erb +140 -0
  90. data/lib/deprec/templates/mysql/sphinx.conf.prod +542 -0
  91. data/lib/deprec/templates/mysql/sphinx.conf.stage +542 -0
  92. data/lib/deprec/templates/nagios/cgi.cfg.erb +321 -0
  93. data/lib/deprec/templates/nagios/commands.cfg.erb +240 -0
  94. data/lib/deprec/templates/nagios/contacts.cfg.erb +75 -0
  95. data/lib/deprec/templates/nagios/hosts.cfg.erb +70 -0
  96. data/lib/deprec/templates/nagios/htpasswd.users +1 -0
  97. data/lib/deprec/templates/nagios/localhost.cfg.erb +157 -0
  98. data/lib/deprec/templates/nagios/nagios.cfg.erb +1274 -0
  99. data/lib/deprec/templates/nagios/nagios_apache_vhost.conf.erb +45 -0
  100. data/lib/deprec/templates/nagios/nrpe.cfg.erb +208 -0
  101. data/lib/deprec/templates/nagios/nrpe.xinetd.erb +16 -0
  102. data/lib/deprec/templates/nagios/resource.cfg.erb +34 -0
  103. data/lib/deprec/templates/nagios/services.cfg.erb +7 -0
  104. data/lib/deprec/templates/nagios/templates.cfg.erb +190 -0
  105. data/lib/deprec/templates/nagios/timeperiods.cfg.erb +94 -0
  106. data/lib/deprec/templates/network/hostname.erb +1 -0
  107. data/lib/deprec/templates/network/hosts.erb +2 -0
  108. data/lib/deprec/templates/network/interfaces.erb +18 -0
  109. data/lib/deprec/templates/nginx/logrotate.conf.erb +13 -0
  110. data/lib/deprec/templates/nginx/mime.types.erb +70 -0
  111. data/lib/deprec/templates/nginx/nginx-init-script +62 -0
  112. data/lib/deprec/templates/nginx/nginx.conf.erb +53 -0
  113. data/lib/deprec/templates/nginx/nginx.logrotate.d +12 -0
  114. data/lib/deprec/templates/nginx/nothing.conf +1 -0
  115. data/lib/deprec/templates/nginx/rails_nginx_vhost.conf.erb +45 -0
  116. data/lib/deprec/templates/ntp/ntp.conf.erb +42 -0
  117. data/lib/deprec/templates/postfix/aliases.erb +3 -0
  118. data/lib/deprec/templates/postfix/dynamicmaps.cf.erb +8 -0
  119. data/lib/deprec/templates/postfix/main.cf.erb +41 -0
  120. data/lib/deprec/templates/postfix/master.cf.erb +77 -0
  121. data/lib/deprec/templates/rails/database.yml.erb +6 -0
  122. data/lib/deprec/templates/sphinx/monit.conf.erb +5 -0
  123. data/lib/deprec/templates/ssh/ssh_config.erb +50 -0
  124. data/lib/deprec/templates/ssh/sshd_config.erb +78 -0
  125. data/lib/deprec/templates/subversion/svn.apache.vhost.erb +43 -0
  126. data/lib/deprec/templates/swiftiply/swiftiply-init-script +61 -0
  127. data/lib/deprec/templates/swiftiply/swiftiply.yml.erb +11 -0
  128. data/lib/deprec/templates/thin/thin-init-script +51 -0
  129. data/lib/deprec/templates/thin/thin.yml.erb +11 -0
  130. data/lib/deprec/templates/trac/apache_vhost.conf.erb +24 -0
  131. data/lib/deprec/templates/trac/nginx_vhost.conf.erb +26 -0
  132. data/lib/deprec/templates/trac/trac.ini.erb +169 -0
  133. data/lib/deprec/templates/trac/trac_deprec.png +0 -0
  134. data/lib/deprec/templates/trac/tracd-init.erb +43 -0
  135. data/lib/deprec/templates/trac/users.htdigest.erb +0 -0
  136. data/lib/deprec/templates/xen/15-disable-hwclock +40 -0
  137. data/lib/deprec/templates/xen/network-bridge-wrapper +3 -0
  138. data/lib/deprec/templates/xen/xen-tools.conf.erb +220 -0
  139. data/lib/deprec/templates/xen/xend-config.sxp.erb +195 -0
  140. data/lib/deprec/templates/xen/xend-init.erb +69 -0
  141. data/lib/deprec/templates/xen/xendomains.erb +137 -0
  142. data/lib/deprec/templates/xen/xm.tmpl.erb +85 -0
  143. data/lib/vmbuilder_plugins/all.rb +20 -0
  144. data/lib/vmbuilder_plugins/apt.rb +93 -0
  145. data/lib/vmbuilder_plugins/emerge.rb +76 -0
  146. data/lib/vmbuilder_plugins/gem.rb +90 -0
  147. data/lib/vmbuilder_plugins/std.rb +203 -0
  148. 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