rails_pwnerer 0.4.10 → 0.4.12
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/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
|