rails_pwnerer 0.4.10 → 0.4.12
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +4 -0
- data/Manifest +1 -0
- data/lib/pwnage/app/gems.rb +27 -0
- data/lib/pwnage/app/main.rb +2 -0
- data/lib/pwnage/base.rb +1 -1
- data/lib/pwnage/base/dirs.rb +18 -0
- data/lib/pwnage/base/packages.rb +53 -9
- data/lib/pwnage/scaffolds/gems.rb +6 -1
- data/lib/pwnage/scaffolds/packages.rb +20 -8
- data/lib/rails_pwnage.rb +1 -0
- data/rails_pwnerer.gemspec +7 -6
- metadata +4 -2
data/CHANGELOG
CHANGED
data/Manifest
CHANGED
@@ -0,0 +1,27 @@
|
|
1
|
+
# sets up the application gems
|
2
|
+
|
3
|
+
class RailsPwnage::App::Gems
|
4
|
+
include RailsPwnage::Base
|
5
|
+
|
6
|
+
def setup(app_name)
|
7
|
+
Dir.chdir(RailsPwnage::Config.path_to(app_name)) do
|
8
|
+
# install the gems needed by the app
|
9
|
+
system "rake gems:install RAILS_ENV=production"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def update(app_name)
|
14
|
+
Dir.chdir(RailsPwnage::Config.path_to(app_name)) do
|
15
|
+
# install the gems needed by the app
|
16
|
+
system "rake gems:install RAILS_ENV=production"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.setup(app_name)
|
21
|
+
self.new.setup(app_name)
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.update(app_name)
|
25
|
+
self.new.update(app_name)
|
26
|
+
end
|
27
|
+
end
|
data/lib/pwnage/app/main.rb
CHANGED
@@ -2,6 +2,7 @@ module RailsPwnage::App
|
|
2
2
|
# install an application given its SVN path
|
3
3
|
def self.install(svn_path)
|
4
4
|
app_name = Svn.setup(svn_path)
|
5
|
+
Gems.setup(app_name)
|
5
6
|
Database.setup(app_name)
|
6
7
|
ClusterConfig.setup(app_name)
|
7
8
|
NginxConfig.setup(app_name)
|
@@ -11,6 +12,7 @@ module RailsPwnage::App
|
|
11
12
|
def self.update(app_name)
|
12
13
|
ClusterConfig.update app_name do
|
13
14
|
Svn.update app_name
|
15
|
+
Gems.update app_name
|
14
16
|
Database.update app_name
|
15
17
|
end
|
16
18
|
NginxConfig.update app_name
|
data/lib/pwnage/base.rb
CHANGED
data/lib/pwnage/base/dirs.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# extends Base with directory-related functions
|
2
2
|
|
3
3
|
require 'etc'
|
4
|
+
require 'fileutils'
|
4
5
|
|
5
6
|
module RailsPwnage::Base
|
6
7
|
# gets the UID associated with the username
|
@@ -22,4 +23,21 @@ module RailsPwnage::Base
|
|
22
23
|
group_entry = Etc.getgrgid(gid)
|
23
24
|
return (group_entry.nil?) ? nil : group_entry.name
|
24
25
|
end
|
26
|
+
|
27
|
+
# executes a block in a temporary directory
|
28
|
+
def with_temp_dir
|
29
|
+
temp_dir = "rbpwn_#{Time.now.to_i}"
|
30
|
+
Dir.mkdir temp_dir
|
31
|
+
Dir.chdir(temp_dir) { yield }
|
32
|
+
FileUtils.rm_r temp_dir
|
33
|
+
end
|
34
|
+
|
35
|
+
# the distribution of the OS
|
36
|
+
def os_distro
|
37
|
+
if RUBY_ARCH =~ /win/
|
38
|
+
return "Windows"
|
39
|
+
else
|
40
|
+
File.open('/etc/issue', 'r') { |f| f.read }.split(/(\r|\n)+/, 2)[0]
|
41
|
+
end
|
42
|
+
end
|
25
43
|
end
|
data/lib/pwnage/base/packages.rb
CHANGED
@@ -3,26 +3,70 @@
|
|
3
3
|
module RailsPwnage::Base
|
4
4
|
# TODO: this works for debian-only
|
5
5
|
|
6
|
-
|
7
|
-
|
6
|
+
# installs a package
|
7
|
+
def install_package(package_name, options = {})
|
8
|
+
if options[:source]
|
9
|
+
with_temp_dir do
|
10
|
+
system "apt-get build-dep -y #{package_name}"
|
11
|
+
system "apt-get source -b #{package_name}"
|
12
|
+
system "dpkg -i #{Dir.glob('*.deb', File::FNM_DOTMATCH).join(' ')}"
|
13
|
+
end
|
14
|
+
else
|
15
|
+
system "apt-get install -y #{package_name}"
|
16
|
+
end
|
8
17
|
end
|
9
18
|
|
10
|
-
|
11
|
-
|
19
|
+
# upgrades a package to the latest version
|
20
|
+
def upgrade_package(package_name, options = {})
|
21
|
+
if options[:source]
|
22
|
+
install_package(package_name, :source => true)
|
23
|
+
else
|
24
|
+
system "apt-get upgrade -y #{package_name.nil ? '' : package_name}"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def remove_package(package_name, options = {})
|
29
|
+
system "apt-get remove -y #{package_name}" unless package_name.nil?
|
12
30
|
end
|
13
31
|
|
14
32
|
# update the metadata for all the packages
|
15
|
-
def
|
33
|
+
def update_package_metadata()
|
16
34
|
system "apt-get update"
|
17
35
|
end
|
36
|
+
|
37
|
+
# add a source to the package system
|
38
|
+
def add_package_source(source_url, source_repos = [], options = {})
|
39
|
+
source_prefix = options[:source] ? 'deb-src' : 'deb'
|
40
|
+
source_patterns = [source_prefix, source_url] + source_repos
|
41
|
+
|
42
|
+
# grab the sources
|
43
|
+
sources = File.open('/etc/apt/sources.list', 'r') { |f| f.read }.split(/(\r|\n)+/)
|
44
|
+
|
45
|
+
# see if the source we are trying to add is already there
|
46
|
+
source_exists = sources.any? do |source_line|
|
47
|
+
source_frags = source_line.split(' ')
|
48
|
+
p source_frags
|
49
|
+
source_patterns.all? { |pattern| source_frags.any? { |frag| frag == pattern } }
|
50
|
+
end
|
51
|
+
return if source_exists
|
52
|
+
|
53
|
+
# the source does exist, add it
|
54
|
+
File.open('/etc/apt/sources.list', 'a') do |f|
|
55
|
+
f.write "#{source_prefix} #{source_url} #{source_repos.join(' ')}\n"
|
56
|
+
end
|
57
|
+
end
|
18
58
|
end
|
19
59
|
|
20
60
|
module RailsPwnage::Base
|
21
|
-
def install_packages(package_names)
|
22
|
-
unroll_collection(package_names) { |n| install_package(n) }
|
61
|
+
def install_packages(package_names, options = {})
|
62
|
+
unroll_collection(package_names) { |n| install_package(n, options) }
|
23
63
|
end
|
24
64
|
|
25
|
-
def upgrade_packages(package_names)
|
26
|
-
unroll_collection(package_names) { |n|
|
65
|
+
def upgrade_packages(package_names, options = {})
|
66
|
+
unroll_collection(package_names) { |n| upgrade_package(n, options) }
|
67
|
+
end
|
68
|
+
|
69
|
+
def remove_packages(package_names)
|
70
|
+
unroll_collection(package_names) { |n| remove_package(n) }
|
27
71
|
end
|
28
72
|
end
|
@@ -3,6 +3,10 @@
|
|
3
3
|
class RailsPwnage::Scaffolds::Gems
|
4
4
|
include RailsPwnage::Base
|
5
5
|
|
6
|
+
def install_self
|
7
|
+
# need to reinstall self because ruby gets swapped while the gem is running
|
8
|
+
install_gems %w(rails_pwnerer)
|
9
|
+
end
|
6
10
|
|
7
11
|
def install_servers
|
8
12
|
install_gems %w(rails mongrel mongrel_cluster)
|
@@ -14,12 +18,13 @@ class RailsPwnage::Scaffolds::Gems
|
|
14
18
|
|
15
19
|
def install_tools
|
16
20
|
# TODO: an application should have its own tools
|
17
|
-
install_gems %w(
|
21
|
+
install_gems %w(highline echoe)
|
18
22
|
end
|
19
23
|
|
20
24
|
# runner
|
21
25
|
def run
|
22
26
|
update_gems
|
27
|
+
install_self
|
23
28
|
install_servers
|
24
29
|
install_tools
|
25
30
|
end
|
@@ -1,42 +1,54 @@
|
|
1
|
-
# installs the required OS (read: Ubuntu) packages
|
1
|
+
# installs the required OS (read: Ubuntu / Debian) packages
|
2
2
|
|
3
3
|
class RailsPwnage::Scaffolds::Packages
|
4
4
|
include RailsPwnage::Base
|
5
5
|
|
6
6
|
# the packages needed to manage the server remotely and instal applications
|
7
7
|
def install_management
|
8
|
+
# dpkg-dev allows building from source
|
9
|
+
install_packages %w(dpkg_dev)
|
10
|
+
|
8
11
|
# openssh-server allows us to ssh into the box
|
9
12
|
# subversion is needed to pull code from SVN repositories
|
10
13
|
# ddclient does dynamic DNS
|
11
14
|
# avahi-daemon does mDNS, a.k.a. Bonjour (makes "ping hostname.local" work)
|
12
|
-
install_packages %w(openssh-server subversion ddclient avahi-daemon)
|
15
|
+
install_packages %w(openssh-server subversion ddclient avahi-daemon), :source => true
|
13
16
|
end
|
14
17
|
|
15
18
|
# packages that are needed by popular gems
|
16
19
|
def install_tools
|
17
20
|
# needed by rmagick which does image processing
|
18
|
-
install_packages %w(libmagick9-dev)
|
21
|
+
install_packages %w(libmagick9-dev), :source => true
|
19
22
|
end
|
20
23
|
|
21
24
|
# the packages comprising ruby
|
22
25
|
def install_ruby
|
23
|
-
#
|
24
|
-
|
26
|
+
# wipe the old version (and pray we don't die until we're done, otherwise we're on a ruby-less system)
|
27
|
+
remove_packages %w(ruby1.8 libruby1.8)
|
28
|
+
|
29
|
+
# install ruby from source (get
|
30
|
+
install_packages %w(ruby1.8 rdoc libsetup-ruby1.8 ruby-pkg-tools rubygems irb), :source => true
|
25
31
|
end
|
26
32
|
|
27
33
|
# the packages for a mysql server and development libraries
|
28
34
|
def install_mysql
|
29
|
-
install_packages %w(mysql-client mysql-server libmysqlclient15-dev)
|
35
|
+
install_packages %w(mysql-client mysql-server libmysqlclient15-dev), :source => true
|
30
36
|
end
|
31
37
|
|
32
38
|
# the packager for _the_ load balancer (nginx, from Russia with <3)
|
33
39
|
def install_balancer
|
34
|
-
install_packages %w(nginx)
|
40
|
+
install_packages %w(nginx), :source => true
|
35
41
|
end
|
36
42
|
|
37
43
|
# runner
|
38
44
|
def run
|
39
|
-
|
45
|
+
add_package_source 'http://debian.mirrors.tds.net/debian/',
|
46
|
+
%w(unstable main non-free contrib), :source => true
|
47
|
+
|
48
|
+
# debugging
|
49
|
+
exit
|
50
|
+
|
51
|
+
update_package_metadata
|
40
52
|
install_management
|
41
53
|
install_tools
|
42
54
|
install_ruby
|
data/lib/rails_pwnage.rb
CHANGED
data/rails_pwnerer.gemspec
CHANGED
@@ -1,22 +1,22 @@
|
|
1
1
|
|
2
|
-
# Gem::Specification for Rails_pwnerer-0.4.
|
2
|
+
# Gem::Specification for Rails_pwnerer-0.4.12
|
3
3
|
# Originally generated by Echoe
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = %q{rails_pwnerer}
|
7
|
-
s.version = "0.4.
|
7
|
+
s.version = "0.4.12"
|
8
8
|
|
9
9
|
s.specification_version = 2 if s.respond_to? :specification_version=
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.authors = ["Victor Costan"]
|
13
|
-
s.date = %q{2008-
|
13
|
+
s.date = %q{2008-06-20}
|
14
14
|
s.default_executable = %q{rpwn}
|
15
15
|
s.description = %q{Rails deployment tool/hack.}
|
16
16
|
s.email = %q{victor@costan.us}
|
17
17
|
s.executables = ["rpwn"]
|
18
|
-
s.extra_rdoc_files = ["bin/rpwn", "CHANGELOG", "lib/pwnage/app/cluster_config.rb", "lib/pwnage/app/database.rb", "lib/pwnage/app/main.rb", "lib/pwnage/app/nginx_config.rb", "lib/pwnage/app/svn.rb", "lib/pwnage/base/dirs.rb", "lib/pwnage/base/gems.rb", "lib/pwnage/base/packages.rb", "lib/pwnage/base/startup.rb", "lib/pwnage/base.rb", "lib/pwnage/config/main.rb", "lib/pwnage/executor.rb", "lib/pwnage/scaffolds/dirs.rb", "lib/pwnage/scaffolds/gems.rb", "lib/pwnage/scaffolds/hook_dyndns.rb", "lib/pwnage/scaffolds/hook_mongrels.rb", "lib/pwnage/scaffolds/mysql_config.rb", "lib/pwnage/scaffolds/packages.rb", "lib/rails_pwnage.rb", "LICENSE", "README"]
|
19
|
-
s.files = ["bin/rpwn", "CHANGELOG", "lib/pwnage/app/cluster_config.rb", "lib/pwnage/app/database.rb", "lib/pwnage/app/main.rb", "lib/pwnage/app/nginx_config.rb", "lib/pwnage/app/svn.rb", "lib/pwnage/base/dirs.rb", "lib/pwnage/base/gems.rb", "lib/pwnage/base/packages.rb", "lib/pwnage/base/startup.rb", "lib/pwnage/base.rb", "lib/pwnage/config/main.rb", "lib/pwnage/executor.rb", "lib/pwnage/scaffolds/dirs.rb", "lib/pwnage/scaffolds/gems.rb", "lib/pwnage/scaffolds/hook_dyndns.rb", "lib/pwnage/scaffolds/hook_mongrels.rb", "lib/pwnage/scaffolds/mysql_config.rb", "lib/pwnage/scaffolds/packages.rb", "lib/rails_pwnage.rb", "LICENSE", "Manifest", "README", "RUBYFORGE", "rails_pwnerer.gemspec"]
|
18
|
+
s.extra_rdoc_files = ["bin/rpwn", "CHANGELOG", "lib/pwnage/app/cluster_config.rb", "lib/pwnage/app/database.rb", "lib/pwnage/app/gems.rb", "lib/pwnage/app/main.rb", "lib/pwnage/app/nginx_config.rb", "lib/pwnage/app/svn.rb", "lib/pwnage/base/dirs.rb", "lib/pwnage/base/gems.rb", "lib/pwnage/base/packages.rb", "lib/pwnage/base/startup.rb", "lib/pwnage/base.rb", "lib/pwnage/config/main.rb", "lib/pwnage/executor.rb", "lib/pwnage/scaffolds/dirs.rb", "lib/pwnage/scaffolds/gems.rb", "lib/pwnage/scaffolds/hook_dyndns.rb", "lib/pwnage/scaffolds/hook_mongrels.rb", "lib/pwnage/scaffolds/mysql_config.rb", "lib/pwnage/scaffolds/packages.rb", "lib/rails_pwnage.rb", "LICENSE", "README"]
|
19
|
+
s.files = ["bin/rpwn", "CHANGELOG", "lib/pwnage/app/cluster_config.rb", "lib/pwnage/app/database.rb", "lib/pwnage/app/gems.rb", "lib/pwnage/app/main.rb", "lib/pwnage/app/nginx_config.rb", "lib/pwnage/app/svn.rb", "lib/pwnage/base/dirs.rb", "lib/pwnage/base/gems.rb", "lib/pwnage/base/packages.rb", "lib/pwnage/base/startup.rb", "lib/pwnage/base.rb", "lib/pwnage/config/main.rb", "lib/pwnage/executor.rb", "lib/pwnage/scaffolds/dirs.rb", "lib/pwnage/scaffolds/gems.rb", "lib/pwnage/scaffolds/hook_dyndns.rb", "lib/pwnage/scaffolds/hook_mongrels.rb", "lib/pwnage/scaffolds/mysql_config.rb", "lib/pwnage/scaffolds/packages.rb", "lib/rails_pwnage.rb", "LICENSE", "Manifest", "README", "RUBYFORGE", "rails_pwnerer.gemspec"]
|
20
20
|
s.has_rdoc = true
|
21
21
|
s.homepage = %q{http://www.costan.us/rails_pwnage}
|
22
22
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Rails_pwnerer", "--main", "README"]
|
@@ -42,7 +42,8 @@ end
|
|
42
42
|
# p.url = 'http://www.costan.us/rails_pwnage'
|
43
43
|
# # p.dependencies = ['rails >=2.0']
|
44
44
|
#
|
45
|
-
# p.need_tar_gz =
|
45
|
+
# p.need_tar_gz = true
|
46
|
+
# p.need_zip = true
|
46
47
|
# p.rdoc_pattern = /^(lib|bin|tasks|ext)|^BUILD|^README|^CHANGELOG|^TODO|^LICENSE|^COPYING$/
|
47
48
|
# end
|
48
49
|
#
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_pwnerer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Victor Costan
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-06-20 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -24,6 +24,7 @@ extra_rdoc_files:
|
|
24
24
|
- CHANGELOG
|
25
25
|
- lib/pwnage/app/cluster_config.rb
|
26
26
|
- lib/pwnage/app/database.rb
|
27
|
+
- lib/pwnage/app/gems.rb
|
27
28
|
- lib/pwnage/app/main.rb
|
28
29
|
- lib/pwnage/app/nginx_config.rb
|
29
30
|
- lib/pwnage/app/svn.rb
|
@@ -48,6 +49,7 @@ files:
|
|
48
49
|
- CHANGELOG
|
49
50
|
- lib/pwnage/app/cluster_config.rb
|
50
51
|
- lib/pwnage/app/database.rb
|
52
|
+
- lib/pwnage/app/gems.rb
|
51
53
|
- lib/pwnage/app/main.rb
|
52
54
|
- lib/pwnage/app/nginx_config.rb
|
53
55
|
- lib/pwnage/app/svn.rb
|