hennk-hennk-ec2onrails 0.9.9.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (150) hide show
  1. data/CHANGELOG +0 -0
  2. data/COPYING +339 -0
  3. data/Manifest +148 -0
  4. data/README.textile +214 -0
  5. data/Rakefile +36 -0
  6. data/TODO +5 -0
  7. data/ec2onrails.gemspec +44 -0
  8. data/lib/ec2onrails/capistrano_utils.rb +33 -0
  9. data/lib/ec2onrails/recipes.rb +460 -0
  10. data/lib/ec2onrails/version.rb +32 -0
  11. data/lib/ec2onrails.rb +20 -0
  12. data/server/build-ec2onrails.sh +44 -0
  13. data/server/files/etc/aliases +6 -0
  14. data/server/files/etc/aliases.db +0 -0
  15. data/server/files/etc/apache2/apache2.conf +295 -0
  16. data/server/files/etc/apache2/conf.d/app.proxy_cluster.conf +7 -0
  17. data/server/files/etc/apache2/conf.d/app.proxy_frontend.conf +10 -0
  18. data/server/files/etc/apache2/mods-available/proxy.conf +18 -0
  19. data/server/files/etc/apache2/sites-available/app.common +58 -0
  20. data/server/files/etc/apache2/sites-available/app.custom +0 -0
  21. data/server/files/etc/apache2/sites-available/default +17 -0
  22. data/server/files/etc/apache2/sites-available/default-ssl +18 -0
  23. data/server/files/etc/cron.d/backup_app_db_to_s3 +6 -0
  24. data/server/files/etc/cron.daily/app +5 -0
  25. data/server/files/etc/cron.daily/logrotate_post +27 -0
  26. data/server/files/etc/cron.hourly/app +5 -0
  27. data/server/files/etc/cron.monthly/app +5 -0
  28. data/server/files/etc/cron.weekly/app +5 -0
  29. data/server/files/etc/denyhosts.conf +628 -0
  30. data/server/files/etc/dpkg/dpkg.cfg +13 -0
  31. data/server/files/etc/ec2onrails/balancer_members +6 -0
  32. data/server/files/etc/ec2onrails/roles.yml +5 -0
  33. data/server/files/etc/environment +2 -0
  34. data/server/files/etc/event.d/monit +13 -0
  35. data/server/files/etc/init.d/ec2-every-startup +29 -0
  36. data/server/files/etc/init.d/ec2-first-startup +36 -0
  37. data/server/files/etc/init.d/mongrel +91 -0
  38. data/server/files/etc/init.d/set_roles +3 -0
  39. data/server/files/etc/logrotate.d/apache2 +13 -0
  40. data/server/files/etc/logrotate.d/mysql-server +23 -0
  41. data/server/files/etc/logrotate.d/rails +7 -0
  42. data/server/files/etc/memcached.conf +47 -0
  43. data/server/files/etc/mongrel_cluster/app.yml +9 -0
  44. data/server/files/etc/monit/app.monitrc +71 -0
  45. data/server/files/etc/monit/db_primary.monitrc +10 -0
  46. data/server/files/etc/monit/memcache.monitrc +8 -0
  47. data/server/files/etc/monit/monitrc +13 -0
  48. data/server/files/etc/monit/system.monitrc +15 -0
  49. data/server/files/etc/monit/web.monitrc +10 -0
  50. data/server/files/etc/motd.tail +13 -0
  51. data/server/files/etc/mysql/my.cnf +149 -0
  52. data/server/files/etc/postfix/main.cf +4 -0
  53. data/server/files/etc/rc0.d/K10mongrel +91 -0
  54. data/server/files/etc/rc1.d/K10mongrel +91 -0
  55. data/server/files/etc/rc2.d/S90mongrel +91 -0
  56. data/server/files/etc/rc3.d/S90mongrel +91 -0
  57. data/server/files/etc/rc4.d/S90mongrel +91 -0
  58. data/server/files/etc/rc5.d/S90mongrel +91 -0
  59. data/server/files/etc/rc6.d/K10mongrel +91 -0
  60. data/server/files/etc/rcS.d/S91ec2-first-startup +36 -0
  61. data/server/files/etc/rcS.d/S92ec2-every-startup +29 -0
  62. data/server/files/etc/rcS.d/S99set_roles +3 -0
  63. data/server/files/etc/ssh/sshd_config +94 -0
  64. data/server/files/etc/sudoers +24 -0
  65. data/server/files/etc/syslog.conf +69 -0
  66. data/server/files/usr/local/ec2onrails/COPYING +339 -0
  67. data/server/files/usr/local/ec2onrails/bin/archive_file.rb +44 -0
  68. data/server/files/usr/local/ec2onrails/bin/backup_app_db.rb +83 -0
  69. data/server/files/usr/local/ec2onrails/bin/backup_files.rb +51 -0
  70. data/server/files/usr/local/ec2onrails/bin/mongrel_start +8 -0
  71. data/server/files/usr/local/ec2onrails/bin/mongrel_stop +8 -0
  72. data/server/files/usr/local/ec2onrails/bin/rails_env +35 -0
  73. data/server/files/usr/local/ec2onrails/bin/rebundle.sh +70 -0
  74. data/server/files/usr/local/ec2onrails/bin/restore_app_db.rb +58 -0
  75. data/server/files/usr/local/ec2onrails/bin/restore_files.rb +59 -0
  76. data/server/files/usr/local/ec2onrails/bin/set_rails_env +40 -0
  77. data/server/files/usr/local/ec2onrails/bin/set_roles.rb +156 -0
  78. data/server/files/usr/local/ec2onrails/config +30 -0
  79. data/server/files/usr/local/ec2onrails/lib/mysql_helper.rb +101 -0
  80. data/server/files/usr/local/ec2onrails/lib/s3_helper.rb +126 -0
  81. data/server/files/usr/local/ec2onrails/lib/utils.rb +16 -0
  82. data/server/files/usr/local/ec2onrails/startup-scripts/every-startup/get-hostname.sh +25 -0
  83. data/server/files/usr/local/ec2onrails/startup-scripts/first-startup/create-dirs.sh +39 -0
  84. data/server/files/usr/local/ec2onrails/startup-scripts/first-startup/generate-default-web-cert-and-key.sh +49 -0
  85. data/server/files/usr/local/ec2onrails/startup-scripts/first-startup/misc.sh +30 -0
  86. data/server/files/usr/local/ec2onrails/startup-scripts/first-startup/prepare-mysql-data-dir.sh +24 -0
  87. data/server/files/usr/local/ec2onrails/startup-scripts/first-startup/setup_credentials.sh +33 -0
  88. data/server/rakefile.rb +245 -0
  89. data/setup.rb +1585 -0
  90. data/test/autobench.conf +60 -0
  91. data/test/spec/lib/s3_helper_spec.rb +134 -0
  92. data/test/spec/lib/s3_old.yml +3 -0
  93. data/test/spec/test_files/test1 +0 -0
  94. data/test/spec/test_files/test2 +0 -0
  95. data/test/test_app/Capfile +3 -0
  96. data/test/test_app/README +182 -0
  97. data/test/test_app/Rakefile +10 -0
  98. data/test/test_app/app/controllers/application.rb +7 -0
  99. data/test/test_app/app/controllers/db_fast_controller.rb +6 -0
  100. data/test/test_app/app/controllers/fast_controller.rb +5 -0
  101. data/test/test_app/app/controllers/slow_controller.rb +6 -0
  102. data/test/test_app/app/controllers/very_slow_controller.rb +6 -0
  103. data/test/test_app/app/helpers/application_helper.rb +3 -0
  104. data/test/test_app/app/helpers/db_fast_helper.rb +2 -0
  105. data/test/test_app/app/helpers/fast_helper.rb +2 -0
  106. data/test/test_app/app/helpers/slow_helper.rb +2 -0
  107. data/test/test_app/app/helpers/very_slow_helper.rb +2 -0
  108. data/test/test_app/config/boot.rb +109 -0
  109. data/test/test_app/config/database.yml +36 -0
  110. data/test/test_app/config/deploy.rb +21 -0
  111. data/test/test_app/config/environment.rb +60 -0
  112. data/test/test_app/config/environments/development.rb +21 -0
  113. data/test/test_app/config/environments/production.rb +18 -0
  114. data/test/test_app/config/environments/test.rb +19 -0
  115. data/test/test_app/config/routes.rb +27 -0
  116. data/test/test_app/db/schema.rb +7 -0
  117. data/test/test_app/doc/README_FOR_APP +2 -0
  118. data/test/test_app/public/404.html +30 -0
  119. data/test/test_app/public/500.html +30 -0
  120. data/test/test_app/public/dispatch.cgi +10 -0
  121. data/test/test_app/public/dispatch.fcgi +24 -0
  122. data/test/test_app/public/dispatch.rb +10 -0
  123. data/test/test_app/public/favicon.ico +0 -0
  124. data/test/test_app/public/images/rails.png +0 -0
  125. data/test/test_app/public/javascripts/application.js +2 -0
  126. data/test/test_app/public/javascripts/controls.js +963 -0
  127. data/test/test_app/public/javascripts/dragdrop.js +972 -0
  128. data/test/test_app/public/javascripts/effects.js +1120 -0
  129. data/test/test_app/public/javascripts/prototype.js +4225 -0
  130. data/test/test_app/public/robots.txt +1 -0
  131. data/test/test_app/script/about +3 -0
  132. data/test/test_app/script/breakpointer +3 -0
  133. data/test/test_app/script/console +3 -0
  134. data/test/test_app/script/destroy +3 -0
  135. data/test/test_app/script/generate +3 -0
  136. data/test/test_app/script/performance/benchmarker +3 -0
  137. data/test/test_app/script/performance/profiler +3 -0
  138. data/test/test_app/script/performance/request +3 -0
  139. data/test/test_app/script/plugin +3 -0
  140. data/test/test_app/script/process/inspector +3 -0
  141. data/test/test_app/script/process/reaper +3 -0
  142. data/test/test_app/script/process/spawner +3 -0
  143. data/test/test_app/script/runner +3 -0
  144. data/test/test_app/script/server +3 -0
  145. data/test/test_app/test/functional/db_fast_controller_test.rb +18 -0
  146. data/test/test_app/test/functional/fast_controller_test.rb +18 -0
  147. data/test/test_app/test/functional/slow_controller_test.rb +18 -0
  148. data/test/test_app/test/functional/very_slow_controller_test.rb +18 -0
  149. data/test/test_app/test/test_helper.rb +28 -0
  150. metadata +263 -0
@@ -0,0 +1,460 @@
1
+ # This file is part of EC2 on Rails.
2
+ # http://rubyforge.org/projects/ec2onrails/
3
+ #
4
+ # Copyright 2007 Paul Dowman, http://pauldowman.com/
5
+ #
6
+ # EC2 on Rails is free software; you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation; either version 2 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # EC2 on Rails is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
18
+
19
+ require 'fileutils'
20
+ include FileUtils
21
+ require 'tmpdir'
22
+ require 'pp'
23
+ require 'zlib'
24
+ require 'archive/tar/minitar'
25
+ include Archive::Tar
26
+
27
+ require 'ec2onrails/version'
28
+ require 'ec2onrails/capistrano_utils'
29
+ include Ec2onrails::CapistranoUtils
30
+
31
+ Capistrano::Configuration.instance.load do
32
+
33
+ unless ec2onrails_config
34
+ raise "ec2onrails_config variable not set. (It should be a hash.)"
35
+ end
36
+
37
+ cfg = ec2onrails_config
38
+
39
+ set :ec2onrails_version, Ec2onrails::VERSION::STRING
40
+ set :image_id_32_bit, Ec2onrails::VERSION::AMI_ID_32_BIT
41
+ set :image_id_64_bit, Ec2onrails::VERSION::AMI_ID_64_BIT
42
+ set :deploy_to, "/mnt/app"
43
+ set :use_sudo, false
44
+ set :user, "app"
45
+
46
+ # make an "admin" role for each role, and create arrays containing
47
+ # the names of admin roles and non-admin roles for convenience
48
+ set :all_admin_role_names, []
49
+ set :all_non_admin_role_names, []
50
+ roles.keys.clone.each do |name|
51
+ make_admin_role_for(name)
52
+ all_non_admin_role_names << name
53
+ all_admin_role_names << "#{name.to_s}_admin".to_sym
54
+ end
55
+
56
+ after "deploy:symlink", "ec2onrails:server:set_roles"
57
+ after "deploy:cold", "ec2onrails:db:init_backup"
58
+
59
+ # override default start/stop/restart tasks
60
+ namespace :deploy do
61
+ desc <<-DESC
62
+ Overrides the default Capistrano deploy:restart, uses \
63
+ /etc/init.d/mongrel
64
+ DESC
65
+ task :start, :roles => :app_admin do
66
+ run_init_script("mongrel", "start")
67
+ run "sleep 30" # give the service 30 seconds to start before attempting to monitor it
68
+ sudo "monit -g app monitor all"
69
+ end
70
+
71
+ desc <<-DESC
72
+ Overrides the default Capistrano deploy:restart, uses \
73
+ /etc/init.d/mongrel
74
+ DESC
75
+ task :stop, :roles => :app_admin do
76
+ sudo "monit -g app unmonitor all"
77
+ run_init_script("mongrel", "stop")
78
+ end
79
+
80
+ desc <<-DESC
81
+ Overrides the default Capistrano deploy:restart, uses \
82
+ /etc/init.d/mongrel
83
+ DESC
84
+ task :restart, :roles => :app_admin do
85
+ deploy.stop
86
+ deploy.start
87
+ end
88
+ end
89
+
90
+ namespace :ec2onrails do
91
+ desc <<-DESC
92
+ Show the AMI id's of the current images for this version of \
93
+ EC2 on Rails.
94
+ DESC
95
+ task :ami_ids do
96
+ puts "32-bit server image for EC2 on Rails #{ec2onrails_version}: #{image_id_32_bit}"
97
+ puts "64-bit server image for EC2 on Rails #{ec2onrails_version}: #{image_id_64_bit}"
98
+ end
99
+
100
+ desc <<-DESC
101
+ Copies the public key from the server using the external "ssh"
102
+ command because Net::SSH, which is used by Capistrano, needs it.
103
+ This will only work if you have an ssh command in the path.
104
+ If Capistrano can successfully connect to your EC2 instance you
105
+ don't need to do this. It will copy from the first server in the
106
+ :app role, this can be overridden by specifying the HOST
107
+ environment variable
108
+ DESC
109
+ task :get_public_key_from_server do
110
+ host = find_servers_for_task(current_task).first.host
111
+ privkey = ssh_options[:keys][0]
112
+ pubkey = "#{privkey}.pub"
113
+ msg = <<-MSG
114
+ Your first key in ssh_options[:keys] is #{privkey}, presumably that's
115
+ your EC2 private key. The public key will be copied from the server
116
+ named '#{host}' and saved locally as #{pubkey}. Continue? [y/n]
117
+ MSG
118
+ choice = nil
119
+ while choice != "y" && choice != "n"
120
+ choice = Capistrano::CLI.ui.ask(msg).downcase
121
+ msg = "Please enter 'y' or 'n'."
122
+ end
123
+ if choice == "y"
124
+ run_local "scp -i '#{privkey}' app@#{host}:.ssh/authorized_keys #{pubkey}"
125
+ end
126
+ end
127
+
128
+ desc <<-DESC
129
+ Prepare a newly-started instance for a cold deploy.
130
+ DESC
131
+ task :setup, :roles => all_admin_role_names do
132
+ server.set_admin_mail_forward_address
133
+ server.set_timezone
134
+ server.install_packages
135
+ server.install_gems
136
+ server.deploy_files
137
+ server.enable_ssl if cfg[:enable_ssl]
138
+ server.set_rails_env
139
+ server.restart_services
140
+ deploy.setup
141
+ db.create
142
+ end
143
+
144
+ desc <<-DESC
145
+ Deploy and restore database from S3
146
+ DESC
147
+ task :restore_db_and_deploy do
148
+ db.recreate
149
+ deploy.update_code
150
+ deploy.symlink
151
+ db.restore
152
+ deploy.migrations
153
+ end
154
+
155
+ namespace :ec2 do
156
+ desc <<-DESC
157
+ DESC
158
+ task :configure_firewall do
159
+ # TODO
160
+ end
161
+ end
162
+
163
+ namespace :db do
164
+ desc <<-DESC
165
+ [internal] Load configuration info for the database from
166
+ config/database.yml, and start mysql (it must be running
167
+ in order to interact with it).
168
+ DESC
169
+ task :load_config do
170
+ unless hostnames_for_role(:db, :primary => true).empty?
171
+ db_config = YAML::load(ERB.new(File.read("config/database.yml")).result)[rails_env.to_s]
172
+ cfg[:db_name] = db_config['database']
173
+ cfg[:db_user] = db_config['username'] || db_config['user']
174
+ cfg[:db_password] = db_config['password']
175
+ cfg[:db_host] = db_config['host']
176
+ cfg[:db_socket] = db_config['socket']
177
+
178
+ if (cfg[:db_host].nil? || cfg[:db_host].empty?) && (cfg[:db_socket].nil? || cfg[:db_socket].empty?)
179
+ raise "ERROR: missing database config. Make sure database.yml contains a '#{rails_env}' section with either 'host: hostname' or 'socket: /var/run/mysqld/mysqld.sock'."
180
+ end
181
+
182
+ [cfg[:db_name], cfg[:db_user], cfg[:db_password]].each do |s|
183
+ if s.nil? || s.empty?
184
+ raise "ERROR: missing database config. Make sure database.yml contains a '#{rails_env}' section with a database name, user, and password."
185
+ elsif s.match(/['"]/)
186
+ raise "ERROR: database config string '#{s}' contains quotes."
187
+ end
188
+ end
189
+ end
190
+ end
191
+
192
+ desc <<-DESC
193
+ Create the MySQL database. Assumes there is no MySQL root \
194
+ password. To create a MySQL root password create a task that's run \
195
+ after this task using an after hook.
196
+ DESC
197
+ task :create, :roles => :db do
198
+ on_rollback { drop }
199
+ load_config
200
+ start
201
+
202
+ # For some reason the default db on Hardy contains users with '' as the name.
203
+ # This causes authentication problems when connecting from localhost
204
+ run %{mysql -u root -D mysql -e "delete from user where User = ''; flush privileges;"}
205
+
206
+ run %{mysql -u root -e "create database if not exists #{cfg[:db_name]};"}
207
+ run %{mysql -u root -e "grant all on #{cfg[:db_name]}.* to '#{cfg[:db_user]}'@'%' identified by '#{cfg[:db_password]}';"}
208
+ run %{mysql -u root -e "grant reload on *.* to '#{cfg[:db_user]}'@'%' identified by '#{cfg[:db_password]}';"}
209
+ run %{mysql -u root -e "grant super on *.* to '#{cfg[:db_user]}'@'%' identified by '#{cfg[:db_password]}';"}
210
+ end
211
+
212
+ desc <<-DESC
213
+ [internal] Make sure the MySQL server has been started, just in case the db role
214
+ hasn't been set, e.g. when called from ec2onrails:setup.
215
+ (But don't enable monitoring on it.)
216
+ DESC
217
+ task :start, :roles => :db_admin do
218
+ sudo "chmod a+x /etc/init.d/mysql"
219
+ # The mysql init script can fail on the first startup if mysql takes too long
220
+ # to create the logfiles, so try again
221
+ sudo "sh -c '/etc/init.d/mysql start || (sleep 10 && /etc/init.d/mysql start)'"
222
+ end
223
+
224
+ desc <<-DESC
225
+ Drop the MySQL database. Assumes there is no MySQL root \
226
+ password. If there is a MySQL root password, create a task that removes \
227
+ it and run that task before this one using a before hook.
228
+ DESC
229
+ task :drop, :roles => :db do
230
+ load_config
231
+ run %{mysql -u root -e "drop database if exists #{cfg[:db_name]};"}
232
+ end
233
+
234
+ desc <<-DESC
235
+ db:drop and db:create.
236
+ DESC
237
+ task :recreate, :roles => :db do
238
+ drop
239
+ create
240
+ end
241
+
242
+ desc <<-DESC
243
+ Set a root password for MySQL, using the variable mysql_root_password \
244
+ if it is set. If this is done db:drop won't work.
245
+ DESC
246
+ task :set_root_password, :roles => :db do
247
+ if cfg[:mysql_root_password]
248
+ run %{mysql -u root -e "UPDATE mysql.user SET Password=PASSWORD('#{cfg[:mysql_root_password]}') WHERE User='root'; FLUSH PRIVILEGES;"}
249
+ end
250
+ end
251
+
252
+ desc <<-DESC
253
+ Dump the MySQL database to the S3 bucket specified by \
254
+ ec2onrails_config[:archive_to_bucket]. The filename will be \
255
+ "database-archive/<timestamp>/dump.sql.gz".
256
+ DESC
257
+ task :archive, :roles => :db do
258
+ run "/usr/local/ec2onrails/bin/backup_app_db.rb --bucket #{cfg[:archive_to_bucket]} --dir #{cfg[:archive_to_bucket_subdir]}"
259
+ end
260
+
261
+ desc <<-DESC
262
+ Restore the MySQL database from the S3 bucket specified by \
263
+ ec2onrails_config[:restore_from_bucket]. The archive filename is \
264
+ expected to be the default, "mysqldump.sql.gz".
265
+ DESC
266
+ task :restore, :roles => :db do
267
+ run "/usr/local/ec2onrails/bin/restore_app_db.rb --bucket #{cfg[:restore_from_bucket]} --dir #{cfg[:restore_from_bucket_subdir]}"
268
+ end
269
+
270
+ desc <<-DESC
271
+ [internal] Initialize the default backup folder on S3 (i.e. do a full
272
+ backup of the newly-created db so the automatic incremental backups
273
+ make sense).
274
+ DESC
275
+ task :init_backup, :roles => :db do
276
+ run "/usr/local/ec2onrails/bin/backup_app_db.rb --reset"
277
+ end
278
+ end
279
+
280
+ namespace :server do
281
+ desc <<-DESC
282
+ Tell the servers what roles they are in. This configures them with \
283
+ the appropriate settings for each role, and starts and/or stops the \
284
+ relevant services.
285
+ DESC
286
+ task :set_roles, :roles => all_admin_role_names do
287
+ # TODO generate this based on the roles that actually exist so arbitrary new ones can be added
288
+ roles = {
289
+ :web => hostnames_for_role(:web),
290
+ :app => hostnames_for_role(:app),
291
+ :db_primary => hostnames_for_role(:db, :primary => true),
292
+ :memcache => hostnames_for_role(:memcache)
293
+ }
294
+ roles_yml = YAML::dump(roles)
295
+ put roles_yml, "/tmp/roles.yml"
296
+ sudo "cp /tmp/roles.yml /etc/ec2onrails"
297
+ sudo "/usr/local/ec2onrails/bin/set_roles.rb"
298
+ end
299
+
300
+ desc <<-DESC
301
+ Change the default value of RAILS_ENV on the server. Technically
302
+ this changes the server's mongrel config to use a different value
303
+ for "environment". The value is specified in :rails_env.
304
+ Be sure to do deploy:restart after this.
305
+ DESC
306
+ task :set_rails_env, :roles => all_admin_role_names do
307
+ rails_env = fetch(:rails_env, "production")
308
+ sudo "/usr/local/ec2onrails/bin/set_rails_env #{rails_env}"
309
+ end
310
+
311
+ desc <<-DESC
312
+ Upgrade to the newest versions of all Ubuntu packages.
313
+ DESC
314
+ task :upgrade_packages, :roles => all_admin_role_names do
315
+ sudo "aptitude -q update"
316
+ run "export DEBIAN_FRONTEND=noninteractive; sudo aptitude -q -y safe-upgrade"
317
+ end
318
+
319
+ desc <<-DESC
320
+ Upgrade to the newest versions of all rubygems.
321
+ DESC
322
+ task :upgrade_gems, :roles => all_admin_role_names do
323
+ sudo "gem update --system --no-rdoc --no-ri"
324
+ sudo "gem update --no-rdoc --no-ri" do |ch, str, data|
325
+ ch[:data] ||= ""
326
+ ch[:data] << data
327
+ if data =~ />\s*$/
328
+ puts data
329
+ choice = Capistrano::CLI.ui.ask("The gem command is asking for a number:")
330
+ ch.send_data("#{choice}\n")
331
+ else
332
+ puts data
333
+ end
334
+ end
335
+
336
+ end
337
+
338
+ desc <<-DESC
339
+ Install extra Ubuntu packages. Set ec2onrails_config[:packages], it \
340
+ should be an array of strings.
341
+ NOTE: the package installation will be non-interactive, if the packages \
342
+ require configuration either log in as 'admin' and run \
343
+ 'dpkg-reconfigure packagename' or replace the package's config files \
344
+ using the 'ec2onrails:server:deploy_files' task.
345
+ DESC
346
+ task :install_packages, :roles => all_admin_role_names do
347
+ if cfg[:packages] && cfg[:packages].any?
348
+ run "export DEBIAN_FRONTEND=noninteractive; sudo aptitude -q -y install #{cfg[:packages].join(' ')}"
349
+ end
350
+ end
351
+
352
+ desc <<-DESC
353
+ Install extra rubygems. Set ec2onrails_config[:rubygems], it should \
354
+ be with an array of strings.
355
+ DESC
356
+ task :install_gems, :roles => all_admin_role_names do
357
+ if cfg[:rubygems]
358
+ cfg[:rubygems].each do |gem|
359
+ sudo "gem install #{gem} --no-rdoc --no-ri" do |ch, str, data|
360
+ ch[:data] ||= ""
361
+ ch[:data] << data
362
+ if data =~ />\s*$/
363
+ puts data
364
+ choice = Capistrano::CLI.ui.ask("The gem command is asking for a number:")
365
+ ch.send_data("#{choice}\n")
366
+ else
367
+ puts data
368
+ end
369
+ end
370
+ end
371
+ end
372
+ end
373
+
374
+ desc <<-DESC
375
+ A convenience task to upgrade existing packages and gems and install \
376
+ specified new ones.
377
+ DESC
378
+ task :upgrade_and_install_all, :roles => all_admin_role_names do
379
+ upgrade_packages
380
+ upgrade_gems
381
+ install_packages
382
+ install_gems
383
+ end
384
+
385
+ desc <<-DESC
386
+ Set the timezone using the value of the variable named timezone. \
387
+ Valid options for timezone can be determined by the contents of \
388
+ /usr/share/zoneinfo, which can be seen here: \
389
+ http://packages.ubuntu.com/cgi-bin/search_contents.pl?searchmode=filelist&word=tzdata&version=gutsy&arch=all&page=1&number=all \
390
+ Remove 'usr/share/zoneinfo/' from the filename, and use the last \
391
+ directory and file as the value. For example 'Africa/Abidjan' or \
392
+ 'posix/GMT' or 'Canada/Eastern'.
393
+ DESC
394
+ task :set_timezone, :roles => all_admin_role_names do
395
+ if cfg[:timezone]
396
+ sudo "bash -c 'echo #{cfg[:timezone]} > /etc/timezone'"
397
+ sudo "cp /usr/share/zoneinfo/#{cfg[:timezone]} /etc/localtime"
398
+ end
399
+ end
400
+
401
+ desc <<-DESC
402
+ Deploy a set of config files to the server, the files will be owned by \
403
+ root. This doesn't delete any files from the server. This is intended
404
+ mainly for customized config files for new packages installed via the \
405
+ ec2onrails:server:install_packages task. Subdirectories and files \
406
+ inside here will be placed within the same directory structure \
407
+ relative to the root of the server's filesystem.
408
+ DESC
409
+ task :deploy_files, :roles => all_admin_role_names do
410
+ if cfg[:server_config_files_root]
411
+ begin
412
+ filename = "config_files.tar"
413
+ local_file = "#{Dir.tmpdir}/#{filename}"
414
+ remote_file = "/tmp/#{filename}"
415
+ FileUtils.cd(cfg[:server_config_files_root]) do
416
+ File.open(local_file, 'wb') { |tar| Minitar.pack(".", tar) }
417
+ end
418
+ put File.read(local_file), remote_file
419
+ sudo "tar xvf #{remote_file} -o -C /"
420
+ ensure
421
+ rm_rf local_file
422
+ run "rm -f #{remote_file}"
423
+ end
424
+ end
425
+ end
426
+
427
+ desc <<-DESC
428
+ Restart a set of services. Set ec2onrails_config[:services_to_restart] \
429
+ to an array of strings. It's assumed that each service has a script \
430
+ in /etc/init.d
431
+ DESC
432
+ task :restart_services, :roles => all_admin_role_names do
433
+ if cfg[:services_to_restart] && cfg[:services_to_restart].any?
434
+ cfg[:services_to_restart].each do |service|
435
+ run_init_script(service, "restart")
436
+ end
437
+ end
438
+ end
439
+
440
+ desc <<-DESC
441
+ Set the email address that mail to the admin user forwards to.
442
+ DESC
443
+ task :set_admin_mail_forward_address, :roles => all_admin_role_names do
444
+ put cfg[:admin_mail_forward_address], "/home/admin/.forward" if cfg[:admin_mail_forward_address]
445
+ end
446
+
447
+ desc <<-DESC
448
+ Enable ssl for the web server. The SSL cert file should be in
449
+ /etc/ssl/certs/default.pem and the SSL key file should be in
450
+ /etc/ssl/private/default.key (use the deploy_files task).
451
+ DESC
452
+ task :enable_ssl, :roles => :web_admin do
453
+ sudo "a2enmod ssl"
454
+ sudo "a2ensite default-ssl"
455
+ run_init_script("apache2", "restart")
456
+ end
457
+ end
458
+
459
+ end
460
+ end
@@ -0,0 +1,32 @@
1
+ # This file is part of EC2 on Rails.
2
+ # http://rubyforge.org/projects/ec2onrails/
3
+ #
4
+ # Copyright 2007 Paul Dowman, http://pauldowman.com/
5
+ #
6
+ # EC2 on Rails is free software; you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation; either version 2 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # EC2 on Rails is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
18
+
19
+ module Ec2onrails #:nodoc:
20
+ module VERSION #:nodoc:
21
+ MAJOR = 0
22
+ MINOR = 9
23
+ TINY = 9
24
+ TINIER = 1
25
+ # GEM_UPDATE = 0
26
+ # STRING = [MAJOR, MINOR, TINY, GEM_UPDATE].join('.')
27
+ STRING = [MAJOR, MINOR, TINY, TINIER].join('.')
28
+
29
+ AMI_ID_32_BIT = 'n/a'
30
+ AMI_ID_64_BIT = 'n/a'
31
+ end
32
+ end
data/lib/ec2onrails.rb ADDED
@@ -0,0 +1,20 @@
1
+ # This file is part of EC2 on Rails.
2
+ # http://rubyforge.org/projects/ec2onrails/
3
+ #
4
+ # Copyright 2007 Paul Dowman, http://pauldowman.com/
5
+ #
6
+ # EC2 on Rails is free software; you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation; either version 2 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # EC2 on Rails is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
18
+
19
+
20
+ $:.unshift File.dirname(__FILE__)
@@ -0,0 +1,44 @@
1
+ #!/bin/sh
2
+
3
+ # This file is part of EC2 on Rails.
4
+ # http://rubyforge.org/projects/ec2onrails/
5
+ #
6
+ # Copyright 2007 Paul Dowman, http://pauldowman.com/
7
+ #
8
+ # EC2 on Rails is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # EC2 on Rails is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
20
+
21
+
22
+ # This script runs the EC2 on Rails rakefile, it's meant to be called by
23
+ # Eric Hammond's Ubuntu build script: http://alestic.com/
24
+
25
+
26
+ if [ -z `which rake` ] ; then
27
+ echo "Installing rake..."
28
+ (
29
+ cd /tmp
30
+ wget http://rubyforge.org/frs/download.php/29752/rake-0.8.1.tgz
31
+ tar xvf rake-0.8.1.tgz
32
+ cd rake-0.8.1
33
+ ruby install.rb
34
+ )
35
+ fi
36
+
37
+ cd `dirname $0`
38
+
39
+ if [ $(uname -m) = 'x86_64' ]; then
40
+ export ARCH=x86_64
41
+ rake
42
+ else
43
+ rake
44
+ fi
@@ -0,0 +1,6 @@
1
+ # See man 5 aliases for format
2
+
3
+ # send all mail to admin user.
4
+ root: admin
5
+ app: admin
6
+ postmaster: admin
Binary file