rails_pwnerer 0.6.30 → 0.6.31
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +2 -0
- data/README +4 -10
- data/Rakefile +6 -1
- data/lib/pwnage/base/dirs.rb +1 -1
- data/lib/pwnage/base/packages.rb +91 -17
- data/lib/pwnage/scaffolds/config.rb +2 -2
- data/lib/pwnage/scaffolds/packages.rb +2 -1
- data/rails_pwnerer.gemspec +2 -5
- metadata +4 -13
data/CHANGELOG
CHANGED
data/README
CHANGED
@@ -25,14 +25,8 @@ application.
|
|
25
25
|
|
26
26
|
Life with +rails_pwnerer+:
|
27
27
|
|
28
|
-
1) Install a bootstrap version of ruby and rubygems
|
29
|
-
|
30
|
-
|
31
|
-
sudo apt-get -y install rubygems1.8
|
32
|
-
|
33
|
-
sudo gem update --system (you'll have to retry this if you get an error)
|
34
|
-
|
35
|
-
sudo apt-get -y install ruby (yes you read it right, this comes last)
|
28
|
+
1) Install a bootstrap version of ruby and rubygems:
|
29
|
+
sudo apt-get -y install rubygems
|
36
30
|
|
37
31
|
2) Install +rails_pwnerer+:
|
38
32
|
sudo gem install rails_pwnerer
|
@@ -40,8 +34,8 @@ sudo gem install rails_pwnerer
|
|
40
34
|
3) Get your server production-ready:
|
41
35
|
sudo rpwn scaffold
|
42
36
|
|
43
|
-
If this doesn't work, blame your OS distribution (rubygems was
|
44
|
-
from creating a wrapper for rpwn, and our cheat against common
|
37
|
+
If this doesn't work, blame your OS distribution (rubygems was blocked
|
38
|
+
from creating a wrapper for rpwn, and our cheat against common blocks failed).
|
45
39
|
Manual workaround:
|
46
40
|
|
47
41
|
a) Find the path to the gems: gem environment gemdir (e.g. /var/lib/gems/1.8/gems/)
|
data/Rakefile
CHANGED
@@ -9,7 +9,12 @@ Echoe.new('rails_pwnerer') do |p|
|
|
9
9
|
p.email = 'victor@costan.us'
|
10
10
|
p.summary = 'Rails deployment tool/hack.'
|
11
11
|
p.url = 'http://www.costan.us/rails_pwnage'
|
12
|
-
|
12
|
+
p.runtime_dependencies = []
|
13
|
+
p.dependencies = []
|
14
|
+
# remove echoe, because it becomes a runtime dependency for rubygems < 1.2
|
15
|
+
p.development_dependencies = []
|
16
|
+
# override echoe's default of 1.2
|
17
|
+
p.rubygems_version = '>= 0'
|
13
18
|
p.extensions = ['ext/rpwn_setup_notice/extconf.rb']
|
14
19
|
p.eval = proc do |p|
|
15
20
|
p.default_executable = 'bin/rpwn'
|
data/lib/pwnage/base/dirs.rb
CHANGED
@@ -31,7 +31,7 @@ module RailsPwnage::Base
|
|
31
31
|
|
32
32
|
# executes a block in a temporary directory
|
33
33
|
def with_temp_dir(options = {})
|
34
|
-
temp_dir = "#{options[:root] ? '/' : ''}rbpwn_#{Time.now.to_i}"
|
34
|
+
temp_dir = "#{options[:root] ? '/' : ''}rbpwn_#{(Time.now.to_f * 1000).to_i}"
|
35
35
|
Dir.mkdir temp_dir
|
36
36
|
Dir.chdir(temp_dir) { yield }
|
37
37
|
FileUtils.rm_r temp_dir
|
data/lib/pwnage/base/packages.rb
CHANGED
@@ -1,44 +1,118 @@
|
|
1
1
|
# extends Base with OS package-related functions
|
2
2
|
|
3
|
+
require 'English'
|
4
|
+
|
3
5
|
module RailsPwnage::Base
|
4
6
|
# TODO: this works for debian-only
|
5
7
|
|
6
|
-
#
|
7
|
-
def
|
8
|
+
# Builds apt-get parameters for a set of options.
|
9
|
+
def apt_params_for(options = {})
|
10
|
+
params = ""
|
11
|
+
params << "-o Acquire::http::Proxy=false" if options[:no_proxy]
|
12
|
+
end
|
13
|
+
|
14
|
+
def install_package_impl(package_name, options)
|
15
|
+
apt_params = apt_params_for options
|
8
16
|
if options[:source]
|
9
17
|
with_temp_dir(:root => true) do
|
10
|
-
system "apt-get build-dep -y #{package_name}"
|
11
|
-
|
12
|
-
system "
|
18
|
+
Kernel.system "apt-get build-dep -y #{apt_params} #{package_name}"
|
19
|
+
return false unless $CHILD_STATUS.success?
|
20
|
+
Kernel.system "apt-get source -b #{apt_params} #{package_name}"
|
21
|
+
return false unless $CHILD_STATUS.success?
|
22
|
+
Kernel.system "dpkg -i #{Dir.glob('*.deb', File::FNM_DOTMATCH).join(' ')} < /dev/null"
|
23
|
+
return false unless $CHILD_STATUS.success?
|
13
24
|
end
|
14
25
|
else
|
15
|
-
system "apt-get install -y #{package_name} < /dev/null"
|
26
|
+
Kernel.system "apt-get install -y #{apt_params} #{package_name} < /dev/null"
|
27
|
+
return false unless $CHILD_STATUS.success?
|
16
28
|
end
|
29
|
+
return true
|
17
30
|
end
|
18
31
|
|
19
|
-
#
|
20
|
-
|
32
|
+
# Installs a package.
|
33
|
+
# Returns true for success, false for failure.
|
34
|
+
def install_package(package_name, options = {})
|
35
|
+
return true if install_package_impl(package_name, options)
|
21
36
|
if options[:source]
|
22
|
-
|
37
|
+
if options[:no_proxy]
|
38
|
+
# already bypassing proxy, fall back to binary package
|
39
|
+
return install_package(package_name, options.merge(:source => false))
|
40
|
+
else
|
41
|
+
# try bypassing proxy
|
42
|
+
return install_package(package_name, options.merge(:no_proxy => true))
|
43
|
+
end
|
44
|
+
else
|
45
|
+
if options[:no_proxy]
|
46
|
+
# out of alternatives
|
47
|
+
return false
|
48
|
+
else
|
49
|
+
#
|
50
|
+
return install_package(package_name, options.merge(:no_proxy => true))
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def upgrade_package_impl(package_name, options)
|
56
|
+
apt_params = apt_params_for options
|
57
|
+
Kernel.system "apt-get upgrade -y #{apt_params} #{package_name.nil ? '' : package_name} < /dev/null"
|
58
|
+
return $CHILD_STATUS.success?
|
59
|
+
end
|
60
|
+
|
61
|
+
# Upgrades a package to the latest version.
|
62
|
+
def upgrade_package(package_name, options = {})
|
63
|
+
return install_package(package_name, options) if options[:source]
|
64
|
+
return true if upgrade_package_impl(package_name, options)
|
23
65
|
|
24
|
-
|
66
|
+
if options[:no_proxy]
|
67
|
+
# out of alternatives
|
68
|
+
return false
|
25
69
|
else
|
26
|
-
|
70
|
+
#
|
71
|
+
return upgrade_package(package_name, options.merge(:no_proxy => true))
|
27
72
|
end
|
28
73
|
end
|
29
74
|
|
30
|
-
def
|
31
|
-
|
75
|
+
def upgrade_all_packages_impl(options)
|
76
|
+
apt_params = apt_params_for options
|
77
|
+
Kernel.system "apt-get upgrade -y #{apt_params} < /dev/null"
|
78
|
+
return $CHILD_STATUS.success?
|
79
|
+
end
|
80
|
+
|
81
|
+
def upgrade_all_packages(options = {})
|
82
|
+
return true if upgrade_all_packages_impl(options)
|
83
|
+
|
84
|
+
if options[:no_proxy]
|
85
|
+
# out of alternatives
|
86
|
+
return false
|
87
|
+
else
|
88
|
+
#
|
89
|
+
return upgrade_all_packages(options.merge(:no_proxy => true))
|
90
|
+
end
|
32
91
|
end
|
33
92
|
|
34
93
|
def remove_package(package_name, options = {})
|
35
94
|
system "apt-get remove -y #{package_name}" unless package_name.nil?
|
36
95
|
end
|
37
96
|
|
38
|
-
|
39
|
-
|
40
|
-
system "apt-get update -y < /dev/null"
|
41
|
-
|
97
|
+
def update_package_metadata_impl(options)
|
98
|
+
apt_params = apt_params_for options
|
99
|
+
Kernel.system "apt-get update -y #{apt_params} < /dev/null"
|
100
|
+
return $CHILD_STATUS.success?
|
101
|
+
end
|
102
|
+
|
103
|
+
# Updates the metadata for all the packages.
|
104
|
+
# Returns true for success, false for failure.
|
105
|
+
def update_package_metadata(options = {})
|
106
|
+
return true if update_package_metadata_impl options
|
107
|
+
|
108
|
+
if options[:no_proxy]
|
109
|
+
# out of alternatives
|
110
|
+
return false
|
111
|
+
else
|
112
|
+
# try bypassing proxy
|
113
|
+
return update_package_metadata(options.merge(:no_proxy => true))
|
114
|
+
end
|
115
|
+
end
|
42
116
|
|
43
117
|
# add a source to the package system
|
44
118
|
def add_package_source(source_url, source_repos = [], options = {})
|
@@ -16,9 +16,9 @@ class RailsPwnage::Scaffolds::Config
|
|
16
16
|
# host info
|
17
17
|
host_info = RailsPwnage::Config.create_db :host
|
18
18
|
# the default instance name
|
19
|
-
host_info[:instance] = Socket.gethostname()
|
19
|
+
host_info[:instance] = Socket.gethostname().split('.').first
|
20
20
|
# the computer's name (if we ever do status reports)
|
21
|
-
host_info[:name] = Socket.gethostname()
|
21
|
+
host_info[:name] = Socket.gethostname()
|
22
22
|
# username for creating / dropping databases
|
23
23
|
host_info[:dbroot_name] = 'root'
|
24
24
|
# password for creating / dropping databases
|
@@ -40,8 +40,9 @@ class RailsPwnage::Scaffolds::Packages
|
|
40
40
|
|
41
41
|
# the packages comprising ruby
|
42
42
|
def install_ruby
|
43
|
+
# NOTE: not wiping ruby anymore, because a lot of stuff depends on it... just hoping apt will replace it quietly
|
43
44
|
# wipe the old version (and pray we don't die until we're done, otherwise we're on a ruby-less system)
|
44
|
-
remove_packages %w(ruby1.8 libruby1.8)
|
45
|
+
# remove_packages %w(ruby1.8 libruby1.8) -- this shouldn't be needed anymore
|
45
46
|
|
46
47
|
# install ruby from source
|
47
48
|
install_packages %w(ruby1.8 rdoc libsetup-ruby1.8 ruby-pkg-tools rubygems1.8 rubygems irb), :source => true
|
data/rails_pwnerer.gemspec
CHANGED
@@ -2,9 +2,9 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{rails_pwnerer}
|
5
|
-
s.version = "0.6.
|
5
|
+
s.version = "0.6.31"
|
6
6
|
|
7
|
-
s.required_rubygems_version = Gem::Requirement.new(">=
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Victor Costan"]
|
9
9
|
s.date = %q{2009-02-03}
|
10
10
|
s.default_executable = %q{bin/rpwn}
|
@@ -27,11 +27,8 @@ Gem::Specification.new do |s|
|
|
27
27
|
s.specification_version = 2
|
28
28
|
|
29
29
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
30
|
-
s.add_development_dependency(%q<echoe>, [">= 0"])
|
31
30
|
else
|
32
|
-
s.add_dependency(%q<echoe>, [">= 0"])
|
33
31
|
end
|
34
32
|
else
|
35
|
-
s.add_dependency(%q<echoe>, [">= 0"])
|
36
33
|
end
|
37
34
|
end
|
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.6.
|
4
|
+
version: 0.6.31
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Victor Costan
|
@@ -11,17 +11,8 @@ cert_chain: []
|
|
11
11
|
|
12
12
|
date: 2009-02-03 00:00:00 -05:00
|
13
13
|
default_executable: bin/rpwn
|
14
|
-
dependencies:
|
15
|
-
|
16
|
-
name: echoe
|
17
|
-
type: :development
|
18
|
-
version_requirement:
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">="
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: "0"
|
24
|
-
version:
|
14
|
+
dependencies: []
|
15
|
+
|
25
16
|
description: Rails deployment tool/hack.
|
26
17
|
email: victor@costan.us
|
27
18
|
executables:
|
@@ -161,7 +152,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
161
152
|
requirements:
|
162
153
|
- - ">="
|
163
154
|
- !ruby/object:Gem::Version
|
164
|
-
version: "
|
155
|
+
version: "0"
|
165
156
|
version:
|
166
157
|
requirements: []
|
167
158
|
|