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 CHANGED
@@ -1,3 +1,7 @@
1
+ v0.4.12. Added application gem management (new in Rails 2.1.0 apps).
2
+
3
+ v0.4.11. Implemented installing from source.
4
+
1
5
  v0.4.10. Added gems needed to monitor system health.
2
6
 
3
7
  v0.4.9. Added app directory cleanup before backup.
data/Manifest CHANGED
@@ -2,6 +2,7 @@ bin/rpwn
2
2
  CHANGELOG
3
3
  lib/pwnage/app/cluster_config.rb
4
4
  lib/pwnage/app/database.rb
5
+ lib/pwnage/app/gems.rb
5
6
  lib/pwnage/app/main.rb
6
7
  lib/pwnage/app/nginx_config.rb
7
8
  lib/pwnage/app/svn.rb
@@ -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
@@ -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
@@ -24,4 +24,4 @@ module RailsPwnage::Base
24
24
  arg.each { |i| unroll_collection(i, &proc) }
25
25
  end
26
26
  end
27
- end
27
+ end
@@ -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
@@ -3,26 +3,70 @@
3
3
  module RailsPwnage::Base
4
4
  # TODO: this works for debian-only
5
5
 
6
- def install_package(package_name)
7
- system "apt-get install -y #{package_name}"
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
- def upgrade_package(package_name)
11
- system "apt-get upgrade -y #{package_name.nil ? '' : package_name}"
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 update_packages()
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| update_package(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(mechanize sys-cpu sys-proctable sys-uname sys-uptime rmagick pdf-writer highline echoe)
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
- # irb, rdoc, ri aren't really essential but they come in handy
24
- install_packages %w(build-essential ruby rubygems ruby1.8-dev irb rdoc ri)
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
- update_packages
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
@@ -23,6 +23,7 @@ require 'pwnage/scaffolds/packages.rb'
23
23
 
24
24
  require 'pwnage/app/main.rb'
25
25
  require 'pwnage/app/svn.rb'
26
+ require 'pwnage/app/gems.rb'
26
27
  require 'pwnage/app/database.rb'
27
28
  require 'pwnage/app/cluster_config.rb'
28
29
  require 'pwnage/app/nginx_config.rb'
@@ -1,22 +1,22 @@
1
1
 
2
- # Gem::Specification for Rails_pwnerer-0.4.10
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.10"
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-05-12}
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 = false
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.10
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-05-12 00:00:00 -04:00
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