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.
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