deprec 1.1.0 → 1.2.0
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/lib/deprec/capistrano_extensions/actor_extensions.rb +89 -0
- data/lib/deprec/capistrano_extensions/deprec_extensions.rb +89 -0
- data/lib/deprec/recipes.rb +53 -79
- data/lib/deprec/recipes/cache_svn.rb +74 -0
- data/lib/deprec/recipes/svn.rb +7 -1
- data/lib/deprec/recipes/templates/interfaces.rhtml +19 -0
- data/lib/deprec/recipes/templates/postfix_main.conf +38 -0
- data/lib/deprec/recipes/ubuntu.rb +50 -3
- data/lib/deprec/recipes/vmware.rb +51 -0
- data/lib/deprec/third_party/railsmachine/recipes/apache.rb +1 -1
- metadata +9 -3
- data/lib/deprec/recipes/slicehost.rb +0 -18
@@ -0,0 +1,89 @@
|
|
1
|
+
|
2
|
+
class Capistrano::Actor
|
3
|
+
|
4
|
+
##
|
5
|
+
# Run a command and ask for input when input_query is seen.
|
6
|
+
# Sends the response back to the server.
|
7
|
+
#
|
8
|
+
# +input_query+ is a regular expression that defaults to /^Password/.
|
9
|
+
#
|
10
|
+
# Can be used where +run+ would otherwise be used.
|
11
|
+
#
|
12
|
+
# run_with_input 'ssh-keygen ...', /^Are you sure you want to overwrite\?/
|
13
|
+
|
14
|
+
def run_with_input(shell_command, input_query=/^Password/)
|
15
|
+
handle_command_with_input(:run, shell_command, input_query)
|
16
|
+
end
|
17
|
+
|
18
|
+
##
|
19
|
+
# Run a command using sudo and ask for input when a regular expression is seen.
|
20
|
+
# Sends the response back to the server.
|
21
|
+
#
|
22
|
+
# See also +run_with_input+
|
23
|
+
#
|
24
|
+
# +input_query+ is a regular expression
|
25
|
+
|
26
|
+
def sudo_with_input(shell_command, input_query=/^Password/)
|
27
|
+
handle_command_with_input(:sudo, shell_command, input_query)
|
28
|
+
end
|
29
|
+
|
30
|
+
##
|
31
|
+
# Run a command using sudo and continuously pipe the results back to the console.
|
32
|
+
#
|
33
|
+
# Similar to the built-in +stream+, but for privileged users.
|
34
|
+
|
35
|
+
def sudo_stream(command)
|
36
|
+
sudo(command) do |ch, stream, out|
|
37
|
+
puts out if stream == :out
|
38
|
+
if stream == :err
|
39
|
+
puts "[err : #{ch[:host]}] #{out}"
|
40
|
+
break
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
##
|
46
|
+
# Run a command using the root account.
|
47
|
+
#
|
48
|
+
# Some linux distros/VPS providers only give you a root login when you install.
|
49
|
+
|
50
|
+
def run_as_root(shell_command)
|
51
|
+
std.connect_as_root do |tempuser|
|
52
|
+
run shell_command
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
##
|
57
|
+
# Run a task using root account.
|
58
|
+
#
|
59
|
+
# Some linux distros/VPS providers only give you a root login when you install.
|
60
|
+
#
|
61
|
+
# tempuser: contains the value replaced by 'root' for the duration of this call
|
62
|
+
|
63
|
+
def as_root()
|
64
|
+
std.connect_as_root do |tempuser|
|
65
|
+
yield tempuser
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
private
|
70
|
+
|
71
|
+
|
72
|
+
##
|
73
|
+
# Does the actual capturing of the input and streaming of the output.
|
74
|
+
#
|
75
|
+
# local_run_method: run or sudo
|
76
|
+
# shell_command: The command to run
|
77
|
+
# input_query: A regular expression matching a request for input: /^Please enter your password/
|
78
|
+
|
79
|
+
def handle_command_with_input(local_run_method, shell_command, input_query)
|
80
|
+
send(local_run_method, shell_command) do |channel, stream, data|
|
81
|
+
logger.info data, channel[:host]
|
82
|
+
if data =~ input_query
|
83
|
+
pass = ::Capistrano::CLI.password_prompt "#{data}:"
|
84
|
+
channel.send_data "#{pass}\n"
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
|
2
|
+
require 'capistrano'
|
3
|
+
|
4
|
+
module Deprec
|
5
|
+
DEPREC_TEMPLATES_BASE = File.join(File.dirname(__FILE__), '..', 'recipes', 'templates')
|
6
|
+
|
7
|
+
def render_template_to_file(template_name, destination_file_name, templates_dir = DEPREC_TEMPLATES_BASE)
|
8
|
+
template_name += '.conf' if File.extname(template_name) == ''
|
9
|
+
|
10
|
+
file = File.join(templates_dir, template_name)
|
11
|
+
buffer = render :template => File.read(file)
|
12
|
+
|
13
|
+
temporary_location = "/tmp/#{template_name}"
|
14
|
+
put buffer, temporary_location
|
15
|
+
sudo "cp #{temporary_location} #{destination_file_name}"
|
16
|
+
delete temporary_location
|
17
|
+
end
|
18
|
+
|
19
|
+
def append_to_file_if_missing(filename, value, options={})
|
20
|
+
# XXX sort out single quotes in 'value' - they'l break command!
|
21
|
+
# XXX if options[:requires_sudo] and :use_sudo then use sudo
|
22
|
+
sudo <<-END
|
23
|
+
grep '#{value}' #{filename} > /dev/null 2>&1 ||
|
24
|
+
test ! -f #{filename} ||
|
25
|
+
echo '#{value}' >> #{filename}
|
26
|
+
END
|
27
|
+
end
|
28
|
+
|
29
|
+
# create new user account on target system
|
30
|
+
def useradd(user)
|
31
|
+
puts run_method
|
32
|
+
send(run_method, "grep '^#{user}:' /etc/passwd || /usr/sbin/useradd -m #{user}")
|
33
|
+
end
|
34
|
+
|
35
|
+
# create a new group on target system
|
36
|
+
def groupadd(group)
|
37
|
+
# XXX I don't like specifying the path to groupadd - need to sort out paths before long
|
38
|
+
send(run_method, "grep '#{group}:' /etc/group || sudo /usr/sbin/groupadd #{group}")
|
39
|
+
end
|
40
|
+
|
41
|
+
# add group to the list of groups this user belongs to
|
42
|
+
def add_user_to_group(user, group)
|
43
|
+
send(run_method, "groups #{user} | grep ' #{group} ' || sudo /usr/sbin/usermod -G #{group} -a #{user}")
|
44
|
+
end
|
45
|
+
|
46
|
+
# download source package if we don't already have it
|
47
|
+
def download_src(src_package, src_dir)
|
48
|
+
deprec.groupadd(group)
|
49
|
+
sudo "test -d #{src_dir} || sudo mkdir #{src_dir}"
|
50
|
+
sudo "chgrp -R #{group} #{src_dir}"
|
51
|
+
sudo "chmod -R g+w #{src_dir}"
|
52
|
+
# XXX check if file exists and if we have and MD5 hash or bytecount to compare against
|
53
|
+
# XXX if so, compare and decide if we need to download again
|
54
|
+
sudo "sh -c 'cd #{src_dir} && test -f #{src_package[:file]} || wget #{src_package[:url]}'"
|
55
|
+
end
|
56
|
+
|
57
|
+
# unpack src and make it writable by the group
|
58
|
+
def unpack_src(src_package, src_dir)
|
59
|
+
package_dir = File.join(src_dir, src_package[:dir])
|
60
|
+
sudo <<-SUDO
|
61
|
+
sh -c '
|
62
|
+
cd #{src_dir};
|
63
|
+
test -d #{package_dir}.old && rm -fr #{package_dir}.old;
|
64
|
+
test -d #{package_dir} && mv #{package_dir} #{package_dir}.old;
|
65
|
+
#{src_package[:unpack]}
|
66
|
+
chgrp -R #{group} #{package_dir};
|
67
|
+
chmod -R g+w #{package_dir};
|
68
|
+
'
|
69
|
+
SUDO
|
70
|
+
end
|
71
|
+
|
72
|
+
# install package from source
|
73
|
+
def install_from_src(src_package, src_dir)
|
74
|
+
package_dir = File.join(src_dir, src_package[:dir])
|
75
|
+
unpack_src(src_package, src_dir)
|
76
|
+
sudo <<-SUDO
|
77
|
+
sh -c '
|
78
|
+
cd #{package_dir};
|
79
|
+
#{src_package[:configure]}
|
80
|
+
#{src_package[:make]}
|
81
|
+
#{src_package[:install]}
|
82
|
+
#{src_package[:post_install]}
|
83
|
+
'
|
84
|
+
SUDO
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
Capistrano.plugin :deprec, Deprec
|
data/lib/deprec/recipes.rb
CHANGED
@@ -6,6 +6,8 @@ require 'deprec/third_party/vmbuilder/plugins'
|
|
6
6
|
require 'deprec/third_party/railsmachine/recipes/svn'
|
7
7
|
require 'deprec/third_party/railsmachine/recipes/apache'
|
8
8
|
require 'deprec/third_party/railsmachine/recipes/mysql'
|
9
|
+
require 'deprec/capistrano_extensions/deprec_extensions.rb'
|
10
|
+
require 'deprec/capistrano_extensions/actor_extensions.rb'
|
9
11
|
|
10
12
|
Capistrano.configuration(:must_exist).load do
|
11
13
|
set :user, (defined?(user) ? user : ENV['USER']) # user who is deploying
|
@@ -28,13 +30,9 @@ Capistrano.configuration(:must_exist).load do
|
|
28
30
|
end
|
29
31
|
|
30
32
|
desc "Set up the expected application directory structure on all boxes"
|
31
|
-
task :
|
33
|
+
task :deprec_setup, :except => { :no_release => true } do
|
32
34
|
setup_paths
|
33
|
-
|
34
|
-
mkdir -p -m 775 #{releases_path} #{shared_path}/system &&
|
35
|
-
mkdir -p -m 777 #{shared_path}/log &&
|
36
|
-
mkdir -p -m 777 #{shared_path}/pids
|
37
|
-
CMD
|
35
|
+
setup
|
38
36
|
setup_servers
|
39
37
|
end
|
40
38
|
|
@@ -121,31 +119,29 @@ Capistrano.configuration(:must_exist).load do
|
|
121
119
|
|
122
120
|
desc "create deployment group and add current user to it"
|
123
121
|
task :setup_user_perms do
|
124
|
-
|
125
|
-
|
122
|
+
deprec.groupadd(group)
|
123
|
+
deprec.add_user_to_group(user, group)
|
126
124
|
end
|
127
125
|
|
128
126
|
task :install_rubygems do
|
129
127
|
# ??? is this an OK way to pass values around to the functions?
|
130
128
|
version = 'rubygems-0.9.0'
|
131
|
-
set :
|
129
|
+
set :src_package, {
|
132
130
|
:file => version + '.tgz',
|
133
131
|
:dir => version,
|
134
132
|
:url => "http://rubyforge.org/frs/download.php/11289/#{version}.tgz",
|
135
133
|
:unpack => "tar zxf #{version}.tgz;",
|
136
|
-
:configure => nil,
|
137
|
-
:make => nil,
|
138
134
|
:install => '/usr/bin/ruby1.8 setup.rb;'
|
139
135
|
}
|
140
|
-
download_src
|
141
|
-
install_from_src
|
136
|
+
deprec.download_src(src_package, src_dir)
|
137
|
+
deprec.install_from_src(src_package, src_dir)
|
142
138
|
gem.update_system
|
143
139
|
end
|
144
140
|
|
145
141
|
task :install_apache do
|
146
142
|
# ??? is this an OK way to pass values around to the functions?
|
147
143
|
version = 'httpd-2.2.3'
|
148
|
-
set :
|
144
|
+
set :src_package, {
|
149
145
|
:file => version + '.tar.gz',
|
150
146
|
:dir => version,
|
151
147
|
:url => "http://www.apache.org/dist/httpd/#{version}.tar.gz",
|
@@ -153,75 +149,53 @@ Capistrano.configuration(:must_exist).load do
|
|
153
149
|
:configure => './configure --enable-proxy --enable-proxy-balancer --enable-proxy-http --enable-rewrite --enable-cache --enable-headers --enable-ssl --enable-deflate;',
|
154
150
|
:make => 'make;',
|
155
151
|
:install => 'make install;',
|
156
|
-
:post_install => '
|
152
|
+
:post_install => 'install -b support/apachectl /etc/init.d/httpd;'
|
153
|
+
# XXX use 'install' command instead
|
157
154
|
}
|
158
|
-
download_src
|
159
|
-
install_from_src
|
155
|
+
deprec.download_src(src_package, src_dir)
|
156
|
+
deprec.install_from_src(src_package, src_dir)
|
160
157
|
end
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
unpack_src
|
167
|
-
# XXX we need run_sh and sudo_sh functions to make 'cd' cmd work
|
168
|
-
sudo <<-SUDO
|
169
|
-
sh -c '
|
170
|
-
cd #{package_dir};
|
171
|
-
#{file_to_get[:configure]}
|
172
|
-
#{file_to_get[:make]}
|
173
|
-
#{file_to_get[:install]}
|
174
|
-
#{file_to_get[:post_install]}
|
175
|
-
'
|
176
|
-
SUDO
|
177
|
-
end
|
178
|
-
|
179
|
-
desc "unpack src and make it writable by the group"
|
180
|
-
task :unpack_src do
|
181
|
-
package_dir = File.join(src_dir, file_to_get[:dir])
|
182
|
-
sudo <<-SUDO
|
183
|
-
sh -c '
|
184
|
-
cd #{src_dir};
|
185
|
-
test -d #{package_dir}.old && rm -fr #{package_dir}.old;
|
186
|
-
test -d #{package_dir} && mv #{package_dir} #{package_dir}.old;
|
187
|
-
#{file_to_get[:unpack]}
|
188
|
-
chgrp -R #{group} #{package_dir};
|
189
|
-
chmod -R g+w #{package_dir};
|
190
|
-
'
|
191
|
-
SUDO
|
192
|
-
end
|
193
|
-
|
194
|
-
desc "Setup public symlink directories"
|
195
|
-
task :setup_symlinks, :roles => [:app, :web] do
|
196
|
-
if app_symlinks
|
197
|
-
app_symlinks.each { |link| run "mkdir -p #{shared_path}/public/#{link}" }
|
198
|
-
end
|
158
|
+
|
159
|
+
desc "Setup public symlink directories"
|
160
|
+
task :setup_symlinks, :roles => [:app, :web] do
|
161
|
+
if app_symlinks
|
162
|
+
app_symlinks.each { |link| run "mkdir -p #{shared_path}/public/#{link}" }
|
199
163
|
end
|
164
|
+
end
|
200
165
|
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
end
|
207
|
-
|
208
|
-
# something for later...
|
209
|
-
# desc "render a template"
|
210
|
-
# task :z_template do
|
211
|
-
# file = File.join(File.dirname(__FILE__), 'recipes', 'templates', 'test_goo.rhtml')
|
212
|
-
# msg = render :template => File.read(file), :foo => 'good', :bar => 'night'
|
213
|
-
# run "echo #{msg}"
|
214
|
-
# end
|
215
|
-
|
216
|
-
"will be moved to capistrano extension"
|
217
|
-
task :download_src do
|
218
|
-
# move this into cap extension
|
219
|
-
# XXX should make this group writable
|
220
|
-
# XXX so we don't need to sudo to compile
|
221
|
-
sudo "test -d #{src_dir} || sudo mkdir #{src_dir}"
|
222
|
-
sudo "chgrp -R #{group} #{src_dir}"
|
223
|
-
sudo "chmod -R g+w #{src_dir}"
|
224
|
-
sudo "sh -c 'cd #{src_dir} && test -f #{file_to_get[:file]} || wget #{file_to_get[:url]}'"
|
166
|
+
desc "Link up any public directories."
|
167
|
+
task :symlink_public, :roles => [:app, :web] do
|
168
|
+
if app_symlinks
|
169
|
+
app_symlinks.each { |link| run "ln -nfs #{shared_path}/public/#{link} #{current_path}/public/#{link}" }
|
170
|
+
end
|
225
171
|
end
|
226
172
|
|
173
|
+
desc "install the rmagic gem, and dependent image-magick library"
|
174
|
+
task :install_rmagick, :roles => [:app, :web] do
|
175
|
+
install_image_magic
|
176
|
+
gem.install 'rmagick'
|
177
|
+
end
|
178
|
+
|
179
|
+
# Craig: I've kept this generic rather than calling the task setup postfix.
|
180
|
+
# if people want other smtp servers, it could be configurable
|
181
|
+
desc "install and configure postfix"
|
182
|
+
task :setup_smtp_server do
|
183
|
+
install_postfix
|
184
|
+
deprec.render_template_to_file('postfix_main', '/etc/postfix/main.cf')
|
185
|
+
end
|
186
|
+
|
187
|
+
task :setup_admin_account do
|
188
|
+
user = Capistrano::CLI.password_prompt "Enter userid for new user:"
|
189
|
+
deprec.useradd(user)
|
190
|
+
run_with_input("passwd #{user}", /UNIX password/) # ??? how many versions of the prompt are there?
|
191
|
+
deprec.groupadd('admin')
|
192
|
+
deprec.add_user_to_group(user, 'admin')
|
193
|
+
deprec.append_to_file_if_missing('/etc/sudoers', '%admin ALL=(ALL) ALL')
|
194
|
+
end
|
195
|
+
|
196
|
+
task :setup_admin_account_as_root do
|
197
|
+
as_root { setup_admin_account }
|
198
|
+
end
|
199
|
+
|
200
|
+
|
227
201
|
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
|
2
|
+
##
|
3
|
+
# Caches an svn copy of your app locally to avoid doing a full checkout of
|
4
|
+
# your app each time. Overwrites the built-in +update_code+ task.
|
5
|
+
#
|
6
|
+
# Written/pulled together by Dreamer3 (Josh Goebel) based on work by Chris McGrath (octopod).
|
7
|
+
# Minor tweaks by Geoffrey Grosenbach (topfunky).
|
8
|
+
#
|
9
|
+
# Usage:
|
10
|
+
#
|
11
|
+
# # In deploy.rb
|
12
|
+
# require 'deprec/recipes/cache_svn'
|
13
|
+
#
|
14
|
+
# set :repository, "svn://your.repository/path/here"
|
15
|
+
# set :repository_cache, "#{shared_path}/svn_trunk/"
|
16
|
+
#
|
17
|
+
# After running the default +setup+ task, run +setup_repository_cache+ to
|
18
|
+
# do the first checkout of your app.
|
19
|
+
#
|
20
|
+
# cap setup_repository_cache
|
21
|
+
#
|
22
|
+
# After that, the normal +deploy+ will update the cached copy, rsync
|
23
|
+
# it to the releases directory, and symlink it to +current+, as usual.
|
24
|
+
|
25
|
+
##
|
26
|
+
# Expand the subversion class to support cached repositories
|
27
|
+
class Capistrano::SCM::Subversion
|
28
|
+
|
29
|
+
def setup_repository_cache(actor)
|
30
|
+
params = ""
|
31
|
+
params << "--username #{configuration.svn_username}" if configuration.svn_username
|
32
|
+
command = "#{svn} co -q -v #{params} #{configuration.repository} #{configuration.repository_cache} &&"
|
33
|
+
configuration.logger.debug "Caching SVN repository on remote servers..."
|
34
|
+
run_checkout(actor, command, &svn_stream_handler(actor))
|
35
|
+
end
|
36
|
+
|
37
|
+
def update_repository_cache(actor)
|
38
|
+
command = "#{svn} up -q #{configuration.repository_cache} &&"
|
39
|
+
run_update(actor, command, &svn_stream_handler(actor))
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
Capistrano.configuration(:must_exist).load do
|
45
|
+
|
46
|
+
desc <<-DESC
|
47
|
+
Setup the cached repository on the server for the first time and
|
48
|
+
checkout the latest version there.
|
49
|
+
DESC
|
50
|
+
task :setup_cached_repository, :roles => [:app, :db, :web] do
|
51
|
+
set :revision, "Initial setup checkout" # avoids capistrano trying to find out for us
|
52
|
+
run "mkdir -p #{repository_cache}"
|
53
|
+
source.setup_repository_cache(self)
|
54
|
+
end
|
55
|
+
|
56
|
+
desc <<-DESC
|
57
|
+
Update the cached repository and then your app (from the cache) via SVN.
|
58
|
+
DESC
|
59
|
+
task :update_code, :roles => [:app, :db, :web] do
|
60
|
+
source.update_repository_cache(self)
|
61
|
+
|
62
|
+
on_rollback { delete release_path, :recursive => true }
|
63
|
+
|
64
|
+
run %(rsync -ax --exclude=".svn" #{repository_cache} #{release_path}/)
|
65
|
+
|
66
|
+
run <<-CMD
|
67
|
+
rm -rf #{release_path}/log #{release_path}/public/system &&
|
68
|
+
ln -nfs #{shared_path}/log #{release_path}/log &&
|
69
|
+
ln -nfs #{shared_path}/system #{release_path}/public/system
|
70
|
+
CMD
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
data/lib/deprec/recipes/svn.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
Capistrano.configuration(:must_exist).load do
|
2
|
-
|
2
|
+
|
3
3
|
desc "remove and ignore log files and tmp from subversion"
|
4
4
|
task :svn_remove_log_and_tmp do
|
5
5
|
puts "removing log directory contents from svn"
|
@@ -15,4 +15,10 @@ Capistrano.configuration(:must_exist).load do
|
|
15
15
|
puts "committing changes"
|
16
16
|
system "svn commit -m 'Removed and ignored log files and tmp'"
|
17
17
|
end
|
18
|
+
|
19
|
+
desc "Cache svn name and password on the server. Useful for http-based repositories."
|
20
|
+
task :svn_cache_credentials do
|
21
|
+
run_with_input "svn list #{repository}"
|
22
|
+
end
|
23
|
+
|
18
24
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# This file describes the network interfaces available on your system
|
2
|
+
# and how to activate them. For more information, see interfaces(5).
|
3
|
+
|
4
|
+
# The loopback network interface
|
5
|
+
auto lo
|
6
|
+
iface lo inet loopback
|
7
|
+
|
8
|
+
# The primary network interface
|
9
|
+
<% ethernet_interfaces.each do |eth| %>
|
10
|
+
auto eth<%= eth[:num] %>
|
11
|
+
iface eth0 inet <%= eth[:type] %>
|
12
|
+
<% if eth[:type] == 'static' %>
|
13
|
+
address <%= eth[:ipaddr] %>
|
14
|
+
netmask <%= eth[:netmask] %>
|
15
|
+
gateway <%= eth[:gateway] %>
|
16
|
+
# dns-* options are implemented by the resolvconf package, if installed
|
17
|
+
dns-nameservers <%= eth[:dns1] %><%= ",#{eth[:dns2]}" if defined?(eth[:dns2]) %>
|
18
|
+
<% end %>
|
19
|
+
<% end %>
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
|
2
|
+
# CONFIGURATION DEPLOYED BY CAPISTRANO/DEPREC
|
3
|
+
# MODIFICATIONS WILL BE OVERWRITTEN IF YOU RUN THIS SCRIPT AGAIN
|
4
|
+
|
5
|
+
# Debian specific: Specifying a file name will cause the first
|
6
|
+
# line of that file to be used as the name. The Debian default
|
7
|
+
# is /etc/mailname.
|
8
|
+
#myorigin = /etc/mailname
|
9
|
+
|
10
|
+
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
|
11
|
+
biff = no
|
12
|
+
|
13
|
+
# appending .domain is the MUA's job.
|
14
|
+
append_dot_mydomain = no
|
15
|
+
|
16
|
+
# Uncomment the next line to generate "delayed mail" warnings
|
17
|
+
#delay_warning_time = 4h
|
18
|
+
|
19
|
+
# TLS parameters
|
20
|
+
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
|
21
|
+
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
|
22
|
+
smtpd_use_tls=yes
|
23
|
+
smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
|
24
|
+
smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache
|
25
|
+
|
26
|
+
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
|
27
|
+
# information on enabling SSL in the smtp client.
|
28
|
+
|
29
|
+
myhostname = playful
|
30
|
+
alias_maps = hash:/etc/aliases
|
31
|
+
alias_database = hash:/etc/aliases
|
32
|
+
myorigin = /etc/mailname
|
33
|
+
mydestination = playful-bent.com, playful, localhost.localdomain, localhost
|
34
|
+
relayhost =
|
35
|
+
mynetworks = 127.0.0.0/8
|
36
|
+
mailbox_size_limit = 0
|
37
|
+
recipient_delimiter = +
|
38
|
+
inet_interfaces = all
|
@@ -17,11 +17,25 @@ Capistrano.configuration(:must_exist).load do
|
|
17
17
|
apt.update
|
18
18
|
end
|
19
19
|
|
20
|
-
desc "
|
21
|
-
task :
|
20
|
+
desc "disable universe repositories"
|
21
|
+
task :disable_universe do
|
22
22
|
# ruby is not installed by default or else we'd use
|
23
23
|
# sudo "ruby -pi.bak -e \"gsub(/#\s?(.*universe$)/, '\1')\" sources.list"
|
24
|
-
sudo 'perl -pi -e \'s
|
24
|
+
sudo 'perl -pi -e \'s/^([^#]*dapper universe)/#\1/g\' /etc/apt/sources.list'
|
25
|
+
apt.update
|
26
|
+
end
|
27
|
+
|
28
|
+
desc "disable cdrom as a source of packages"
|
29
|
+
task :disable_cdrom_install do
|
30
|
+
# ruby is not installed by default so we use perl
|
31
|
+
sudo 'perl -pi -e \'s/^([^#]*deb cdrom)/#\1/g\' /etc/apt/sources.list'
|
32
|
+
apt.update
|
33
|
+
end
|
34
|
+
|
35
|
+
desc "enable cdrom as a source of packages"
|
36
|
+
task :enable_cdrom_install do
|
37
|
+
# ruby is not installed by default so we use perl
|
38
|
+
sudo 'perl -pi -e \'s/^[# ]*(deb cdrom)/\1/g\' /etc/apt/sources.list'
|
25
39
|
apt.update
|
26
40
|
end
|
27
41
|
|
@@ -30,6 +44,39 @@ Capistrano.configuration(:must_exist).load do
|
|
30
44
|
apt.install(rails_ubuntu, :stable) # install packages for rails box
|
31
45
|
end
|
32
46
|
|
47
|
+
desc "installs image magick packages"
|
48
|
+
task :install_image_magic do
|
49
|
+
apt.install({:base => ['imagemagick', 'libmagick9-dev']}, :stable)
|
50
|
+
end
|
51
|
+
|
52
|
+
desc "install postfix and dependent packages"
|
53
|
+
task :install_postfix do
|
54
|
+
apt.install({:base => ['postfix']}, :stable)
|
55
|
+
end
|
56
|
+
|
57
|
+
desc "write network config to server"
|
58
|
+
task :network_configure do
|
59
|
+
# set :ethernet_interfaces, [{
|
60
|
+
# :num => 0,
|
61
|
+
# :type => 'static',
|
62
|
+
# :ipaddr => '10.0.100.125',
|
63
|
+
# :netmask => '255.255.255.0',
|
64
|
+
# :gateway => '10.0.100.1',
|
65
|
+
# :dns1 => '203.8.183.1',
|
66
|
+
# :dns2 => '4.2.2.1'
|
67
|
+
# }]
|
68
|
+
|
69
|
+
deprec.render_template_to_file('interfaces.rhtml', '/etc/network/interfaces')
|
70
|
+
end
|
71
|
+
|
72
|
+
# desc "configure hostname on server"
|
73
|
+
# task :hostname_configure do
|
74
|
+
# # update /etc/hostname
|
75
|
+
# # update /etc/hosts
|
76
|
+
# end
|
77
|
+
|
78
|
+
|
79
|
+
|
33
80
|
# XXX write function to enable/disable a service
|
34
81
|
# XXX update-rc.d lighttpd remove
|
35
82
|
# XXX update-rc.d -n httpd defaults
|
@@ -0,0 +1,51 @@
|
|
1
|
+
Capistrano.configuration(:must_exist).load do
|
2
|
+
set :vm_dir, '/var/vm'
|
3
|
+
set :stemserver, 'stemserver_ubuntu_6.06.1'
|
4
|
+
|
5
|
+
# currently only for CentOS
|
6
|
+
task :install_vmware_server do
|
7
|
+
version = 'VMware-server-1.0.1-29996.i386'
|
8
|
+
set :src_package, {
|
9
|
+
:file => version + '.rpm',
|
10
|
+
:url => "http://10.0.100.45/download/vmware/#{version}.rpm",
|
11
|
+
:install => "rpm -i #{File.join(src_dir, version + '.rpm')};"
|
12
|
+
}
|
13
|
+
deprec.download_src(src_package, src_dir)
|
14
|
+
sudo src_package[:install]
|
15
|
+
sudo "yum install gcc" # when you select the develpment packages on CentOS it doesn't give you gcc!
|
16
|
+
# XXX work out how to do this interactive through capistrano
|
17
|
+
puts
|
18
|
+
puts "IMPORTANT"
|
19
|
+
puts "sudo /usr/bin/vmware-config.pl"
|
20
|
+
puts
|
21
|
+
end
|
22
|
+
|
23
|
+
task :install_vmware_mui do
|
24
|
+
version = 'VMware-mui-1.0.1-29996'
|
25
|
+
src_package = {
|
26
|
+
:file => version + '.tar.gz',
|
27
|
+
:dir => 'vmware-mui-distrib',
|
28
|
+
:url => "http://10.0.100.45/download/vmware/#{version}.tar.gz",
|
29
|
+
:unpack => "tar zxf #{version}.tar.gz;",
|
30
|
+
:install => './vmware-install.pl;'
|
31
|
+
}
|
32
|
+
deprec.download_src(src_package, src_dir)
|
33
|
+
deprec.unpack_src(src_package, src_dir)
|
34
|
+
# XXX work out how to do this interactive through capistrano
|
35
|
+
puts
|
36
|
+
puts "IMPORTANT - you need to log in and run"
|
37
|
+
puts "cd /usr/local/src/vmware-mui-distrib && sudo ./vmware-install.pl"
|
38
|
+
puts
|
39
|
+
end
|
40
|
+
|
41
|
+
task :replicate_stemserver do
|
42
|
+
sudo <<-SUDO
|
43
|
+
sh -c '
|
44
|
+
cd #{vm_dir};
|
45
|
+
test -d #{stemserver} || tar zxfv #{stemserver}.tgz;
|
46
|
+
perl -pi -e 's/displayName = ".*"/displayName = "#{new_hostname}"/' stemserver/*.vmx;
|
47
|
+
mv stemserver #{new_hostname};
|
48
|
+
SUDO
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
@@ -25,7 +25,7 @@ Capistrano.configuration(:must_exist).load do
|
|
25
25
|
sudo "grep '#{inc_cmd}' #{apache_path}/conf/httpd.conf || sudo echo '#{inc_cmd}' >> #{apache_path}/conf/httpd.conf"
|
26
26
|
sudo "chmod 755 #{apache_path}/conf/httpd.conf"
|
27
27
|
index = '/usr/local/apache2/htdocs/index.html'
|
28
|
-
sudo "test -f #{index}
|
28
|
+
sudo "test ! -f #{index} || sudo mv #{index} #{index}.bak"
|
29
29
|
end
|
30
30
|
|
31
31
|
desc "Configure Apache. This uses the :use_sudo
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
|
|
3
3
|
specification_version: 1
|
4
4
|
name: deprec
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.
|
7
|
-
date: 2006-
|
6
|
+
version: 1.2.0
|
7
|
+
date: 2006-12-22 00:00:00 +11:00
|
8
8
|
summary: deployment recipes for capistrano
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -32,21 +32,27 @@ files:
|
|
32
32
|
- bin/deprec_dotfiles
|
33
33
|
- docs/building_edge_capistrano.txt
|
34
34
|
- lib/deprec
|
35
|
+
- lib/deprec/capistrano_extensions
|
35
36
|
- lib/deprec/generators
|
36
37
|
- lib/deprec/recipes
|
37
38
|
- lib/deprec/recipes.rb
|
38
39
|
- lib/deprec/third_party
|
40
|
+
- lib/deprec/capistrano_extensions/actor_extensions.rb
|
41
|
+
- lib/deprec/capistrano_extensions/deprec_extensions.rb
|
39
42
|
- lib/deprec/generators/deprec
|
40
43
|
- lib/deprec/generators/loader.rb
|
41
44
|
- lib/deprec/generators/deprec/deprec_generator.rb
|
42
45
|
- lib/deprec/generators/deprec/templates
|
43
46
|
- lib/deprec/generators/deprec/USAGE
|
44
47
|
- lib/deprec/generators/deprec/templates/deploy.rb
|
45
|
-
- lib/deprec/recipes/
|
48
|
+
- lib/deprec/recipes/cache_svn.rb
|
46
49
|
- lib/deprec/recipes/ssh.rb
|
47
50
|
- lib/deprec/recipes/svn.rb
|
48
51
|
- lib/deprec/recipes/templates
|
49
52
|
- lib/deprec/recipes/ubuntu.rb
|
53
|
+
- lib/deprec/recipes/vmware.rb
|
54
|
+
- lib/deprec/recipes/templates/interfaces.rhtml
|
55
|
+
- lib/deprec/recipes/templates/postfix_main.conf
|
50
56
|
- lib/deprec/recipes/templates/test_template.rhtml
|
51
57
|
- lib/deprec/third_party/mongrel_cluster
|
52
58
|
- lib/deprec/third_party/railsmachine
|
@@ -1,18 +0,0 @@
|
|
1
|
-
|
2
|
-
Capistrano.configuration(:must_exist).load do
|
3
|
-
|
4
|
-
task :install_rails_stack_slicehost do
|
5
|
-
# create user account
|
6
|
-
|
7
|
-
end
|
8
|
-
|
9
|
-
end
|
10
|
-
#
|
11
|
-
# # set editor to vim
|
12
|
-
#
|
13
|
-
# # create user account
|
14
|
-
# mkdir -m mbailey
|
15
|
-
# # set password for user
|
16
|
-
# passwd mbailey
|
17
|
-
# # setup sudo
|
18
|
-
# echo "mbailey ALL=(ALL) ALL" >> /etc/sudoers
|