deb_deploy 1.2.1 → 1.3.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/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ [![endorse](http://api.coderwall.com/jeroenr/endorsecount.png)](http://coderwall.com/jeroenr)
2
+
1
3
  # deb_deploy
2
4
 
3
5
  deb_deploy is a capistrano plugin to facilitate the deployment of debian packages (inspired by supply_drop). It works by simply copying (using rsync, or scp) your debian packages to your servers and installing them through the package manager
@@ -20,6 +22,10 @@ This sets up the environment for dpkg or apt deployment, depending on your confi
20
22
 
21
23
  This deploys the debian packages on the target servers.
22
24
 
25
+ cap deb:teardown
26
+
27
+ Cleans up the environment.
28
+
23
29
  ### Configuration
24
30
 
25
31
  At the top of your deploy.rb
@@ -33,7 +39,7 @@ then optionally set some variables
33
39
 
34
40
  the directory containing your debian packages that will be rsynced to the servers.
35
41
 
36
- set :debian_target, '/tmp/deb_deploy'
42
+ set :debian_target, '/tmp'
37
43
 
38
44
  the temp directory on the target machine to hold the packages before installing.
39
45
 
@@ -45,6 +51,6 @@ the debian package manager to use (one of [dpkg, apt]).
45
51
 
46
52
  determines whether to stream the command output.
47
53
 
48
- set :debian_filter, ['*']
54
+ set :debian_filter, '*'
49
55
 
50
56
  a glob syntax filter to determine which packages to deploy. By default all will be deployed.
@@ -0,0 +1,27 @@
1
+ module DebDeploy
2
+ class AptFtpArchive
3
+ class << self
4
+ def command(arguments, options={})
5
+ "apt-ftparchive " << options.map{|k,v| "-o #{k}='#{v}'"}.join(' ') << " #{arguments}"
6
+ end
7
+
8
+ def create_packages_file(from, options={})
9
+ command("packages #{from} | gzip -9c > Packages.gz", options)
10
+ end
11
+
12
+ def create_release_file(from, options={})
13
+ release_file_options = {
14
+ "Codename" => "deb_deploy",
15
+ "Components" => "deb_deploy",
16
+ "Origin" => "deb_deploy",
17
+ "Label" => "Deployed with deb_deploy",
18
+ "Architectures" => "all",
19
+ "Suite" => "stable"
20
+ }
21
+ command("release #{from} > Release", options.merge(Hash[release_file_options.map {|k,v| ["APT::FTPArchive::Release::#{k}",v]}]))
22
+ end
23
+
24
+
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,17 @@
1
+ module DebDeploy
2
+ class AptGet
3
+ class << self
4
+ def command(arguments, options={})
5
+ "apt-get -y --allow-unauthenticated " << options.map{|k,v| "-o #{k}='#{v}'"}.join(' ') << " #{arguments}"
6
+ end
7
+
8
+ def update_cache(options={})
9
+ command("update", options)
10
+ end
11
+
12
+ def install_packages(packages, options={})
13
+ command("install #{packages.join(' ')}", options)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -4,6 +4,7 @@ module DebDeploy
4
4
  def command(from, to, options={})
5
5
  flags = ['-az']
6
6
  flags << '--delete'
7
+ flags << '--prune-empty-dirs'
7
8
  flags << '--delete-excluded'
8
9
  flags << includes(options[:filter])
9
10
  flags << excludes(["*"])
data/lib/deb_deploy.rb CHANGED
@@ -1,4 +1,6 @@
1
1
  require 'deb_deploy/rsync'
2
+ require 'deb_deploy/apt_get'
3
+ require 'deb_deploy/apt_ftp_archive'
2
4
  require 'deb_deploy/logger/batch'
3
5
  require 'deb_deploy/logger/stream'
4
6
  require 'deb_deploy/util/parallel_enumerable'
@@ -6,11 +8,20 @@ require 'deb_deploy/util/parallel_enumerable'
6
8
  Capistrano::Configuration.instance.load do
7
9
  namespace :deb do
8
10
  set :debian_source, '.'
9
- set :debian_target, '/tmp/deb_deploy'
11
+ set :debian_target, '/tmp'
10
12
  set :debian_package_manager, 'dpkg'
11
13
  set :debian_stream_log, false
12
14
  set :debian_filter, '*'
13
15
 
16
+ RELEASE_FILE_OPTIONS = {
17
+ "Codename" => "deb_deploy",
18
+ "Components" => "deb_deploy",
19
+ "Origin" => "deb_deploy",
20
+ "Label" => "Deployed with deb_deploy",
21
+ "Architectures" => "all",
22
+ "Suite" => "stable"
23
+ }
24
+
14
25
  namespace :bootstrap do
15
26
  desc "prepares remote hosts for debian deployment based on selected package manager (dpkg or apt)"
16
27
  task :default do
@@ -26,28 +37,26 @@ Capistrano::Configuration.instance.load do
26
37
 
27
38
  desc "creates directories and installs dependencies"
28
39
  task :dpkg do
29
- run "mkdir -p #{debian_target}"
30
- sudo "apt-get update"
31
- sudo "apt-get install -y rsync"
40
+ run "mkdir -p #{debian_target}/deb_deploy"
41
+ sudo DebDeploy::AptGet.update_cache
42
+ sudo DebDeploy::AptGet.install_packages(%w(rsync))
32
43
  logger.debug "Dependencies installed"
33
44
  end
34
45
 
35
46
  desc "creates local debian repository for apt-get"
36
47
  task :apt do
37
- run "mkdir -p #{debian_target}"
48
+ run "mkdir -p #{debian_target}/deb_deploy"
38
49
 
39
- sudo "apt-get update"
40
- sudo "apt-get install -y rsync dpkg-dev gzip"
50
+ sudo DebDeploy::AptGet.update_cache
51
+ sudo DebDeploy::AptGet.install_packages(%w(rsync dpkg-dev gzip))
41
52
 
42
53
  logger.debug "Dependencies installed"
43
54
 
44
- put "deb file:#{debian_target} ./", "#{debian_target}/deb_deploy.list"
45
- sudo "mv #{debian_target}/deb_deploy.list /etc/apt/sources.list.d/deb_deploy.list"
55
+ put "deb file:#{debian_target}/deb_deploy ./", "#{debian_target}/deb_deploy.list"
46
56
 
47
57
  put "Package: *\nPin: origin\nPin-Priority: 900\n", "#{debian_target}/00debdeploy"
48
- sudo "mv #{debian_target}/00debdeploy /etc/apt/preferences.d/00debdeploy"
49
58
 
50
- run "cd #{debian_target} && apt-ftparchive packages . | gzip -9c > Packages.gz"
59
+ run "cd #{debian_target}/deb_deploy && " << DebDeploy::AptFtpArchive.create_packages_file('.')
51
60
 
52
61
  logger.debug "Set up local debian repository"
53
62
  end
@@ -55,34 +64,16 @@ Capistrano::Configuration.instance.load do
55
64
  end
56
65
 
57
66
  namespace :teardown do
58
- desc "cleans up deb_deploy files from remote hosts based on selected package manager (dpkg or apt)"
67
+ desc "cleans up deb_deploy files"
59
68
  task :default do
60
- case debian_package_manager
61
- when "dpkg"
62
- dpkg
63
- when "apt"
64
- apt
65
- else
66
- raise "#{debian_package_manager} is an unsupported package manager. Only dpkg and apt are supported"
69
+ sudo "rm -rf #{debian_target}/deb_deploy"
70
+
71
+ deb_deploy_files = %w(/etc/apt/sources.list.d/deb_deploy.list /etc/apt/preferences.d/00debdeploy) << "#{debian_target}/deb_deploy.list" << "#{debian_target}/00debdeploy"
72
+ deb_deploy_files.each do |file_name|
73
+ sudo "rm -f #{file_name}"
67
74
  end
68
- end
69
-
70
- desc "cleans up deb_deploy directory (#{debian_target})"
71
- task :dpkg do
72
- run "rm -rf #{debian_target}"
73
75
  logger.debug "Removed deployment directory"
74
76
  end
75
-
76
- desc "cleans up deb_deploy directory (#{debian_target}) and local debian repository from remote hosts"
77
- task :apt do
78
- run "rm -rf #{debian_target}"
79
-
80
- sudo "rm /etc/apt/sources.list.d/deb_deploy.list"
81
-
82
- sudo "rm /etc/apt/preferences.d/00debdeploy"
83
-
84
- logger.debug "Removed local debian repository and deployment directory"
85
- end
86
77
  end
87
78
 
88
79
  desc "copies debian packages to the server"
@@ -91,7 +82,7 @@ Capistrano::Configuration.instance.load do
91
82
  failed_targets = targets.async.map do |target|
92
83
  copy_cmd = DebDeploy::Rsync.command(
93
84
  debian_source,
94
- DebDeploy::Rsync.remote_address(target.user || fetch(:user, ENV['USER']), target.host, debian_target),
85
+ DebDeploy::Rsync.remote_address(target.user || fetch(:user, ENV['USER']), target.host, "#{debian_target}/deb_deploy"),
95
86
  :filter => ['*/'] + debian_filter.split(',').map {|x| "#{x}.deb"},
96
87
  :ssh => {
97
88
  :keys => ssh_options[:keys],
@@ -116,28 +107,23 @@ Capistrano::Configuration.instance.load do
116
107
  begin
117
108
  case debian_package_manager
118
109
  when "dpkg"
119
- sudo "dpkg -R -i #{debian_target}" do |channel, stream, data|
110
+ sudo "dpkg -R -i #{debian_target}/deb_deploy" do |channel, stream, data|
120
111
  log.collect(channel[:host], data)
121
112
  end
122
113
  when "apt"
123
- run "cd #{debian_target} && apt-ftparchive packages . | gzip -9c > Packages.gz"
124
-
125
- release_file_options = {
126
- "Codename" => "deb_deploy",
127
- "Components" => "deb_deploy",
128
- "Origin" => "deb_deploy",
129
- "Label" => "Deployed with deb_deploy",
130
- "Architectures" => "all",
131
- "Suite" => "stable"
114
+ apt_get_options = {
115
+ "Dir::Etc::SourceList" => "#{debian_target}/deb_deploy.list",
116
+ "Dir::Etc::Preferences" => "#{debian_target}/00debdeploy"
132
117
  }
133
118
 
134
- run "cd #{debian_target} && apt-ftparchive " << release_file_options.map{|k,v| "-o APT::FTPArchive::Release::#{k}='#{v}'"}.join(' ') << " release . > Release"
119
+ list_packages_cmd = "zcat #{debian_target}/deb_deploy/Packages.gz | grep Package | cut -d ' ' -f2 | sed ':a;N;$!ba;s/\n/ /g'"
120
+
121
+ run "cd #{debian_target}/deb_deploy && " << DebDeploy::AptFtpArchive.create_packages_file('.')
122
+ run "cd #{debian_target}/deb_deploy && " << DebDeploy::AptFtpArchive.create_release_file('.', Hash[RELEASE_FILE_OPTIONS.map {|k,v| ["APT::FTPArchive::Release::#{k}",v]}])
135
123
 
136
- sudo "apt-get update"
124
+ sudo DebDeploy::AptGet.update_cache(apt_get_options)
137
125
 
138
- list_packages_cmd = "zcat #{debian_target}/Packages.gz | grep Package | cut -d ' ' -f2 | sed ':a;N;$!ba;s/\n/ /g'"
139
-
140
- run "#{list_packages_cmd} | xargs #{sudo} apt-get -y --allow-unauthenticated install" do |channel, stream, data|
126
+ run "#{list_packages_cmd} | xargs #{sudo} #{DebDeploy::AptGet.install_packages([],apt_get_options)}" do |channel, stream, data|
141
127
  log.collect(channel[:host], data)
142
128
  end
143
129
  else
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deb_deploy
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-09 00:00:00.000000000 Z
12
+ date: 2012-06-01 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: See http://github.com/jeroenr/deb_deploy
15
15
  email:
@@ -21,7 +21,9 @@ files:
21
21
  - README.md
22
22
  - Rakefile
23
23
  - lib/deb_deploy.rb
24
+ - lib/deb_deploy/apt_get.rb
24
25
  - lib/deb_deploy/rsync.rb
26
+ - lib/deb_deploy/apt_ftp_archive.rb
25
27
  - lib/deb_deploy/util/parallel_enumerable.rb
26
28
  - lib/deb_deploy/util/collection_utils.rb
27
29
  - lib/deb_deploy/scp.rb